Page Menu
Home
c4science
Search
Configure Global Search
Log In
Files
F90449279
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Subscribers
None
File Metadata
Details
File Info
Storage
Attached
Created
Fri, Nov 1, 19:03
Size
2 MB
Mime Type
application/octet-stream
Expires
Sun, Nov 3, 19:03 (2 d)
Engine
local-disk
Format
Raw Data
Handle
c7/86/4b91c25d55b33a9ef3e3e8ff942a
Attached To
rPH Phabricator
View Options
This file is larger than 256 KB, so syntax highlighting was skipped.
This document is not UTF8. It was detected as ISO-8859-1 (Latin 1) and converted to UTF8 for display.
diff --git a/externals/cowsay/ChangeLog b/externals/cowsay/ChangeLog
new file mode 100644
index 000000000..b28ef91b8
--- /dev/null
+++ b/externals/cowsay/ChangeLog
@@ -0,0 +1,31 @@
+3.03 28 May 1999
+ - Added cows/tux.cow, as suggested by xmanoel@i.am
+ - Compatibility with 5.6.0, due to a change in qw().
+ - Renamed devil.cow to daemon.cow, since I know better. :-)
+
+3.02 04 November 1999
+ - Fixed boneheaded code placement so that cowsay -l actually works.
+
+3.01 01 November 1999
+ - Fixed compatibility issues between the Text::Wrap module
+ that changed between 5.005_02 and 5.005_03.
+ - Fixed tab expansion issues with Text::Tabs.
+
+3.0 13 April 1999, released 14 August 1999
+ - Rewritten into Perl 5 and presented to the world.
+
+-- Not present in CVS from here on down --
+
+2.x Date?
+ - Arbitrary messages.
+ - Figlet support (-n).
+ - Line wrap length (-w).
+ - Multiple pre-set expressions.
+ - Better arg parsing loop.
+ - Message from stdin or command line.
+
+1.0 Date?
+ - SUBJECT is VERB OBJECT
+
+$Id: ChangeLog,v 1.4 2000/05/29 17:55:24 tony Exp $
+This file is part of cowsay. (c) 1999-2000 Tony Monroe.
diff --git a/externals/cowsay/INSTALL b/externals/cowsay/INSTALL
new file mode 100644
index 000000000..d3844ca56
--- /dev/null
+++ b/externals/cowsay/INSTALL
@@ -0,0 +1,15 @@
+=================
+Installing cowsay
+=================
+
+If you really want to get things installed a nice and pretty way,
+
+ sh install.sh
+
+It will ask approximately one question. If you can't answer it,
+you need serious help.
+
+If the install goes well, you can start cowing immediately! Just
+be sure to read the manual page first...
+
+$Id: INSTALL,v 1.1 1999/08/14 08:03:17 tony Exp $
diff --git a/externals/cowsay/LICENSE b/externals/cowsay/LICENSE
new file mode 100644
index 000000000..944770492
--- /dev/null
+++ b/externals/cowsay/LICENSE
@@ -0,0 +1,36 @@
+==============
+cowsay License
+==============
+
+cowsay is distributed under the same licensing terms as Perl: the
+Artistic License or the GNU General Public License. If you don't
+want to track down these licenses and read them for yourself, use
+the parts that I'd prefer:
+
+(0) I wrote it and you didn't.
+
+(1) Give credit where credit is due if you borrow the code for some
+other purpose.
+
+(2) If you have any bugfixes or suggestions, please notify me so
+that I may incorporate them.
+
+(3) If you try to make money off of cowsay, you suck.
+
+===============
+cowsay Legalese
+===============
+
+(0) Copyright (c) 1999 Tony Monroe. All rights reserved. All
+lefts may or may not be reversed at my discretion.
+
+(1) This software package can be freely redistributed or modified
+under the terms described above in the "cowsay License" section
+of this file.
+
+(2) cowsay is provided "as is," with no warranties whatsoever,
+expressed or implied. If you want some implied warranty about
+merchantability and/or fitness for a particular purpose, you will
+not find it here, because there is no such thing here.
+
+(3) I hate legalese.
diff --git a/externals/cowsay/MANIFEST b/externals/cowsay/MANIFEST
new file mode 100644
index 000000000..a3ff805fe
--- /dev/null
+++ b/externals/cowsay/MANIFEST
@@ -0,0 +1,11 @@
+ChangeLog Changes to recent versions.
+INSTALL Instructions for installing cowsay.
+LICENSE The license for use and redistribution of cowsay.
+MANIFEST This file.
+README Read this first. Really.
+Wrap.pm.diff Diff for Text/Wrap.pm.
+cows/* Support files used by cowsay.
+cowsay Main cowsay executable.
+cowsay.1 Main cowsay manual page.
+install.sh cowsay installation script.
+pgp_public_key.txt Verify the signature file with this key.
diff --git a/externals/cowsay/README b/externals/cowsay/README
new file mode 100644
index 000000000..b5de08c40
--- /dev/null
+++ b/externals/cowsay/README
@@ -0,0 +1,38 @@
+===========
+cowsay 3.03
+===========
+
+cowsay is a configurable talking cow, written in Perl. It operates
+much as the figlet program does, and it written in the same spirit
+of silliness.
+
+cowsay is actually a pretty old program. It has not really been
+released before, and I am releasing it in the hope that someone
+other than myself will be amused by it.
+
+The first major version of cowsay had one cow and one message
+template: $foo is $verb $bar. Not very flexible, but people managed
+to do pretty interesting things with it. The second major version
+scrapped many of the limitations of the first, by allowing arbitrary
+messages, multiple cowfiles, and even support for cows talking in
+figlet. The third version was a rewrite of the second into Perl
+5, whereupon the code got a lot smaller and more manageable. :-)
+
+If you are using Perl 5.004, you may have problems with Text::Wrap.
+(Yeesh, this module changes more than it should...) I've included
+a diff for the Text::Wrap (version 97.011701) that is shipped with
+5.004_04; the concept is simple enough that even older Perls can
+take advantage of this silly little patch; if there is a "sub fill"
+in the documentation for the module, copy it to a more useful
+section of that file. If not, just take "sub fill" wholesale from
+the patch. Oh, and consider upgrading to 5.005_03 or later.
+Please. You'll like it, I promise.
+
+To install cowsay, consult the INSTALL file in this directory.
+
+For the terms and conditions of use, consult the LICENSE file in
+this directory.
+
+-- Tony Monroe (tony@nog.net)
+
+$Id: README,v 1.3 2000/05/28 06:24:46 tony Exp $
diff --git a/externals/cowsay/Wrap.pm.diff b/externals/cowsay/Wrap.pm.diff
new file mode 100644
index 000000000..1da064079
--- /dev/null
+++ b/externals/cowsay/Wrap.pm.diff
@@ -0,0 +1,47 @@
+*** Wrap.pm.in Thu May 22 00:21:42 1997
+--- Wrap.pm Fri Nov 12 10:00:15 1999
+***************
+*** 3,9 ****
+ require Exporter;
+
+ @ISA = (Exporter);
+! @EXPORT = qw(wrap);
+ @EXPORT_OK = qw($columns);
+
+ $VERSION = 97.011701;
+--- 3,9 ----
+ require Exporter;
+
+ @ISA = (Exporter);
+! @EXPORT = qw(wrap fill);
+ @EXPORT_OK = qw($columns);
+
+ $VERSION = 97.011701;
+***************
+*** 66,71 ****
+--- 66,90 ----
+
+ print "-----------$r---------\n" if $debug;;
+ return $r;
++ }
++
++ ## Copied up from below.
++ sub fill
++ {
++ my ($ip, $xp, @raw) = @_;
++ my @para;
++ my $pp;
++
++ for $pp (split(/\n\s+/, join("\n",@raw))) {
++ $pp =~ s/\s+/ /g;
++ my $x = wrap($ip, $xp, $pp);
++ push(@para, $x);
++ }
++
++ # if paragraph_indent is the same as line_indent,
++ # separate paragraphs with blank lines
++
++ return join ($ip eq $xp ? "\n\n" : "\n", @para);
+ }
+
+ 1;
diff --git a/externals/cowsay/cows/bunny.cow b/externals/cowsay/cows/bunny.cow
new file mode 100644
index 000000000..869933f72
--- /dev/null
+++ b/externals/cowsay/cows/bunny.cow
@@ -0,0 +1,10 @@
+##
+## A cute little wabbit
+##
+$the_cow = <<EOC;
+ $thoughts
+ $thoughts \\
+ \\ /\\
+ ( )
+ .( o ).
+EOC
diff --git a/externals/cowsay/cows/cower.cow b/externals/cowsay/cows/cower.cow
new file mode 100644
index 000000000..ae593c656
--- /dev/null
+++ b/externals/cowsay/cows/cower.cow
@@ -0,0 +1,14 @@
+##
+## A cowering cow
+##
+$the_cow = <<EOC;
+ $thoughts
+ $thoughts
+ ,__, | |
+ (oo)\\| |___
+ (__)\\| | )\\_
+ | |_w | \\
+ | | || *
+
+ Cower....
+EOC
diff --git a/externals/cowsay/cows/daemon.cow b/externals/cowsay/cows/daemon.cow
new file mode 100644
index 000000000..03dbce0dc
--- /dev/null
+++ b/externals/cowsay/cows/daemon.cow
@@ -0,0 +1,24 @@
+##
+## 4.4 >> 5.4
+##
+$the_cow = <<EOC;
+ $thoughts , ,
+ $thoughts /( )`
+ $thoughts \\ \\___ / |
+ /- _ `-/ '
+ (/\\/ \\ \\ /\\
+ / / | ` \\
+ O O ) / |
+ `-^--'`< '
+ (_.) _ ) /
+ `.___/` /
+ `-----' /
+<----. __ / __ \\
+<----|====O)))==) \\) /====
+<----' `--' `.__,' \\
+ | |
+ \\ /
+ ______( (_ / \\______
+ ,' ,-----' | \\
+ `--{__________) \\/
+EOC
diff --git a/externals/cowsay/cows/default.cow b/externals/cowsay/cows/default.cow
new file mode 100644
index 000000000..761eafdb4
--- /dev/null
+++ b/externals/cowsay/cows/default.cow
@@ -0,0 +1,7 @@
+$the_cow = <<"EOC";
+ $thoughts ^__^
+ $thoughts ($eyes)\\_______
+ (__)\\ )\\/\\
+ $tongue ||----w |
+ || ||
+EOC
diff --git a/externals/cowsay/cows/dragon-and-cow.cow b/externals/cowsay/cows/dragon-and-cow.cow
new file mode 100644
index 000000000..33be1f2d0
--- /dev/null
+++ b/externals/cowsay/cows/dragon-and-cow.cow
@@ -0,0 +1,21 @@
+##
+## A dragon smiting a cow, possible credit to kube@csua.berkeley.edu
+##
+$the_cow = <<EOC;
+ $thoughts ^ /^
+ $thoughts / \\ // \\
+ $thoughts |\\___/| / \\// .\\
+ $thoughts /O O \\__ / // | \\ \\ *----*
+ / / \\/_/ // | \\ \\ \\ |
+ \@___\@` \\/_ // | \\ \\ \\/\\ \\
+ 0/0/| \\/_ // | \\ \\ \\ \\
+ 0/0/0/0/| \\/// | \\ \\ | |
+ 0/0/0/0/0/_|_ / ( // | \\ _\\ | /
+ 0/0/0/0/0/0/`/,_ _ _/ ) ; -. | _ _\\.-~ / /
+ ,-} _ *-.|.-~-. .~ ~
+ \\ \\__/ `/\\ / ~-. _ .-~ /
+ \\____($eyes) *. } { /
+ ( (--) .----~-.\\ \\-` .~
+ //__\\\\ \\__ Ack! ///.----..< \\ _ -~
+ // \\\\ ///-._ _ _ _ _ _ _{^ - - - - ~
+EOC
diff --git a/externals/cowsay/cows/dragon.cow b/externals/cowsay/cows/dragon.cow
new file mode 100644
index 000000000..297a1aec8
--- /dev/null
+++ b/externals/cowsay/cows/dragon.cow
@@ -0,0 +1,21 @@
+##
+## The Whitespace Dragon
+##
+$the_cow = <<EOC;
+ $thoughts / \\ //\\
+ $thoughts |\\___/| / \\// \\\\
+ /0 0 \\__ / // | \\ \\
+ / / \\/_/ // | \\ \\
+ \@_^_\@'/ \\/_ // | \\ \\
+ //_^_/ \\/_ // | \\ \\
+ ( //) | \\/// | \\ \\
+ ( / /) _|_ / ) // | \\ _\\
+ ( // /) '/,_ _ _/ ( ; -. | _ _\\.-~ .-~~~^-.
+ (( / / )) ,-{ _ `-.|.-~-. .~ `.
+ (( // / )) '/\\ / ~-. _ .-~ .-~^-. \\
+ (( /// )) `. { } / \\ \\
+ (( / )) .----~-.\\ \\-' .~ \\ `. \\^-.
+ ///.----..> \\ _ -~ `. ^-` ^-_
+ ///-._ _ _ _ _ _ _}^ - - - - ~ ~-- ,.-~
+ /.-~
+EOC
diff --git a/externals/cowsay/cows/elephant.cow b/externals/cowsay/cows/elephant.cow
new file mode 100644
index 000000000..959cd3f6d
--- /dev/null
+++ b/externals/cowsay/cows/elephant.cow
@@ -0,0 +1,15 @@
+##
+## An elephant out and about
+##
+$the_cow = <<EOC;
+ $thoughts /\\ ___ /\\
+ $thoughts // \\/ \\/ \\\\
+ (( O O ))
+ \\\\ / \\ //
+ \\/ | | \\/
+ | | | |
+ | | | |
+ | o |
+ | | | |
+ |m| |m|
+EOC
diff --git a/externals/cowsay/cows/eyes.cow b/externals/cowsay/cows/eyes.cow
new file mode 100644
index 000000000..06cdbeb7e
--- /dev/null
+++ b/externals/cowsay/cows/eyes.cow
@@ -0,0 +1,16 @@
+##
+## Evil-looking eyes
+##
+$the_cow = <<EOC;
+ $thoughts
+ $thoughts
+ .::!!!!!!!:.
+ .!!!!!:. .:!!!!!!!!!!!!
+ ~~~~!!!!!!. .:!!!!!!!!!UWWW\$\$\$
+ :\$\$NWX!!: .:!!!!!!XUWW\$\$\$\$\$\$\$\$\$P
+ \$\$\$\$\$##WX!: .<!!!!UW\$\$\$\$" \$\$\$\$\$\$\$\$#
+ \$\$\$\$\$ \$\$\$UX :!!UW\$\$\$\$\$\$\$\$\$ 4\$\$\$\$\$*
+ ^\$\$\$B \$\$\$\$\\ \$\$\$\$\$\$\$\$\$\$\$\$ d\$\$R"
+ "*\$bd\$\$\$\$ '*\$\$\$\$\$\$\$\$\$\$\$o+#"
+ """" """""""
+EOC
diff --git a/externals/cowsay/cows/flaming-sheep.cow b/externals/cowsay/cows/flaming-sheep.cow
new file mode 100644
index 000000000..ad9d620f5
--- /dev/null
+++ b/externals/cowsay/cows/flaming-sheep.cow
@@ -0,0 +1,15 @@
+##
+## The flaming sheep, contributed by Geordan Rosario (geordan@csua.berkeley.edu)
+##
+$the_cow = <<EOC;
+ $thoughts . . .
+ $thoughts . . . ` ,
+ $thoughts .; . : .' : : : .
+ $thoughts i..`: i` i.i.,i i .
+ $thoughts `,--.|i |i|ii|ii|i:
+ U${eyes}U\\.'\@\@\@\@\@\@`.||'
+ \\__/(\@\@\@\@\@\@\@\@\@\@)'
+ (\@\@\@\@\@\@\@\@)
+ `YY~~~~YY'
+ || ||
+EOC
diff --git a/externals/cowsay/cows/head-in.cow b/externals/cowsay/cows/head-in.cow
new file mode 100644
index 000000000..2e5177488
--- /dev/null
+++ b/externals/cowsay/cows/head-in.cow
@@ -0,0 +1,12 @@
+##
+## Go stick yer head in a cow.
+##
+$the_cow = <<EOC;
+ $thoughts
+ $thoughts
+ ^__^ /
+ ($eyes)\\_______/ _________
+ (__)\\ )=( ____|_ \\_____
+ $tongue ||----w | \\ \\ \\_____ |
+ || || || ||
+EOC
diff --git a/externals/cowsay/cows/kitty.cow b/externals/cowsay/cows/kitty.cow
new file mode 100644
index 000000000..64280a8d2
--- /dev/null
+++ b/externals/cowsay/cows/kitty.cow
@@ -0,0 +1,12 @@
+##
+## A kitten of sorts, I think
+##
+$the_cow = <<EOC;
+ $thoughts
+ $thoughts
+ ("`-' '-/") .___..--' ' "`-._
+ ` *_ * ) `-. ( ) .`-.__. `)
+ (_Y_.) ' ._ ) `._` ; `` -. .-'
+ _.. `--'_..-_/ /--' _ .' ,4
+ ( i l ),-'' ( l i),' ( ( ! .-'
+EOC
diff --git a/externals/cowsay/cows/koala.cow b/externals/cowsay/cows/koala.cow
new file mode 100644
index 000000000..83b83425a
--- /dev/null
+++ b/externals/cowsay/cows/koala.cow
@@ -0,0 +1,12 @@
+##
+## From the canonical koala collection
+##
+$the_cow = <<EOC;
+ $thoughts
+ $thoughts
+ ___
+ {~._.~}
+ ( Y )
+ ()~*~()
+ (_)-(_)
+EOC
diff --git a/externals/cowsay/cows/meow.cow b/externals/cowsay/cows/meow.cow
new file mode 100644
index 000000000..ba255da71
--- /dev/null
+++ b/externals/cowsay/cows/meow.cow
@@ -0,0 +1,15 @@
+##
+## A meowing tiger?
+##
+$the_cow = <<EOC;
+ $thoughts
+ $thoughts , _ ___.--'''`--''//-,-_--_.
+ \\`"' ` || \\\\ \\ \\\\/ / // / ,-\\\\`,_
+ /'` \\ \\ || Y | \\|/ / // / - |__ `-,
+ /\@"\\ ` \\ `\\ | | ||/ // | \\/ \\ `-._`-,_.,
+ / _.-. `.-\\,___/\\ _/|_/_\\_\\/|_/ | `-._._)
+ `-'``/ / | // \\__/\\__ / \\__/ \\
+ `-' /-\\/ | -| \\__ \\ |-' |
+ __/\\ / _/ \\/ __,-' ) ,' _|'
+ (((__/(((_.' ((___..-'((__,'
+EOC
diff --git a/externals/cowsay/cows/moofasa.cow b/externals/cowsay/cows/moofasa.cow
new file mode 100644
index 000000000..15119d678
--- /dev/null
+++ b/externals/cowsay/cows/moofasa.cow
@@ -0,0 +1,14 @@
+##
+## MOOfasa.
+##
+$the_cow = <<EOC;
+ $thoughts ____
+ $thoughts / \\
+ | ^__^ |
+ | ($eyes) |______
+ | (__) | )\\/\\
+ \\____/|----w |
+ || ||
+
+ Moofasa
+EOC
diff --git a/externals/cowsay/cows/moose.cow b/externals/cowsay/cows/moose.cow
new file mode 100644
index 000000000..9d193c624
--- /dev/null
+++ b/externals/cowsay/cows/moose.cow
@@ -0,0 +1,9 @@
+$the_cow = <<EOC;
+ $thoughts
+ $thoughts \\_\\_ _/_/
+ $thoughts \\__/
+ ($eyes)\\_______
+ (__)\\ )\\/\\
+ $tongue ||----w |
+ || ||
+EOC
diff --git a/externals/cowsay/cows/mutilated.cow b/externals/cowsay/cows/mutilated.cow
new file mode 100644
index 000000000..99d35acd1
--- /dev/null
+++ b/externals/cowsay/cows/mutilated.cow
@@ -0,0 +1,10 @@
+##
+## A mutilated cow, from aspolito@csua.berkeley.edu
+##
+$the_cow = <<EOC;
+ $thoughts \\_______
+ v__v $thoughts \\ O )
+ ($eyes) ||----w |
+ (__) || || \\/\\
+ $tongue
+EOC
diff --git a/externals/cowsay/cows/satanic.cow b/externals/cowsay/cows/satanic.cow
new file mode 100644
index 000000000..c50ceb10a
--- /dev/null
+++ b/externals/cowsay/cows/satanic.cow
@@ -0,0 +1,12 @@
+##
+## Satanic cow, source unknown.
+##
+$the_cow = <<EOC;
+ $thoughts
+ $thoughts (__)
+ (\\/)
+ /-------\\/
+ / | 666 ||
+* ||----||
+ ~~ ~~
+EOC
diff --git a/externals/cowsay/cows/sheep.cow b/externals/cowsay/cows/sheep.cow
new file mode 100644
index 000000000..b0949066b
--- /dev/null
+++ b/externals/cowsay/cows/sheep.cow
@@ -0,0 +1,13 @@
+##
+## The non-flaming sheep.
+##
+$the_cow = <<EOC
+ $thoughts
+ $thoughts
+ __
+ U${eyes}U\\.'\@\@\@\@\@\@`.
+ \\__/(\@\@\@\@\@\@\@\@\@\@)
+ (\@\@\@\@\@\@\@\@)
+ `YY~~~~YY'
+ || ||
+EOC
diff --git a/externals/cowsay/cows/skeleton.cow b/externals/cowsay/cows/skeleton.cow
new file mode 100644
index 000000000..72ef35837
--- /dev/null
+++ b/externals/cowsay/cows/skeleton.cow
@@ -0,0 +1,15 @@
+##
+## This 'Scowleton' brought to you by one of
+## {appel,kube,rowe}@csua.berkeley.edu
+##
+$the_cow = <<EOC;
+ $thoughts (__)
+ $thoughts /$eyes|
+ $thoughts (_"_)*+++++++++*
+ //I#\\\\\\\\\\\\\\\\I\\
+ I[I|I|||||I I `
+ I`I'///'' I I
+ I I I I
+ ~ ~ ~ ~
+ Scowleton
+EOC
diff --git a/externals/cowsay/cows/small.cow b/externals/cowsay/cows/small.cow
new file mode 100644
index 000000000..5b4331963
--- /dev/null
+++ b/externals/cowsay/cows/small.cow
@@ -0,0 +1,10 @@
+##
+## A small cow, artist unknown
+##
+$eyes = ".." unless ($eyes);
+$the_cow = <<EOC;
+ $thoughts ,__,
+ $thoughts ($eyes)____
+ (__) )\\
+ $tongue||--|| *
+EOC
diff --git a/externals/cowsay/cows/squirrel.cow b/externals/cowsay/cows/squirrel.cow
new file mode 100644
index 000000000..a1afabdd7
--- /dev/null
+++ b/externals/cowsay/cows/squirrel.cow
@@ -0,0 +1,13 @@
+$the_cow = <<EOC;
+ $thoughts
+ $thoughts
+ _ _
+ | \__/| .~ ~.
+ /$eyes `./ .'
+ {o__, \ {
+ / . . ) \
+ `-` '-' \ }
+ .( _( )_.'
+ '---.~_ _ _|
+
+EOC
diff --git a/externals/cowsay/cows/stegosaurus.cow b/externals/cowsay/cows/stegosaurus.cow
new file mode 100644
index 000000000..2e0decd22
--- /dev/null
+++ b/externals/cowsay/cows/stegosaurus.cow
@@ -0,0 +1,19 @@
+##
+## A stegosaur with a top hat?
+##
+$the_cow = <<EOC;
+$thoughts . .
+ $thoughts / `. .' "
+ $thoughts .---. < > < > .---.
+ $thoughts | \\ \\ - ~ ~ - / / |
+ _____ ..-~ ~-..-~
+ | | \\~~~\\.' `./~~~/
+ --------- \\__/ \\__/
+ .' O \\ / / \\ "
+ (_____, `._.' | } \\/~~~/
+ `----. / } | / \\__/
+ `-. | / | / `. ,~~|
+ ~-.__| /_ - ~ ^| /- _ `..-'
+ | / | / ~-. `-. _ _ _
+ |_____| |_____| ~ - . _ _ _ _ _>
+EOC
diff --git a/externals/cowsay/cows/supermilker.cow b/externals/cowsay/cows/supermilker.cow
new file mode 100644
index 000000000..1424f9e66
--- /dev/null
+++ b/externals/cowsay/cows/supermilker.cow
@@ -0,0 +1,10 @@
+##
+## A cow being milked, probably from Lars Smith (lars@csua.berkeley.edu)
+##
+$the_cow = <<EOC;
+ $thoughts ^__^
+ $thoughts ($eyes)\\_______ ________
+ (__)\\ )\\/\\ |Super |
+ $tongue ||----W | |Milker|
+ || UDDDDDDDDD|______|
+EOC
diff --git a/externals/cowsay/cows/surgery.cow b/externals/cowsay/cows/surgery.cow
new file mode 100644
index 000000000..1f5c112f6
--- /dev/null
+++ b/externals/cowsay/cows/surgery.cow
@@ -0,0 +1,24 @@
+##
+## A cow operation, artist unknown
+##
+$the_cow = <<EOC;
+ $thoughts \\ /
+ $thoughts \\/
+ (__) /\\
+ ($eyes) O O
+ _\\/_ //
+ * ( ) //
+ \\ (\\\\ //
+ \\( \\\\ )
+ ( \\\\ ) /\\
+ ___[\\______/^^^^^^^\\__/) o-)__
+ |\\__[=======______//________)__\\
+ \\|_______________//____________|
+ ||| || //|| |||
+ ||| || @.|| |||
+ || \\/ .\\/ ||
+ . .
+ '.'.`
+
+ COW-OPERATION
+EOC
diff --git a/externals/cowsay/cows/turkey.cow b/externals/cowsay/cows/turkey.cow
new file mode 100644
index 000000000..cb1c6cbe1
--- /dev/null
+++ b/externals/cowsay/cows/turkey.cow
@@ -0,0 +1,26 @@
+##
+## Turkey!
+##
+$the_cow = <<EOC;
+ $thoughts ,+*^^*+___+++_
+ $thoughts ,*^^^^ )
+ $thoughts _+* ^**+_
+ $thoughts +^ _ _++*+_+++_, )
+ _+^^*+_ ( ,+*^ ^ \\+_ )
+ { ) ( ,( ,_+--+--, ^) ^\\
+ { (\@) } f ,( ,+-^ __*_*_ ^^\\_ ^\\ )
+ {:;-/ (_+*-+^^^^^+*+*<_ _++_)_ ) ) /
+ ( / ( ( ,___ ^*+_+* ) < < \\
+ U _/ ) *--< ) ^\\-----++__) ) ) )
+ ( ) _(^)^^)) ) )\\^^^^^))^*+/ / /
+ ( / (_))_^)) ) ) ))^^^^^))^^^)__/ +^^
+ ( ,/ (^))^)) ) ) ))^^^^^^^))^^) _)
+ *+__+* (_))^) ) ) ))^^^^^^))^^^^^)____*^
+ \\ \\_)^)_)) ))^^^^^^^^^^))^^^^)
+ (_ ^\\__^^^^^^^^^^^^))^^^^^^^)
+ ^\\___ ^\\__^^^^^^))^^^^^^^^)\\\\
+ ^^^^^\\uuu/^^\\uuu/^^^^\\^\\^\\^\\^\\^\\^\\^\\
+ ___) >____) >___ ^\\_\\_\\_\\_\\_\\_\\)
+ ^^^//\\\\_^^//\\\\_^ ^(\\_\\_\\_\\)
+ ^^^ ^^ ^^^ ^
+EOC
diff --git a/externals/cowsay/cows/turtle.cow b/externals/cowsay/cows/turtle.cow
new file mode 100644
index 000000000..4286b0948
--- /dev/null
+++ b/externals/cowsay/cows/turtle.cow
@@ -0,0 +1,20 @@
+##
+## A mysterious turtle...
+##
+$the_cow = <<EOC;
+ $thoughts ___-------___
+ $thoughts _-~~ ~~-_
+ $thoughts _-~ /~-_
+ /^\\__/^\\ /~ \\ / \\
+ /| O|| O| / \\_______________/ \\
+ | |___||__| / / \\ \\
+ | \\ / / \\ \\
+ | (_______) /______/ \\_________ \\
+ | / / \\ / \\
+ \\ \\^\\\\ \\ / \\ /
+ \\ || \\______________/ _-_ //\\__//
+ \\ ||------_-~~-_ ------------- \\ --/~ ~\\ || __/
+ ~-----||====/~ |==================| |/~~~~~
+ (_(__/ ./ / \\_\\ \\.
+ (_(___/ \\_____)_)
+EOC
diff --git a/externals/cowsay/cows/tux.cow b/externals/cowsay/cows/tux.cow
new file mode 100644
index 000000000..03e228f8c
--- /dev/null
+++ b/externals/cowsay/cows/tux.cow
@@ -0,0 +1,16 @@
+##
+## TuX
+## (c) pborys@p-soft.silesia.linux.org.pl
+##
+$the_cow = <<EOC;
+ $thoughts
+ $thoughts
+ .--.
+ |o_o |
+ |:_/ |
+ // \\ \\
+ (| | )
+ /'\\_ _/`\\
+ \\___)=(___/
+
+EOC
diff --git a/externals/cowsay/cows/www.cow b/externals/cowsay/cows/www.cow
new file mode 100644
index 000000000..925ed72ee
--- /dev/null
+++ b/externals/cowsay/cows/www.cow
@@ -0,0 +1,10 @@
+##
+## A cow wadvertising the World Wide Web, from lim@csua.berkeley.edu
+##
+$the_cow = <<EOC;
+ $thoughts ^__^
+ $thoughts ($eyes)\\_______
+ (__)\\ )\\/\\
+ $tongue ||--WWW |
+ || ||
+EOC
diff --git a/externals/cowsay/cowsay b/externals/cowsay/cowsay
new file mode 100755
index 000000000..900ca4601
--- /dev/null
+++ b/externals/cowsay/cowsay
@@ -0,0 +1,187 @@
+#%BANGPERL%
+
+##
+## Cowsay 3.03
+##
+## This file is part of cowsay. (c) 1999-2000 Tony Monroe.
+##
+
+use Text::Tabs qw(expand);
+use Text::Wrap qw(wrap fill $columns);
+use File::Basename;
+use Getopt::Std;
+use Cwd;
+
+$version = "3.03";
+$progname = basename($0);
+$eyes = "oo";
+$tongue = " ";
+$cowpath = $ENV{'COWPATH'} || '%PREFIX%/share/cows';
+@message = ();
+$thoughts = "";
+
+## Yeah, this is rude, I know. But hopefully it gets around a nasty
+## little version dependency.
+
+$Text::Wrap::initial_tab = 8;
+$Text::Wrap::subsequent_tab = 8;
+$Text::Wrap::tabstop = 8;
+
+## One of these days, we'll get it ported to Windows. Yeah, right.
+
+if (($^O eq "MSWin32") or ($^O eq "Windows_NT")) { ## Many perls, eek!
+ $pathsep = ';';
+} else {
+ $pathsep = ':';
+}
+
+%opts = (
+ 'e' => 'oo',
+ 'f' => 'default.cow',
+ 'n' => 0,
+ 'T' => ' ',
+ 'W' => 40,
+);
+
+getopts('bde:f:ghlLnNpstT:wW:y', \%opts);
+
+&display_usage if $opts{'h'};
+&list_cowfiles if $opts{'l'};
+
+$borg = $opts{'b'};
+$dead = $opts{'d'};
+$greedy = $opts{'g'};
+$paranoid = $opts{'p'};
+$stoned = $opts{'s'};
+$tired = $opts{'t'};
+$wired = $opts{'w'};
+$young = $opts{'y'};
+$eyes = substr($opts{'e'}, 0, 2);
+$tongue = substr($opts{'T'}, 0, 2);
+$the_cow = "";
+
+&slurp_input;
+$Text::Wrap::columns = $opts{'W'};
+@message = ($opts{'n'} ? expand(@message) :
+ split("\n", fill("", "", @message)));
+&construct_balloon;
+&construct_face;
+&get_cow;
+print @balloon_lines;
+print $the_cow;
+
+sub list_cowfiles {
+ my $basedir;
+ my @dirfiles;
+ chop($basedir = cwd);
+ for my $d (split(/$pathsep/, $cowpath)) {
+ print "Cow files in $d:\n";
+ opendir(COWDIR, $d) || die "$0: Cannot open $d\n";
+ for my $file (readdir COWDIR) {
+ if ($file =~ s/\.cow$//) {
+ push(@dirfiles, $file);
+ }
+ }
+ closedir(COWDIR);
+ print wrap("", "", sort @dirfiles), "\n";
+ @dirfiles = ();
+ chdir($basedir);
+ }
+ exit(0);
+}
+
+sub slurp_input {
+ unless ($ARGV[0]) {
+ chomp(@message = <STDIN>);
+ } else {
+ &display_usage if $opts{'n'};
+ @message = join(' ', @ARGV);
+ }
+}
+
+sub maxlength {
+ my ($l, $m);
+ $m = -1;
+ for my $i (@_) {
+ $l = length $i;
+ $m = $l if ($l > $m);
+ }
+ return $m;
+}
+
+sub construct_balloon {
+ my $max = &maxlength(@message);
+ my $max2 = $max + 2; ## border space fudge.
+ my $format = "%s %-${max}s %s\n";
+ my @border; ## up-left, up-right, down-left, down-right, left, right
+ if ($0 =~ /think/i) {
+ $thoughts = 'o';
+ @border = qw[ ( ) ( ) ( ) ];
+ } elsif (@message < 2) {
+ $thoughts = '\\';
+ @border = qw[ < > ];
+ } else {
+ $thoughts = '\\';
+ if ($V and $V gt v5.6.0) { # Thanks, perldelta.
+ @border = qw[ / \\ \\ / | | ];
+ } else {
+ @border = qw[ / \ \ / | | ];
+ }
+ }
+ push(@balloon_lines,
+ " " . ("_" x $max2) . " \n" ,
+ sprintf($format, $border[0], $message[0], $border[1]),
+ (@message < 2 ? "" :
+ map { sprintf($format, $border[4], $_, $border[5]) }
+ @message[1 .. $#message - 1]),
+ (@message < 2 ? "" :
+ sprintf($format, $border[2], $message[$#message], $border[3])),
+ " " . ("-" x $max2) . " \n"
+ );
+}
+
+sub construct_face {
+ if ($borg) { $eyes = "=="; }
+ if ($dead) { $eyes = "xx"; $tongue = "U "; }
+ if ($greedy) { $eyes = "\$\$"; }
+ if ($paranoid) { $eyes = "@@"; }
+ if ($stoned) { $eyes = "**"; $tongue = "U "; }
+ if ($tired) { $eyes = "--"; }
+ if ($wired) { $eyes = "OO"; }
+ if ($young) { $eyes = ".."; }
+}
+
+sub get_cow {
+##
+## Get a cow from the specified cowfile; otherwise use the default cow
+## which was defined above in $the_cow.
+##
+ my $f = $opts{'f'};
+ my $full = "";
+ if ($opts{'f'} =~ m,/,) {
+ $full = $opts{'f'};
+ } else {
+ for my $d (split(/:/, $cowpath)) {
+ if (-f "$d/$f") {
+ $full = "$d/$f";
+ last;
+ } elsif (-f "$d/$f.cow") {
+ $full = "$d/$f.cow";
+ last;
+ }
+ }
+ if ($full eq "") {
+ die "$progname: Could not find $f cowfile!\n";
+ }
+ }
+ do $full;
+ die "$progname: $@\n" if $@;
+}
+
+sub display_usage {
+ die <<EOF;
+cow{say,think} version $version, (c) 1999 Tony Monroe
+Usage: $progname [-bdgpstwy] [-h] [-e eyes] [-f cowfile]
+ [-l] [-n] [-T tongue] [-W wrapcolumn] [message]
+EOF
+}
diff --git a/externals/cowsay/cowsay.1 b/externals/cowsay/cowsay.1
new file mode 100644
index 000000000..7133866af
--- /dev/null
+++ b/externals/cowsay/cowsay.1
@@ -0,0 +1,168 @@
+.\"
+.\" cowsay.1
+.\"
+.\" $Id: cowsay.1,v 1.4 1999/11/04 19:50:40 tony Exp $
+.\"
+.\" This file is part of cowsay. (c) 1999 Tony Monroe.
+.\"
+.ds Nm Cowsay
+.ds nm cowsay
+.ds Vn 3.02
+.TH \*(nm 1 "$Date: 1999/11/04 19:50:40 $"
+.SH NAME
+\*(nm/cowthink \- configurable speaking/thinking cow (and a bit more)
+.SH SYNOPSIS
+cowsay
+.RB [ \-e
+.IR eye_string ]
+.RB [ \-f
+.IR cowfile ]
+.RB [ \-h ]
+.RB [ \-l ]
+.RB [ \-n ]
+.RB [ \-T
+.IR tongue_string ]
+.RB [ \-W
+.IR column ]
+.RB [ \-bdgpstwy ]
+.SH DESCRIPTION
+.I Cowsay
+generates an ASCII picture of a cow saying something provided by the
+user. If run with no arguments, it accepts standard input, word-wraps
+the message given at about 40 columns, and prints the cow saying the
+given message on standard output.
+.PP
+To aid in the use of arbitrary messages with arbitrary whitespace,
+use the
+.B \-n
+option. If it is specified, the given message will not be
+word-wrapped. This is possibly useful if you want to make the cow
+think or speak in figlet(6). If
+.B \-n
+is specified, there must not be any command-line arguments left
+after all the switches have been processed.
+.PP
+The
+.B \-W
+specifies roughly (where the message should be wrapped. The default
+is equivalent to
+.B \-W 40
+i.e. wrap words at or before the 40th column.
+.PP
+If any command-line arguments are left over after all switches have
+been processed, they become the cow's message. The program will not
+accept standard input for a message in this case.
+.PP
+There are several provided modes which change the appearance of the
+cow depending on its particular emotional/physical state. The
+.B \-b
+option initiates Borg mode;
+.B \-d
+causes the cow to appear dead;
+.B \-g
+invokes greedy mode;
+.B \-p
+causes a state of paranoia to come over the cow;
+.B \-s
+makes the cow appear thoroughly stoned;
+.B \-t
+yields a tired cow;
+.B \-w
+is somewhat the opposite of
+.BR \-t ,
+and initiates wired mode;
+.B \-y
+brings on the cow's youthful appearance.
+.PP
+The user may specify the
+.B \-e
+option to select the appearance of the cow's eyes, in which case
+the first two characters of the argument string
+.I eye_string
+will be used. The default eyes are 'oo'. The tongue is similarly
+configurable through
+.B \-T
+and
+.IR tongue_string ;
+it must be two characters and does not appear by default. However,
+it does appear in the 'dead' and 'stoned' modes. Any configuration
+done by
+.B \-e
+and
+.B \-T
+will be lost if one of the provided modes is used.
+.PP
+The
+.B \-f
+option specifies a particular cow picture file (``cowfile'') to
+use. If the cowfile spec contains '/' then it will be interpreted
+as a path relative to the current directory. Otherwise, cowsay
+will search the path specified in the
+.B COWPATH
+environment variable.
+To list all cowfiles on the current
+.BR COWPATH ,
+invoke
+.B \*(nm
+with the
+.B \-l
+switch.
+.PP
+If the program is invoked as
+.B cowthink
+then the cow will think its message instead of saying it.
+.PP
+.SH COWFILE FORMAT
+A cowfile is made up of a simple block of
+.BR perl (1)
+code, which assigns a picture of a cow to the variable
+.BR $the_cow .
+Should you wish to customize the eyes or the tongue of the cow,
+then the variables
+.B $eyes
+and
+.B $tongue
+may be used. The trail leading up to the cow's message balloon is
+composed of the character(s) in the
+.B $thoughts
+variable. Any backslashes must be reduplicated to prevent
+interpolation. The name of a cowfile should end with
+.BR .cow ,
+otherwise it is assumed not to be a cowfile. Also, at-signs (``@'')
+must be backslashed because that is what Perl 5 expects.
+.PP
+.SH COMPATIBILITY WITH OLDER VERSIONS
+.PP
+What older versions? :-)
+.PP
+Version 3.x is fully backward-compatible with 2.x versions. If
+you're still using a 1.x version, consider upgrading. And tell me
+where you got the older versions, since I didn't exactly put them
+up for world-wide access.
+.PP
+Oh, just so you know, this manual page documents version \*(Vn of
+cowsay.
+.SH ENVIRONMENT
+The COWPATH environment variable, if present, will be used to search
+for cowfiles. It contains a colon-separated list of directories,
+much like
+.B PATH or
+.BR MANPATH .
+It should always contain the
+.B /usr/local/share/cows
+directory, or at least a directory with a file called
+.B default.cow
+in it.
+.SH FILES
+.B %PREFIX%/share/cows
+holds a sample set of cowfiles. If your
+.B COWPATH
+is not explicitly set, it automatically contains this directory.
+.SH BUGS
+If there are any, please notify the author at the address below.
+.SH AUTHOR
+Tony Monroe (tony@nog.net), with suggestions from Shannon
+Appel (appel@CSUA.Berkeley.EDU) and contributions from Anthony Polito
+(aspolito@CSUA.Berkeley.EDU).
+.SH SEE ALSO
+perl(1), wall(1), nwrite(1), figlet(6)
diff --git a/externals/cowsay/install.sh b/externals/cowsay/install.sh
new file mode 100755
index 000000000..a359cd15d
--- /dev/null
+++ b/externals/cowsay/install.sh
@@ -0,0 +1,92 @@
+#!/bin/sh
+
+##
+## install.sh
+##
+## Installation script for cowsay.
+##
+## $Id: install.sh,v 1.5 1999/11/01 20:19:21 tony Exp $
+##
+## This file is part of cowsay. (c) 1999 Tony Monroe.
+##
+
+rcs_id='$Id: install.sh,v 1.5 1999/11/01 20:19:21 tony Exp $'
+
+filelist='cows'
+
+cat <<DOG
+===================
+cowsay Installation
+===================
+
+Searching for useful perl executables...
+DOG
+
+backdoor=$1
+
+pathdirs=`echo $PATH | tr : " "`
+for p in $pathdirs; do
+ set $p/perl $p/perl5*
+ while [ ! -z "$1" ]; do
+ if [ -x "$1" ]; then
+ echo Found perl in $1
+ perls="$perls $1"
+ fi
+ shift
+ done
+done
+for perl in $perls; do
+ if $perl -MText::Wrap -e0 >/dev/null 2>&1; then
+ echo Found a good perl in $perl
+ goodperls="$goodperls $perl"
+ fi
+done
+echo The following perl executables will run cowsay:
+echo $goodperls
+echo I recommend the latest stable perl you can find.
+set $goodperls
+if [ -z "$1" ]; then
+ echo Ack! You do not have Perl 5 installed correctly!
+ echo Get thee to CPAN!
+ exit 1
+fi
+usethisperl=$1
+echo I will be using $1 because I know it will work.
+
+echo Now I need an installation prefix. I will use /usr/local unless
+printf "you give me a better idea here: "
+if [ -n "$backdoor" ]; then
+ prefix=$backdoor
+ printf "%s (specified on command line)\n" $prefix
+else
+ read prefix
+fi
+
+PREFIX=${prefix:-/usr/local}
+
+echo Okay, time to install this puppy.
+
+echo s,%BANGPERL%,!$usethisperl,\; > install.pl
+echo s,%PREFIX%,$PREFIX,\; >> install.pl
+set -x
+mkdir -p $PREFIX/bin || (mkdir $PREFIX; mkdir $PREFIX/bin)
+$usethisperl -p install.pl cowsay > $PREFIX/bin/cowsay
+chmod a+x $PREFIX/bin/cowsay
+ln -s cowsay $PREFIX/bin/cowthink
+mkdir -p $PREFIX/man/man1 || ($mkdir $PREFIX; mkdir $PREFIX/man; mkdir $PREFIX/man/man1)
+$usethisperl -p install.pl cowsay.1 > $PREFIX/man/man1/cowsay.1
+chmod a+r $PREFIX/man/man1/cowsay.1
+ln -s cowsay.1 $PREFIX/man/man1/cowthink.1
+mkdir -p $PREFIX/share/cows || (mkdir $PREFIX; mkdir $PREFIX/share; mkdir $PREFIX/share/cows)
+tar -cf - $filelist | (cd $PREFIX/share && tar -xvf -)
+set +x
+
+echo Okay, let us see if the install actually worked.
+
+if [ ! -f $PREFIX/share/cows/default.cow ]; then
+ echo The default cow file did not make it across!
+ echo Ooops, it failed...sorry!
+ exit 1
+fi
+
+echo Installation complete! Enjoy the cows!
diff --git a/externals/cowsay/pgp_public_key.txt b/externals/cowsay/pgp_public_key.txt
new file mode 100644
index 000000000..135735e6f
--- /dev/null
+++ b/externals/cowsay/pgp_public_key.txt
@@ -0,0 +1,14 @@
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: 2.6.2
+
+mQCNAzNS+H4AAAEEAMilCcxLMIqMNXhZoeHjbeJGnHoKP0JpKDejz66qBlDwP+du
+FvVBHkyNIuU3orKe7l/aXIR8TcpjrxdcmrjjzwuB1aV48V4swT7v9UXvv9YP41Pd
+1pXYXNelXHmE0eKSfcnkkFmYTJBXPaPNTJ3rpZpZOEW3SfgrrheqQm6w/6IJAAUR
+tBpUb255IE1vbnJvZSA8dG9ueUBub2cubmV0PrQdVG9ueSBNb25yb2UgPHRtb25y
+b2VAbm9nLm5ldD6JAJUDBRA2bDA5F6pCbrD/ogkBASOZA/9XtYSpcPjpi62MTEZl
+l+wV1svtlUlPvKkDE7FB9bwnMbF1FgGhTe/H4/8qDu20m5eGxMX58Ri7HPXWjjJ/
+CrUWMzGVbg1JBkgh+d9QvEywmR0j4WezaifW1nCbxk0GrW1PjJyGb3kx7vrIF1Km
+xt6VwxTgfJzjIioBJFb4EiDyaLQnVG9ueSBNb25yb2UgPHRtb25yb2VAQ1NVQS5C
+ZXJrZWxleS5FRFU+
+=WpM4
+-----END PGP PUBLIC KEY BLOCK-----
diff --git a/externals/figlet/.gitignore b/externals/figlet/.gitignore
new file mode 100644
index 000000000..dc65b3c3e
--- /dev/null
+++ b/externals/figlet/.gitignore
@@ -0,0 +1,8 @@
+chkfont
+figlet
+tags
+*.o
+core
+*~
+tests.log
+*.tar.gz
diff --git a/externals/figlet/CHANGES b/externals/figlet/CHANGES
new file mode 100644
index 000000000..4f2d6e9ed
--- /dev/null
+++ b/externals/figlet/CHANGES
@@ -0,0 +1,205 @@
+Changes in FIGlet 2.2.5
+-----------------------
+
+FIGlet 2.2.5 is a revision of FIGlet 2.2.4 containing updated andproperly
+licensed ISO8859 map files. The full list of changes is:
+
+o Add regression tests for uskata and jis0201 control files
+
+o Properly escape minus signs in figlist(6) man page (Jonathan
+ McCrohan)
+
+o Fix chkfont coredump on invalid input (Kenneth Davies and
+ Jonathan McCrohan)
+
+o Update ISO8859 map files to fix licensing issue raised in Debian
+ bugs 673096 and 674844
+
+o Re-add missing figmagic and getopt.c files which were left out
+ of releases 2.2.3 and 2.2.4
+
+o Fix output of test script in MacOS X
+
+These changes were made by Claudio Matsuoka <cmatsuoka@gmail.com>
+31 May 2012
+
+Changes in FIGlet 2.2.4
+-----------------------
+
+FIGlet 2.2.4 is a revision of FIGlet 2.2.3 featuring bugfixes and support
+to tlf2 fonts. The full list of changes is:
+
+o Add support to Sam Hocevar's TOIlet TLF fonts containing UTF-8
+ encoded Unicode characters.
+
+o Add infocode 5 to list supported font formats
+
+o Fix rendering error caused by the previous attempt to fix invalid
+ memory accesses when smushing at start of line
+
+o New environment variable FIGLET_FONTDIR can be used to specify
+ the path to search for fonts
+
+o Add regression tests
+
+These changes were made by Claudio Matsuoka <cmatsuoka@gmail.com>
+26 January 2011
+
+Changes in FIGlet 2.2.3
+-----------------------
+
+FIGlet 2.2.3 is a revision of FIGlet 2.2.2 featuring minor bugfixes and
+important licensing changes in the zipio files. The full list of
+changes is:
+
+o License changed from "Academic Free License" to "New BSD License"
+ (3-clause) as agreed by FIGlet authors
+
+o New JIS X 0201 control file (Micah Cowan)
+
+o Fix behavior of JIS0201 SHIFT-OUT and SHIFT-IN that were previouly
+ inverted (Micah Cowan)
+
+o Fix memory violation when smushing at line start
+
+o Fix handling of memory allocation errors
+
+o Relicense Ed Hamrick zipio under the MIT license. This should
+ eliminate any concerns about redistribution of FIGlet as libre
+ software.
+
+o Update Makefile to meet modern standards in variable naming, using
+ BINDIR as the pathname for binary files and reservind DESTDIR
+ as the extra prefix commonly used in package building.
+
+o Add a Turbo C makefile, just because I had the compiler. (this
+ also tests portability to old compilers and foreign platforms)
+
+o Add Jonathon Abbott's man pages for figlist, showfigfonts and
+ chkfont originally contributed to the Debian Project
+
+These changes were made by Claudio Matsuoka <cmatsuoka@gmail.com>
+12 January 2011
+
+Changes in FIGlet 2.2.2
+-----------------------
+
+License changed from "Artistic License" to "Academic Free
+License" as agreed by FIGlet authors. 05 July 2005
+
+Changes in FIGlet 2.2.1
+-----------------------
+
+FIGlet 2.2.1 is a minor revision of FIGlet 2.2. The files
+README, Makefile, figfont.txt, figlet.c and figlet.6 have been
+changed to reflect changes in documentation, official contact
+details etc. FTP-NOTE merged into README. FAQ and CHANGES
+added to the distribution.
+
+All other files are identical with the 2.2 release.
+
+These changes were made by Christiaan Keet <keet@plig.net>
+
+Changes in FIGlet 2.2
+---------------------
+
+FIGlet 2.2 is a moderate revision of FIGlet 2.1.2. The new features are:
+
+o font files and control files can be compressed using ``zip'', and
+ will be automatically decompressed
+
+o new commands in controlfiles provide support for
+ single-byte (default), double-byte, HZ, Shift-JIS, and Unicode
+ UTF-8 encodings of the input
+
+o ISO 2022 escape sequences are decoded and interpreted
+
+o control files can now have the format of Unicode Consortium
+ mapping tables (two columns of numbers representing
+ input character and output character, no ranges, # comments)
+
+o new options -s (smush, same as -m-2), -k (kern, same as -m0),
+ -S (forced smushing), and -W (full width, same as -m-1) make
+ -m option unnecessary except for font designers. The -S option
+ works even if the font's smushmode is 0 or -1, in which case
+ the smushmode is read from a new parameter in the
+ font's first line, or does universal overlapping if no such parameter
+ exists
+
+o universal smushing (-o option to force it, but -S will use it
+ if no smush rules are available) makes FIGcharacters overlap by
+ one place independent of how they are constructed
+ more fonts smushable.
+
+o file "figmagic" can be appended to your system magic number
+ file to make the "file" command recognize FIGlet files
+
+o file "figfont.txt" is an implementation-independent specification
+ for FIGlet fonts and control files
+
+o integrated support for extended characters (extended Latin in
+ "standard", Greek in "big", katakana in "banner", Hebrew in new
+ "ivrit" fonts) with appropriate controlfiles
+
+o smushing rule 16 has changed slightly: "/\" now smushes
+ into "|" and "\/" smushes into "Y"; "><" still smushes
+ into "X" and "<>" is still not smushed at all.
+
+o -A option introduced in FIGlet 2.1.2 is now optional;
+ if any words appear on the command line after the options,
+ they are formatted, and the standard input is not read.
+
+These changes were made by John Cowan <cowan@ccil.org>.
+
+Changes in FIGlet 2.1.2
+------------------------
+
+FIGlet 2.1.2 is a minor revision of FIGlet 2.1.1. The files
+README, FTP-NOTE, figlet.c and figlet.6 have been changed. All other
+files are identical with the 2.1.1 release.
+
+o The only new option is -A, which causes FIGlet to read input
+ from the command line.
+
+These changes were made by Gilbert Healton <ghealton@nmia.com> as Glenn
+Chappell is now busy as a new professor of Mathematics.
+
+Changes in FIGlet 2.1
+----------------------
+
+A number of minor bugs and major incompatibility problems have been
+fixed. FIGlet 2.1 should compile correctly on many operating systems for
+which FIGlet 2.0 did not.
+
+o The "-F" command line option, which used to list all the available
+ fonts, has been removed, since it made FIGlet incompatible with some
+ operating systems. It has been replaced by the "figlist" script. The
+ "showfigfonts" script has been updated so that it no longer requires
+ the "-F" option to be available.
+
+o The FIGlet font file format has been extended to allow an arbitrarily
+ large number of characters. The ISO Latin-1 character set, which
+ includes many accented letters and special symbols, has been added to
+ most standard fonts.
+
+o FIGlet can now print right-to-left. This can be specified on the
+ command line ("-R") or in the font file. Thus, for example, Hebrew and
+ Arabic fonts can be handled more easily.
+
+o FIGlet can now right justify its output. This is the default when
+ right-to-left printing is selected. It can also be specified on the
+ command line ("-r").
+
+o FIGlet now supports "control files". These can be used to change which
+ character FIGlet will print when it sees a certain input character --
+ sort of an expanded version of the "-D" option. For example, a control
+ file could convert lower-case letters to upper-case or map certain
+ ASCII characters to accented letters. Control file names end with the
+ suffix ".flc". Select a control file by using "-C controlfile" on the
+ command line. Several controlfiles can be used at once by giving
+ muliple "-C" options.
+
+o There is now a way for programs that use FIGlet to get various
+ information from FIGlet, for example, what version of FIGlet is being
+ used or the name of the default font directory. This information is
+ gotten through the "-I" option. See the man page for details.
diff --git a/externals/figlet/FAQ b/externals/figlet/FAQ
new file mode 100644
index 000000000..8e8ca4316
--- /dev/null
+++ b/externals/figlet/FAQ
@@ -0,0 +1,63 @@
+ _____ _____ _____ __ __ _____ _____ _____
+| __| | __| |____| |_ | __| _ | | This FIGlet FAQ is
+| __|- -| | | | - _| _| | __| | | | posted once a month
+|__| |_____|_____|__|____|__| |__| |__|__|__ _| on figlet@figlet.org
+ info@figlet.org http://www.figlet.org/ |__| [FIGlet FAQ v0.91]
+
+===========================================================================
+The latest version of FIGlet is 2.2.5 and can be downloaded from
+ftp://ftp.figlet.org/pub/figlet/program
+===========================================================================
+
+1 What is FIGlet?
+2 Where can I get FIGlet from?
+3 Where can I get more fonts for FIGlet?
+4 Where can I hear about regular FIGlet program and font updates?
+5 How can I contribute?
+6 Why am I getting this mail and can you make it stop?
+7 Where does the name FIGlet come from?
+
+===========================================================================
+
+1. What is FIGlet?
+ FIGlet is a program for making large letters out of ordinary text
+ _ _ _ _ _ _
+ | (_) | _____ | |_| |__ (_)___
+ | | | |/ / _ \ | __| '_ \| / __|
+ | | | < __/ | |_| | | | \__ \
+ |_|_|_|\_\___| \__|_| |_|_|___/
+
+2. Where can I get FIGlet from?
+ From the official FIGlet website at http://www.figlet.org/
+ or from the FIGlet FTP site at ftp://ftp.figlet.org/pub/figlet/
+
+3. Where can I get more fonts for FIGlet?
+ From the FTP site at ftp://ftp.figlet.org/pub/figlet/fonts/
+ There are currently over 400 fonts available for download
+
+4 Where can I hear about regular FIGlet program and font updates?
+ There is a mailing list for FIGlet for general discussions about
+ FIGlet and a place where you can ask questions or share ideas
+ with other FIGlet users. It is also the place where we will publish
+ news about new fonts, new software updates etc.
+
+ To subscribe or unsubscribe from the FIGlet mailing list,
+ please send email to figlet-subscribe@figlet.org or visit the
+ following web page: http://www.figlet.org/mailman/listinfo/figlet
+
+5. How can I contribute?
+ To contribute new fonts, software or information, please contact
+ us at info@figlet.org
+
+6. Why am I getting this mail and can you make it stop?
+ If you received this email it is probably because you are subscribed
+ to the FIGlet mailing list. Please see Question 4 of this FAQ on how
+ to unsubscribe from the FIGlet list.
+
+7. Where does the name FIGlet come from?
+ "Frank, Ian and Glen's letters"
+
+
+= FAQ Maintainer ==========================================================
+Christiaan Keet keet@plig.net July 2005
+===========================================================================
diff --git a/externals/figlet/LICENSE b/externals/figlet/LICENSE
new file mode 100644
index 000000000..a841aeaa0
--- /dev/null
+++ b/externals/figlet/LICENSE
@@ -0,0 +1,30 @@
+Copyright (C) 1991, 1993, 1994 Glenn Chappell and Ian Chai
+Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001 John Cowan
+Copyright (C) 2002 Christiaan Keet
+Copyright (C) 2011 Claudio Matsuoka
+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 copyright holders nor the names of their
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
+TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
+USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/externals/figlet/Makefile b/externals/figlet/Makefile
new file mode 100644
index 000000000..e92bcaf58
--- /dev/null
+++ b/externals/figlet/Makefile
@@ -0,0 +1,122 @@
+# Makefile for figlet version 2.2.4 (26 Jan 2011)
+# adapted from Makefile for figlet version 2.2.2 (05 July 2005)
+# adapted from Makefile for figlet version 2.2 (15 Oct 1996)
+# Copyright 1993, 1994,1995 Glenn Chappell and Ian Chai
+# Copyright 1996, 1997, 1998, 1999, 2000, 2001 John Cowan
+# Copyright 2002 Christiaan Keet
+# Copyright 2011 Claudio Matsuoka
+
+# Please notice that to follow modern standards and ease third-party
+# package creation, binaries are now installed under BINDIR, and DESTDIR
+# is reserved for the installation pathname prefix.
+#
+# Please make sure BINDIR, MANDIR, DEFAULTFONTDIR and
+# DEFAULTFONTFILE are defined to reflect the situation
+# on your computer. See README for details.
+
+# Don't change this even if your shell is different. The only reason
+# for changing this is if sh is not in the same place.
+SHELL = /bin/sh
+
+# The C compiler and linker to use
+CC = gcc
+CFLAGS = -g -O2 -Wall -Wno-unused-value
+LD = gcc
+LDFLAGS =
+
+# Feature flags:
+# define TLF_FONTS to use TOIlet TLF fonts
+XCFLAGS = -DTLF_FONTS
+
+# Where to install files
+prefix = /usr/local
+
+# Where the executables should be put
+BINDIR = $(prefix)/bin
+
+# Where the man page should be put
+MANDIR = $(prefix)/man
+
+# Where figlet will search first for fonts (the ".flf" files).
+DEFAULTFONTDIR = $(prefix)/share/figlet
+# Use this definition if you can't put things in $(prefix)/share/figlet
+#DEFAULTFONTDIR = fonts
+
+# The filename of the font to be used if no other is specified,
+# without suffix.(standard is recommended, but any other can be
+# used). This font file should reside in the directory specified
+# by DEFAULTFONTDIR.
+DEFAULTFONTFILE = standard
+
+##
+## END OF CONFIGURATION SECTION
+##
+
+VERSION = 2.2.5
+DIST = figlet-$(VERSION)
+OBJS = figlet.o zipio.o crc.o inflate.o utf8.o
+BINS = figlet chkfont figlist showfigfonts
+MANUAL = figlet.6 chkfont.6 figlist.6 showfigfonts.6
+DFILES = Makefile Makefile.tc $(MANUAL) $(OBJS:.o=.c) chkfont.c getopt.c \
+ figlist showfigfonts CHANGES FAQ README LICENSE figfont.txt \
+ crc.h inflate.h zipio.h utf8.h run-tests.sh figmagic
+
+.c.o:
+ $(CC) -c $(CFLAGS) $(XCFLAGS) -DDEFAULTFONTDIR=\"$(DEFAULTFONTDIR)\" \
+ -DDEFAULTFONTFILE=\"$(DEFAULTFONTFILE)\" -o $*.o $<
+
+all: $(BINS)
+
+figlet: $(OBJS)
+ $(LD) $(LDFLAGS) -o $@ $(OBJS)
+
+chkfont: chkfont.o
+ $(LD) $(LDFLAGS) -o $@ chkfont.o
+
+clean:
+ rm -f *.o *~ core figlet chkfont
+
+install: all
+ mkdir -p $(DESTDIR)$(BINDIR)
+ mkdir -p $(DESTDIR)$(MANDIR)/man6
+ mkdir -p $(DESTDIR)$(DEFAULTFONTDIR)
+ cp $(BINS) $(DESTDIR)$(BINDIR)
+ cp $(MANUAL) $(DESTDIR)$(MANDIR)/man6
+ cp fonts/*.flf $(DESTDIR)$(DEFAULTFONTDIR)
+ cp fonts/*.flc $(DESTDIR)$(DEFAULTFONTDIR)
+
+dist:
+ rm -Rf $(DIST) $(DIST).tar.gz
+ mkdir $(DIST)/
+ cp $(DFILES) $(DIST)/
+ mkdir $(DIST)/fonts
+ cp fonts/*.fl[fc] $(DIST)/fonts
+ mkdir $(DIST)/tests
+ cp tests/*txt tests/emboss.tlf $(DIST)/tests
+ tar cvf - $(DIST) | gzip -9c > $(DIST).tar.gz
+ rm -Rf $(DIST)
+ tar xf $(DIST).tar.gz
+ (cd $(DIST); make all check vercheck)
+ @rm -Rf $(DIST)
+ @echo
+ @ls -l $(DIST).tar.gz
+
+check:
+ @echo "Run tests in `pwd`"
+ @./run-tests.sh fonts
+ @echo
+
+vercheck:
+ @printf "Infocode: "; ./figlet -I1
+ @./figlet -v|sed -n '/Version/s/.*\(Version\)/\1/p'
+ @printf "README: "; head -1 < README|sed 's/.*) //'
+ @printf "FAQ: "; grep latest FAQ|sed 's/ and can.*//'
+ @grep -h "^\.TH" *.6
+
+$(OBJS) chkfont.o getopt.o: Makefile
+chkfont.o: chkfont.c
+crc.o: crc.c crc.h
+figlet.o: figlet.c zipio.h
+getopt.o: getopt.c
+inflate.o: inflate.c inflate.h
+zipio.o: zipio.c zipio.h inflate.h crc.h
diff --git a/externals/figlet/Makefile.tc b/externals/figlet/Makefile.tc
new file mode 100644
index 000000000..435fc580c
--- /dev/null
+++ b/externals/figlet/Makefile.tc
@@ -0,0 +1,42 @@
+# Turbo C makefile for figlet
+# adapted from Makefile for figlet version 2.3.0 (11 Jan 2011)
+# adapted from Makefile for figlet version 2.2.2 (05 July 2005)
+# adapted from Makefile for figlet version 2.2 (15 Oct 1996)
+# Copyright 1993, 1994,1995 Glenn Chappell and Ian Chai
+# Copyright 1996, 1997, 1998, 1999, 2000, 2001 John Cowan
+# Copyright 2002 Christiaan Keet
+# Copyright 2011 Claudio Matsuoka
+
+# The C compiler and linker to use
+CC = tcc
+CFLAGS = -mc -I\tc\include
+LD = tcc
+LDFLAGS = -mc -L\tc\lib
+
+# Use this definition if you can't put things in /usr/local/share/figlet
+DEFAULTFONTDIR = fonts
+
+# The filename of the font to be used if no other is specified
+# (standard.flf is recommended, but any other can be used).
+# This font file should reside in the directory specified by
+# DEFAULTFONTDIR.
+DEFAULTFONTFILE = standard.flf
+
+##
+## END OF CONFIGURATION SECTION
+##
+
+OBJS = figlet.obj zipio.obj crc.obj inflate.obj getopt.obj
+BINS = figlet.exe chkfont.exe
+
+.c.obj:
+ $(CC) -c $(CFLAGS) -DDEFAULTFONTDIR="$(DEFAULTFONTDIR)" \
+ -DDEFAULTFONTFILE="$(DEFAULTFONTFILE)" -o$*.obj $<
+
+all: $(BINS)
+
+figlet.exe: $(OBJS)
+ $(LD) $(LDFLAGS) -o$@ $(OBJS)
+
+chkfont.exe: chkfont.obj
+ $(LD) $(LDFLAGS) -o$@ chkfont.obj
diff --git a/externals/figlet/README b/externals/figlet/README
new file mode 100644
index 000000000..f6f2c752d
--- /dev/null
+++ b/externals/figlet/README
@@ -0,0 +1,242 @@
+About FIGlet (Frank, Ian & Glenn's Letters) release 2.2.5, 31 May 2012
+--------------------------------------------------------------------------
+FIGlet is a program that creates large characters out of ordinary
+screen characters
+ _ _ _ _ _ _
+| (_) | _____ | |_| |__ (_)___
+| | | |/ / _ \ | __| '_ \| / __|
+| | | < __/ | |_| | | | \__ \_
+|_|_|_|\_\___| \__|_| |_|_|___(_)
+
+(This is meant to be viewed in a monospaced font.) FIGlet can create
+characters in many different styles and can kern and "smush" these
+characters together in various ways. FIGlet output is generally
+reminiscent of the sort of "signatures" many people like to put at the
+end of e-mail and UseNet messages.
+
+If you like FIGlet (hey, even if you *hate* FIGlet), please send an
+e-mail message to <info@figlet.org>
+
+The official FIGlet web page: http://www.figlet.org/
+
+Files -- Unix version
+---------------------
+
+README -- This file.
+figlet.c -- The FIGlet source code.
+zipio.h, -- A package for reading ZIP archives
+zipio.c,
+inflate.c,
+crc.c
+utf8.h, -- A package to convert strings between UTF-8 and UCS-4.
+utf8.c
+getopt.c -- Source for the standard "getopt" routine, in case you
+ don't have it in your C library. Not used by default.
+Makefile -- The FIGlet makefile. Used by the make command.
+figlet.6 -- The FIGlet man(ual) page.
+figlist -- Script that lists available fonts and control files.
+showfigfonts -- Script that gives a sample of each available font.
+chkfont.c -- Source code for chkfont: a program that checks FIGlet
+ fonts for formatting errors. You can ignore this file
+ unless you intend to design or edit fonts.
+figfont.txt -- Text file that explains the format of FIGlet fonts.
+ You can ignore this file unless you intend to design
+ or edit fonts.
+fonts -- Directory containing fonts and control files.
+<xxx>.flf -- All files ending in ".flf" are FIGlet font files.
+<xxx>.flc -- All files ending in ".flc" are FIGlet control files.
+
+Files -- DOS version
+--------------------
+
+README -- This file
+figlet.exe -- The FIGlet program.
+figlet.man -- The FIGlet man(ual) page.
+showall.bat -- Batch file that lists available fonts and samples of each.
+chkfont.exe -- A program that checks FIGlet fonts for formatting errors.
+ You can ignore this file unless you intend to design
+ or edit fonts.
+figfont.txt -- Text file that explains the format of FIGlet fonts.
+ You can ignore this file unless you intend to design
+ or edit fonts.
+fonts -- Directory containing fonts and control files.
+<xxx>.flf -- All files ending in ".flf" are FIGlet font files.
+<xxx>.flc -- All files ending in ".flc" are FIGlet control files.
+
+
+Installing FIGlet --- Unix version
+----------------------------------
+
+First decide in which directories FIGlet and the FIGlet font files
+(the ".flf" files) will be stored (we recommend "/usr/games" and
+"/usr/games/lib/figlet.dir", respectively) and which will be the
+default font (we recommend "standard.flf").
+
+Edit "Makefile", and set the variables DEFAULTFONTDIR and
+DEFAULTFONTFILE to the appropriate values. Set DEFAULTFONTDIR to be
+the full pathname of the directory in which you will keep the FIGlet
+font files. Set DEFAULTFONTFILE to be the filename of the default
+font.
+
+At this point, you have two choices:
+
+(1) Just compile FIGlet. To go this, go into the directory containing
+the FIGlet source, and type "make figlet". Then copy the various files
+to the proper locations. The executable (figlet), along with figlist
+and showfigfonts, goes wherever you keep your executables. The fonts
+(<xxx>.flf) and control files (<xxx>.flc) go in the default font
+directory. The man page (figlet.6) goes in section 6 (usually
+/usr/man/man6). If you cannot, or do not want to, install the man page,
+you can probably still read it using
+
+ nroff -man figlet.6 | more
+
+(2) Do a complete installation. To do the this, set the variables
+BINDIR and MANDIR in Makefile to the appropriate values. BINDIR
+should be the full pathname of the directory in which the executable
+files should be put (we recommend "/usr/games"); MANDIR should be the
+full pathname of the directory in which the figlet man page should be
+put, generally "/usr/man/man6". Once DEFAULTFONTDIR, DEFAULTFONTFILE,
+BINDIR and MANDIR have been set, in the directory containing the FIGlet
+source, type "make install".
+
+If space is a problem, the only files you absolutely must have to run
+figlet are "figlet" (the executable) and at least one font (preferably
+the one you chose to be the default font).
+
+Installing FIGlet -- DOS version
+--------------------------------
+
+Unpack the ZIPfile using PKUNZIP, Info-Zip UNZIP, WinUnzip, or any other
+ZIP-compatible program. Be sure to use the -d option with PKUNZIP
+in order to preserve the directory structure. We recommend that you
+unpack the archive into C:\FIGLET, but any directory will do.
+
+If you unpack the archive on top of an older version of FIGlet, be
+sure to delete the file FIGLET.COM. The executable program in this
+release is named FIGLET.EXE. You can keep your old fonts by putting
+them in a FONTS subdirectory before unpacking. (There are upgraded
+versions of the standard fonts in the archive.)
+
+Using FIGlet
+------------
+
+(Note: FIGlet needs a good thorough tutorial. Currently I don't have
+the time to write one, but if anyone wants to do so, go right ahead.
+I'd be glad to help out a little. Write us at <ianchai@usa.net> if
+you're interested. -GGC-)
+
+At the shell prompt, type "figlet". Then type, say, "Hello, world!"
+and press return. "Hello, world!" in nice, big, designer characters
+should appear on your screen. If you chose standard.flf to be the
+default font, you should see
+ _ _ _ _ _ _ _
+| | | | ___| | | ___ __ _____ _ __| | __| | |
+| |_| |/ _ \ | |/ _ \ \ \ /\ / / _ \| '__| |/ _` | |
+| _ | __/ | | (_) | \ V V / (_) | | | | (_| |_|
+|_| |_|\___|_|_|\___( ) \_/\_/ \___/|_| |_|\__,_(_)
+ |/
+Then type something else, or type an EOF (typically control-D) to quit
+FIGlet.
+
+Now you can send the output of figlet to a file (e.g., "figlet > file")
+and e-mail it to your friends (who will probably say, "Wow! It must
+have taken you hours to put that together!")
+
+To use other fonts, use the "-f" command line option. For example, if
+you had said "figlet -f smslant" above, you would have seen
+ __ __ ____ __ ____
+ / // /__ / / /__ _ _____ ____/ /__/ / /
+ / _ / -_) / / _ \_ | |/|/ / _ \/ __/ / _ /_/
+/_//_/\__/_/_/\___( ) |__,__/\___/_/ /_/\_,_(_)
+ |/
+
+Here are some other useful command line options:
+
+-c center -- centers the output of FIGlet.
+-k tells FIGlet to kern characters without smushing them together.
+-t terminal -- FIGlet asks your terminal how wide it is, and uses
+ this to determine when to break lines. Normally, FIGlet assumes
+ 80 columns so that people with wide terminals won't annoy the
+ people they e-mail FIGlet output to.
+-p paragraph mode -- eliminates some spurious line breaks when piping
+ a multi-line file through FIGlet.
+-v version -- prints information about your copy of FIGlet.
+
+For in-depth explanations of these and other options, see the man page.
+DOS users, see figlet.man.
+
+
+Other Fonts & Mailing List
+--------------------------
+
+A good number of FIGlet fonts have been developed, most of which are
+not included in the standard FIGlet package. Many of these can be
+obtained from http://www.figlet.org/ Some non-Roman fonts are
+available at this site. As of this writing, we have Hebrew, Cyrillic
+(Russian) and Greek.
+
+There are 3 mailing lists available for FIGlet:
+ figlet@figlet.org General discussion of FIGlet
+ figletfonts@figlet.org Announcements about fonts
+ figletsoftware@figlet.org Announcements about software
+ (The last two lists are moderated)
+
+To subscribe or unsubscribe from the FIGlet mailing lists, please visit
+the corresponding URL:
+ http://www.figlet.org/mailman/listinfo/figlet
+ http://www.figlet.org/mailman/listinfo/figletfonts
+ http://www.figlet.org/mailman/listinfo/figletsoftware
+
+Also, for those who maintain archives of figlet fonts, please note that
+all of the standard fonts have been changed, as of release 2.1, to
+include non-ASCII characters. These fonts are the following:
+
+big.flf (also contains Greek)
+banner.flf (also contains Cyrillic and Japanese katakana)
+block.flf
+bubble.flf
+digital.flf
+ivrit.flf (right-to-left, also contains Hebrew)
+lean.flf
+mini.flf
+script.flf
+shadow.flf
+slant.flf
+small.flf
+smscript.flf
+smshadow.flf
+smslant.dld
+standard.flf
+term.flf
+
+The new versions of these fonts can be identified by the words "figlet
+release 2.1" somewhere in the first few lines.
+
+
+Other Stuff
+-----------
+
+FIGlet is available for operating systems other than Unix.
+Please see ftp://ftp.figlet.org/program/
+
+Although you don't have to design your own fonts to use FIGlet, we'd
+certainly like it if lots of people did make up new FIGlet fonts. If
+you feel like giving it a try, see the "FONT FILE FORMAT" section of
+the man page. If you do design a font, please let us know by mailing us
+at <info@figlet.org>
+
+See "Other Things to Try" in the EXAMPLES section of the man page
+for... well... other things to try.
+
+
+Authors
+-------
+
+FIGlet was written mostly by Glenn Chappell <c486scm@semovm.semo.edu>. The
+author not being an e-mail fanatic, most correspondence (bug reports, rave
+reviews, etc.) used to be handled to his secretary (who is definitely
+an e-mail fanatic), Ian Chai <ianchai@usa.net> and has since moved on to
+another FIGlet enthusiast, Christiaan Keet <info@figlet.org>. Current
+maintenance is conducted by Claudio Matsuoka <cmatsuoka@gmail.com>.
+
diff --git a/externals/figlet/chkfont.6 b/externals/figlet/chkfont.6
new file mode 100644
index 000000000..681d6ad55
--- /dev/null
+++ b/externals/figlet/chkfont.6
@@ -0,0 +1,52 @@
+.\" chkfont
+.\" By Glenn Chappell <ggc@uiuc.edu>
+.\"
+.\" This program checks figlet 2.0/2.1 font files for format errors.
+.\" It also looks for signs of common problems and gives warnings.
+.\" chkfont does not modify font files.
+.\"
+.\" Usage: chkfont fontfile ...
+.\"
+.\" Note: This is very much a spare-time project. It's probably
+.\" full o' bugs.
+.\"
+.\" Manual page by Jonathon Abbott, for the Debian Project
+.\" slightly modified by Francesco Tapparo, for the Debian Project
+.TH CHKFONT 6 "31 May 2012" "v2.2.5"
+
+.SH NAME
+chkfont \- checks figlet 2.0 and up font files for format errors
+
+.SH SYNOPSIS
+.B chkfont
+[
+.I fontfile
+]
+
+.SH DESCRIPTION
+This program checks figlet 2.0 and up font files for format errors.
+It also looks for signs of common problems and gives warnings.
+chkfont does not modify font files.
+
+.SH EXAMPLES
+To use
+.B chkfont
+on the "big" font
+.RS
+
+.B example% chkfont /usr/share/figlet/big.flf
+
+.RE
+
+.SH BUGS
+Doesn't work on compressed font files.
+
+.SH AUTHORS
+chkfont was written by Glenn Chappell <ggc@uiuc.edu>
+
+This manual page was written by Jonathon Abbott for the Debian Project.
+
+.SH "SEE ALSO"
+.BR figlet (6),
+.BR showfigfonts (6),
+.BR figlist (6)
diff --git a/externals/figlet/chkfont.c b/externals/figlet/chkfont.c
new file mode 100644
index 000000000..63bf381b3
--- /dev/null
+++ b/externals/figlet/chkfont.c
@@ -0,0 +1,476 @@
+#include <stdio.h>
+#include <string.h>
+#include <ctype.h>
+#ifdef __STDC__
+#include <stdlib.h>
+#endif
+
+#define DATE "20 Feb 1996"
+#define VERSION "2.2"
+
+/*
+ chkfont
+ By Glenn Chappell <ggc@uiuc.edu>
+
+ This program checks figlet 2.0/2.1 font files for format errors.
+ It also looks for signs of common problems and gives warnings.
+ chkfont does not modify font files.
+
+ Usage: chkfont fontfile ...
+
+ Note: This is very much a spare-time project. It's probably
+ full o' bugs ....
+*/
+
+/* #define CHECKBLANKS */
+#define FONTFILESUFFIX ".flf"
+#define FONTFILEMAGICNUMBER "flf2"
+char posshardblanks[9] = { '!', '@', '#', '$', '%', '&', '*', 0x7f, 0 };
+
+char *myname,*fontfilename;
+FILE *fontfile;
+char hardblank;
+int charheight,upheight,maxlen=0,old_layout;
+int spectagcnt;
+char *fileline;
+int maxlinelength=0,currline;
+int ec,wc;
+
+int incon_endmarkwarn,endmark_countwarn,nonincrwarn;
+int bigcodetagwarn,deutschcodetagwarn,asciicodetagwarn;
+int codetagcnt;
+int gone;
+
+void weregone(really)
+int really;
+{
+if (!really && 2*ec+wc<=40) {
+ return;
+ }
+if (ec+wc>0) printf("*******************************************************************************\n");
+if (!really) {
+ printf("%s: Too many errors/warnings.\n",fontfilename);
+ }
+printf("%s: Errors: %d, Warnings: %d\n",fontfilename,ec,wc);
+if (currline>1 && maxlen!=maxlinelength) {
+ printf("%s: maxlen: %d, actual max line length: %d\n",
+ fontfilename,maxlen,maxlinelength);
+ if (codetagcnt>0 && spectagcnt==-1) {
+ printf("%s: Code-tagged characters: %d\n",fontfilename,codetagcnt);
+ }
+ }
+printf("-------------------------------------------------------------------------------\n");
+gone=1;
+}
+
+char *my_alloc(size)
+int size;
+{
+char *ptr;
+
+ptr=(char *)malloc(size);
+if (ptr==NULL) {
+ fprintf(stderr,"%s: Out of memory\n",myname);
+ exit(1);
+ }
+return(ptr);
+}
+
+int badsuffix(path,suffix)
+char *path;
+char *suffix;
+{
+ char ucsuffix[10];
+ char *s;
+
+ strcpy(ucsuffix,suffix);
+ for (s = ucsuffix; *s; s++) {
+ *s = toupper(*s);
+ }
+
+ if (strlen(path)<strlen(suffix)) return 1;
+ s = path + strlen(path) - strlen(suffix);
+ if (strcmp(s,suffix) == 0) return 0;
+ if (strcmp(s,ucsuffix) == 0) return 0;
+ return 1;
+}
+
+void usageerr()
+{
+fprintf(stderr,"chkfont by Glenn Chappell <ggc@uiuc.edu>\n");
+fprintf(stderr,"Version: %s, date: %s\n",VERSION,DATE);
+fprintf(stderr,"Checks figlet 2.0/2.1 font files for format errors.\n");
+fprintf(stderr,"(Does not modify font files.)\n");
+fprintf(stderr,"Usage: %s fontfile ...\n",myname);
+exit(1);
+}
+
+void readchar()
+{
+int i,expected_width,k,len,newlen,diff,l;
+char endmark,expected_endmark;
+int leadblanks,minleadblanks,trailblanks,mintrailblanks;
+char *ret;
+
+expected_width = expected_endmark = 0; /* prevent compiler warning */
+for (i=0;i<charheight;i++) {
+ ret = fgets(fileline,maxlen+1000,fontfile);
+ if (ret == NULL) {
+ printf("%s: ERROR (fatal)- Unexpected read error after line %d.\n",
+ fontfilename,currline);
+ ec++;
+ weregone(1); if (gone) return;
+ }
+ if (feof(fontfile)) {
+ printf("%s: ERROR (fatal)- Unexpected end of file after line %d.\n",
+ fontfilename,currline);
+ ec++;
+ weregone(1); if (gone) return;
+ }
+ currline++;
+ len=strlen(fileline)-1;
+ if (len>maxlinelength) {
+ maxlinelength=len;
+ }
+ if (len>maxlen) {
+ printf("%s: ERROR- Line length > maxlen in line %d.\n",
+ fontfilename,currline);
+ ec++;
+ weregone(0); if (gone) return;
+ }
+ k=len;
+ endmark=k<0?'\0':(k==0||fileline[k]!='\n')?fileline[k]:fileline[k-1];
+ for(;k>=0?(fileline[k]=='\n' || fileline[k]==endmark):0;k--) {
+ fileline[k]='\0';
+ }
+ newlen=strlen(fileline);
+ for (l=0;l<newlen ? fileline[l]==' ' : 0;l++) ;
+ leadblanks = l;
+ for (l=newlen-1;l>=0 ? fileline[l]==' ' : 0;l--) ;
+ trailblanks = newlen-1-l;
+ if (i==0) {
+ expected_endmark = endmark;
+ expected_width = newlen;
+ minleadblanks = leadblanks;
+ mintrailblanks = trailblanks;
+ if (endmark==' ') {
+ printf("%s: Warning- Blank endmark in line %d.\n",
+ fontfilename,currline);
+ wc++;
+ weregone(0); if (gone) return;
+ }
+ }
+ else {
+ if (leadblanks<minleadblanks) minleadblanks = leadblanks;
+ if (trailblanks<mintrailblanks) mintrailblanks = trailblanks;
+ if (endmark!=expected_endmark && !incon_endmarkwarn) {
+ printf("%s: Warning- Inconsistent endmark in line %d.\n",
+ fontfilename,currline);
+ printf("%s: (Above warning will only be printed once.)\n",
+ fontfilename);
+ incon_endmarkwarn = 1;
+ wc++;
+ weregone(0); if (gone) return;
+ }
+ if (newlen!=expected_width) {
+ printf("%s: ERROR- Inconsistent character width in line %d.\n",
+ fontfilename,currline);
+ ec++;
+ weregone(0); if (gone) return;
+ }
+ }
+ diff=len-newlen;
+ if (diff>2) {
+ printf("%s: ERROR- Too many endmarks in line %d.\n",
+ fontfilename,currline);
+ ec++;
+ weregone(0); if (gone) return;
+ }
+ else if (charheight>1 && (diff!=(i==charheight-1)+1)) {
+ if (!endmark_countwarn) {
+ printf("%s: Warning- Endchar count convention violated in line %d.\n",
+ fontfilename,currline);
+ printf("%s: (Above warning will only be printed once.)\n",
+ fontfilename);
+ endmark_countwarn = 1;
+ wc++;
+ weregone(0); if (gone) return;
+ }
+ }
+ }
+#ifdef CHECKBLANKS
+if (minleadblanks+mintrailblanks>0 && old_layout>=0) {
+ printf("%s: Warning- Leading/trailing blanks in char. ending at line %d.\n",
+ fontfilename,currline);
+ printf("%s: (Above warning only given when old_layout > -1.)\n",
+ fontfilename);
+ wc++;
+ weregone(0); if (gone) return;
+ }
+#endif /* #ifdef CHECKBLANKS */
+}
+
+
+void checkit()
+{
+int i,k,cmtcount,numsread,ffrighttoleft,have_layout,layout;
+char magicnum[5],cha;
+long oldord,theord;
+int tmpcnt,len;
+
+ec=0;wc=0;
+incon_endmarkwarn=0; endmark_countwarn=0; nonincrwarn=0;
+bigcodetagwarn=0; deutschcodetagwarn=0;
+asciicodetagwarn=0;
+codetagcnt=0;
+gone=0;
+if (!strcmp(fontfilename,"-")) {
+ fontfilename="(stdin)";
+ fontfile=stdin;
+ }
+else {
+ fontfile=fopen(fontfilename,"r");
+ if (fontfile == NULL) {
+ fprintf(stderr,"%s: Could not open file '%s'\n",myname,fontfilename);
+ exit(1);
+ }
+ }
+
+if (fontfile!=stdin) {
+ if (badsuffix(fontfilename,FONTFILESUFFIX)) {
+ printf("%s: ERROR- Filename does not end with '%s'.\n",
+ fontfilename,FONTFILESUFFIX);
+ ec++;
+ weregone(0); if (gone) return;
+ }
+ }
+numsread=fscanf(fontfile,"%4s",magicnum);
+if (numsread == EOF) {
+ printf("%s: ERROR- can't read magic number.\n",fontfilename);
+ ec++;
+ weregone(0); if (gone) return;
+ }
+if (strcmp(magicnum,FONTFILEMAGICNUMBER)) {
+ printf("%s: ERROR- Incorrect magic number.\n",fontfilename);
+ ec++;
+ weregone(0); if (gone) return;
+ }
+cha=getc(fontfile);
+if (cha!='a') {
+ printf("%s: Warning- Sub-version character is not 'a'.\n",fontfilename);
+ wc++;
+ weregone(0); if (gone) return;
+ }
+fileline=(char*)my_alloc(sizeof(char)*(1001));
+if (fgets(fileline,1001,fontfile)==NULL) {
+ fileline[0] = '\0';
+ }
+if (strlen(fileline)>0 ? fileline[strlen(fileline)-1]!='\n' : 0) {
+ while(k=getc(fontfile),k!='\n'&&k!=EOF) ; /* Advance to end of line */
+ }
+numsread=sscanf(fileline,"%c %d %d %d %d %d %d %d %d",
+ &hardblank,&charheight,&upheight,&maxlen,&old_layout,&cmtcount,
+ &ffrighttoleft,&layout,&spectagcnt);
+free(fileline);
+fileline = NULL;
+if (numsread<7) {
+ ffrighttoleft=0;
+ }
+if (numsread<9) {
+ spectagcnt=-1;
+ }
+have_layout = (numsread>=8);
+if (6>numsread) {
+ printf("%s: ERROR (fatal)- First line improperly formatted.\n",fontfilename);
+ ec++;
+ weregone(1); if (gone) return;
+ }
+if (!strchr(posshardblanks,hardblank)) {
+ printf("%s: Warning- Unusual hardblank.\n",fontfilename);
+ wc++;
+ weregone(0); if (gone) return;
+ }
+if (charheight<1) {
+ printf("%s: ERROR (fatal)- charheight not positive.\n",fontfilename);
+ ec++;
+ weregone(1); if (gone) return;
+ }
+if (upheight>charheight || upheight<1) {
+ printf("%s: ERROR- up_height out of bounds.\n",fontfilename);
+ ec++;
+ weregone(0); if (gone) return;
+ }
+if (maxlen<1) {
+ printf("%s: ERROR (fatal)- maxlen not positive.\n",fontfilename);
+ ec++;
+ weregone(1); if (gone) return;
+ }
+if (old_layout<-1) {
+ printf("%s: ERROR- old_layout < -1.\n",fontfilename);
+ ec++;
+ weregone(0); if (gone) return;
+ }
+if (old_layout>63) {
+ printf("%s: ERROR- old_layout > 63.\n",fontfilename);
+ ec++;
+ weregone(0); if (gone) return;
+ }
+if (have_layout && layout<0) {
+ printf("%s: ERROR- layout < 0.\n", fontfilename);
+ ec++;
+ weregone(0); if (gone) return;
+ }
+if (have_layout &&layout>32767) {
+ printf("%s: ERROR- layout > 32767.\n", fontfilename);
+ ec++;
+ weregone(0); if (gone) return;
+ }
+if (have_layout && old_layout == -1 && (layout & 192)) {
+ printf("%s: ERROR- layout %d is inconsistent with old_layout -1.\n",
+ fontfilename,layout);
+ ec++;
+ weregone(0); if (gone) return;
+ }
+if (have_layout && old_layout == 0 && (layout & 192) != 64 &&
+ (layout & 255) != 128) {
+ printf("%s: ERROR- layout %d is inconsistent with old_layout 0.\n",
+ fontfilename,layout);
+ ec++;
+ weregone(0); if (gone) return;
+ }
+if (have_layout && old_layout > 0 &&
+ (!(layout & 128) || old_layout != (layout & 63))) {
+ printf("%s: ERROR- layout %d is inconsistent with old_layout %d.\n",
+ fontfilename,layout,old_layout);
+ ec++;
+ weregone(0); if (gone) return;
+ }
+if (cmtcount<0) {
+ printf("%s: ERROR- cmt_count is negative.\n",fontfilename);
+ ec++;
+ weregone(0); if (gone) return;
+ }
+if (ffrighttoleft<0 || ffrighttoleft>1) {
+ printf("%s: ERROR- rtol out of bounds.\n",fontfilename);
+ ec++;
+ weregone(0); if (gone) return;
+ }
+
+for (i=1;i<=cmtcount;i++) {
+ while(k=getc(fontfile),k!='\n'&&k!=EOF) ; /* Advance to end of line */
+ }
+
+maxlinelength = 0;
+currline=cmtcount+1;
+fileline=(char*)my_alloc(sizeof(char)*(maxlen+1001));
+for (i=0;i<102;i++) {
+ readchar();
+ if (gone) return;
+ }
+
+oldord=0;
+while(fgets(fileline,maxlen+1000,fontfile)!=NULL) {
+ currline++;
+ len=strlen(fileline)-1;
+ if (len-100>maxlinelength) {
+ maxlinelength=len-100;
+ }
+ if (len>maxlen+100) {
+ printf("%s: ERROR- Code tag line way too long in line %d.\n",
+ fontfilename,currline);
+ ec++;
+ weregone(0); if (gone) return;
+ }
+ tmpcnt=sscanf(fileline,"%li",&theord);
+ if (tmpcnt<1) {
+ printf("%s: Warning- Extra chars after font in line %d.\n",
+ fontfilename,currline);
+ wc++;
+ weregone(0); if (gone) return;
+ break;
+ }
+ codetagcnt++;
+ if (theord>65535 && !bigcodetagwarn) {
+ printf("%s: Warning- Code tag > 65535 in line %d.\n",
+ fontfilename,currline);
+ printf("%s: (Above warning will only be printed once.)\n",
+ fontfilename);
+ bigcodetagwarn = 1;
+ wc++;
+ weregone(0); if (gone) return;
+ }
+ if (theord==-1) {
+ printf("%s: ERROR- Code tag -1 (unusable) in line %d.\n",
+ fontfilename,currline);
+ ec++;
+ weregone(0); if (gone) return;
+ break;
+ }
+ if (theord>=-255 && theord<=-249 &&!deutschcodetagwarn) {
+ printf("%s: Warning- Code tag in old Deutsch area in line %d.\n",
+ fontfilename,currline);
+ printf("%s: (Above warning will only be printed once.)\n",
+ fontfilename);
+ deutschcodetagwarn = 1;
+ wc++;
+ weregone(0); if (gone) return;
+ }
+ if (theord<127 && theord>31 && !asciicodetagwarn) {
+ printf("%s: Warning- Code tag in ASCII range in line %d.\n",
+ fontfilename,currline);
+ printf("%s: (Above warning will only be printed once.)\n",
+ fontfilename);
+ asciicodetagwarn = 1;
+ wc++;
+ weregone(0); if (gone) return;
+ }
+ else if (theord<=oldord && theord>=0 && oldord>=0 && !nonincrwarn) {
+ printf("%s: Warning- Non-increasing code tag in line %d.\n",
+ fontfilename,currline);
+ printf("%s: (Above warning will only be printed once.)\n",
+ fontfilename);
+ nonincrwarn = 1;
+ wc++;
+ weregone(0); if (gone) return;
+ }
+ oldord=theord;
+ readchar();
+ if (gone) return;
+ }
+
+if (spectagcnt!=-1 && spectagcnt!=codetagcnt) {
+ printf("%s: ERROR- Inconsistent Codetag_Cnt value %d\n",
+ fontfilename, spectagcnt);
+ ec++;
+ weregone(0); if (gone) return;
+ }
+
+if (fontfile!=stdin) fclose(fontfile);
+
+weregone(1); if (gone) return;
+}
+
+
+int main(argc,argv)
+int argc;
+char *argv[];
+{
+int arg;
+
+if ((myname=strrchr(argv[0],'/'))!=NULL) {
+ myname++;
+ }
+else {
+ myname = argv[0];
+ }
+if (argc<2) {
+ usageerr();
+ }
+for (arg=1;arg<argc;arg++) {
+ fontfilename=argv[arg];
+ fileline=NULL;
+ checkit();
+ if (fileline!=NULL) free(fileline);
+ }
+return 0;
+}
diff --git a/externals/figlet/crc.c b/externals/figlet/crc.c
new file mode 100644
index 000000000..b1491fc21
--- /dev/null
+++ b/externals/figlet/crc.c
@@ -0,0 +1,129 @@
+/*
+ * crc.c - CRC calculation routine
+ *
+ * Version 1.0.1
+ */
+
+/*
+ * Copyright (C) 1995, Edward B. Hamrick
+ *
+ * Permission to use, copy, modify, and distribute this software and
+ * its documentation for any purpose and without fee is hereby granted,
+ * provided that the above copyright notice appear in all copies and
+ * that both that copyright notice and this permission notice appear in
+ * supporting documentation, and that the name of the copyright holders
+ * not be used in advertising or publicity pertaining to distribution of
+ * the software without specific, written prior permission. The copyright
+ * holders makes no representations about the suitability of this software
+ * for any purpose. It is provided "as is" without express or implied warranty.
+ *
+ * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS
+ * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS,
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT
+ * OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF
+ * USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
+ * OF THIS SOFTWARE.
+ */
+
+/*
+ * Changes from 1.0 to 1.0.1:
+ * Relicensed under the MIT license, with consent of the copyright holders.
+ * Claudio Matsuoka (Jan 11 2011)
+ */
+
+#include "crc.h"
+
+/* This is a pre-computed table to make crc computations efficient */
+static unsigned long crctable[] = {
+ 0x00000000L, 0x77073096L, 0xee0e612cL, 0x990951baL,
+ 0x076dc419L, 0x706af48fL, 0xe963a535L, 0x9e6495a3L,
+ 0x0edb8832L, 0x79dcb8a4L, 0xe0d5e91eL, 0x97d2d988L,
+ 0x09b64c2bL, 0x7eb17cbdL, 0xe7b82d07L, 0x90bf1d91L,
+ 0x1db71064L, 0x6ab020f2L, 0xf3b97148L, 0x84be41deL,
+ 0x1adad47dL, 0x6ddde4ebL, 0xf4d4b551L, 0x83d385c7L,
+ 0x136c9856L, 0x646ba8c0L, 0xfd62f97aL, 0x8a65c9ecL,
+ 0x14015c4fL, 0x63066cd9L, 0xfa0f3d63L, 0x8d080df5L,
+ 0x3b6e20c8L, 0x4c69105eL, 0xd56041e4L, 0xa2677172L,
+ 0x3c03e4d1L, 0x4b04d447L, 0xd20d85fdL, 0xa50ab56bL,
+ 0x35b5a8faL, 0x42b2986cL, 0xdbbbc9d6L, 0xacbcf940L,
+ 0x32d86ce3L, 0x45df5c75L, 0xdcd60dcfL, 0xabd13d59L,
+ 0x26d930acL, 0x51de003aL, 0xc8d75180L, 0xbfd06116L,
+ 0x21b4f4b5L, 0x56b3c423L, 0xcfba9599L, 0xb8bda50fL,
+ 0x2802b89eL, 0x5f058808L, 0xc60cd9b2L, 0xb10be924L,
+ 0x2f6f7c87L, 0x58684c11L, 0xc1611dabL, 0xb6662d3dL,
+ 0x76dc4190L, 0x01db7106L, 0x98d220bcL, 0xefd5102aL,
+ 0x71b18589L, 0x06b6b51fL, 0x9fbfe4a5L, 0xe8b8d433L,
+ 0x7807c9a2L, 0x0f00f934L, 0x9609a88eL, 0xe10e9818L,
+ 0x7f6a0dbbL, 0x086d3d2dL, 0x91646c97L, 0xe6635c01L,
+ 0x6b6b51f4L, 0x1c6c6162L, 0x856530d8L, 0xf262004eL,
+ 0x6c0695edL, 0x1b01a57bL, 0x8208f4c1L, 0xf50fc457L,
+ 0x65b0d9c6L, 0x12b7e950L, 0x8bbeb8eaL, 0xfcb9887cL,
+ 0x62dd1ddfL, 0x15da2d49L, 0x8cd37cf3L, 0xfbd44c65L,
+ 0x4db26158L, 0x3ab551ceL, 0xa3bc0074L, 0xd4bb30e2L,
+ 0x4adfa541L, 0x3dd895d7L, 0xa4d1c46dL, 0xd3d6f4fbL,
+ 0x4369e96aL, 0x346ed9fcL, 0xad678846L, 0xda60b8d0L,
+ 0x44042d73L, 0x33031de5L, 0xaa0a4c5fL, 0xdd0d7cc9L,
+ 0x5005713cL, 0x270241aaL, 0xbe0b1010L, 0xc90c2086L,
+ 0x5768b525L, 0x206f85b3L, 0xb966d409L, 0xce61e49fL,
+ 0x5edef90eL, 0x29d9c998L, 0xb0d09822L, 0xc7d7a8b4L,
+ 0x59b33d17L, 0x2eb40d81L, 0xb7bd5c3bL, 0xc0ba6cadL,
+ 0xedb88320L, 0x9abfb3b6L, 0x03b6e20cL, 0x74b1d29aL,
+ 0xead54739L, 0x9dd277afL, 0x04db2615L, 0x73dc1683L,
+ 0xe3630b12L, 0x94643b84L, 0x0d6d6a3eL, 0x7a6a5aa8L,
+ 0xe40ecf0bL, 0x9309ff9dL, 0x0a00ae27L, 0x7d079eb1L,
+ 0xf00f9344L, 0x8708a3d2L, 0x1e01f268L, 0x6906c2feL,
+ 0xf762575dL, 0x806567cbL, 0x196c3671L, 0x6e6b06e7L,
+ 0xfed41b76L, 0x89d32be0L, 0x10da7a5aL, 0x67dd4accL,
+ 0xf9b9df6fL, 0x8ebeeff9L, 0x17b7be43L, 0x60b08ed5L,
+ 0xd6d6a3e8L, 0xa1d1937eL, 0x38d8c2c4L, 0x4fdff252L,
+ 0xd1bb67f1L, 0xa6bc5767L, 0x3fb506ddL, 0x48b2364bL,
+ 0xd80d2bdaL, 0xaf0a1b4cL, 0x36034af6L, 0x41047a60L,
+ 0xdf60efc3L, 0xa867df55L, 0x316e8eefL, 0x4669be79L,
+ 0xcb61b38cL, 0xbc66831aL, 0x256fd2a0L, 0x5268e236L,
+ 0xcc0c7795L, 0xbb0b4703L, 0x220216b9L, 0x5505262fL,
+ 0xc5ba3bbeL, 0xb2bd0b28L, 0x2bb45a92L, 0x5cb36a04L,
+ 0xc2d7ffa7L, 0xb5d0cf31L, 0x2cd99e8bL, 0x5bdeae1dL,
+ 0x9b64c2b0L, 0xec63f226L, 0x756aa39cL, 0x026d930aL,
+ 0x9c0906a9L, 0xeb0e363fL, 0x72076785L, 0x05005713L,
+ 0x95bf4a82L, 0xe2b87a14L, 0x7bb12baeL, 0x0cb61b38L,
+ 0x92d28e9bL, 0xe5d5be0dL, 0x7cdcefb7L, 0x0bdbdf21L,
+ 0x86d3d2d4L, 0xf1d4e242L, 0x68ddb3f8L, 0x1fda836eL,
+ 0x81be16cdL, 0xf6b9265bL, 0x6fb077e1L, 0x18b74777L,
+ 0x88085ae6L, 0xff0f6a70L, 0x66063bcaL, 0x11010b5cL,
+ 0x8f659effL, 0xf862ae69L, 0x616bffd3L, 0x166ccf45L,
+ 0xa00ae278L, 0xd70dd2eeL, 0x4e048354L, 0x3903b3c2L,
+ 0xa7672661L, 0xd06016f7L, 0x4969474dL, 0x3e6e77dbL,
+ 0xaed16a4aL, 0xd9d65adcL, 0x40df0b66L, 0x37d83bf0L,
+ 0xa9bcae53L, 0xdebb9ec5L, 0x47b2cf7fL, 0x30b5ffe9L,
+ 0xbdbdf21cL, 0xcabac28aL, 0x53b39330L, 0x24b4a3a6L,
+ 0xbad03605L, 0xcdd70693L, 0x54de5729L, 0x23d967bfL,
+ 0xb3667a2eL, 0xc4614ab8L, 0x5d681b02L, 0x2a6f2b94L,
+ 0xb40bbe37L, 0xc30c8ea1L, 0x5a05df1bL, 0x2d02ef8dL
+};
+
+/*
+ * This CRC algorithm is the same as that used in zip. Normally it
+ * should be initialized with 0xffffffff, and the final CRC stored
+ * should be crc ^ 0xffffffff.
+ *
+ * It implements the polynomial:
+ *
+ * x^32+x^26+x^23+x^22+x^16+x^12+x^11+x^10+x^8+x^7+x^5+x^4+x^2+x+1
+ */
+
+unsigned long CrcUpdate( /* returns updated crc */
+ unsigned long crc, /* starting crc */
+ unsigned char *buffer, /* buffer to use to update crc */
+ long length /* length of buffer */
+)
+{
+ long i;
+
+ for (i=0; i<length; i++)
+ {
+ crc = crctable[buffer[i] ^ ((unsigned char) crc)] ^ (crc >> 8);
+ }
+
+ return crc;
+}
diff --git a/externals/figlet/crc.h b/externals/figlet/crc.h
new file mode 100644
index 000000000..bd7c5361f
--- /dev/null
+++ b/externals/figlet/crc.h
@@ -0,0 +1,62 @@
+/*
+ * crc.h - CRC calculation routine
+ *
+ * Version 1.0.1
+ */
+
+/*
+ * Copyright (C) 1995, Edward B. Hamrick
+ *
+ * Permission to use, copy, modify, and distribute this software and
+ * its documentation for any purpose and without fee is hereby granted,
+ * provided that the above copyright notice appear in all copies and
+ * that both that copyright notice and this permission notice appear in
+ * supporting documentation, and that the name of the copyright holders
+ * not be used in advertising or publicity pertaining to distribution of
+ * the software without specific, written prior permission. The copyright
+ * holders makes no representations about the suitability of this software
+ * for any purpose. It is provided "as is" without express or implied warranty.
+ *
+ * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS
+ * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS,
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT
+ * OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF
+ * USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
+ * OF THIS SOFTWARE.
+ */
+
+/*
+ * Changes from 1.0 to 1.0.1:
+ * Relicensed under the MIT license, with consent of the copyright holders.
+ * Claudio Matsuoka (Jan 11 2011)
+ */
+
+/*
+ * This CRC algorithm is the same as that used in zip. Normally it
+ * should be initialized with 0xffffffff, and the final CRC stored
+ * should be crc ^ 0xffffffff.
+ *
+ * It implements the polynomial:
+ *
+ * x^32+x^26+x^23+x^22+x^16+x^12+x^11+x^10+x^8+x^7+x^5+x^4+x^2+x+1
+ */
+
+#ifndef __CRC_H
+#define __CRC_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+unsigned long CrcUpdate( /* returns updated crc */
+ unsigned long crc, /* starting crc */
+ unsigned char *buffer, /* buffer to use to update crc */
+ long length /* length of buffer */
+);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/externals/figlet/figfont.txt b/externals/figlet/figfont.txt
new file mode 100644
index 000000000..8cbe6ea7b
--- /dev/null
+++ b/externals/figlet/figfont.txt
@@ -0,0 +1,1695 @@
+ _____ ___ ____ __ _
+ | ___||_ _|/ ___| / _| ___ _ __ | |_ ___ _
+ | |_ | || | _ | |_ / _ \ | '_ \ | __|/ __|(_)
+ | _| | || |_| || _|| (_) || | | || |_ \__ \ _
+ |_| |___|\____||_| \___/ |_| |_| \__||___/(_)
+
+ The FIGfont Version 2 FIGfont and FIGdriver Standard
+ === ======= ======= = ======= === ========= ========
+ Draft 2.0 Copyright 1996, 1997
+ by John Cowan and Paul Burton
+ Portions Copyright 1991, 1993, 1994
+ by Glenn Chappell and Ian Chai
+ May be freely copied and distributed.
+
+ Figlet lives at: http://www.figlet.org/
+
+ _____ __ __
+ / ___/__ ___ / /____ ___ / /____
+/ /__/ _ \/ _ \/ __/ -_) _ \/ __(_-<
+\___/\___/_//_/\__/\__/_//_/\__/___/
+
+ INTRODUCTION
+ BASIC DEFINITIONS AND CONCEPTS
+ "FIGfont"
+ "FIGcharacters" and "Sub-characters"
+ "FIGdriver"
+ "FIGure"
+ "FIG"
+ "Layout Modes"
+ "Smushing Rules"
+ "Hardblanks"
+ CREATING FIGFONTS
+ The Header Line
+ Interpretation of Layout Parameters
+ Setting Layout Parameters Step-by-Step
+ FIGfont Comments
+ FIGcharacter Data
+ - Basic Data Structure
+ - Character Codes
+ - Required FIGcharacters
+ - Code Tagged FIGcharacters
+ NOTES - AVOIDING ERRORS AND GENERAL ADVICE
+ CONTROL FILES
+ Standard Format
+ Extended Commands
+ STANDARDIZED CAPABILITIES OF CURRENT AND FUTURE FIGDRIVERS
+ CHART OF CAPABILITIES OF FIGLET 2.2.2 AND FIGWIN 1.0
+
+
+INTRODUCTION
+============
+
+This document specifies the format of font files, and the associated control
+files, used by the FIGlet and FIGWin programs (FIGdrivers). It is written
+for designers who wish to build fonts (FIGfonts) usable by either program,
+and also serves as a standard for development of future versions or similar
+FIGdrivers. Some features explained here are not supported by both programs.
+See separate documentation to learn how to use FIGlet or FIGWin.
+
+NOTE: FIGWin 1.0 is packaged with a program called FIGfont Editor for Windows
+1.0, which is just that. It does not require a complete understanding of
+this document to create FIGfonts. However it is a good idea to become
+familiar with the "BASIC DEFINITIONS AND CONCEPTS" information before using
+it.
+
+If you design a FIGfont, please send an e-mail announcement to
+<figletfonts@figlet.org>, the FIGlet fonts mailing list, and email a copy
+to info@figlet.org for us to put it on the ftp site (ftp://ftp.figlet.org/)
+
+BASIC DEFINITIONS AND CONCEPTS
+===== =========== === ========
+
+"FIGfont"
+
+A FIGfont is a file which represents the graphical arrangement of characters
+representing larger characters. Since a FIGfont file is a text file, it can
+be created with any text editing program on any platform. The filename of a
+FIGfont file must end with ".flf", which stands for "<F>IG<L>ettering
+<F>ont".
+
+
+"FIGcharacters" and "Sub-characters"
+
+Because FIGfonts describe large characters which consist of smaller
+characters, confusion can result when descussing one or the other.
+Therefore, the terms "FIGcharacter" and "sub-character" are used,
+respectively.
+
+
+"FIGdriver"
+
+The term FIGdriver is used in this document to encompass FIGlet, FIGWin, and
+any future programs which use FIGfonts.
+
+
+"FIGure"
+
+A FIGure (thusly capitalized) is an image created by a FIGdriver.
+
+
+"FIG"
+
+A bit of history:
+
+In Spring 1991, inspired by the Email signature of a friend named Frank, and
+goaded on by Ian Chai, Glenn Chappell wrote a nifty little 170-line "C"
+program called "newban", which would create large letters out of ordinary
+text characters. At the time, it was only compiled for UNIX. In hindsight,
+we now call it "FIGlet 1.0". FIGlet stands for <F>rank, <I>an, and <G>lenn's
+<let>ters. In various incarnations, newban circulated around the net for a
+couple of years. It had one font, which included only lowercase letters.
+
+In early 1993, Ian decided newban was due for a few changes, so together Ian
+and Glenn added the full ASCII character set, to start with. First, though,
+Ian had to find a copy of the source, since Glenn had tossed it away as not
+worth the disk space. Ian and Glenn discussed what could be done with it,
+decided on a general re-write, and, 7 months later, ended up with 888 lines
+of code, 13 FIGfonts and documentation. This was FIGlet 2.0, the first real
+release.
+
+To their great surprise, FIGlet took the net by storm. They received floods
+of "FIGlet is great!" messages and a new contributed FIGfont about once a
+week. To handle all the traffic, Ian quickly set up a mailing list, Daniel
+Simmons kindly offered space for an FTP site, several people volunteered to
+port FIGlet to non-Unix operating systems, ...and bug reports poured in.
+
+Because of these, and the need to make FIGlet more "international", Ian and
+Glenn released a new version of FIGlet which could handle non-ASCII character
+sets and right-to-left printing. This was FIGlet 2.1, which, in a couple of
+weeks, became figlet 2.1.1. This weighed in at 1314 lines, and there were
+over 60 FIGfonts.
+
+By late 1996, FIGlet had quite a following of fans subscribing to its mailing
+list. It had been ported to MS-DOS, Macintosh, Amiga, Apple II GS, Atari ST,
+Acorn and OS/2. FIGlet had been further updated, and there were nearly 200
+FIGfonts.
+
+John Cowan and Paul Burton are two FIGlet fans who decided to create new
+versions. While John wrote FIGlet version 2.2 using C, Paul wrote FIGWin
+1.0, the first true GUI (Windows) implementation of FIGlet, using Visual
+Basic. John and Paul worked together to add new features to FIGfont files
+which could be read by both programs, and together wrote this document, which
+we hope helps to establish consistency in FIGfonts and help with the creation
+of future FIGdrivers. FIGlet 2.2 has about 4800 lines of code, of which
+over half is a support library for reading compressed files.
+
+Three years later, in July 2005, FIGlet 2.2.2 was released under a new License
+(the ``Academic Free License 2.1''). This version has proved to be very
+stable, and persisted for more five years until minor bugfixes and another
+license change resulted in the release of FIGlet 2.2.3 in January 2011. All
+license concerns involving contributed code were solved and FIGlet is now
+distributed under the ``New BSD License''. Contributed fonts amounted to more
+than 400.
+
+FIGlet 2.2 and FIGWin 1.0 both allow greater flexibility by use of new
+information which can be contained in FIGfont files without interfering with
+the function of older FIGdrivers.
+
+NOTE: The Macintosh version of FIGlet is still command-line driven as of this
+writing, and a GUI version is very much in demand. The FIGlet C code is
+written to be easily plugged in to a GUI shell, so it will be a relatively
+easy task for a Macintosh developer.
+
+
+
+
+"Layout Modes"
+
+A FIGdriver may arrange FIGcharacters using one of three "layout modes",
+which define the spacing between FIGcharacters. The layout mode for the
+horizontal axis may differ from the layout mode for the vertical axis. A
+default choice is defined for each axis by every FIGfont.
+
+The three layout modes are:
+
+ Full Size (Separately called "Full Width" or "Full Height".)
+
+ Represents each FIGcharacter occupying the full width or
+ height of its arrangement of sub-characters as designed.
+
+ Fitting Only (Separately called "Kerning or "Vertical Fitting".)
+
+ Moves FIGcharacters closer together until they touch.
+ Typographers use the term "kerning" for this phenomenon
+ when applied to the horizontal axis, but fitting also
+ includes this as a vertical behavior, for which there is
+ apparently no established typographical term.
+
+ Smushing (Same term for both axes.)
+
+ Moves FIGcharacters one step closer after they touch, so that
+ they partially occupy the same space. A FIGdriver must decide
+ what sub-character to display at each junction. There are two
+ ways of making these decisions: by controlled smushing or by
+ universal smushing.
+
+ Controlled smushing uses a set of "smushing rules" selected by
+ the designer of a FIGfont. (See "Smushing Rules" below.)
+ Each rule is a comparison of the two sub-characters which must
+ be joined to yield what to display at the junction.
+ Controlled smushing will not always allow smushing to occur,
+ because the compared sub-characters may not correspond to any
+ active rule. Wherever smushing cannot occur, fitting occurs
+ instead.
+
+ Universal smushing simply overrides the sub-character from the
+ earlier FIGcharacter with the sub-character from the later
+ FIGcharacter. This produces an "overlapping" effect with some
+ FIGfonts, wherin the latter FIGcharacter may appear to be "in
+ front".
+
+ A FIGfont which does not specify any smushing rules for a
+ particular axis indicates that universal smushing is to occur
+ when smushing is requested. Therefore, it is not possible for
+ a FIGfont designer to "forbid" smushing. However there are
+ ways to ensure that smushing does not cause a FIGfont to be
+ illegible when smushed. This is especially important for
+ smaller FIGfonts. (See "Hardblanks" for details.)
+
+For vertical fitting or smushing, entire lines of output FIGcharacters are
+"moved" as a unit.
+
+Not all FIGdrivers do vertical fitting or smushing. At present, FIGWin 1.0
+does, but FIGlet 2.2 does not. Further, while FIGlet 2.2 allows the user to
+override the FIGfont designer's set of smushing rules, FIGWin 1.0 does not.
+
+NOTE: In the documentation of FIGlet versions prior to 2.2, the term
+"smushmode" was used to mean the layout mode, and this term further included
+the smushing rules (if any) to be applied. However, since the layout mode
+may or may not involve smushing, we are straying from the use of this
+somewhat misleading term.
+
+
+"Smushing Rules"
+
+Again, smushing rules are for controlled smushing. If none are defined to be
+active in a FIGfont, universal smushing occurs instead.
+
+Generally, if a FIGfont is "drawn at the borders" using sub-characters
+"-_|/\[]{}()<>", you will want to use controlled smushing by selecting from
+the rules below. Otherwise, if your FIGfont uses a lot of other
+sub-characters, do not select any rules and universal smushing will occur
+instead. (See "Hardblanks" below if your FIGfont is very small and would
+become illegible if smushed.) Experimentation is the best way to make these
+decisions.
+
+There are six possible horizontal smushing rules and five possible vertical
+smushing rules. Below is a description of all of the rules.
+
+NOTE: Ignore the "code values" for now. They are explained later.
+
+ The Six Horizontal Smushing Rules
+
+ Rule 1: EQUAL CHARACTER SMUSHING (code value 1)
+
+ Two sub-characters are smushed into a single sub-character
+ if they are the same. This rule does not smush
+ hardblanks. (See "Hardblanks" below.)
+
+ Rule 2: UNDERSCORE SMUSHING (code value 2)
+
+ An underscore ("_") will be replaced by any of: "|", "/",
+ "\", "[", "]", "{", "}", "(", ")", "<" or ">".
+
+ Rule 3: HIERARCHY SMUSHING (code value 4)
+
+ A hierarchy of six classes is used: "|", "/\", "[]", "{}",
+ "()", and "<>". When two smushing sub-characters are
+ from different classes, the one from the latter class
+ will be used.
+
+ Rule 4: OPPOSITE PAIR SMUSHING (code value 8)
+
+ Smushes opposing brackets ("[]" or "]["), braces ("{}" or
+ "}{") and parentheses ("()" or ")(") together, replacing
+ any such pair with a vertical bar ("|").
+
+ Rule 5: BIG X SMUSHING (code value 16)
+
+ Smushes "/\" into "|", "\/" into "Y", and "><" into "X".
+ Note that "<>" is not smushed in any way by this rule.
+ The name "BIG X" is historical; originally all three pairs
+ were smushed into "X".
+
+ Rule 6: HARDBLANK SMUSHING (code value 32)
+
+ Smushes two hardblanks together, replacing them with a
+ single hardblank. (See "Hardblanks" below.)
+
+
+ The Five Vertical Smushing Rules
+
+ Rule 1: EQUAL CHARACTER SMUSHING (code value 256)
+
+ Same as horizontal smushing rule 1.
+
+ Rule 2: UNDERSCORE SMUSHING (code value 512)
+
+ Same as horizontal smushing rule 2.
+
+ Rule 3: HIERARCHY SMUSHING (code value 1024)
+
+ Same as horizontal smushing rule 3.
+
+ Rule 4: HORIZONTAL LINE SMUSHING (code value 2048)
+
+ Smushes stacked pairs of "-" and "_", replacing them with
+ a single "=" sub-character. It does not matter which is
+ found above the other. Note that vertical smushing rule 1
+ will smush IDENTICAL pairs of horizontal lines, while this
+ rule smushes horizontal lines consisting of DIFFERENT
+ sub-characters.
+
+ Rule 5: VERTICAL LINE SUPERSMUSHING (code value 4096)
+
+ This one rule is different from all others, in that it
+ "supersmushes" vertical lines consisting of several
+ vertical bars ("|"). This creates the illusion that
+ FIGcharacters have slid vertically against each other.
+ Supersmushing continues until any sub-characters other
+ than "|" would have to be smushed. Supersmushing can
+ produce impressive results, but it is seldom possible,
+ since other sub-characters would usually have to be
+ considered for smushing as soon as any such stacked
+ vertical lines are encountered.
+
+
+"Hardblanks"
+
+A hardblank is a special sub-character which is displayed as a blank (space)
+in rendered FIGures, but is treated more like a "visible" sub-character when
+fitting or smushing horizontally. Therefore, hardblanks keep adjacent
+FIGcharacters a certain distance apart.
+
+NOTE: Hardblanks act the same as blanks for vertical operations.
+
+Hardblanks have three purposes:
+
+ 1) Hardblanks are used to create the blank (space) FIGcharacter.
+
+ Usually the space FIGcharacter is simply one or two vertical
+ columns of hardblanks. Some slanted FIGfonts as shown below
+ have a diagonal arrangement of hardblanks instead.
+
+ 2) Hardblanks can prevent "unreasonable" fitting or smushing.
+
+ Normally when fitting or smushing, the blank (space)
+ sub-character is considered "vacant space". In the following
+ example, a capital "C" FIGcharacter is smushed with a "minus"
+ FIGcharacter.
+ ______ ______
+ / ____/ / ____/
+ / / ____ >>-Becomes-> / / ____
+ / /___ /___/ / /__/___/
+ \____/ \____/
+
+ The FIGure above looks like a capital G. To prevent this, a
+ FIGfont designer might place a hardblank in the center of the
+ capital C. In the following example, the hardblank is
+ represented as a "$":
+ ______ ______
+ / ____/ / ____/
+ / / $ ____ >>-Becomes-> / / ____
+ / /___ /___/ / /___/___/
+ \____/ \____/
+
+ Using hardblanks in this manner ensures that FIGcharacters
+ with a lot of empty space will not be unreasonably "invaded"
+ by adjacent FIGcharacters. Generally, FIGcharacters such as
+ capital C, L or T, or small punctuation marks such as commas,
+ may contain hardblanks, since they may contain a lot of vacant
+ space which is "accessible" from either side.
+
+ 3) Hardblanks can prevent smushing from making FIGfonts illegible.
+
+ This legitimate purpose of hardblanks is often overused. If a
+ FIGfont designer is absolutely sure that smushing "visible"
+ sub-characters would make their FIGfont illegible, hardblanks
+ may be positioned at the end of each row of sub-characters,
+ against the visible sub-characters, creating a barrier.
+
+ With older FIGdrivers, using hardblanks for this purpose meant
+ that FIGcharacters would have to be separated by at least one
+ blank in output FIGures, since only a hardblank could smush
+ with another hardblank. However with the advent of universal
+ smushing, this is no longer necessary. Hardblanks ARE
+ overriden by any visible sub-character when performing
+ universal smushing. Hardblanks still represent a "stopping
+ point", but only AFTER their locations are occupied.
+
+ NOTE: Earlier it was stated that universal smushing overrides
+ the sub-character from the former FIGcharacter with the
+ sub-character from the latter FIGcharacter. Hardblanks (and
+ blanks or spaces) are the exception to this rule; they will
+ always be overriden by visible sub-characters, regardless of
+ which FIGcharacter contains the hardblank. This ensures that
+ no visible sub-characters "disappear".
+
+ Therefore, one can design a FIGfont with a default behavior of
+ universal smushing, while the output FIGure would LOOK like
+ the effect of fitting, or even full size if additional
+ hardblanks are used. If a user "scales down" the layout mode
+ to fitting, the result would look like "extra spacing" between
+ FIGcharacters.
+
+ Taking this concept further, a FIGcharacter may also include
+ extra blanks (spaces) on the left side of each FIGcharacter,
+ which would define the FIGcharacter's width as slightly larger
+ than required for the visible sub-characters and hardblanks.
+ With such a FIGfont, a user who further "scales down" the
+ layout mode to full size would see even greater spacing.
+
+ These techniques prevent horizontal smushing from causing a
+ FIGfont to become illegible, while offering greater
+ flexibility of output to users.
+
+ NOTE: These techniques cannot be used to prevent vertical
+ smushing of visible sub-characters, since hardblanks are not
+ respected in the vertical axis. Although it is possible to
+ select only one vertical smushing rule which involves only
+ sub-characters which are not used in your FIGfont, it is
+ recommend that you do NOT do so. In our opinion, most users
+ would prefer to get what they ask for, rather than being
+ told, in effect: "I, the FIGfont designer, have decided that
+ you wouldn't like the results of vertical smushing, so I have
+ prevented you from trying it." Instead, we recommend setting
+ the default behavior to either fitting or full height, and
+ either allowing universal smushing, or selecting vertical
+ smushing rules which seem most appropriate. A user of your
+ FIGfont will quickly see why you did not choose smushing as
+ the default vertical layout mode, and will agree with you.
+
+
+"Character Sets" and "Character Codes"
+
+When you type using your keyboard, you are actually sending your computer a
+series of numbers. Each number must be interpreted by your computer so that
+it knows what character to display. The computer uses a list of definitions,
+called a "character set". The numbers which represent each character are
+ called "character codes".
+
+There are many character sets, most of which are internationally accepted as
+standards. By far, the most common character set is ASCII, which stands for
+"American Standard Code for Information Interchange". ASCII identifies its
+characters with codes ranging from 0 to 127.
+
+NOTE: The term "ASCII art" has become well-understood to mean artistic images
+which consist of characters on your screen (such as FIGures).
+
+For a list of the printable ASCII characters with the corresponding codes,
+see the section "REQUIRED CHARACTERS" below. The other ASCII codes in the
+range of 0 through 31 are "control characters" such as carriage-return
+(code 13), linefeed/newline (code 10), tab (code 9), backspace (code 8) or
+null (code 0). Code 127 is a delete in ASCII.
+
+Getting more technical for just a moment: A byte consisting of 8 bits (eight
+ 1's or 0's) may represent a number from 0 to 255. Therefore, most computers
+have DIRECT access to 256 characters at any given time. A character set
+which includes 256 characters is called an 8-bit character set.
+
+For Latin-based languages, ASCII is almost always the first half of a larger
+8-bit character set. Latin-1 is the most common example of an 8-bit
+character set. Latin-1 includes all of ASCII, and adds characters with codes
+from 128 to 255 which include umlauted ("double-dotted") letters and
+characters with various other accents. In the United States, Windows and
+most Unix systems have Latin-1 directly available.
+
+Most modern systems allow the possibility of changing 8-bit character sets.
+On Windows systems, character sets are referred to as "code pages". There
+are many other character sets which are not mentioned here. DOS has its own
+character set (which also has international variants) that includes graphics
+characters for drawing lines. It is also an extension of ASCII.
+
+For some languages, 8-bit character sets are insufficient, particularly on
+East Asian systems. Therefore, some systems allow 2 bytes for each
+character, which multiplies the 256 possibilties by 256, resulting in 65536
+possible characters. (Much more than the world will ever need.)
+
+Unicode is a character set standard which is intended to fulfill the
+worldwide need for a single character set which includes all characters used
+worldwide. Unicode includes character codes from 0 to 65535, although at
+present, only about 22,000 characters have been officially assigned and named
+by the Unicode Consortium. The alphabets and other writing systems
+representable with Unicode include all Latin-alphabet systems, Greek,
+Russian and other Cyrillic-alphabet systems, Hebrew, Arabic, the various
+languages of India, Chinese, Japanese, Korean, and others. The existing
+Unicode symbols include chess pieces, astrological signs, gaming symbols,
+telephones, pointing fingers, etc. --- just about any type of FIGcharacter
+you may wish to create. Unicode is constantly (but slowly) being extended
+to handle new writing systems and symbols. Information on Unicode is
+available at http://www.unicode.org and at ftp://unicode.org .
+
+Unicode, Latin-1, and ASCII all specify the same meanings for overlapping
+character codes: ASCII 65 = Latin-1 65 = Unicode 65 = "A", formally known
+as "LATIN CAPITAL LETTER A".
+
+Since a keyboard usually has only about 100 keys, your computer may contain
+a program called a "keyboard map", which will interpret certain keystrokes
+or combinations of keystrokes as different character codes. Keyboard maps
+use "mapping tables" to make these determinations. The appropriate keyboard
+activity for a given character code may involve several keystrokes. Almost
+all systems are capable of handling at least 8-bit character sets (containing
+256 characters), so there is always an active keyboard map, at least for
+those characters which are not actually painted on the keys. (United States
+users may not even know that their computer can interpret special keystrokes.
+Such keystrokes may be something similar to holding down the ALT key while
+typing a character code on the numeric keypad. Try it!)
+
+Below are characters 160 through 255, AS REPRESENTED ON YOUR SYSTEM.
+
+ ¡¢£¤¥¦§¨©ª«¬®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏ
+ ÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ
+
+IMPORTANT NOTE: Depending on which character set is active on your system,
+you may see different characters. This document (like all computer
+documents) does not contains characters per se, only bytes. What you see
+above is your particular computer's representation of these byte values.
+In other words, your active character set. However, if it is Latin-1, the
+first visible character is an inverted "!", and the last is an umlauted "y".
+Although we can safely assume your computer has ASCII, it does not
+necessarily have the Latin-1 character set active.
+
+What does all this have to do with FIGfonts???
+
+First, it should be evident that it is best to use only ASCII characters for
+sub-characters when possible. This will ensure portability to different
+platforms.
+
+FIGlet has gained international popularity, but early versions were made to
+handle only FIGcharacters with assigned character codes corresponding to
+ASCII. So, over the years there have been four methods used to create
+"virtual mapping tables" within the program itself:
+
+ The first method was simply to create FIGcharacters which do not
+ look like the ASCII character set implies. For example, a
+ FIGfont might contain Greek letters, and within its comments, it
+ may say, "If you type A, you'll get a Greek Alpha" etc. With
+ the advent of newer features, it is preferable not to use this
+ method. Instead, when possible, add new FIGcharacters to
+ existing FIGfonts or create new FIGfonts with FIGcharacters coded
+ to match the expectations of ASCII/Latin-1/Unicode, and create an
+ appropriate control file. (See "CONTROL FILES" below.) Remember
+ that Unicode includes almost any character for which you may want
+ to create a FIGcharacter.
+
+ The second method was very specific, to accommodate the German
+ audience. A special option was added to the FIGlet program
+ which would re-route input characters "[", "\", and "]" to
+ umlauted A, O and U, while "{", "|", and "}" would become the
+ respective lowercase versions of these. Also, "~" was made to
+ become the s-z character when this special option was used. This
+ was called "the -D option." The addition of this feature meant
+ that all compatible FIGfonts must contain these Deutsch (German)
+ FIGcharacters, in addition to the ASCII FIGcharacters. Although
+ this option is still available in the most recent version, it is
+ no longer necessary, as the same result can be achieved by the
+ newer features described below. However, the requirement for
+ Deutsch FIGcharacters remains for backward compatibility. (Or at
+ least zero-width FIGcharacters in their place.)
+
+ Later, FIGlet was made to accept control files, which are quite
+ literally a form of mapping table. (See "CONTROL FILES" below.)
+ This was a significant advance for internationalization.
+
+ FIGlet 2.2 can now accept specially encoded formats of input
+ text which imply more than one byte per character.
+
+
+CREATING FIGFONTS
+======== ========
+
+NOTE: FIGWin 1.0 is packaged with a program called FIGfont Editor for Windows
+1.0, which is just that. There is no need to read further if you intend to
+use it. However, the section "CONTROL FILES" below is still relevant.
+
+Since a FIGfont file is a text file, it can be created with any text editing
+program on any platform, and will still be compatible with FIGdrivers on all
+operating systems, except that the bytes used to indicate the end of each
+text line may vary. (PC's use carriage return and linefeed at the end of
+each line, Macintosh uses carriage return only, and UNIX uses linefeed only.)
+
+This minor difference among operating systems is handled easily by setting
+your FTP program to ASCII mode during upload or download. So there is no
+need to be concerned about this as long as you remember to do this during
+file transfer.
+
+The filename of a FIGfont file must end with ".flf", which stands for
+"<F>IG<L>ettering <F>ont". The first part of the filename should contain
+only letters, and should be lowercase on operating systems which permit case
+sensitive filenames. The filename should be unique in the first 8
+characters, since some older file systems truncate longer filenames.
+
+It is easier to modify an existing FIGfont than it is to create a new one
+from scratch. The first step is to read and understand this document.
+You may want to load "standard.flf" or another FIGfont into a text editor as
+an example while you read.
+
+A FIGfont file contains three portions: a header line, comments, and
+FIGcharacter data.
+
+
+THE HEADER LINE
+
+The header line gives information about the FIGfont. Here is an example
+showing the names of all parameters:
+
+ flf2a$ 6 5 20 15 3 0 143 229 NOTE: The first five characters in
+ | | | | | | | | | | the entire file must be "flf2a".
+ / / | | | | | | | \
+ Signature / / | | | | | \ Codetag_Count
+ Hardblank / / | | | \ Full_Layout*
+ Height / | | \ Print_Direction
+ Baseline / \ Comment_Lines
+ Max_Length Old_Layout*
+
+ * The two layout parameters are closely related and fairly complex.
+ (See "INTERPRETATION OF LAYOUT PARAMETERS".)
+
+For those desiring a quick explanation, the above line indicates that this
+FIGfont uses "$" to represent the hardblank in FIGcharacter data, it has
+FIGcharacters which are 6 lines tall, 5 of which are above the baseline, no
+line in the FIGfont data is more than 20 columns wide, the default horizontal
+layout is represented by the number 15, there are 3 comment lines, the
+default print direction for this FIGfont is left-to-right, a complete
+description of default and possible horizontal and vertical layouts is
+represented by the number 143, and there are 229 code-tagged characters.
+
+The first seven parameters are required. The last three (Direction,
+Full_Layout, and Codetag_Count, are not. This allows for backward
+compatibility with older FIGfonts, but a FIGfont without these parameters would
+force a FIGdriver to "guess" (by means not described in this document) the
+information it would expect to find in Full_Layout. For this reason, inclusion
+of all parameters is strongly recommended.
+
+Future versions of this standard may add more parameters after Codetag_Count.
+
+A description of each parameter follows:
+
+ Signature
+
+The signature is the first five characters: "flf2a". The first four
+characters "flf2" identify the file as compatible with FIGlet version 2.0 or
+later (and FIGWin 1.0). The "a" is currently ignored, but cannot be omitted.
+Different characters in the "a" location may mean something in future
+versions of this standard. If so, you can be sure your FIGfonts will still
+work if this character is "a".
+
+ Hardblank
+
+Immediately following the signature is the hardblank character. The
+hardblank character in the header line defines which sub-character will be
+used to represent hardblanks in the FIGcharacter data.
+
+By convention, the usual hardblank is a "$", but it can be any character
+except a blank (space), a carriage-return, a newline (linefeed) or a null
+character. If you want the entire printable ASCII set available to use, make
+the hardblank a "delete" character (character code 127). With the exception
+of delete, it is inadvisable to use non-printable characters as a hardblank.
+
+ Height
+
+The Height parameter specifies the consistent height of every FIGcharacter,
+measured in sub-characters. Note that ALL FIGcharacters in a given FIGfont
+have the same height, since this includes any empty space above or below.
+This is a measurement from the top of the tallest FIGcharacter to the bottom
+of the lowest hanging FIGcharacter, such as a lowercase g.
+
+ Baseline
+
+The Baseline parameter is the number of lines of sub-characters from the
+baseline of a FIGcharacter to the top of the tallest FIGcharacter. The
+baseline of a FIGfont is an imaginary line on top of which capital letters
+would rest, while the tails of lowercase g, j, p, q, and y may hang below.
+In other words, Baseline is the height of a FIGcharacter, ignoring any
+descenders.
+
+This parameter does not affect the output of FIGlet 2.2 or FIGWin 1.0, but
+future versions or other future FIGdrivers may use it. The Baseline
+parameter should be correctly set to reflect the true baseline as described
+above. It is an error for Baseline to be less than 1 or greater than the
+Height parameter.
+
+ Max_Length
+
+The Max_Length parameter is the maximum length of any line describing a
+FIGcharacter. This is usually the width of the widest FIGcharacter, plus 2
+(to accommodate endmarks as described later.) However, you can (and probably
+should) set Max_Length slightly larger than this as a safety measure in case
+your FIGfont is edited to include wider FIGcharacters. FIGlet (but not
+FIGWin 1.0) uses this number to minimize the memory taken up by a FIGfont,
+which is important in the case of FIGfonts with many FIGcharacters.
+
+ Old_Layout
+
+(See "INTERPRETATION OF LAYOUT PARAMETERS" below.)
+
+ Comment_Lines
+
+Between the first line and the actual FIGcharacters of the FIGfont are the
+comment lines. The Comment_Lines parameter specifies how many lines there
+are. Comments are optional, but recommended to properly document the origin
+of a FIGfont.
+
+ Print_Direction
+
+The Print_Direction parameter tells which direction the font is to be
+printed by default. A value of 0 means left-to-right, and 1 means
+right-to-left. If this parameter is absent, 0 (left-to-right) is assumed.
+Print_Direction may not specify vertical print, although FIGdrivers are
+capable of vertical print. Versions of FIGlet prior to 2.1 ignore this
+parameter.
+
+ Full_Layout
+
+(See "INTERPRETATION OF LAYOUT PARAMETERS" just below.)
+
+ Codetag_Count
+
+Indicates the number of code-tagged (non-required) FIGcharacters in this
+FIGfont. This is always equal to the total number of FIGcharacters in the font
+minus 102. This parameter is typically ignored by FIGdrivers, but can be
+used to verify that no characters are missing from the end of the FIGfont.
+The chkfont program will display the number of codetagged characters
+in the FIGfont on which it is run, making it easy to insert this parameter
+after a FIGfont is written.
+
+
+INTERPRETATION OF LAYOUT PARAMETERS
+
+Full_Layout describes ALL information about horizontal and vertical layout:
+the default layout modes and potential smushing rules, even when smushing is
+not a default layout mode.
+
+Old_Layout does not include all of the information desired by the most
+recent FIGdrivers, which is the inspiration for the creation of the new
+Full_Layout parameter. Old_Layout is still required for backward
+compatibility, and FIGdrivers must be able to interpret FIGfonts which do not
+have the Full_Layout parameter. (See "STANDARDIZED CAPABILITIES OF CURRENT
+AND FUTURE FIGDRIVERS".)
+
+Versions of FIGlet prior to 2.2 do not recognize the Full_Layout parameter.
+Documentation accompanying FIGlet versions prior to 2.2 refer to Old_Layout
+as "smushmode", which is somewhat misleading since it can indicate layout
+modes other than smushing.
+
+Old_Layout and Full_Layout must contain some redundant information.
+
+Setting the layout parameters is a matter of adding numbers together ("code
+values"). What follows is a chart of the meanings of all code values.
+(You may skip down to "SETTING LAYOUT PARAMETERS STEP BY STEP" if you prefer,
+or if you find this portion confusing.)
+
+Full_Layout: (Legal values 0 to 32767)
+
+ 1 Apply horizontal smushing rule 1 when smushing
+ 2 Apply horizontal smushing rule 2 when smushing
+ 4 Apply horizontal smushing rule 3 when smushing
+ 8 Apply horizontal smushing rule 4 when smushing
+ 16 Apply horizontal smushing rule 5 when smushing
+ 32 Apply horizontal smushing rule 6 when smushing
+ 64 Horizontal fitting (kerning) by default
+ 128 Horizontal smushing by default (Overrides 64)
+ 256 Apply vertical smushing rule 1 when smushing
+ 512 Apply vertical smushing rule 2 when smushing
+ 1024 Apply vertical smushing rule 3 when smushing
+ 2048 Apply vertical smushing rule 4 when smushing
+ 4096 Apply vertical smushing rule 5 when smushing
+ 8192 Vertical fitting by default
+ 16384 Vertical smushing by default (Overrides 8192)
+
+When no smushing rules are included in Full_Layout for a given axis, the
+meaning is that universal smushing shall occur, either by default or when
+requested.
+
+Old_Layout: (Legal values -1 to 63)
+
+ -1 Full-width layout by default
+ 0 Horizontal fitting (kerning) layout by default*
+ 1 Apply horizontal smushing rule 1 by default
+ 2 Apply horizontal smushing rule 2 by default
+ 4 Apply horizontal smushing rule 3 by default
+ 8 Apply horizontal smushing rule 4 by default
+ 16 Apply horizontal smushing rule 5 by default
+ 32 Apply horizontal smushing rule 6 by default
+
+* When Full_Layout indicates UNIVERSAL smushing as a horizontal default
+(i.e., when none of the code values of horizontal smushing rules are included
+and code value 128 is included in Full_Layout) Old_Layout must be set to 0
+(zero). Older FIGdrivers which cannot read the Full_Layout parameter are
+also incapable of universal smushing. Therefore they would be directed to
+the "next best thing", which is horizontal fitting (kerning).
+
+NOTE: You should NOT add the -1 value to any positive code value for
+Old_Layout. This would be a logical contradiction.
+
+See "STANDARDIZED CAPABILITIES OF CURRENT AND FUTURE FIGDRIVERS" for the
+behavior of a FIGdriver when the Full_Layout parameter is absent (presumably
+in an older FIGfont).
+
+The following rules establish consistency between Old_Layout and Full_Layout.
+
+ If full width is to be the horizontal default:
+ Old_Layout must be -1.
+ Full_Layout must NOT include code values 64 nor 128.
+
+ If horizontal fitting (kerning) is to be default:
+ Old_Layout must be 0.
+ Full_Layout must include code value 64.
+ Full_Layout must NOT include code value 128.
+
+ If CONTROLLED smushing is to be the horizontal default:
+ Old_Layout must be a positive number, represented by the added
+ code values of all desired horizontal smushing rules.
+ Full_Layout must include the code values for the SAME set of
+ horizontal smushing rules as included in Old_Layout.
+ Full_Layout must include code value 128.
+
+ If UNIVERSAL smushing is to be the horizontal default:
+ Old_Layout must be 0.
+ Full_Layout must include code value 128.
+ Full_Layout must NOT include any code value under 64.
+
+In general terms, if Old_Layout specifies horizontal smushing rules,
+Full_Layout must specify the same set of horizontal rules, and both must
+indicate the same horizontal default layout mode.
+
+
+SETTING LAYOUT PARAMETERS STEP-BY-STEP
+
+The following step-by-step process will yield correct and consistent values
+for the two layout parameters. You may skip this if you find the
+explanations above easier to use.
+
+Step 1: Start with 0 for both numbers.
+
+ Write "Old_Layout" and "Full_Layout" on a piece of paper.
+ Write the number 0 next to each.
+ The number 0 may be crossed out and changed several times below.
+ Go to step 2.
+
+Step 2: Set the DEFAULT HORIZONTAL LAYOUT MODE.
+
+ If you want to use FULL WIDTH as the default
+ Make Old_Layout -1
+ Go to step 3.
+ If you want to use HORIZONTAL FITTING (kerning) as the default
+ Make Full_Layout 64
+ Go to step 3.
+ If you want to use HORIZONTAL SMUSHING as the default
+ Make Full_Layout 128
+ Go to step 3.
+
+Step 3: Specify HOW TO SMUSH HORIZONTALLY WHEN SMUSHING.
+
+ If you want to use UNIVERSAL smushing for the horizontal axis
+ Go to step 4.
+ If you want to use CONTROLLED smushing for the horizontal axis
+ Add together the code values for all the horizontal smushing
+ rules you want from the list below to get the horizontal
+ smushing rules total.
+
+ EQUAL CHARACTER SMUSHING 1
+ UNDERSCORE SMUSHING 2
+ HIERARCHY SMUSHING 4
+ OPPOSITE PAIR SMUSHING 8
+ BIG X SMUSHING 16
+ HARDBLANK SMUSHING 32
+
+ Horizontal smushing rules total: ___
+
+ If Full_Layout is currently 128
+ Change Old_Layout to the horizontal smushing rules total.
+ Increase Full_Layout by the horizontal smushing rules total.
+ Go to Step 4.
+ If Full_Layout is currently 0 or 64
+ Increase Full_Layout by the horizontal smusing rules total.
+ Go to Step 4.
+
+Step 4: Set the DEFAULT VERTICAL LAYOUT MODE.
+
+ If you want to use FULL HEIGHT as the default
+ Go to step 5.
+ If you want to use VERTICAL FITTING as the default
+ Increase Full_Layout by 8192.
+ Go to step 5.
+ If you want to use VERTICAL SMUSHING as the default
+ Increase Full_Layout by 16384.
+ Go to step 5.
+
+Step 5: Specify HOW TO SMUSH VERTICALLY WHEN SMUSHING.
+
+ If you want to use UNIVERSAL smushing for the vertical axis
+ Go to step 6.
+ If you want to use CONTROLLED smushing for the vertical axis
+ Add together the code values for all the vertical smushing
+ rules you want from the list below to get the vertical
+ smushing rules total.
+
+ EQUAL CHARACTER SMUSHING 256
+ UNDERSCORE SMUSHING 512
+ HIERARCHY SMUSHING 1024
+ HORIZONTAL LINE SMUSHING 2048
+ VERTICAL LINE SUPERSMUSHING 4096
+
+ Vertical smushing rules total: ____
+
+ Increase Full_Layout by the vertical smushing rules total.
+ Go to step 6.
+
+Step 6: You're done.
+
+The resulting value of Old_Layout will be a number from -1 to 63.
+The resulting value of Full_Layout will be a number from 0 and 32767.
+
+
+FIGFONT COMMENTS
+
+After the header line are FIGfont comments. The comments can be as many
+lines as you like, but should at least include your name and Email address.
+Here is an example which also shows the header line.
+
+ flf2a$ 6 5 20 15 3 0 143
+ Example by Glenn Chappell <ggc@uiuc.edu> 8/94
+ Permission is hereby given to modify this font, as long as the
+ modifier's name is placed on a comment line.
+
+Comments are not required, but they are appreciated. Please comment your
+FIGfonts.
+
+Remember to adjust the Comment_Lines parameter as you add lines to your
+comments. Don't forget that blank lines DO count.
+
+
+FIGCHARACTER DATA
+============ ====
+
+The FIGcharacter data begins on the next line after the comments and
+continues to the end of the file.
+
+BASIC DATA STRUCTURE
+
+The sub-characters in the file are given exactly as they should be output,
+with two exceptions:
+
+ 1) Hardblanks should be the hardblank character specified in the
+ header line, not a blank (space).
+
+ 2) Every line has one or two endmark characters, whose column
+ locations define the width of each FIGcharacter.
+
+In most FIGfonts, the endmark character is either "@" or "#". The FIGdriver
+will eliminate the last block of consecutive equal characters from each line
+of sub-characters when the font is read in. By convention, the last line of
+a FIGcharacter has two endmarks, while all the rest have one. This makes it
+easy to see where FIGcharacters begin and end. No line should have more
+than two endmarks.
+
+Below is an example of the first few FIGcharacters, taken from small.flf.
+
+NOTE: The line drawn below consisting of "|" represents the left margin of
+your editor. It is NOT part of the FIGfont. Also note that hardblanks are
+represented as "$" in this FIGfont, as would be described in the header line.
+
+ |$@
+ |$@
+ blank/space |$@
+ |$@
+ |$@@
+ | _ @
+ || |@
+ exclamation point ||_|@
+ |(_)@
+ | @@
+ | _ _ @
+ |( | )@
+ double quote | V V @
+ | $ @
+ | @@
+ | _ _ @
+ | _| | |_ @
+ number sign ||_ . _|@
+ ||_ _|@
+ | |_|_| @@
+ | @
+ | ||_@
+ dollar sign |(_-<@
+ |/ _/@
+ | || @@
+
+Notice that each FIGcharacter occupies the same number of lines (6 lines, in
+this case), which must also be expressed in the header line as the Height
+parameter.
+
+Also notice that for every FIGcharacter, there must be a consistent width
+(length) for each line once the endmarks are removed. To do otherwise would
+be an error.
+
+Be aware of the vertical alignment of each FIGcharacter within its height,
+so that all FIGcharacters will be properly lined up when printed.
+
+If one of the last sub-characters in a particular FIGcharacter is "@", you
+should use another character for the endmark in that FIGcharacter so that
+the intended "@" is not interpreted as an endmark. "#" is a common
+alternative.
+
+Load a few existing FIGfonts into your favorite text editor for other
+examples.
+
+
+REQUIRED FIGCHARACTERS
+
+Some FIGcharacters are required, and must be represented in a specific order.
+Specifically: all of the printable character codes from ASCII shown in the
+table below, in order, plus character codes 196, 214, 220, 228, 246, 252,
+and 223, in that order. In Latin-1, these extra 7 characters represent the
+following German characters: umlauted "A", "O", "U", "a", "o" and "u"; and
+also "ess-zed".
+
+ Printable portion of the ASCII character set:
+
+ 32 (blank/space) 64 @ 96 `
+ 33 ! 65 A 97 a
+ 34 " 66 B 98 b
+ 35 # 67 C 99 c
+ 36 $ 68 D 100 d
+ 37 % 69 E 101 e
+ 38 & 70 F 102 f
+ 39 ' 71 G 103 g
+ 40 ( 72 H 104 h
+ 41 ) 73 I 105 i
+ 42 * 74 J 106 j
+ 43 + 75 K 107 k
+ 44 , 76 L 108 l
+ 45 - 77 M 109 m
+ 46 . 78 N 110 n
+ 47 / 79 O 111 o
+ 48 0 80 P 112 p
+ 49 1 81 Q 113 q
+ 50 2 82 R 114 r
+ 51 3 83 S 115 s
+ 52 4 84 T 116 t
+ 53 5 85 U 117 u
+ 54 6 86 V 118 v
+ 55 7 87 W 119 w
+ 56 8 88 X 120 x
+ 57 9 89 Y 121 y
+ 58 : 90 Z 122 z
+ 59 ; 91 [ 123 {
+ 60 < 92 \ 124 |
+ 61 = 93 ] 125 }
+ 62 > 94 ^ 126 ~
+ 63 ? 95 _
+
+ Additional required Deutsch FIGcharacters, in order:
+
+ 196 (umlauted "A" -- two dots over letter "A")
+ 214 (umlauted "O" -- two dots over letter "O")
+ 220 (umlauted "U" -- two dots over letter "U")
+ 228 (umlauted "a" -- two dots over letter "a")
+ 246 (umlauted "o" -- two dots over letter "o")
+ 252 (umlauted "u" -- two dots over letter "u")
+ 223 ("ess-zed" -- see FIGcharacter illustration below)
+ ___
+ / _ \
+ | |/ /
+ Ess-zed >>---> | |\ \
+ | ||_/
+ |_|
+
+If you do not wish to define FIGcharacters for all of those required above,
+you MAY create "empty" FIGcharacters in their place by placing endmarks flush
+with the left margin. The Deutsch FIGcharacters are commonly created as
+empty. If your FIGfont includes only capital letters, please copy them to
+the appropriate lowercase locations, rather than leaving lowercase letters
+empty. A FIGfont which does not include at least all ASCII letters, a space,
+and a few basic punctuation marks will probably frustrate some users. (For
+example "@" is more frequently desired as a FIGcharacter than you may think,
+since Email addresses may be written as FIGures.)
+
+
+CODE TAGGED FIGCHARACTERS
+
+After the required FIGcharacters, you may create FIGcharacters with any
+character code in the range of -2147483648 to +2147483647. (Over four
+billion possibilities, which is "virtual infinity" for this purpose.)
+One exception: character code -1 is NOT allowed for technical reasons.
+It is advisable to assign character codes such that the appearance of your
+FIGcharacters matches the expectations of ASCII/Latin-1/Unicode, with a few
+exceptions:
+
+ 1) If a FIGcharacter with code 0 is present, it is treated
+ specially. It is a FIGfont's "missing character". Whenever
+ the FIGdriver is told to print a character which doesn't exist
+ in the current FIGfont, it will print FIGcharacter 0. If there
+ is no FIGcharacter 0, nothing will be printed.
+
+ 2) If a FIGfont contains a non-Latin alphabet in character codes
+ in the ASCII range 32-126 (which is discouraged), we have found
+ it helpful to include a human-readable translation table as one
+ of the FIGcharacters instead of a "glyph". Typically, the "~"
+ would contain this table. The translation table FIGcharacter
+ would contain a list of all the special characters in the
+ FIGfont, along with the ASCII characters to which they
+ correspond. Keep this table no more than 79 columns wide.
+ (Thanks to Gedaliah Friedenberg for this idea.)
+
+ 3) In more extensive Unicode fonts, you can assign a negative
+ character code (other than -1) to one or more translation
+ tables, similar to #2 above. (All Unicode character codes are
+ positive.) And, you will most likely suggest within the
+ comments that a user access one of several control files (See
+ "CONTROL FILES" below) to gain access to Latin-2, Latin-3, or
+ other 8-bit standardized character sets. The control files may
+ redirect the "~" character to one of the negative character codes so
+ that the translation table would display the table when "~" is
+ given for input. Doing this allows you to still have a "~"
+ FIGcharacter for those who do not use a control file.
+
+Those FIGcharacters which are not required must have an explicit character
+code in a separate line preceding them, called a "code tag". A code tag
+contains the value of the character code, followed by whitespace (a few
+spaces), and perhaps an optional comment. The comment is usually the name of
+the FIGcharacter. The Unicode Consortium has assigned formal names to all
+officially accepted characters, and these may be used. An entire code tag,
+including the comment, should not occupy more than 95 columns. (Over 100
+characters here may make older versions of FIGlet crash.)
+
+Here is an example, showing two code tagged FIGcharacters after the last two
+required Deutsch FIGcharacters. Again, the line drawn below consisting of
+"|" represents the left margin of your editor, and is NOT part of the FIGfont.
+
+ | _ _ @
+ |(_) (_)@
+ || | | |@
+ || |_| |@
+ | \__,_|@
+ | @@
+ | ___ @
+ | / _ \@
+ || |/ /@
+ || |\ \@
+ || ||_/@
+ ||_| @@
+ |161 INVERTED EXCLAMATION MARK
+ | _ @
+ |(_)@
+ || |@
+ || |@
+ ||_|@
+ | @@
+ |162 CENT SIGN
+ | _ @
+ | | | @
+ | / __)@
+ || (__ @
+ | \ )@
+ | |_| @@
+
+
+A character code may be expressed in decimal (as shown above, numbers we're
+all familiar with), or in Octal (seldom used) or in hexadecimal.
+
+Character codes expressed in octal must be preceded by "0" (zero), and if
+negative, "-" (minus) must precede the "0". There are eight octal digits:
+01234567. You may recall octal numbers from school as "base 8 numbers".
+
+Character codes expressed in hexadecimal must be preceded by "0x" or "0X".
+(That's also a zero.) If negative, the "-" must precede the "0x". There are
+16 hexadecimal digits: 01234567890ABCDEF. (The "letter-digits" may also be
+lowercase.) Hexadecimal is "base 16".
+
+It is common to express character codes less than 256 (in the range of an
+8-bit character set) as decimal, while FIGfonts which extend into the Unicode
+range would have character codes expressed in hexadecimal. This is because
+the Unicode Standard expresses character codes in hexadecimal, which is
+helpful for programmers.
+
+The code tagged FIGcharacters may be listed in any order, but simple
+sequential order is recommended.
+
+If two or more FIGcharacters have the same character code, the last one in
+the FIGfont is the one used. It is common for the Deutsch FIGcharacters to
+be given twice in a FIGfont, just to maintain a consistent order for the
+Latin-1 range (128 to 255).
+
+It is not advisable to assign character codes in the range of 1 to 31, since
+this range includes control characters in ASCII. Character code 127 is a
+delete in ASCII, and is also not advised. Character codes 128 to 159 are
+additional control characters in Latin-1, and they too should not be used.
+All of the above are legal, technically, but are not part of what is legal
+for input, so they could only be accessed by use of a control file.
+(See "CONTROL FILES" below.) If you are still tempted to use them, consider
+negative character codes instead, which are meaningless in all standardized
+character sets.
+
+Again, the character code -1 is illegal for technical reasons.
+
+
+NOTES - AVOIDING ERRORS AND GENERAL ADVICE
+===== ======== ====== === ======= ======
+
+It is very important that every character in a font has the same height, and,
+once the endmarks are removed, that all the lines constituting a single
+FIGcharacter have the same length. Be careful also that no lines in the font
+file have trailing blanks (spaces), as the FIGdriver will take these to be
+the endmarks. (FIGWin 1.0 will not consider blanks to be endmarks.)
+
+Errors in a FIGfont can be detected by using the "chkfont" program,
+part of the standard FIGlet package, and also available, as of this
+writing from http://www.figlet.org/
+
+For FIGWin users, the FIGWin program will report errors when a FIGfont is
+read in; it is less forgiving than FIGlet, which can produce nonsense if the
+FIGfont is incorrectly formatted.
+
+Remember that sub-characters outside of the ASCII range will not necessarily
+display the same way on your system as on others.
+
+The blank (space) FIGcharacter should usually consist of one or two columns
+of hardblanks and nothing else; slanted fonts are an exception to this rule.
+If the space FIGcharacter does not contain any hardblanks, it will disappear
+when horizontal fitting (kerning) or smushing occurs.
+
+Again, if you design a FIGfont, please let us know!
+
+
+CONTROL FILES
+======= =====
+
+A FIGfont control file is a separate text file, associated with one or more
+FIGfonts, that indicates how to map input characters into FIGfont character
+codes. By default, FIGdrivers read single bytes from the input source and
+interpret them as Latin-1 FIGcharacters.
+
+FIGlet version 2.2 (and later) can optionally interpret its input as DBCS or
+UTF-8 characters, making it possible to access FIGcharacters with codes
+outside the Latin-1 range (greater than 255).
+
+In addition, though, all versions of FIGlet can use control files to
+transform specific character codes (or ranges of codes) as other codes
+(or ranges). Multiple control files can be specified, in which case multiple
+stages of transformation are performed.
+
+The filename of a control file always ends with ".flc".
+
+CONTROL FILE FORMAT
+
+Control files contain several kinds of lines. Lines beginning with "#", as
+well as blank lines, are comment lines and are ignored. All other lines are
+command lines, with one of the following formats:
+
+ t inchar outchar
+ t inchar1-inchar2 outchar1-outchar2
+ number number
+ f
+ h
+ j
+ b
+ u
+ g{0|1|2|3} {94|96|94x94} [char]
+ g{L|R} {0|1|2|3}
+
+where "inchar", "outchar", and "char" are either Latin-1 characters
+representing their own codes, or else are numeric character codes preceded by
+a "\" character; and "number" is a numeric character code with no preceding
+"\" character.
+
+Thus "A" represents the code 65, as does "\65", and "\0x100" represents the
+code 256 (100 in hexadecimal). In addition, "\ " (backslash followed by a
+space) represents the code 32 (space), and the following backslash sequences
+are also understood:
+
+ \a code 7 (a bell/alert)
+ \b code 8 (a backspace)
+ \e code 27 (an ESC character)
+ \f code 12 (a form feed)
+ \n code 10 (a newline/line feed)
+ \r code 13 (a carriage return)
+ \t code 9 (a horizontal tab)
+ \v code 11 (a vertical tab)
+ \\ code 92 (a backslash)
+
+All of these combinations except perhaps "\\" are very unlikely to be used,
+but they are provided just in case they are needed.
+
+Whitespace characters are used between "t" and "inchar" and between "inchar"
+and "outchar", but not around the "-" characters used in the second type of
+"t" command.
+
+The term "string" refers to any number of characters represented in the
+format given above. The characters begin after the whitespace following the
+letter "s", and continue to the end of the line.
+
+Anything following the first letter of an "f", "h", "j", or "u" command is
+ignored.
+
+The first type of "t" command transforms characters with the code "inchar"
+into characters with the code "outchar". The second type of "t" command
+transforms characters in the range "inchar1" to "inchar2" as the
+corresponding codes in the range "outchar1" to "outchar2". Both ranges must
+be of the same size. The form "number number" is equivalent to a "t"
+command of the first type, and is provided for compatibility with the mapping
+tables issued by the Unicode Consortium.
+
+Multiple transformation stages can be encoded in a single control file by
+using "f" commands to separate the stages.
+
+Versions of FIGlet before 2.1 required that the first line of a control file
+consist of the signature string "flc2a". This signature line is still
+permitted in FIGlet 2.2 and later versions, but is no longer required.
+
+Here is an example of a control file. The blanks at the beginning of each
+line are for readability only, and are not part of the file.
+
+The following control file:
+
+ flc2a
+ t # $
+ t A-Z a-z
+
+will map the "#" character to "$", and will also convert uppercase ASCII to
+lowercase ASCII.
+
+If a number of consecutive "t" commands are given, then for each character
+processed, only the first applicable command (if any) will be executed.
+Consider this control file:
+
+ t A B
+ t B A
+
+It will swap the characters "A" and "B". If the FIGdriver reads an "A", the
+first command will change "A" to "B", in which case the second will not be
+executed. If the FIGdriver reads a "B", the first command will have no
+effect, and the second command will change "B" to "A". Here is another
+control file:
+
+ t A B
+ t A C
+
+In this example, the second line is never executed. In short, a sequence of
+"t" lines "does what it ought to".
+
+More complex files, in which a single character is acted upon by several "t"
+commands, can be set up using an "f" command. For example:
+
+ flc2a
+ t a-z A-Z
+ f
+ t Q ~
+
+This control file specifies two transformation stages. In the first stage,
+lowercase ASCII letters are changed to their uppercase equivalents. The
+second stage maps any Q (whether original or a converted "q") into the "~"
+character. If the "f" command were omitted, "q" characters would remain "Q"
+and not be converted to "~".
+
+EXTENDED COMMANDS
+
+The "h", "j", "b", "u", and "g" commands are only understood by FIGlet
+version 2.2 or later. They control how a FIGdriver interprets bytes in the
+input. By default, the FIGdriver interprets each byte of input as a distinct
+character. This mode is suitable for most character encodings. All these
+commands are logically acted on before any other control file commands, no
+matter where in the sequence of control files they appear. They are also
+mutually exclusive; if more than one of these commands is found, only the
+last is acted on. Multiple "g" commands are permitted, however.
+
+The "h" command forces the input to be interpreted in HZ mode, which is used
+for the HZ character encoding of Chinese text. In this mode, the sequence
+"~{" (which is removed from the input) signals that all following characters
+are two bytes long until the sequence "~}" is detected. In addition, the
+sequence "~~" is changed to just "~", and all other two-byte sequences
+beginning with "~" are removed from the input. The character code
+corresponding to a two-byte character is:
+
+ first character * 256 + second character
+
+The "j" command forces the input to be interpreted in Shift-JIS mode (also
+called "MS-Kanji mode"). Input bytes in the ranges 128-159 and 224-239 are
+read as the high-order byte of a two-byte character; all other bytes are
+interpreted as one-byte characters. The value of a two-byte character is
+determined in the same way as in HZ mode.
+
+The "b" command forces the input to be interpreted in DBCS mode, which is
+suitable for processing HZ or Shift-GB Chinese text or Korean text. Input
+bytes in the ranges 128-255 are read as the high-order byte of a two-byte
+character; all other bytes are interpreted as one-byte characters. The
+value of a two-byte character is determined in the same way as in HZ mode.
+
+The "u" command forces the input to be interpreted in UTF-8 mode, which
+causes any input byte in the range 0x80 to 0xFF to be interpreted as the
+first byte of a multi-byte Unicode (ISO 10646) character. UTF-8 characters
+can be from 1 to 6 bytes long. An incorrectly formatted sequence is
+interpreted as the character 128 (normally an unused control character).
+
+Otherwise, the input is allowed to contain ISO 2022 escape sequences, which
+are decoded to generate appropriate character codes. These character codes
+are *not* a subset of Unicode, but may be more useful in processing East
+Asian text. A brief explanation of ISO 2022 is given here in order to
+clarify how a FIGdriver should interpret it. The "g" command provides
+information for the ISO 2022 interpreter, and is explained below.
+
+ISO 2022 text is specified using a mixture of registered character sets.
+At any time, up to four character sets may be available. Character sets
+have one of three sizes: single-byte character sets with 94 characters
+(e.g. ASCII), single-byte character sets with 96 characters (e.g. the top
+halves of ISO Latin-1 to Latin-5), or double-byte character sets with
+94 x 94 characters (e.g. JIS 0208X-1983). Each registered character set has
+a standard designating byte in the range 48 to 125; the bytes are unique withi
+n character set sizes, but may be reused across sizes. For example, byte 66
+designates the 94-character set ASCII, the 96-character set ISO Latin-2 (top
+half), and the 94 x 94 Japanese character set JIS 0208X-1983. In this
+document, the designating byte of a character set will be represented by <D>.
+
+The four available character sets are labeled G0, G1, G2, and G3. Initially,
+G0 is the 94-character set ASCII, and G1 is the 96-character set ISO Latin-1
+(top half). The other character sets are unassigned. The following escape
+sequences (where ESC = the byte 27) specify changes to the available
+character sets:
+
+ ESC ( <D> Set G0 to the 94-character set <D>
+ ESC ) <D> Set G1 to the 94-character set <D>
+ ESC * <D> Set G2 to the 94-character set <D>
+ ESC + <D> Set G3 to the 94-character set <D>
+ ESC - <D> Set G1 to the 96-character set <D>
+ ESC . <D> Set G2 to the 96-character set <D>
+ ESC / <D> Set G3 to the 96-character set <D>
+ ESC $ <D> Set G0 to the 94 x 94 character set <D>
+ ESC $ ( <D> Set G0 to the 94 x 94 character set <D>
+ ESC $ ) <D> Set G1 to the 94 x 94 character set <D>
+ ESC $ * <D> Set G2 to the 94 x 94 character set <D>
+ ESC $ + <D> Set G3 to the 94 x 94 character set <D>
+
+
+Note that G0 may not be a 96-character set, and that there are two ways to
+specify a 94 x 94 character set in G0, of which the first is deprecated.
+
+ISO 2022 decoding affects input bytes in the ranges 33 to 126 and 160 to 255,
+known as "the left half" and "the right half" respectively. All other bytes,
+unless they belong to a control sequence shown in this document, remain
+unchanged. Initially, the left half is interpreted as character set G0,
+and the right half as character set G1. This can be changed by the following
+control sequences:
+
+ SI (byte 15) Interpret the left half as G1 characters
+ SO (byte 14) Interpret the left half as G0 characters
+ ESC n Interpret the left half as G2 characters
+ ESC o Interpret the left half as G3 characters
+ ESC ~ Interpret the right half as G1 characters
+ ESC } Interpret the right half as G2 characters
+ ESC | Interpret the right half as G3 characters
+ SS2 (byte 142) Interpret next character only as G2
+ ESC N Interpret next character only as G2
+ SS3 (byte 143) Interpret next character only as G3
+ ESC O Interpret next character only as G3
+
+
+This rich schema may be used in various ways. In ISO-2022-JP, the Japanese
+flavor of ISO 2022, only the bytes 33-126 and the G0 character set is used,
+and escape sequences are used to switch between ASCII, ISO-646-JP (the
+Japanese national variant of ASCII), and JIS 0208X-1983. In other versions,
+the G1 character set has 94 x 94 size, and so any byte in the range 160-255
+is automatically the first byte of a double-byte character.
+
+FIGdrivers that support ISO 2022 do so in the following way. Each character i
+is decoded and assigned to a character set <D>.
+
+ If the character belongs to a 94-bit character set,
+ then if its value exceeds 128, it is reduced by 128,
+ and the value 65536 * <D> is added to it,
+ unless <D> is 66 (ASCII).
+ If the character belongs to a 96-bit character set,
+ then if its value is less than 128, it is increased by 128,
+ and the value 65536 * <D> is added to it,
+ unless <D> is 65 (ISO Latin-1).
+ If the character belongs to a 94 x 94 character set,
+ then the value is the sum of:
+ the first byte * 256,
+ plus the second byte,
+ plus the value 65536 * <D>.
+
+
+Thus, the character code 65 ("A") in ASCII remains 65, the character code
+196 in ISO Latin-1 ("A-umlaut") remains 196, the character code 65 (0x41)
+in ISO-646-JP (whose <D> is 74 = 0x4A) becomes 0x4A0041 =4849729, and the
+two-byte sequence 33 33 (0x21 0x21) in JIS 0208X-1983 (whose <D> is
+65 = 0x41) becomes 0x412121 = 4268321. These codes may be used in compiling
+FIGfonts suitable for use with ISO 2022 encoded text.
+
+The initial settings of G0 through G3 and their assignments to the left half
+and the right half can be altered in a control file by using "g" commands,
+as follows:
+
+ g {0|1|2|3} {94|96|94x94} [<D>]
+
+specifies that one of G0-G3 is a 94, 96, or 94x94 character set with
+designating character <D>. If no designating character is specified, then a
+<D> value of zero is assumed.
+
+For example, the list of control commands:
+
+ g 0 94 B
+ g 1 96 A
+
+sets the G0 character set to ASCII (94-character set "B") and the G1
+character set to the top half of Latin-1 (96-character set "A"). (This is the
+default setting).
+
+To change the initial assignments of G0 to the left half and G1 to the right
+half, "g" commands of the form
+
+ g {L|R} {0|1|2|3}
+
+For example, the command:
+
+ g R 2
+
+causes right-half bytes (in the range 160-255) to be interpreted as G2.
+Whether these bytes are interpreted singly or in pairs depends on the type
+of character set that is currently available as G2.
+
+Spaces may be freely used or omitted in "g" commands.
+
+The standard FIGlet distribution contains mapping tables for Latin-2 (ISO 8859-2),
+Latin-3 (ISO 8859-3), Latin-4 (ISO 8859-4), and Latin-5 (ISO 8859-9). They
+can be used with the font "standard.flf", which contains all the characters
+used in these standards.
+
+
+STANDARDIZED CAPABILITIES OF CURRENT AND FUTURE FIGDRIVERS
+============ ============ == ======= === ====== ==========
+
+We assert the following as the "Law" of our intentions:
+
+PROFIT
+
+All future FIGdrivers shall be FREE OF CHARGE to the general public via the
+Internet. Any advertisements of other works by the author must be in
+documentation only, and limited to ONE "screenful", and shall not appear by
+normal program behavior, nor interfere with normal behavior. No FIGdriver
+shall disable itself after a set period of time or request "donations".
+No FIGdriver shall offer any other FIGdriver with improved capability for
+creating FIGures in exchange for money.
+
+REQUIRED FEATURES OF FUTURE VERSIONS
+
+Future FIGdrivers must read and process FIGfont files as described in this
+document, but are not necessarily expected to process control files, smush,
+perform fitting or kerning, perform vertical operations, or even produce
+multiple lines in output FIGures.
+
+FIGDRIVER NAMES
+
+Future FIGdrivers must be named to include capitalized "FIG" and shall have
+an incremental version number specific to its own platform.
+
+BACKWARDS COMPATIBILITY OF FUTURE VERSIONS
+
+Any future FIGdriver created for the same platform as an existing FIGdriver,
+and using the same name as the existing FIGdriver, shall be considered a new
+version of the preceding FIGdriver, and shall contain all historical comments
+of updates to past versions on the same platform, and shall have full
+capability of the preceding versions. If the source code is not provided to
+the general public, it shall be at least provided to any potential developers
+of later versions, and such comments relating to past versions shall be
+accessible to any user by other means or documentation. If a new program is
+created on a platform that already has an existing FIGdriver, it must be
+given a new and distinct name. This allows multiple FIGdrivers to exist for
+the same platform with different capabilities.
+
+The format of FIGfonts may not be modified to be non-backwards compatible
+UNLESS:
+
+ 1) The new format is easily editable as an ASCII text file,
+ beginning with the characters "flf" followed by a sequential
+ number.
+
+ 2) At least all of the same information can be derived from the
+ new format as the prior format (currently "flf2"). This
+ includes the main comments which give credit to the FIGfont
+ designer.
+
+ 3) Individuals are found who are willing and have the ability to
+ either port or develop versions for at least UNIX, DOS,
+ Windows, and Amiga which will read both the new formats AND the
+ prior format (currently "flf2"), and retain the capability of
+ past versions. It is intended that this will be expanded to
+ include Macintosh if a GUI version exists. This list of
+ required operating systems may be reduced if an operating
+ system falls out of popularity or increased if a new operating
+ system for which there is a FIGdriver comes into greater
+ popularity, according to the consensus of opinions of past
+ developers for the most popular operating systems.
+
+ 4) A C, Java, or other version must always exist which can
+ receive input and instructions either from a command line, a
+ file, or directly over the internet so that FIGures can be
+ obtained from internet-based services without the need to
+ download any FIGdriver.
+
+ 5) All existing FIGfonts available from the "official" point of
+ distribution (http://www.figlet.org/),
+ must be converted to the new format, and offered for download
+ alongsidethe new versions.
+
+THE FUNCTION OF WORD WRAPPING
+
+All future FIGdrivers should duplicate these behaviors, unless a version is
+only capable of outputting one-line FIGures, which is acceptable as long no
+preceding versions exist for its platform which can output multiple-line
+FIGures.
+
+FIGdrivers which perform word wrapping do so by watching for blanks (spaces)
+in input text, making sure that the FIGure is no more wide than the maximum
+width allowed.
+
+Input text may also include linebreaks, so that a user may specify where
+lines begin or end instead of relying on the word wrapping of the FIGdriver.
+(Linebreaks are represented by different bytes on different platforms, so
+each FIGdriver must watch for the appropriate linebreaks for its particular
+platform.)
+
+When a FIGdriver word wraps and there are several consecutive blanks in input
+text where the wrapping occurred, the FIGdriver will disregard all blanks
+until the next non-blank input character is encountered. However, if blanks
+in input text immediately follow a linebreak, or if blanks are the first
+characters in the input text, the blanks will be "printed", moving any
+visible FIGcharacters which follow on the same output line to the right.
+Similarly, if an image is right-aligned, and blanks immediately precede
+linebreaks or the end of input text, a FIGdriver will move an entire line of
+output FIGcharacters to the left to make room for the blank FIGcharacters
+until the left margin is encountered. (If the print direction is
+right-to-left, everything stated in this paragraph is reversed.)
+
+Word processing programs or text editors usually behave similarly in all
+regards to word wrapping.
+
+GENERAL INTENT FOR CROSS-PLATFORM PORTABILITY
+
+Currently, all versions of FIGlet are compiled from C code, while FIGWin 1.0
+is written in Visual Basic. Over time it is intended that a later version of
+FIGWin will be created using a GUI C programming language, and that the
+FIGlet C code shall continue to be written to be easily "plugged in" to a
+GUI shell. It is preferable for developers of FIGdrivers for new platforms
+to use C or a GUI version of C, so that when the core rendering engine of
+FIGlet is updated, it will be portable to other platforms.
+
+CONTROL FILE COMMANDS
+
+New control file commands may be added to later versions of this standard.
+However, the commands "c", "d", and "s" are permanently reserved and may
+never be given a meaning.
+
+FILE COMPRESSION
+
+FIGfonts (and control files) are often quite long, especially if many
+FIGcharacters are included, or if the FIGcharacters are large. Therefore,
+some FIGdrivers (at present, only FIGlet version 2.2 or later) allow
+compressed FIGfonts and control files.
+
+The standard for FIG compression is to place the FIGfont or control file into
+a ZIP archive. ZIP archives can be created by the proprietary program PKZIP
+on DOS and Windows platforms, or by the free program Info-ZIP ZIP on almost
+all platforms. More information on ZIP can be obtained at
+http://www.cdrom.com/pub/infozip/Info-Zip.html .
+
+The ZIP archive must contain only a single file. Any files in the archive
+after the first are ignored by FIGdrivers. In addition, the standard
+extension ".zip" of the archive must be changed to ".flf" or ".flc" as
+appropriate. It does not matter what the name of the file within the
+archive is.
+
+
+
+CHART OF CAPABILITIES OF FIGLET 2.2 AND FIGWIN 1.0
+===== == ============ == ====== === === ====== ===
+
+The following chart lists all capabilities which are either new with the
+release of both FIGdrivers, or is not a common capability among both.
+
+ FIGlet 2.2 FIGWIN 1.0
+ Interpreting the Full_Layout parameter: Yes Yes
+ Universal smushing: Yes Yes
+ Supporting multi-byte input text formats: Yes No
+ Processing control files: Yes No
+ Changing default smushing rules: Yes No
+ Bundled with a GUI editor of FIGfonts: No Yes
+ Vertical fitting and smushing: No Yes
+
+ ___________ __ _
+ \_ _____/ ____ |__| ____ ___ __ | |
+ | __)_ / \ | |/ _ < | || |
+ | \ | \ | ( <_> )___ | \|
+ /_______ /___| /\__| |\____// ____| __
+ \/ \/\______| \/ \/
diff --git a/externals/figlet/figlet.6 b/externals/figlet/figlet.6
new file mode 100644
index 000000000..ff2231140
--- /dev/null
+++ b/externals/figlet/figlet.6
@@ -0,0 +1,1102 @@
+.\" FIGlet
+.\" Copyright (C) 1991, 1993, 1994 Glenn Chappell and Ian Chai
+.\" Internet: <info@figlet.org>
+.\" Portions Copyright 1996, 1997, 1998, 1999, 2000, 2001 by John Cowan <cowan@ccil.org>
+.\" Portions Copyright 2002 by Christiaan Keet
+.\" Portions Copyright 2011, 2012 by Claudio Matsuoka
+.\" FIGlet, along with the various FIGlet fonts and documentation, may
+.\" be freely copied and distributed.
+.\" If you use FIGlet, please send an e-mail message to
+.\" <info@figlet.org>
+.\"
+.TH FIGLET 6 "31 May 2012" "v2.2.5"
+
+.SH NAME
+FIGlet \- display large characters made up of ordinary screen characters
+
+.SH SYNOPSIS
+.B figlet
+[
+.B \-cklnoprstvxDELNRSWX
+]
+[
+.B \-d
+.I fontdirectory
+]
+.PD 0
+.IP
+.PD
+[
+.B \-f
+.I fontfile
+]
+[
+.B \-m
+.I layoutmode
+]
+.PD 0
+.IP
+.PD
+[
+.B \-w
+.IR outputwidth
+]
+[
+.B \-C
+.I controlfile
+]
+.PD 0
+.IP
+.PD
+[
+.B \-I
+.I infocode
+]
+[
+.I message
+]
+
+.SH DESCRIPTION
+.B FIGlet
+prints its input using large characters
+(called ``FIGcharacters'')made up of ordinary
+screen characters
+(called ``sub-characters'').
+.B FIGlet
+output is generally reminiscent of the
+sort of ``signatures'' many people like to put at the end of e-mail
+and UseNet messages. It is also reminiscent of the output of some banner
+programs, although it is oriented normally, not sideways.
+
+.B FIGlet
+can print in a variety of fonts, both left-to-right and right-to-left,
+with adjacent FIGcharacters kerned and ``smushed'' together in various ways.
+.B FIGlet
+fonts are stored in
+separate files, which can be identified by the suffix
+.RB `` .flf ''.
+In systems with UTF-8 support
+.B FIGlet
+may also support TOIlet
+.RB `` .tlf ''
+fonts. Most
+.B FIGlet
+font files will be stored in
+.B FIGlet's
+default font directory.
+
+.B FIGlet
+can also use ``control files'', which tell it to map certain input
+characters to certain other characters, similar to the Unix
+.B tr
+command. Control files can be identified by the suffix
+.RB `` .flc ''.
+Most
+.B FIGlet
+control files will be stored in
+.B FIGlet's
+default font directory.
+
+You can store
+.B FIGlet
+fonts and control files
+in compressed form.
+See
+.BR "COMPRESSED FONTS" .
+
+.SH USAGE
+Just start up
+.B FIGlet
+(type
+.RB `` figlet '')
+and then type whatever you want.
+Alternatively, pipe a file or the output of another command through
+.BR FIGlet ,
+or put input on the command line
+after the options.
+See
+.B EXAMPLES
+for other things to do.
+
+.SH OPTIONS
+.B FIGlet
+reads command line options from left to right, and only the last
+option that affects a parameter has any effect. Almost every option
+has an inverse, so that, for example, if
+.B FIGlet
+is customized with a shell
+.BR alias ,
+all the options are usually still available.
+
+Commonly-used options are
+.BR \-f ,
+.BR \-c ,
+.BR \-k ,
+.BR \-t ,
+.B \-p
+and
+.BR \-v .
+
+.TP
+.BI \-f \ fontfile
+Select the font. The
+.B .flf
+suffix may be left off of
+.IR fontfile ,
+in which case
+.B FIGlet
+automatically appends it.
+.B FIGlet
+looks for the file first in the default font directory and then
+in the current directory, or, if
+.I fontfile
+was given as a full pathname, in the given directory.
+If the
+.B \-f
+option is not specified,
+.B FIGlet
+uses the font that was specified
+when it was compiled. To find out which font this is, use the
+.B \-I3
+option.
+
+.TP
+.BI \-d \ fontdirectory
+Change the default font directory.
+.B FIGlet
+looks for fonts first in the
+default directory and then in the current directory.
+If the
+.B \-d
+option is not specified,
+.B FIGlet
+uses the directory that was specified
+when it was compiled. To find out which directory this is, use the
+.B \-I2
+option.
+
+.TP
+.B \-c
+.PD 0
+.TP
+.B \-l
+.PD 0
+.TP
+.B \-r
+.PD 0
+.TP
+.B \-x
+.PD
+These options handle the justification of
+.B FIGlet
+output.
+.B \-c
+centers the output horizontally.
+.B \-l
+makes the output flush-left.
+.B \-r
+makes it flush-right.
+.B \-x
+(default) sets the justification according to whether left-to-right or
+right-to-left text is selected. Left-to-right text will be flush-left,
+while right-to-left text will be flush-right. (Left-to-right versus
+right-to-left text is controlled by
+.BR \-L ,
+.B \-R
+and
+.BR \-X .)
+
+.TP
+.B \-t
+.PD 0
+.TP
+.BI \-w \ outputwidth
+.PD
+These options control the
+.IR outputwidth ,
+or the screen width
+.B FIGlet
+assumes when formatting its output.
+.B FIGlet
+uses the
+.I outputwidth
+to determine when to break lines and how to center
+the output. Normally,
+.B FIGlet
+assumes 80 columns so that people with wide terminals
+won't annoy the people they e-mail
+.B FIGlet
+output to.
+.B \-t
+sets the
+.I outputwidth
+to the terminal width. If the terminal width cannot be determined,
+the previous
+.I outputwidth
+is retained.
+.B \-w
+sets the
+.I outputwidth
+to the given integer. An
+.I outputwidth
+of 1 is a special value that tells
+.B FIGlet
+to print each non-space FIGcharacter, in its entirety, on a separate line,
+no matter how wide it is.
+
+.TP
+.B \-p
+.PD 0
+.TP
+.B \-n
+.PD
+These options control how
+.B FIGlet
+handles newlines.
+.B \-p
+puts
+.B FIGlet
+into ``paragraph mode'', which eliminates some unnecessary line
+breaks when piping a multi-line file through
+.BR FIGlet .
+In paragraph mode,
+.B FIGlet
+treats line breaks within a paragraph as if they were merely blanks
+between words. (Specifically,
+.B \-p
+causes
+.B FIGlet
+to convert any newline which is not preceded by a newline and not
+followed by a space character into a blank.)
+.B \-n
+(default) puts
+.B FIGlet
+back to normal, in which every newline
+.B FIGlet
+reads causes it to produce a line break.
+
+.TP
+.B \-D
+.PD 0
+.TP
+.B \-E
+.PD
+.B \-D
+switches to the German (ISO 646-DE) character set. Turns `[', `\e'
+and `]' into umlauted A, O and U, respectively. `{', `|' and `}' turn
+into the respective lower case versions of these. `~' turns into s-z.
+.B \-E
+turns off
+.B \-D
+processing.
+These options are deprecated,
+which means they probably will not appear
+in the next version of
+.BR FIGlet .
+
+.TP
+.BI \-C \ controlfile
+.PD 0
+.TP
+.B \-N
+.PD
+These options deal with
+.B FIGlet
+.IR controlfiles .
+A
+.I controlfile
+is a file containing a list of commands that
+.B FIGlet
+executes each time it reads a character. These commands can map certain
+input characters to other characters, similar to the Unix
+.B tr
+command or the
+.B FIGlet
+.B \-D
+option.
+.B FIGlet
+maintains a list of
+.IR controlfiles ,
+which is empty when
+.B FIGlet
+starts up.
+.B \-C
+adds the given
+.I controlfile
+to the list.
+.B \-N
+clears the
+.I controlfile
+list, cancelling the effect of any previous
+.BR \-C .
+.B FIGlet
+executes the commands in all
+.I controlfiles
+in the list. See
+the file
+.IR figfont.txt ,
+provided with FIGlet,
+for details on how to write a
+.IR controlfile .
+
+.TP
+.B \-s
+.PD 0
+.TP
+.B \-S
+.PD 0
+.TP
+.B \-k
+.PD 0
+.TP
+.B \-W
+.PD
+.TP
+.B \-o
+.PD
+These options control how
+.B FIGlet
+spaces the FIGcharacters that it outputs.
+.B \-s
+(default) and
+.B \-S
+cause ``smushing''.
+The FIGcharacters are displayed
+as close together as possible,
+and overlapping sub-characters are removed.
+Exactly which sub-characters count as ``overlapping''
+depends on the font's
+.IR layoutmode ,
+which is defined by the font's author.
+.B \-k
+causes ``kerning''. As many blanks as possible are
+removed between FIGcharacters, so that they
+touch, but the FIGcharacters are not smushed.
+.B \-W
+makes
+.B FIGlet
+display all FIGcharacters at their full width,
+which may be fixed or variable, depending on the font.
+
+The difference between
+.B \-s
+and
+.B \-S
+is that
+.B \-s
+will not smush a font whose author specified
+kerning or full width as the default
+.IR layoutmode ,
+whereas
+.B \-S
+will attempt to do so.
+
+If there is no information in the font
+about how to smush,
+or if the
+.B \-o
+option is specified,
+then the FIGcharacters are ``overlapped''.
+This means that after kerning,
+the first subcharacter of
+each FIGcharacter is removed.
+(This is not done if a FIGcharacter
+contains only one subcharacter.)
+
+.TP
+.BI \-m \ layoutmode
+Specifies an explicit
+.I layoutmode
+between
+.B 1
+and
+.BR 63 .
+.I Smushmodes
+are explained in
+.IR figfont.txt ,
+which also provides complete information
+on the format of a
+.B FIGlet
+font.
+For the sake of backward compatibility
+with versions of
+.B FIGlet
+before 2.2,
+.B \-m0
+is equivalent to
+.BR \-k ,
+.B \-m-1
+is equivalent to
+.BR \-W ,
+and
+.B \-m-2
+is equivalent to
+.BR \-s .
+The
+.B \-m
+switch is normally
+used only by font designers testing the various
+.I layoutmodes
+with a new font.
+
+.TP
+.B \-v
+.PD 0
+.TP
+.BI \-I \ infocode
+.PD
+These options print various information about
+.BR FIGlet ,
+then exit. If several of these options are given on the command line, only
+the last is executed, and only after
+all other command-line options have been dealt with.
+
+.B \-v
+prints version and copyright information, as well as a ``Usage: ...''
+line.
+.B \-I
+prints the information corresponding to the given
+.I infocode
+in a consistent, reliable (i.e., guaranteed to be the same in
+future releases) format.
+.B \-I
+is primarily intended to be used by programs that use
+.BR FIGlet .
+.I infocode
+can be any of the following.
+.RS
+.TP
+.BR -1 " Normal operation (default)."
+This
+.I infocode
+indicates that
+.B FIGlet
+should operate normally, not giving any informational printout,
+printing its input in the selected font.
+.TP
+.BR 0 " Version and copyright."
+This is identical to
+.BR \-v .
+.TP
+.BR 1 " Version (integer)."
+This will print the version of your copy of
+.B FIGlet
+as a decimal integer. The main version number is multiplied by 10000,
+the sub-version number is multiplied by 100, and the sub-sub-version
+number is multiplied by 1. These are added together, and the result is
+printed out. For example,
+.B FIGlet
+2.2 will print
+.RB `` 20200 ''
+, version 2.2.1 will print
+.RB `` 20201 ''.
+Similarly, version 3.7.2 would print
+.RB `` 30702 ''.
+These numbers are guaranteed to be
+ascending, with later versions having higher numbers. Note that
+the first major release of
+.BR FIGlet ,
+version 2.0, did not have the
+.B \-I
+option.
+.TP
+.BR 2 " Default font directory."
+This will print the default font directory. It is affected by the
+.B \-d
+option.
+.TP
+.BR 3 " Font."
+This will print the name of the font
+.B FIGlet
+would use. It is affected by
+the
+.B \-f
+option.
+This is not a filename; the
+.RB `` .flf ''
+suffix is not printed.
+.TP
+.BR 4 " Output width."
+This will print the value
+.B FIGlet
+would use for
+.IR outputwidth ,
+the number of columns wide
+.B FIGlet
+assumes the screen is.
+It is affected by the
+.B \-w
+and
+.B \-t
+options.
+.TP
+.BR 5 " Supported font formats."
+This will list font formats supported by
+.B FIGlet .
+Possible formats are
+.RB `` flf2 ''
+for FIGfont Version 2
+.B .flf
+files and
+.RB `` tlf2 ''
+for TOIlet
+.B .tlf
+files.
+.RE
+.IP
+If
+.I infocode
+is any other positive value,
+.B FIGlet
+will simply exit without printing anything.
+
+.TP
+.B \-L
+.PD 0
+.TP
+.B \-R
+.PD 0
+.TP
+.B \-X
+.PD
+These options control whether
+.B FIGlet
+prints left-to-right or right-to-left.
+.B \-L
+selects left-to-right printing.
+.B \-R
+selects right-to-left printing.
+.B \-X
+(default) makes
+.B FIGlet
+use whichever is specified in the font file.
+
+Once the options are read,
+if there are any remaining words on the command line,
+they are used instead
+of standard input as the source of text.
+This feature
+allows shell scripts to generate large letters without having to dummy
+up standard input files.
+
+An empty argument, obtained by two sequential quotes,
+results in a line break.
+
+.SH EXAMPLES
+To use
+.B FIGlet
+with its default settings, simply type
+.RS
+.nf
+.ft B
+
+example% figlet
+
+.ft R
+.fi
+.RE
+and then type whatever you like.
+
+To change the font, use the
+.B \-f
+option, for example,
+.RS
+.nf
+.ft B
+
+example% figlet \-f script
+
+.ft R
+.fi
+.RE
+
+Use the
+.B \-c
+option if you would prefer centered output:
+.RS
+.nf
+.ft B
+
+example% figlet \-c
+
+.ft R
+.fi
+.RE
+
+We have found that the most common use of
+.B FIGlet
+is making up large text to be placed in e-mail messages. For this
+reason,
+.B FIGlet
+defaults to 80 column output. If you are using a wider terminal, and
+would like
+.B FIGlet
+to use the full width of your terminal, use the
+.B \-t
+option:
+.RS
+.nf
+.ft B
+
+example% figlet \-t
+
+.ft R
+.fi
+.RE
+
+If you don't want
+.B FIGlet
+to smush FIGcharacters into each other, use the
+.B \-k
+option:
+.RS
+.nf
+.ft B
+
+example% figlet \-k
+
+.ft R
+.fi
+.RE
+
+If
+.B figlet
+gets its input from a file, it is often a good idea to use
+.BR \-p :
+.RS
+.nf
+.ft B
+
+example% figlet \-p < myfile
+
+.ft R
+.fi
+.RE
+
+Of course, the above can be combined:
+.RS
+.nf
+.ft B
+
+example% figlet \-ptk \-f shadow < anotherfile
+example% figlet \-cf slant
+
+.ft R
+.fi
+.RE
+
+Finally, if you want to have
+.B FIGlet
+take the input from the command
+line instead of a file:
+.RS
+.nf
+.ft B
+
+example% figlet Hello world
+
+.ft R
+.fi
+.RE
+
+.SS Other Things to Try
+On many systems nice effects can be obtained from the
+.B lean
+font by piping it through
+.BR tr .
+Some you might want to try are the following:
+
+.RS
+.nf
+.ft B
+example% figlet \-f lean | tr ' _/' ' ()'
+example% figlet \-f lean | tr ' _/' './\e\e'
+example% figlet \-f lean | tr ' _/' ' //'
+example% figlet \-f lean | tr ' _/' '/ '
+.ft R
+.fi
+.RE
+
+Similar things can be done with the
+.B block
+font and many of the other
+.B FIGlet
+fonts.
+
+.SH COMPRESSED FONTS
+You can compress the fonts and controlfiles
+using the
+.B zip
+archiving program.
+Place only one font or controlfile in each archive,
+and rename the archive file (which will have a name
+ending in
+.BR .zip )
+back to
+.B .flf
+or
+.B .flc
+as the case may be.
+If you don't rename the file appropriately,
+.B FIGlet
+won't be able to find it.
+
+.B FIGlet
+does not care what the filename within the
+.B .zip
+archive is, and will process only the first file.
+
+The
+.B .zip
+format was chosen because tools to create and manipulate it
+are widely available for free
+on many platforms.
+
+.SH THE STANDARD FONTS
+
+Here are a few notes about some of the fonts provided with
+.IR FIGlet .
+You can get many other font from the Web site
+.br
+http://www.figlet.org/ This location
+should also contain the latest version of
+.B FIGlet
+and other related utilities.
+
+The font
+.I standard
+is the basic
+.B FIGlet
+font, used when no other font is specified.
+(This default can be changed when
+.B FIGlet
+is compiled on your system.)
+The
+.I controlfiles
+.IR 8859-2 ,
+.IR 8859-3 ,
+.IR 8859-4 ,
+and
+.I 8859-9
+are provided for interpreting those character sets,
+also known as ISO Latin-2 through Latin-5 respectively.
+The character set 8859-1 (ISO Latin-1) is
+.B FIGlet's
+default and requires no special
+.IR controlfile .
+
+Closely related are the fonts
+.IR slant ,
+.IR shadow ,
+.IR small ,
+.I smslant
+(both small and slanted),
+.IR smshadow ,
+(both small and shadowed),
+and
+.IR big .
+These fonts support only Latin-1, except that
+.I big
+supports Greek FIGcharacters as well;
+the
+.I controlfiles
+.I frango
+(for Greek text written in Latin characters, so-called
+.RI `` frangovlakhika ''),
+and
+.I 8859-7
+(for mixed Latin/Greek text)
+are provided.
+
+The
+.I ivrit
+font is a right-to-left font
+including both Latin and Hebrew FIGcharacters;
+the Latin characters are those of the
+.I standard
+font.
+The available
+.I controlfiles
+are
+.IR ilhebrew ,
+which maps the letters you get
+by typing on a U.S. keyboard
+as if it were a Hebrew keyboard;
+.IR ushebrew ,
+which makes a reasonable mapping from
+Latin letters to Hebrew ones;
+and
+.IR 8859-8 ,
+which supports mixed Latin/Hebrew text.
+.B Warning:
+.B FIGlet
+doesn't support bidirectional text,
+so everything will come out right-to-left,
+even Latin letters.
+
+The fonts
+.IR terminal ,
+.IR digital ,
+and
+.I bubble
+output the input character with some decoration around it
+(or no decoration,
+in the case of
+.IR terminal ).
+The characters coded 128 to 159,
+which have varying interpretations, are output as-is.
+You can use the appropriate
+.I controlfiles
+to process Latin-2, Latin-3, or Latin-4 (but not Latin-5) text,
+provided your output device
+has screen or printer fonts that
+are appropriate for these character sets.
+
+Two script fonts are available:
+.IR script ,
+which is larger than
+.IR standard ,
+and
+.IR smscript ,
+which is smaller.
+
+The font
+.I lean
+is made up solely of `/' and `_' sub-characters;
+.I block
+is a straight (non-leaning) version of it.
+
+The font
+.I mini
+is very small, and especially suitable for e-mail signatures.
+
+The font
+.I banner
+looks like the output of the
+.B banner
+program;
+it is a capitals and small capitals font
+that doesn't support the ISO Latin-1 extensions
+to plain ASCII.
+It does, however, support the Japanese
+.I katakana
+syllabary;
+the
+.I controlfile
+.I uskata
+maps the upper-case and lower-case Latin letters
+into the 48 basic
+.I katakana
+characters,
+and the
+.I controlfile
+.I jis0201
+handles JIS 0201X (JIS-Roman)
+mixed Latin and
+.I katakana
+text.
+Furthermore, the
+.I banner
+font also supports Cyrillic (Russian)
+FIGcharacters; the
+.I controlfile
+.I 8859-5
+supports mixed Latin and Cyrillic text,
+the
+.I controlfile
+.I koi8r
+supports the popular KOI8-R mapping of mixed text,
+and the
+.I controlfile
+.I moscow
+supports a
+sensible mapping from Latin to Cyrillic,
+compatible with the
+.I moscow
+font (not supplied).
+
+The fonts
+.I mnemonic
+and
+.I safemnem
+support the mnemonic character set
+documented in RFC 1345.
+They implement a large subset of Unicode
+(over 1800 characters) very crudely,
+using ASCII-based mnemonic sequences,
+and are good for getting a quick look
+at UTF-8 unicode files,
+using the controlfile
+.IR utf8 .
+
+.SH ENVIRONMENT
+.TP
+.B FIGLET_FONTDIR
+If
+.RB $ FIGLET_FONTDIR
+is set, its value is used as a path to search for font files.
+
+.SH FILES
+.PD 0
+.TP 20
+.IB file .flf
+.B FIGlet
+font file
+.TP 20
+.IB file .flc
+.B FIGlet
+control file
+.PD
+
+.SH DIAGNOSTICS
+.B FIGlet's
+diagnostics are intended to be self-explanatory. Possible
+messages are
+
+.RS
+.nf
+.ft B
+Usage: ...
+Out of memory
+Unable to open font file
+Not a FIGlet 2 font file
+Unable to open control file
+Not a FIGlet 2 control file
+"\-t" is disabled, since ioctl is not fully implemented.
+.ft R
+.fi
+.RE
+
+This last message is printed when the
+.B \-t
+option is given, but the operating system in use does not include
+the system call
+.B FIGlet
+uses to determine the terminal width.
+
+.B FIGlet
+also prints an explanatory message if the
+.B \-F
+option is given on the command line.
+The earlier version of
+.BR FIGlet ,
+version 2.0, listed the available fonts when the
+.B \-F
+option was given. This option has been removed from
+.B FIGlet
+2.1. It has been replaced by the
+.B figlist
+script, which is part of the standard
+.B FIGlet
+package.
+
+.SH ORIGIN
+.RB `` FIGlet ''
+stands for ``Frank, Ian and Glenn's LETters''. Inspired by Frank's .sig,
+Glenn wrote (most of) it, and Ian helped.
+
+Most of the standard
+.B FIGlet
+fonts were inspired by signatures on various UseNet
+articles. Since typically hundreds of people use the same style of
+letters in their signatures, it was often not deemed necessary to give
+credit to any one font designer.
+
+.SH BUGS
+Very little error checking is done on font and control files. While
+.B FIGlet
+tries to be forgiving of errors, and should (hopefully) never actually
+crash, using an improperly-formatted file with
+.B FIGlet
+will produce unpredictable output.
+
+.B FIGlet
+does not handle format characters in a very intelligent way.
+A tab character is converted to a blank, and vertical-tab, form-feed and
+carriage-return are each converted to a newline. On many systems, tabs
+can be handled better by piping files through
+.B expand
+before piping through
+.BR FIGlet .
+
+.B FIGlet
+output is quite ugly if it is displayed in a proportionally-spaced font.
+I suppose this is to be expected.
+
+Please report any errors you find in this man page or the program to
+<info@figlet.org>
+.SH WEBSITE AND MAILING LIST
+You can get many fonts which are not in the basic
+.B FIGlet
+package from the Web site
+http://www.figlet.org/ It
+should also contain the latest version of
+.B FIGlet
+and other utilities related to
+.BR FIGlet .
+
+There is a mailing list for
+.B FIGlet
+for general discussions about
+.B FIGlet
+and a place where you can ask questions or share ideas
+with other
+.B FIGlet
+users. It is also the place where we will publish
+news about new fonts, new software updates etc.
+
+To subscribe or unsubscribe from the
+.B FIGlet
+mailing list,
+please send email to figlet-subscribe@figlet.org or figlet-unsubscribe@figlet.org or visit the
+following web page: http://www.figlet.org/mailman/listinfo/figlet
+
+.SH AUTHORS
+Glenn Chappell did most of the work.
+You can e-mail him but he is not an e-mail fanatic; people who e-mail
+Glenn will probably get answers, but if you e-mail his best friend:
+
+Ian Chai, who
+.I is
+an e-mail fanatic, you'll get answers, endless conversation about the
+mysteries of life, invitations to join some 473 mailing lists and a
+free toaster. (Well, ok, maybe not the free toaster.)
+
+Frank inspired this whole project with his .sig, but don't e-mail
+him; he's decidedly an un-e-mail-fanatic.
+
+Gilbert "The Mad Programmer" Healton added the
+.B \-A
+option for version 2.1.1. This option specified input from
+the command line; it is still allowed,
+but has no effect.
+
+John Cowan added the
+.BR \-o ,
+.BR \-s ,
+.BR \-k ,
+.BR \-S ,
+and
+.B \-W
+options, and
+the support for Unicode mapping tables,
+ISO 2022/HZ/Shift-JIS/UTF-8 input,
+and compressed fonts
+and control files.
+He also revised this documentation,
+with a lot of input from
+Paul Burton.
+
+Claudio Matsuoka added the support for
+.B .tlf
+files for version 2.2.4 and performs random hacks and bugfixes.
+
+As a fan of FIGlet, Christiaan Keet revised the official FIGlet documentation
+and set up the new FIGlet website at http://www.figlet.org/ (and the
+corresponding ftp://ftp.figlet.org/pub/figlet/)
+
+.SH SEE ALSO
+.BR figlist (6),
+.BR chkfont (6),
+.BR showfigfonts (6),
+.BR toilet (1)
diff --git a/externals/figlet/figlet.c b/externals/figlet/figlet.c
new file mode 100644
index 000000000..d34b19a8b
--- /dev/null
+++ b/externals/figlet/figlet.c
@@ -0,0 +1,2131 @@
+/****************************************************************************
+
+ FIGlet Copyright 1991, 1993, 1994 Glenn Chappell and Ian Chai
+ FIGlet Copyright 1996, 1997, 1998, 1999, 2000, 2001 John Cowan
+ FIGlet Copyright 2002 Christiaan Keet
+ FIGlet Copyright 2011, 2012 Claudio Matsuoka
+ Portions written by Paul Burton and Christiaan Keet
+ Internet: <info@figlet.org>
+ FIGlet, along with the various FIGlet fonts and documentation, is
+ copyrighted under the provisions of the New BSD License (3-clause)
+ (as listed in the file "LICENSE" which is included in this package)
+****************************************************************************/
+
+#define DATE "31 May 2012"
+#define VERSION "2.2.5"
+#define VERSION_INT 20205
+
+/* FIGlet (Frank, Ian & Glenn's Letters) */
+/* by Glenn Chappell */
+/* Apr 1991 */
+/* Automatic file addition by Ian Chai May 1991 */
+/* Punctuation and numbers addition by Ian Chai Jan 1993 */
+/* Full ASCII by Glenn Chappell Feb 1993 */
+/* Line-breaking, general rewrite by Glenn Chappell Mar 1993 */
+/* Hard blanks by Glenn Chappell Apr 1993 */
+/* Release 2.0 5 Aug 1993 */
+/* Right-to-left printing, extended char set by Glenn Chappell Dec 1993 */
+/* Control files by Glenn Chappell Feb 1994 */
+/* Release 2.1 12 Aug 1994 */
+/* Release 2.1.1 25 Aug 1994 */
+/* Release 2.1.2 by Gilbert (Mad Programmer) Healton: Add -A command line
+ option. Sept 8, 1996 */
+/* Release 2.2 by John Cowan: multibyte inputs, compressed fonts,
+ mapping tables, kerning/smushing options. */
+/* Release 2.2.1 by Christiaan Keet: minor updates including readmes
+ FAQs and comments. 13 July 2002. The new official FIGlet website is
+ http://www.figlet.org/ */
+/* Release 2.2.2 by Christiaan Keet: License changed from "Artistic License"
+ to "Academic Free License" as agreed by FIGlet authors. 05 July 2005 */
+/* Release 2.2.3 by Claudio Matsuoka, 12 Jan 2011: BSD license, fixes */
+/* Release 2.2.4 by Claudio Matsuoka, 26 Jan 2011: tlf2 font support */
+/* Release 2.2.5 by Claudio Matsuoka, 31 May 2012: flc licensing, minor fixes */
+
+/*---------------------------------------------------------------------------
+ DEFAULTFONTDIR and DEFAULTFONTFILE should be defined in the Makefile.
+ DEFAULTFONTDIR is the full path name of the directory in which FIGlet
+ will search first for fonts (the ".flf" files).
+ DEFAULTFONTFILE is the filename of the font to be used if no other
+ is specified (standard.flf is recommended, but any other can be
+ used). This file should reside in the directory specified by
+ DEFAULTFONTDIR.
+---------------------------------------------------------------------------*/
+#ifndef DEFAULTFONTDIR
+#define DEFAULTFONTDIR "fonts"
+#endif
+#ifndef DEFAULTFONTFILE
+#define DEFAULTFONTFILE "standard.flf"
+#endif
+
+#include <stdio.h>
+#ifdef __STDC__
+#include <stdlib.h>
+#endif
+#include <string.h>
+#include <ctype.h>
+#include <sys/stat.h>
+#include <fcntl.h> /* Needed for get_columns */
+
+#if defined(unix) || defined(__unix__) || defined(__APPLE__)
+#include <unistd.h>
+#include <sys/ioctl.h> /* Needed for get_columns */
+#endif
+
+#ifdef TLF_FONTS
+#include <wchar.h>
+#include <wctype.h>
+#include "utf8.h"
+#endif
+
+#include "zipio.h" /* Package for reading compressed files */
+
+#define MYSTRLEN(x) ((int)strlen(x)) /* Eliminate ANSI problem */
+
+#define DIRSEP '/'
+#define DIRSEP2 '\\'
+/* Leave alone for Unix and MS-DOS/Windows!
+Note: '/' also used in filename in get_columns(). */
+
+#define FONTFILESUFFIX ".flf"
+#define FONTFILEMAGICNUMBER "flf2"
+#define FSUFFIXLEN MYSTRLEN(FONTFILESUFFIX)
+#define CONTROLFILESUFFIX ".flc"
+#define CONTROLFILEMAGICNUMBER "flc2" /* no longer used in 2.2 */
+#define CSUFFIXLEN MYSTRLEN(CONTROLFILESUFFIX)
+#define DEFAULTCOLUMNS 80
+#define MAXLEN 255 /* Maximum character width */
+
+/* Add support for Sam Hocevar's TOIlet fonts */
+#ifdef TLF_FONTS
+#define TOILETFILESUFFIX ".tlf"
+#define TOILETFILEMAGICNUMBER "tlf2"
+#define TSUFFIXLEN MYSTRLEN(TOILETFILESUFFIX)
+
+int toiletfont; /* true if font is a TOIlet TLF font */
+#endif
+
+
+/****************************************************************************
+
+ Globals dealing with chars that are read
+
+****************************************************************************/
+
+typedef long inchr; /* "char" read from stdin */
+
+inchr *inchrline; /* Alloc'd inchr inchrline[inchrlinelenlimit+1]; */
+ /* Note: not null-terminated. */
+int inchrlinelen,inchrlinelenlimit;
+inchr deutsch[7] = {196, 214, 220, 228, 246, 252, 223};
+ /* Latin-1 codes for German letters, respectively:
+ LATIN CAPITAL LETTER A WITH DIAERESIS = A-umlaut
+ LATIN CAPITAL LETTER O WITH DIAERESIS = O-umlaut
+ LATIN CAPITAL LETTER U WITH DIAERESIS = U-umlaut
+ LATIN SMALL LETTER A WITH DIAERESIS = a-umlaut
+ LATIN SMALL LETTER O WITH DIAERESIS = o-umlaut
+ LATIN SMALL LETTER U WITH DIAERESIS = u-umlaut
+ LATIN SMALL LETTER SHARP S = ess-zed
+ */
+
+int hzmode; /* true if reading double-bytes in HZ mode */
+int gndbl[4]; /* gndbl[n] is true if Gn is double-byte */
+inchr gn[4]; /* Gn character sets: ASCII, Latin-1, none, none */
+int gl; /* 0-3 specifies left-half Gn character set */
+int gr; /* 0-3 specifies right-half Gn character set */
+
+int Myargc; /* to avoid passing around argc and argv */
+char **Myargv;
+
+/****************************************************************************
+
+ Globals dealing with chars that are written
+
+****************************************************************************/
+
+#ifdef TLF_FONTS
+typedef wchar_t outchr; /* "char" written to stdout */
+#define STRLEN(x) wcslen(x)
+#define STRCPY(x,y) wcscpy((x),(y))
+#define STRCAT(x,y) wcscat((x),(y))
+#define ISSPACE(x) iswspace(x)
+#else
+typedef char outchr; /* "char" written to stdout */
+#define STRLEN(x) MYSTRLEN(x)
+#define STRCPY(x,y) strcpy((x),(y))
+#define STRCAT(x,y) strcat((x),(y))
+#define ISSPACE(x) isspace(x)
+#endif
+
+typedef struct fc {
+ inchr ord;
+ outchr **thechar; /* Alloc'd char thechar[charheight][]; */
+ struct fc *next;
+ } fcharnode;
+
+fcharnode *fcharlist;
+outchr **currchar;
+int currcharwidth;
+int previouscharwidth;
+outchr **outputline; /* Alloc'd char outputline[charheight][outlinelenlimit+1]; */
+int outlinelen;
+
+
+/****************************************************************************
+
+ Globals dealing with command file storage
+
+****************************************************************************/
+
+typedef struct cfn {
+ char *thename;
+ struct cfn *next;
+ } cfnamenode;
+
+cfnamenode *cfilelist,**cfilelistend;
+
+typedef struct cm {
+ int thecommand;
+ inchr rangelo;
+ inchr rangehi;
+ inchr offset;
+ struct cm *next;
+ } comnode;
+
+comnode *commandlist,**commandlistend;
+
+/****************************************************************************
+
+ Globals affected by command line options
+
+****************************************************************************/
+
+int deutschflag,justification,paragraphflag,right2left,multibyte;
+int cmdinput;
+
+#define SM_SMUSH 128
+#define SM_KERN 64
+#define SM_EQUAL 1
+#define SM_LOWLINE 2
+#define SM_HIERARCHY 4
+#define SM_PAIR 8
+#define SM_BIGX 16
+#define SM_HARDBLANK 32
+
+int smushmode;
+
+#define SMO_NO 0 /* no command-line smushmode */
+#define SMO_YES 1 /* use command-line smushmode, ignore font smushmode */
+#define SMO_FORCE 2 /* logically OR command-line and font smushmodes */
+
+int smushoverride;
+
+int outputwidth;
+int outlinelenlimit;
+char *fontdirname,*fontname;
+
+
+/****************************************************************************
+
+ Globals read from font file
+
+****************************************************************************/
+
+char hardblank;
+int charheight;
+
+
+/****************************************************************************
+
+ Name of program, used in error messages
+
+****************************************************************************/
+
+char *myname;
+
+
+#ifdef TIOCGWINSZ
+/****************************************************************************
+
+ get_columns
+
+ Determines the number of columns of /dev/tty. Returns the number of
+ columns, or -1 if error. May return 0 if columns unknown.
+ Requires include files <fcntl.h> and <sys/ioctl.h>.
+ by Glenn Chappell & Ian Chai 14 Apr 1993
+
+****************************************************************************/
+
+int get_columns()
+{
+ struct winsize ws;
+ int fd,result;
+
+ if ((fd = open("/dev/tty",O_WRONLY))<0) return -1;
+ result = ioctl(fd,TIOCGWINSZ,&ws);
+ close(fd);
+ return result?-1:ws.ws_col;
+}
+#endif /* ifdef TIOCGWINSZ */
+
+
+/****************************************************************************
+
+ myalloc
+
+ Calls malloc. If malloc returns error, prints error message and
+ quits.
+
+****************************************************************************/
+
+#ifdef __STDC__
+char *myalloc(size_t size)
+#else
+char *myalloc(size)
+int size;
+#endif
+{
+ char *ptr;
+#ifndef __STDC__
+ extern void *malloc();
+#endif
+
+ if ((ptr = (char*)malloc(size))==NULL) {
+ fprintf(stderr,"%s: Out of memory\n",myname);
+ exit(1);
+ }
+ else {
+ return ptr;
+ }
+}
+
+
+/****************************************************************************
+
+ hasdirsep
+
+ Returns true if s1 contains a DIRSEP or DIRSEP2 character.
+
+****************************************************************************/
+
+int hasdirsep(s1)
+char *s1;
+{
+ if (strchr(s1, DIRSEP)) return 1;
+ else if (strchr(s1, DIRSEP2)) return 1;
+ else return 0;
+}
+
+/****************************************************************************
+
+ suffixcmp
+
+ Returns true if s2 is a suffix of s1; uses case-blind comparison.
+
+****************************************************************************/
+
+int suffixcmp(s1, s2)
+char *s1;
+char *s2;
+{
+ int len1, len2;
+
+ len1 = MYSTRLEN(s1);
+ len2 = MYSTRLEN(s2);
+ if (len2 > len1) return 0;
+ s1 += len1 - len2;
+ while (*s1) {
+ if (tolower(*s1) != tolower(*s2)) return 0;
+ s1++;
+ s2++;
+ }
+ return 1;
+}
+
+/****************************************************************************
+
+ skiptoeol
+
+ Skips to the end of a line, given a stream. Handles \r, \n, or \r\n.
+
+****************************************************************************/
+
+void skiptoeol(fp)
+ZFILE *fp;
+{
+ int dummy;
+
+ while (dummy=Zgetc(fp),dummy!=EOF) {
+ if (dummy == '\n') return;
+ if (dummy == '\r') {
+ dummy = Zgetc(fp);
+ if (dummy != EOF && dummy != '\n') Zungetc(dummy,fp);
+ return;
+ }
+ }
+}
+
+
+/****************************************************************************
+
+ myfgets
+
+ Local version of fgets. Handles \r, \n, and \r\n terminators.
+
+****************************************************************************/
+
+char *myfgets(line,maxlen,fp)
+char *line;
+int maxlen;
+ZFILE *fp;
+{
+ int c = 0;
+ char *p;
+
+ p = line;
+ while((c=Zgetc(fp))!=EOF&&maxlen) {
+ *p++ = c;
+ maxlen--;
+ if (c=='\n') break;
+ if (c=='\r') {
+ c = Zgetc(fp);
+ if (c != EOF && c != '\n') Zungetc(c,fp);
+ *(p-1) = '\n';
+ break;
+ }
+ }
+ *p = 0;
+ return (c==EOF) ? NULL : line;
+}
+
+
+/****************************************************************************
+
+ usageerr
+
+ Prints "Usage: ...." line to the given stream.
+
+****************************************************************************/
+
+void printusage(out)
+FILE *out;
+{
+ fprintf(out,
+ "Usage: %s [ -cklnoprstvxDELNRSWX ] [ -d fontdirectory ]\n",
+ myname);
+ fprintf(out,
+ " [ -f fontfile ] [ -m smushmode ] [ -w outputwidth ]\n");
+ fprintf(out,
+ " [ -C controlfile ] [ -I infocode ] [ message ]\n");
+}
+
+
+/****************************************************************************
+
+ printinfo
+
+ Prints version and copyright message, or utility information.
+
+****************************************************************************/
+
+void printinfo(infonum)
+int infonum;
+{
+ switch (infonum) {
+ case 0: /* Copyright message */
+ printf("FIGlet Copyright (C) 1991-2012 Glenn Chappell, Ian Chai, ");
+ printf("John Cowan,\nChristiaan Keet and Claudio Matsuoka\n");
+ printf("Internet: <info@figlet.org> ");
+ printf("Version: %s, date: %s\n\n",VERSION,DATE);
+ printf("FIGlet, along with the various FIGlet fonts");
+ printf(" and documentation, may be\n");
+ printf("freely copied and distributed.\n\n");
+ printf("If you use FIGlet, please send an");
+ printf(" e-mail message to <info@figlet.org>.\n\n");
+ printf("The latest version of FIGlet is available from the");
+ printf(" web site,\n\thttp://www.figlet.org/\n\n");
+ printusage(stdout);
+ break;
+ case 1: /* Version (integer) */
+ printf("%d\n",VERSION_INT);
+ break;
+ case 2: /* Font directory */
+ printf("%s\n",fontdirname);
+ break;
+ case 3: /* Font */
+ printf("%s\n",fontname);
+ break;
+ case 4: /* Outputwidth */
+ printf("%d\n",outputwidth);
+ break;
+ case 5: /* Font formats */
+ printf("%s", FONTFILEMAGICNUMBER);
+#ifdef TLF_FONTS
+ printf(" %s", TOILETFILEMAGICNUMBER);
+#endif
+ printf("\n");
+ }
+}
+
+
+/****************************************************************************
+
+ readmagic
+
+ Reads a four-character magic string from a stream.
+
+****************************************************************************/
+void readmagic(fp,magic)
+ZFILE *fp;
+char *magic;
+{
+ int i;
+
+ for (i=0;i<4;i++) {
+ magic[i] = Zgetc(fp);
+ }
+ magic[4] = 0;
+ }
+
+/****************************************************************************
+
+ skipws
+
+ Skips whitespace characters from a stream.
+
+****************************************************************************/
+void skipws(fp)
+ZFILE *fp;
+{
+ int c;
+ while (c=Zgetc(fp),isascii(c)&&isspace(c)) ;
+ Zungetc(c,fp);
+ }
+
+/****************************************************************************
+
+ readnum
+
+ Reads a number from a stream. Accepts "0" prefix for octal and
+ "0x" or "0X" for hexadecimal. Ignores leading whitespace.
+
+****************************************************************************/
+void readnum(fp,nump)
+ZFILE *fp;
+inchr *nump;
+{
+ int acc = 0;
+ char *p;
+ int c;
+ int base;
+ int sign = 1;
+ char digits[] = "0123456789ABCDEF";
+
+ skipws(fp);
+ c = Zgetc(fp);
+ if (c=='-') {
+ sign = -1;
+ }
+ else {
+ Zungetc(c,fp);
+ }
+ c = Zgetc(fp);
+ if (c=='0') {
+ c = Zgetc(fp);
+ if (c=='x'||c=='X') {
+ base = 16;
+ }
+ else {
+ base = 8;
+ Zungetc(c,fp);
+ }
+ }
+ else {
+ base = 10;
+ Zungetc(c,fp);
+ }
+
+ while((c=Zgetc(fp))!=EOF) {
+ c=toupper(c);
+ p=strchr(digits,c);
+ if (!p) {
+ Zungetc(c,fp);
+ *nump = acc * sign;
+ return;
+ }
+ acc = acc*base+(p-digits);
+ }
+ *nump = acc * sign;
+ }
+
+/****************************************************************************
+
+ readTchar
+
+ Reads a control file "T" command character specification.
+
+ Character is a single byte, an escape sequence, or
+ an escaped numeric.
+
+****************************************************************************/
+
+inchr readTchar(fp)
+ZFILE *fp;
+{
+ inchr thechar;
+ char next;
+
+ thechar=Zgetc(fp);
+ if (thechar=='\n' || thechar=='\r') { /* Handle badly-formatted file */
+ Zungetc(thechar,fp);
+ return '\0';
+ }
+ if (thechar!='\\') return thechar;
+ next=Zgetc(fp);
+ switch(next) {
+ case 'a':
+ return 7;
+ case 'b':
+ return 8;
+ case 'e':
+ return 27;
+ case 'f':
+ return 12;
+ case 'n':
+ return 10;
+ case 'r':
+ return 13;
+ case 't':
+ return 9;
+ case 'v':
+ return 11;
+ default:
+ if (next=='-' || next=='x' || (next>='0' && next<='9')) {
+ Zungetc(next,fp);
+ readnum(fp,&thechar);
+ return thechar;
+ }
+ return next;
+ }
+}
+
+/****************************************************************************
+
+ charsetname
+
+ Get a Tchar representing a charset name, or 0 if none available.
+ Called in getcharset().
+
+****************************************************************************/
+
+inchr charsetname(fp)
+ZFILE *fp;
+{
+ inchr result;
+
+ result = readTchar(fp);
+ if (result == '\n' || result == '\r') {
+ result = 0;
+ Zungetc(result,fp);
+ }
+ return result;
+ }
+
+/****************************************************************************
+
+ charset
+
+ Processes "g[0123]" character set specifier
+ Called in readcontrol().
+
+****************************************************************************/
+
+void charset(n, controlfile)
+int n;
+ZFILE *controlfile;
+{
+ int ch;
+
+ skipws(controlfile);
+ if (Zgetc(controlfile) != '9') {
+ skiptoeol(controlfile);
+ return;
+ }
+ ch = Zgetc(controlfile);
+ if (ch == '6') {
+ gn[n] = 65536L * charsetname(controlfile) + 0x80;
+ gndbl[n] = 0;
+ skiptoeol(controlfile);
+ return;
+ }
+ if (ch != '4') {
+ skiptoeol(controlfile);
+ return;
+ }
+ ch = Zgetc(controlfile);
+ if (ch == 'x') {
+ if (Zgetc(controlfile) != '9') {
+ skiptoeol(controlfile);
+ return;
+ }
+ if (Zgetc(controlfile) != '4') {
+ skiptoeol(controlfile);
+ return;
+ }
+ skipws(controlfile);
+ gn[n] = 65536L * charsetname(controlfile);
+ gndbl[n] = 1;
+ skiptoeol(controlfile);
+ return;
+ }
+ Zungetc(ch, controlfile);
+ skipws(controlfile);
+ gn[n] = 65536L * charsetname(controlfile);
+ gndbl[n] = 0;
+ return;
+ }
+
+/****************************************************************************
+
+ FIGopen
+
+ Given a FIGlet font or control file name and suffix, return the file
+ or NULL if not found
+
+****************************************************************************/
+
+ZFILE *FIGopen(name,suffix)
+char *name;
+char *suffix;
+{
+ char *fontpath;
+ ZFILE *fontfile;
+ struct stat st;
+ int namelen;
+
+ namelen = MYSTRLEN(fontdirname);
+ fontpath = (char*)alloca(sizeof(char)*
+ (namelen+MYSTRLEN(name)+MYSTRLEN(suffix)+2));
+ fontfile = NULL;
+ if (!hasdirsep(name)) { /* not a full path name */
+ strcpy(fontpath,fontdirname);
+ fontpath[namelen] = DIRSEP;
+ fontpath[namelen+1] = '\0';
+ strcat(fontpath,name);
+ strcat(fontpath,suffix);
+ if(stat(fontpath,&st)==0) goto ok;
+ }
+ /* just append suffix */
+ strcpy(fontpath,name);
+ strcat(fontpath,suffix);
+ if(stat(fontpath,&st)==0) goto ok;
+
+ return NULL;
+
+ok:
+ fontfile = Zopen(fontpath,"rb");
+ return fontfile;
+}
+
+/****************************************************************************
+
+ readcontrol
+
+ Allocates memory and reads in the given control file.
+ Called in readcontrolfiles().
+
+****************************************************************************/
+
+void readcontrol(controlname)
+char *controlname;
+{
+ inchr firstch,lastch;
+ char dashcheck;
+ inchr offset;
+ int command;
+ ZFILE *controlfile;
+
+ controlfile = FIGopen(controlname,CONTROLFILESUFFIX);
+
+ if (controlfile==NULL) {
+ fprintf(stderr,"%s: %s: Unable to open control file\n",myname,
+ controlname);
+ exit(1);
+ }
+
+ (*commandlistend) = (comnode*)myalloc(sizeof(comnode));
+ (*commandlistend)->thecommand = 0; /* Begin with a freeze command */
+ commandlistend = &(*commandlistend)->next;
+ (*commandlistend) = NULL;
+
+ while(command=Zgetc(controlfile),command!=EOF) {
+ switch (command) {
+ case 't': /* Translate */
+ skipws(controlfile);
+ firstch=readTchar(controlfile);
+ if ((dashcheck=Zgetc(controlfile))=='-') {
+ lastch=readTchar(controlfile);
+ }
+ else {
+ Zungetc(dashcheck,controlfile);
+ lastch=firstch;
+ }
+ skipws(controlfile);
+ offset=readTchar(controlfile)-firstch;
+ skiptoeol(controlfile);
+ (*commandlistend) = (comnode*)myalloc(sizeof(comnode));
+ (*commandlistend)->thecommand = 1;
+ (*commandlistend)->rangelo = firstch;
+ (*commandlistend)->rangehi = lastch;
+ (*commandlistend)->offset = offset;
+ commandlistend = &(*commandlistend)->next;
+ (*commandlistend) = NULL;
+ break;
+ case '0': case '1': case '2': case '3': case '4':
+ case '5': case '6': case '7': case '8': case '9':
+ case '-':
+ /* Mapping table entry */
+ Zungetc(command,controlfile);
+ readnum(controlfile,&firstch);
+ skipws(controlfile);
+ readnum(controlfile,&lastch);
+ offset=lastch-firstch;
+ lastch=firstch;
+ skiptoeol(controlfile);
+ (*commandlistend) = (comnode*)myalloc(sizeof(comnode));
+ (*commandlistend)->thecommand = 1;
+ (*commandlistend)->rangelo = firstch;
+ (*commandlistend)->rangehi = lastch;
+ (*commandlistend)->offset = offset;
+ commandlistend = &(*commandlistend)->next;
+ (*commandlistend) = NULL;
+ break;
+ case 'f': /* freeze */
+ skiptoeol(controlfile);
+ (*commandlistend) = (comnode*)myalloc(sizeof(comnode));
+ (*commandlistend)->thecommand = 0;
+ commandlistend = &(*commandlistend)->next;
+ (*commandlistend) = NULL;
+ break;
+ case 'b': /* DBCS input mode */
+ multibyte = 1;
+ break;
+ case 'u': /* UTF-8 input mode */
+ multibyte = 2;
+ break;
+ case 'h': /* HZ input mode */
+ multibyte = 3;
+ break;
+ case 'j': /* Shift-JIS input mode */
+ multibyte = 4;
+ break;
+ case 'g': /* ISO 2022 character set choices */
+ multibyte = 0;
+ skipws(controlfile);
+ command=Zgetc(controlfile);
+ switch (command) {
+ case '0': /* define G0 charset */
+ charset(0, controlfile);
+ break;
+ case '1': /* set G1 charset */
+ charset(1, controlfile);
+ break;
+ case '2': /* set G2 charset */
+ charset(2, controlfile);
+ break;
+ case '3': /* set G3 charset */
+ charset(3, controlfile);
+ break;
+ case 'l': case 'L': /* define left half */
+ skipws(controlfile);
+ gl = Zgetc(controlfile) - '0';
+ skiptoeol(controlfile);
+ break;
+ case 'r': case 'R': /* define right half */
+ skipws(controlfile);
+ gr = Zgetc(controlfile) - '0';
+ skiptoeol(controlfile);
+ break;
+ default: /* meaningless "g" command */
+ skiptoeol(controlfile);
+ }
+ case '\r': case '\n': /* blank line */
+ break;
+ default: /* Includes '#' */
+ skiptoeol(controlfile);
+ }
+ }
+ Zclose(controlfile);
+}
+
+
+/****************************************************************************
+
+ readcontrolfiles
+
+ Reads in the controlfiles names in cfilelist. Uses readcontrol.
+ Called in main().
+
+****************************************************************************/
+
+void readcontrolfiles()
+{
+ cfnamenode *cfnptr;
+
+ for (cfnptr=cfilelist;cfnptr!=NULL;cfnptr=cfnptr->next) {
+ readcontrol(cfnptr->thename);
+ }
+}
+
+
+/****************************************************************************
+
+ clearcfilelist
+
+ Clears the control file list. Assumes thename does not need freeing.
+
+****************************************************************************/
+
+void clearcfilelist()
+{
+ cfnamenode *cfnptr1,*cfnptr2;
+
+ cfnptr1 = cfilelist;
+ while (cfnptr1 != NULL) {
+ cfnptr2 = cfnptr1->next;
+ free(cfnptr1);
+ cfnptr1 = cfnptr2;
+ }
+ cfilelist = NULL;
+ cfilelistend = &cfilelist;
+}
+
+
+/****************************************************************************
+
+ getparams
+
+ Handles all command-line parameters. Puts all parameters within
+ bounds.
+
+****************************************************************************/
+
+void getparams()
+{
+ extern char *optarg;
+ extern int optind;
+ int c; /* "Should" be a char -- need int for "!= -1" test*/
+ int columns,infoprint;
+ char *controlname,*env;
+
+ if ((myname = strrchr(Myargv[0],DIRSEP))!=NULL) {
+ myname++;
+ }
+ else {
+ myname = Myargv[0];
+ }
+ fontdirname = DEFAULTFONTDIR;
+ env = getenv("FIGLET_FONTDIR");
+ if (env!=NULL) {
+ fontdirname = env;
+ }
+ fontname = DEFAULTFONTFILE;
+ cfilelist = NULL;
+ cfilelistend = &cfilelist;
+ commandlist = NULL;
+ commandlistend = &commandlist;
+ smushoverride = SMO_NO;
+ deutschflag = 0;
+ justification = -1;
+ right2left = -1;
+ paragraphflag = 0;
+ infoprint = -1;
+ cmdinput = 0;
+ outputwidth = DEFAULTCOLUMNS;
+ gn[1] = 0x80;
+ gr = 1;
+ while ((c = getopt(Myargc,Myargv,"ADEXLRI:xlcrpntvm:w:d:f:C:NFskSWo"))!= -1) {
+ /* Note: -F is not a legal option -- prints a special err message. */
+ switch (c) {
+ case 'A':
+ cmdinput = 1;
+ break;
+ case 'D':
+ deutschflag = 1;
+ break;
+ case 'E':
+ deutschflag = 0;
+ break;
+ case 'X':
+ right2left = -1;
+ break;
+ case 'L':
+ right2left = 0;
+ break;
+ case 'R':
+ right2left = 1;
+ break;
+ case 'x':
+ justification = -1;
+ break;
+ case 'l':
+ justification = 0;
+ break;
+ case 'c':
+ justification = 1;
+ break;
+ case 'r':
+ justification = 2;
+ break;
+ case 'p':
+ paragraphflag = 1;
+ break;
+ case 'n':
+ paragraphflag = 0;
+ break;
+ case 's':
+ smushoverride = SMO_NO;
+ break;
+ case 'k':
+ smushmode = SM_KERN;
+ smushoverride = SMO_YES;
+ break;
+ case 'S':
+ smushmode = SM_SMUSH;
+ smushoverride = SMO_FORCE;
+ break;
+ case 'o':
+ smushmode = SM_SMUSH;
+ smushoverride = SMO_YES;
+ break;
+ case 'W':
+ smushmode = 0;
+ smushoverride = SMO_YES;
+ break;
+ case 't':
+#ifdef TIOCGWINSZ
+ columns = get_columns();
+ if (columns>0) {
+ outputwidth = columns;
+ }
+#else /* ifdef TIOCGWINSZ */
+ fprintf(stderr,
+ "%s: \"-t\" is disabled, since ioctl is not fully implemented.\n",
+ myname);
+#endif /* ifdef TIOCGWINSZ */
+ break;
+ case 'v':
+ infoprint = 0;
+ break;
+ case 'I':
+ infoprint = atoi(optarg);
+ break;
+ case 'm':
+ smushmode = atoi(optarg);
+ if (smushmode < -1) {
+ smushoverride = SMO_NO;
+ break;
+ }
+ if (smushmode == 0) smushmode = SM_KERN;
+ else if (smushmode == -1) smushmode = 0;
+ else smushmode = (smushmode & 63) | SM_SMUSH;
+ smushoverride = SMO_YES;
+ break;
+ case 'w':
+ columns = atoi(optarg);
+ if (columns>0) {
+ outputwidth = columns;
+ }
+ break;
+ case 'd':
+ fontdirname = optarg;
+ break;
+ case 'f':
+ fontname = optarg;
+ if (suffixcmp(fontname,FONTFILESUFFIX)) {
+ fontname[MYSTRLEN(fontname)-FSUFFIXLEN] = '\0';
+ }
+#ifdef TLF_FONTS
+ else if (suffixcmp(fontname,TOILETFILESUFFIX)) {
+ fontname[MYSTRLEN(fontname)-TSUFFIXLEN] = '\0';
+ }
+#endif
+ break;
+ case 'C':
+ controlname = optarg;
+ if (suffixcmp(controlname, CONTROLFILESUFFIX)) {
+ controlname[MYSTRLEN(controlname)-CSUFFIXLEN] = '\0';
+ }
+ (*cfilelistend) = (cfnamenode*)myalloc(sizeof(cfnamenode));
+ (*cfilelistend)->thename = controlname;
+ cfilelistend = &(*cfilelistend)->next;
+ (*cfilelistend) = NULL;
+ break;
+ case 'N':
+ clearcfilelist();
+ multibyte = 0;
+ gn[0] = 0;
+ gn[1] = 0x80;
+ gn[2] = gn[3] = 0;
+ gndbl[0] = gndbl[1] = gndbl[2] = gndbl[3] = 0;
+ gl = 0;
+ gr = 1;
+ break;
+ case 'F': /* Not a legal option */
+ fprintf(stderr,"%s: illegal option -- F\n",myname);
+ printusage(stderr);
+ fprintf(stderr,"\nBecause of numerous incompatibilities, the");
+ fprintf(stderr," \"-F\" option has been\n");
+ fprintf(stderr,"removed. It has been replaced by the \"figlist\"");
+ fprintf(stderr," program, which is now\n");
+ fprintf(stderr,"included in the basic FIGlet package. \"figlist\"");
+ fprintf(stderr," is also available\n");
+ fprintf(stderr,"from http://www.figlet.org/");
+ fprintf(stderr,"under UNIX utilities.\n");
+ exit(1);
+ break;
+ default:
+ printusage(stderr);
+ exit(1);
+ }
+ }
+ if (optind!=Myargc) cmdinput = 1; /* force cmdinput if more arguments */
+ outlinelenlimit = outputwidth-1;
+ if (infoprint>=0) {
+ printinfo(infoprint);
+ exit(0);
+ }
+}
+
+
+/****************************************************************************
+
+ clearline
+
+ Clears both the input (inchrline) and output (outputline) storage.
+
+****************************************************************************/
+
+void clearline()
+{
+ int i;
+
+ for (i=0;i<charheight;i++) {
+ outputline[i][0] = '\0';
+ }
+ outlinelen = 0;
+ inchrlinelen = 0;
+}
+
+
+/****************************************************************************
+
+ readfontchar
+
+ Reads a font character from the font file, and places it in a
+ newly-allocated entry in the list.
+
+****************************************************************************/
+
+void readfontchar(file,theord)
+ZFILE *file;
+inchr theord;
+{
+ int row,k;
+ char templine[MAXLEN+1];
+ outchr endchar, outline[MAXLEN+1];
+ fcharnode *fclsave;
+
+ fclsave = fcharlist;
+ fcharlist = (fcharnode*)myalloc(sizeof(fcharnode));
+ fcharlist->ord = theord;
+ fcharlist->thechar = (outchr**)myalloc(sizeof(outchr*)*charheight);
+ fcharlist->next = fclsave;
+
+ outline[0] = 0;
+
+ for (row=0;row<charheight;row++) {
+ if (myfgets(templine,MAXLEN,file)==NULL) {
+ templine[0] = '\0';
+ }
+#ifdef TLF_FONTS
+ utf8_to_wchar(templine,MAXLEN,outline,MAXLEN,0);
+#else
+ strcpy(outline,templine);
+#endif
+ k = STRLEN(outline)-1;
+ while (k>=0 && ISSPACE(outline[k])) { /* remove trailing spaces */
+ k--;
+ }
+ if (k>=0) {
+ endchar = outline[k]; /* remove endmarks */
+ while (k>=0 && outline[k]==endchar) {
+ k--;
+ }
+ }
+ outline[k+1] = '\0';
+ fcharlist->thechar[row] = (outchr*)myalloc(sizeof(outchr)*(STRLEN(outline)+1));
+ STRCPY(fcharlist->thechar[row],outline);
+ }
+}
+
+
+/****************************************************************************
+
+ readfont
+
+ Allocates memory, initializes variables, and reads in the font.
+ Called near beginning of main().
+
+****************************************************************************/
+
+void readfont()
+{
+ int i,row,numsread;
+ inchr theord;
+ int maxlen,cmtlines,ffright2left;
+ int smush,smush2;
+ char fileline[MAXLEN+1],magicnum[5];
+ ZFILE *fontfile;
+
+ fontfile = FIGopen(fontname,FONTFILESUFFIX);
+#ifdef TLF_FONTS
+ if (fontfile==NULL) {
+ fontfile = FIGopen(fontname,TOILETFILESUFFIX);
+ if(fontfile) toiletfont = 1;
+ }
+#endif
+
+ if (fontfile==NULL) {
+ fprintf(stderr,"%s: %s: Unable to open font file\n",myname,fontname);
+ exit(1);
+ }
+
+ readmagic(fontfile,magicnum);
+ if (myfgets(fileline,MAXLEN,fontfile)==NULL) {
+ fileline[0] = '\0';
+ }
+ if (MYSTRLEN(fileline)>0 ? fileline[MYSTRLEN(fileline)-1]!='\n' : 0) {
+ skiptoeol(fontfile);
+ }
+ numsread = sscanf(fileline,"%*c%c %d %*d %d %d %d %d %d",
+ &hardblank,&charheight,&maxlen,&smush,&cmtlines,
+ &ffright2left,&smush2);
+
+ if (maxlen > MAXLEN) {
+ fprintf(stderr,"%s: %s: character is too wide\n",myname,fontname);
+ exit(1);
+ }
+#ifdef TLF_FONTS
+ if ((!toiletfont && strcmp(magicnum,FONTFILEMAGICNUMBER)) ||
+ (toiletfont && strcmp(magicnum,TOILETFILEMAGICNUMBER)) || numsread<5) {
+#else
+ if (strcmp(magicnum,FONTFILEMAGICNUMBER) || numsread<5) {
+#endif
+ fprintf(stderr,"%s: %s: Not a FIGlet 2 font file\n",myname,fontname);
+ exit(1);
+ }
+ for (i=1;i<=cmtlines;i++) {
+ skiptoeol(fontfile);
+ }
+
+ if (numsread<6) {
+ ffright2left = 0;
+ }
+
+ if (numsread<7) { /* if no smush2, decode smush into smush2 */
+ if (smush == 0) smush2 = SM_KERN;
+ else if (smush < 0) smush2 = 0;
+ else smush2 = (smush & 31) | SM_SMUSH;
+ }
+
+ if (charheight<1) {
+ charheight = 1;
+ }
+
+ if (maxlen<1) {
+ maxlen = 1;
+ }
+
+ maxlen += 100; /* Give ourselves some extra room */
+
+ if (smushoverride == SMO_NO)
+ smushmode = smush2;
+ else if (smushoverride == SMO_FORCE)
+ smushmode |= smush2;
+
+ if (right2left<0) {
+ right2left = ffright2left;
+ }
+
+ if (justification<0) {
+ justification = 2*right2left;
+ }
+
+ /* Allocate "missing" character */
+ fcharlist = (fcharnode*)myalloc(sizeof(fcharnode));
+ fcharlist->ord = 0;
+ fcharlist->thechar = (outchr**)myalloc(sizeof(outchr*)*charheight);
+ fcharlist->next = NULL;
+ for (row=0;row<charheight;row++) {
+ fcharlist->thechar[row] = (outchr*)myalloc(sizeof(outchr));
+ fcharlist->thechar[row][0] = '\0';
+ }
+ for (theord=' ';theord<='~';theord++) {
+ readfontchar(fontfile,theord);
+ }
+ for (theord=0;theord<=6;theord++) {
+ readfontchar(fontfile,deutsch[theord]);
+ }
+ while (myfgets(fileline,maxlen+1,fontfile)==NULL?0:
+ sscanf(fileline,"%li",&theord)==1) {
+ readfontchar(fontfile,theord);
+ }
+ Zclose(fontfile);
+}
+
+
+/****************************************************************************
+
+ linealloc
+
+ Allocates & clears outputline, inchrline. Sets inchrlinelenlimit.
+ Called near beginning of main().
+
+****************************************************************************/
+
+void linealloc()
+{
+ int row;
+
+ outputline = (outchr**)myalloc(sizeof(outchr*)*charheight);
+ for (row=0;row<charheight;row++) {
+ outputline[row] = (outchr*)myalloc(sizeof(outchr)*(outlinelenlimit+1));
+ }
+ inchrlinelenlimit = outputwidth*4+100;
+ inchrline = (inchr*)myalloc(sizeof(inchr)*(inchrlinelenlimit+1));
+ clearline();
+}
+
+
+/****************************************************************************
+
+ getletter
+
+ Sets currchar to point to the font entry for the given character.
+ Sets currcharwidth to the width of this character.
+
+****************************************************************************/
+
+void getletter(c)
+inchr c;
+{
+ fcharnode *charptr;
+
+ for (charptr=fcharlist;charptr==NULL?0:charptr->ord!=c;
+ charptr=charptr->next) ;
+ if (charptr!=NULL) {
+ currchar = charptr->thechar;
+ }
+ else {
+ for (charptr=fcharlist;charptr==NULL?0:charptr->ord!=0;
+ charptr=charptr->next) ;
+ currchar = charptr->thechar;
+ }
+ previouscharwidth = currcharwidth;
+ currcharwidth = STRLEN(currchar[0]);
+}
+
+
+/****************************************************************************
+
+ smushem
+
+ Given 2 characters, attempts to smush them into 1, according to
+ smushmode. Returns smushed character or '\0' if no smushing can be
+ done.
+
+ smushmode values are sum of following (all values smush blanks):
+ 1: Smush equal chars (not hardblanks)
+ 2: Smush '_' with any char in hierarchy below
+ 4: hierarchy: "|", "/\", "[]", "{}", "()", "<>"
+ Each class in hier. can be replaced by later class.
+ 8: [ + ] -> |, { + } -> |, ( + ) -> |
+ 16: / + \ -> X, > + < -> X (only in that order)
+ 32: hardblank + hardblank -> hardblank
+
+****************************************************************************/
+
+outchr smushem(lch,rch)
+outchr lch,rch;
+{
+ if (lch==' ') return rch;
+ if (rch==' ') return lch;
+
+ if (previouscharwidth<2 || currcharwidth<2) return '\0';
+ /* Disallows overlapping if the previous character */
+ /* or the current character has a width of 1 or zero. */
+
+ if ((smushmode & SM_SMUSH) == 0) return '\0'; /* kerning */
+
+ if ((smushmode & 63) == 0) {
+ /* This is smushing by universal overlapping. */
+ if (lch==' ') return rch;
+ if (rch==' ') return lch;
+ if (lch==hardblank) return rch;
+ if (rch==hardblank) return lch;
+ /* Above four lines ensure overlapping preference to */
+ /* visible characters. */
+ if (right2left==1) return lch;
+ /* Above line ensures that the dominant (foreground) */
+ /* fig-character for overlapping is the latter in the */
+ /* user's text, not necessarily the rightmost character. */
+ return rch;
+ /* Occurs in the absence of above exceptions. */
+ }
+
+ if (smushmode & SM_HARDBLANK) {
+ if (lch==hardblank && rch==hardblank) return lch;
+ }
+
+ if (lch==hardblank || rch==hardblank) return '\0';
+
+ if (smushmode & SM_EQUAL) {
+ if (lch==rch) return lch;
+ }
+
+ if (smushmode & SM_LOWLINE) {
+ if (lch=='_' && strchr("|/\\[]{}()<>",rch)) return rch;
+ if (rch=='_' && strchr("|/\\[]{}()<>",lch)) return lch;
+ }
+
+ if (smushmode & SM_HIERARCHY) {
+ if (lch=='|' && strchr("/\\[]{}()<>",rch)) return rch;
+ if (rch=='|' && strchr("/\\[]{}()<>",lch)) return lch;
+ if (strchr("/\\",lch) && strchr("[]{}()<>",rch)) return rch;
+ if (strchr("/\\",rch) && strchr("[]{}()<>",lch)) return lch;
+ if (strchr("[]",lch) && strchr("{}()<>",rch)) return rch;
+ if (strchr("[]",rch) && strchr("{}()<>",lch)) return lch;
+ if (strchr("{}",lch) && strchr("()<>",rch)) return rch;
+ if (strchr("{}",rch) && strchr("()<>",lch)) return lch;
+ if (strchr("()",lch) && strchr("<>",rch)) return rch;
+ if (strchr("()",rch) && strchr("<>",lch)) return lch;
+ }
+
+ if (smushmode & SM_PAIR) {
+ if (lch=='[' && rch==']') return '|';
+ if (rch=='[' && lch==']') return '|';
+ if (lch=='{' && rch=='}') return '|';
+ if (rch=='{' && lch=='}') return '|';
+ if (lch=='(' && rch==')') return '|';
+ if (rch=='(' && lch==')') return '|';
+ }
+
+ if (smushmode & SM_BIGX) {
+ if (lch=='/' && rch=='\\') return '|';
+ if (rch=='/' && lch=='\\') return 'Y';
+ if (lch=='>' && rch=='<') return 'X';
+ /* Don't want the reverse of above to give 'X'. */
+ }
+
+ return '\0';
+}
+
+
+/****************************************************************************
+
+ smushamt
+
+ Returns the maximum amount that the current character can be smushed
+ into the current line.
+
+****************************************************************************/
+
+int smushamt()
+{
+ int maxsmush,amt;
+ int row,linebd,charbd;
+ outchr ch1,ch2;
+
+ if ((smushmode & (SM_SMUSH | SM_KERN)) == 0) {
+ return 0;
+ }
+ maxsmush = currcharwidth;
+ for (row=0;row<charheight;row++) {
+ if (right2left) {
+ if (maxsmush>STRLEN(outputline[row])) {
+ maxsmush=STRLEN(outputline[row]);
+ }
+ for (charbd=STRLEN(currchar[row]);
+ ch1=currchar[row][charbd],(charbd>0&&(!ch1||ch1==' '));charbd--) ;
+ for (linebd=0;ch2=outputline[row][linebd],ch2==' ';linebd++) ;
+ amt = linebd+currcharwidth-1-charbd;
+ }
+ else {
+ for (linebd=STRLEN(outputline[row]);
+ ch1 = outputline[row][linebd],(linebd>0&&(!ch1||ch1==' '));linebd--) ;
+ for (charbd=0;ch2=currchar[row][charbd],ch2==' ';charbd++) ;
+ amt = charbd+outlinelen-1-linebd;
+ }
+ if (!ch1||ch1==' ') {
+ amt++;
+ }
+ else if (ch2) {
+ if (smushem(ch1,ch2)!='\0') {
+ amt++;
+ }
+ }
+ if (amt<maxsmush) {
+ maxsmush = amt;
+ }
+ }
+ return maxsmush;
+}
+
+
+/****************************************************************************
+
+ addchar
+
+ Attempts to add the given character onto the end of the current line.
+ Returns 1 if this can be done, 0 otherwise.
+
+****************************************************************************/
+
+int addchar(c)
+inchr c;
+{
+ int smushamount,row,k,column;
+ outchr *templine;
+
+ getletter(c);
+ smushamount = smushamt();
+ if (outlinelen+currcharwidth-smushamount>outlinelenlimit
+ ||inchrlinelen+1>inchrlinelenlimit) {
+ return 0;
+ }
+
+ templine = (outchr*)myalloc(sizeof(outchr)*(outlinelenlimit+1));
+ for (row=0;row<charheight;row++) {
+ if (right2left) {
+ STRCPY(templine,currchar[row]);
+ for (k=0;k<smushamount;k++) {
+ templine[currcharwidth-smushamount+k] =
+ smushem(templine[currcharwidth-smushamount+k],outputline[row][k]);
+ }
+ STRCAT(templine,outputline[row]+smushamount);
+ STRCPY(outputline[row],templine);
+ }
+ else {
+ for (k=0;k<smushamount;k++) {
+ column = outlinelen-smushamount+k;
+ if (column < 0) {
+ column = 0;
+ }
+ outputline[row][column] =
+ smushem(outputline[row][column],currchar[row][k]);
+ }
+ STRCAT(outputline[row],currchar[row]+smushamount);
+ }
+ }
+ free(templine);
+ outlinelen = STRLEN(outputline[0]);
+ inchrline[inchrlinelen++] = c;
+ return 1;
+}
+
+
+/****************************************************************************
+
+ putstring
+
+ Prints out the given null-terminated string, substituting blanks
+ for hardblanks. If outputwidth is 1, prints the entire string;
+ otherwise prints at most outputwidth-1 characters. Prints a newline
+ at the end of the string. The string is left-justified, centered or
+ right-justified (taking outputwidth as the screen width) if
+ justification is 0, 1 or 2, respectively.
+
+****************************************************************************/
+
+void putstring(string)
+outchr *string;
+{
+ int i,len;
+ char c[10];
+#ifdef TLF_FONTS
+ size_t size;
+ wchar_t wc[2];
+#endif
+
+ len = STRLEN(string);
+ if (outputwidth>1) {
+ if (len>outputwidth-1) {
+ len = outputwidth-1;
+ }
+ if (justification>0) {
+ for (i=1;(3-justification)*i+len+justification-2<outputwidth;i++) {
+ putchar(' ');
+ }
+ }
+ }
+ for (i=0;i<len;i++) {
+#ifdef TLF_FONTS
+ wc[0] = string[i];
+ wc[1] = 0;
+ size = wchar_to_utf8(wc,1,c,10,0);
+ if(size==1) {
+ if(c[0]==hardblank) {
+ c[0] = ' ';
+ }
+ }
+ c[size] = 0;
+ printf("%s",c);
+#else
+ putchar(string[i]==hardblank?' ':string[i]);
+#endif
+ }
+ putchar('\n');
+}
+
+
+/****************************************************************************
+
+ printline
+
+ Prints outputline using putstring, then clears the current line.
+
+****************************************************************************/
+
+void printline()
+{
+ int i;
+
+ for (i=0;i<charheight;i++) {
+ putstring(outputline[i]);
+ }
+ clearline();
+}
+
+
+/****************************************************************************
+
+ splitline
+
+ Splits inchrline at the last word break (bunch of consecutive blanks).
+ Makes a new line out of the first part and prints it using
+ printline. Makes a new line out of the second part and returns.
+
+****************************************************************************/
+
+void splitline()
+{
+ int i,gotspace,lastspace,len1,len2;
+ inchr *part1,*part2;
+
+ part1 = (inchr*)myalloc(sizeof(inchr)*(inchrlinelen+1));
+ part2 = (inchr*)myalloc(sizeof(inchr)*(inchrlinelen+1));
+ gotspace = 0;
+ lastspace = inchrlinelen-1;
+ for (i=inchrlinelen-1;i>=0;i--) {
+ if (!gotspace && inchrline[i]==' ') {
+ gotspace = 1;
+ lastspace = i;
+ }
+ if (gotspace && inchrline[i]!=' ') {
+ break;
+ }
+ }
+ len1 = i+1;
+ len2 = inchrlinelen-lastspace-1;
+ for (i=0;i<len1;i++) {
+ part1[i] = inchrline[i];
+ }
+ for (i=0;i<len2;i++) {
+ part2[i] = inchrline[lastspace+1+i];
+ }
+ clearline();
+ for (i=0;i<len1;i++) {
+ addchar(part1[i]);
+ }
+ printline();
+ for (i=0;i<len2;i++) {
+ addchar(part2[i]);
+ }
+ free(part1);
+ free(part2);
+}
+
+
+/****************************************************************************
+
+ handlemapping
+
+ Given an input character (type inchr), executes re-mapping commands
+ read from control files. Returns re-mapped character (inchr).
+
+****************************************************************************/
+
+inchr handlemapping(c)
+inchr c;
+{
+ comnode *cmptr;
+
+ cmptr=commandlist;
+ while (cmptr!=NULL) {
+ if (cmptr->thecommand ?
+ (c >= cmptr->rangelo && c <= cmptr->rangehi) : 0) {
+ c += cmptr->offset;
+ while(cmptr!=NULL ? cmptr->thecommand : 0) {
+ cmptr=cmptr->next;
+ }
+ }
+ else {
+ cmptr=cmptr->next;
+ }
+ }
+ return c;
+}
+
+/****************************************************************************
+
+ Agetchar
+
+ Replacement to getchar().
+ Acts exactly like getchar if -A is NOT specified,
+ else obtains input from All remaining command line words.
+
+****************************************************************************/
+
+int Agetchar()
+{
+ extern int optind; /* current argv[] element under study */
+ static int AgetMode = 0; /* >= 0 for displacement into argv[n], <0 EOF */
+ char *arg; /* pointer to active character */
+ int c; /* current character */
+
+ if ( ! cmdinput ) /* is -A active? */
+ return( getchar() ); /* no: return stdin character */
+
+ if ( AgetMode < 0 || optind >= Myargc ) /* EOF is sticky: */
+ return( EOF ); /* **ensure it now and forever more */
+
+ /* find next character */
+ arg = Myargv[optind]; /* pointer to active arg */
+ c = arg[AgetMode++]&0xFF; /* get appropriate char of arg */
+
+ if ( ! c ) /* at '\0' that terminates word? */
+ { /* at end of word: return ' ' if normal word, '\n' if empty */
+ c = ' '; /* suppose normal word and return blank */
+ if ( AgetMode == 1 ) /* if ran out in very 1st char, force \n */
+ c = '\n'; /* (allows "hello '' world" to do \n at '') */
+ AgetMode = 0; /* return to char 0 in NEXT word */
+ if ( ++optind >= Myargc ) /* run up word count and check if at "EOF" */
+ { /* just ran out of arguments */
+ c = EOF; /* return EOF */
+ AgetMode = -1; /* ensure all future returns return EOF */
+ }
+ }
+
+ return( c ); /* return appropriate character */
+
+} /* end: Agetchar() */
+
+
+/****************************************************************************
+
+ iso2022
+
+ Called by getinchr. Interprets ISO 2022 sequences
+
+******************************************************************************/
+
+inchr iso2022()
+{
+ inchr ch;
+ inchr ch2;
+ int save_gl;
+ int save_gr;
+
+ ch = Agetchar();
+ if (ch == EOF) return ch;
+ if (ch == 27) ch = Agetchar() + 0x100; /* ESC x */
+ if (ch == 0x100 + '$') ch = Agetchar() + 0x200; /* ESC $ x */
+ switch (ch) {
+ case 14: /* invoke G1 into GL */
+ gl = 1;
+ return iso2022();
+ case 15: /* invoke G0 into GL */
+ gl = 0;
+ return iso2022();
+ case 142: case 'N' + 0x100: /* invoke G2 into GL for next char */
+ save_gl = gl; save_gr = gr;
+ gl = gr = 2;
+ ch = iso2022();
+ gl = save_gl; gr = save_gr;
+ return ch;
+ case 143: case 'O' + 0x100: /* invoke G3 into GL for next char */
+ save_gl = gl; save_gr = gr;
+ gl = gr = 3;
+ ch = iso2022();
+ gl = save_gl; gr = save_gr;
+ return ch;
+ case 'n' + 0x100: /* invoke G2 into GL */
+ gl = 2;
+ return iso2022();
+ case 'o' + 0x100: /* invoke G3 into GL */
+ gl = 3;
+ return iso2022();
+ case '~' + 0x100: /* invoke G1 into GR */
+ gr = 1;
+ return iso2022();
+ case '}' + 0x100: /* invoke G2 into GR */
+ gr = 2;
+ return iso2022();
+ case '|' + 0x100: /* invoke G3 into GR */
+ gr = 3;
+ return iso2022();
+ case '(' + 0x100: /* set G0 to 94-char set */
+ ch = Agetchar();
+ if (ch == 'B') ch = 0; /* ASCII */
+ gn[0] = ch << 16;
+ gndbl[0] = 0;
+ return iso2022();
+ case ')' + 0x100: /* set G1 to 94-char set */
+ ch = Agetchar();
+ if (ch == 'B') ch = 0;
+ gn[1] = ch << 16;
+ gndbl[1] = 0;
+ return iso2022();
+ case '*' + 0x100: /* set G2 to 94-char set */
+ ch = Agetchar();
+ if (ch == 'B') ch = 0;
+ gn[2] = ch << 16;
+ gndbl[2] = 0;
+ return iso2022();
+ case '+' + 0x100: /* set G3 to 94-char set */
+ ch = Agetchar();
+ if (ch == 'B') ch = 0;
+ gn[3] = ch << 16;
+ gndbl[3] = 0;
+ return iso2022();
+ case '-' + 0x100: /* set G1 to 96-char set */
+ ch = Agetchar();
+ if (ch == 'A') ch = 0; /* Latin-1 top half */
+ gn[1] = (ch << 16) | 0x80;
+ gndbl[1] = 0;
+ return iso2022();
+ case '.' + 0x100: /* set G2 to 96-char set */
+ ch = Agetchar();
+ if (ch == 'A') ch = 0;
+ gn[2] = (ch << 16) | 0x80;
+ gndbl[2] = 0;
+ return iso2022();
+ case '/' + 0x100: /* set G3 to 96-char set */
+ ch = Agetchar();
+ if (ch == 'A') ch = 0;
+ gn[3] = (ch << 16) | 0x80;
+ gndbl[3] = 0;
+ return iso2022();
+ case '(' + 0x200: /* set G0 to 94 x 94 char set */
+ ch = Agetchar();
+ gn[0] = ch << 16;
+ gndbl[0] = 1;
+ return iso2022();
+ case ')' + 0x200: /* set G1 to 94 x 94 char set */
+ ch = Agetchar();
+ gn[1] = ch << 16;
+ gndbl[1] = 1;
+ return iso2022();
+ case '*' + 0x200: /* set G2 to 94 x 94 char set */
+ ch = Agetchar();
+ gn[2] = ch << 16;
+ gndbl[2] = 1;
+ return iso2022();
+ case '+' + 0x200: /* set G3 to 94 x 94 char set */
+ ch = Agetchar();
+ gn[3] = ch << 16;
+ gndbl[3] = 1;
+ return iso2022();
+ default:
+ if (ch & 0x200) { /* set G0 to 94 x 94 char set (deprecated) */
+ gn[0] = (ch & ~0x200) << 16;
+ gndbl[0] = 1;
+ return iso2022();
+ }
+ }
+
+ if (ch >= 0x21 && ch <= 0x7E) { /* process GL */
+ if (gndbl[gl]) {
+ ch2 = Agetchar();
+ return gn[gl] | (ch << 8) | ch2;
+ }
+ else return gn[gl] | ch;
+ }
+ else if (ch >= 0xA0 && ch <= 0xFF) { /* process GR */
+ if (gndbl[gr]) {
+ ch2 = Agetchar();
+ return gn[gr] | (ch << 8) | ch2;
+ }
+ else return gn[gr] | (ch & ~0x80);
+ }
+ else return ch;
+ }
+
+/****************************************************************************
+
+ ungetinchr
+
+ Called by main. Pushes back an "inchr" to be read by getinchr
+ on the next call.
+
+******************************************************************************/
+inchr getinchr_buffer;
+int getinchr_flag;
+
+inchr ungetinchr(c)
+inchr c;
+{
+ getinchr_buffer = c;
+ getinchr_flag = 1;
+ return c;
+}
+
+/*****************************************************************************
+
+ getinchr
+
+ Called by main. Processes multibyte characters. Invokes Agetchar.
+ If multibyte = 0, ISO 2022 mode (see iso2022 routine).
+ If multibyte = 1, double-byte mode (0x00-0x7f bytes are characters,
+ 0x80-0xFF bytes are first byte of a double-byte character).
+ If multibyte = 2, Unicode UTF-8 mode (0x00-0x7F bytes are characters,
+ 0x80-0xBF bytes are nonfirst byte of a multibyte character,
+ 0xC0-0xFD bytes are first byte of a multibyte character,
+ 0xFE-0xFF bytes are errors (all errors return code 0x0080)).
+ If multibyte = 3, HZ mode ("~{" starts double-byte mode, "}~" ends it,
+ "~~" is a tilde, "~x" for all other x is ignored).
+ If multibyte = 4, Shift-JIS mode (0x80-0x9F and 0xE0-0xEF are first byte
+ of a double-byte character, all other bytes are characters).
+
+
+*****************************************************************************/
+
+inchr getinchr()
+{
+ int ch, ch2, ch3, ch4, ch5, ch6;
+
+ if (getinchr_flag) {
+ getinchr_flag = 0;
+ return getinchr_buffer;
+ }
+
+ switch(multibyte) {
+ case 0: /* single-byte */
+ return iso2022();
+ case 1: /* DBCS */
+ ch = Agetchar();
+ if ((ch >= 0x80 && ch <= 0x9F) ||
+ (ch >= 0xE0 && ch <= 0xEF)) {
+ ch = (ch << 8) + Agetchar();
+ }
+ return ch;
+ case 2: /* UTF-8 */
+ ch = Agetchar();
+ if (ch < 0x80) return ch; /* handles EOF, too */
+ if (ch < 0xC0 || ch > 0xFD)
+ return 0x0080; /* illegal first character */
+ ch2 = Agetchar() & 0x3F;
+ if (ch < 0xE0) return ((ch & 0x1F) << 6) + ch2;
+ ch3 = Agetchar() & 0x3F;
+ if (ch < 0xF0)
+ return ((ch & 0x0F) << 12) + (ch2 << 6) + ch3;
+ ch4 = Agetchar() & 0x3F;
+ if (ch < 0xF8)
+ return ((ch & 0x07) << 18) + (ch2 << 12) + (ch3 << 6) + ch4;
+ ch5 = Agetchar() & 0x3F;
+ if (ch < 0xFC)
+ return ((ch & 0x03) << 24) + (ch2 << 18) + (ch3 << 12) +
+ (ch4 << 6) + ch5;
+ ch6 = Agetchar() & 0x3F;
+ return ((ch & 0x01) << 30) + (ch2 << 24) + (ch3 << 18) +
+ (ch4 << 12) + (ch5 << 6) + ch6;
+ case 3: /* HZ */
+ ch = Agetchar();
+ if (ch == EOF) return ch;
+ if (hzmode) {
+ ch = (ch << 8) + Agetchar();
+ if (ch == ('}' << 8) + '~') {
+ hzmode = 0;
+ return getinchr();
+ }
+ return ch;
+ }
+ else if (ch == '~') {
+ ch = Agetchar();
+ if (ch == '{') {
+ hzmode = 1;
+ return getinchr();
+ }
+ else if (ch == '~') {
+ return ch;
+ }
+ else {
+ return getinchr();
+ }
+ }
+ else return ch;
+ case 4: /* Shift-JIS */
+ ch = Agetchar();
+ if ((ch >= 0x80 && ch <= 0x9F) ||
+ (ch >= 0xE0 && ch <= 0xEF)) {
+ ch = (ch << 8) + Agetchar();
+ }
+ return ch;
+ default:
+ return 0x80;
+ }
+ }
+
+/****************************************************************************
+
+ main
+
+ The main program, of course.
+ Reads characters 1 by 1 from stdin, and makes lines out of them using
+ addchar. Handles line breaking, (which accounts for most of the
+ complexity in this function).
+
+****************************************************************************/
+
+int main(argc,argv)
+int argc;
+char *argv[];
+{
+ inchr c,c2;
+ int i;
+ int last_was_eol_flag;
+/*---------------------------------------------------------------------------
+ wordbreakmode:
+ -1: /^$/ and blanks are to be absorbed (when line break was forced
+ by a blank or character larger than outlinelenlimit)
+ 0: /^ *$/ and blanks are not to be absorbed
+ 1: /[^ ]$/ no word break yet
+ 2: /[^ ] *$/
+ 3: /[^ ]$/ had a word break
+---------------------------------------------------------------------------*/
+ int wordbreakmode;
+ int char_not_added;
+
+ Myargc = argc;
+ Myargv = argv;
+ getparams();
+ readcontrolfiles();
+ readfont();
+ linealloc();
+
+ wordbreakmode = 0;
+ last_was_eol_flag = 0;
+
+#ifdef TLF_FONTS
+ toiletfont = 0;
+#endif
+
+ while ((c = getinchr())!=EOF) {
+
+ if (c=='\n'&¶graphflag&&!last_was_eol_flag) {
+ ungetinchr(c2 = getinchr());
+ c = ((isascii(c2)&&isspace(c2))?'\n':' ');
+ }
+ last_was_eol_flag = (isascii(c)&&isspace(c)&&c!='\t'&&c!=' ');
+
+ if (deutschflag) {
+ if (c>='[' && c<=']') {
+ c = deutsch[c-'['];
+ }
+ else if (c >='{' && c <= '~') {
+ c = deutsch[c-'{'+3];
+ }
+ }
+
+ c = handlemapping(c);
+
+ if (isascii(c)&&isspace(c)) {
+ c = (c=='\t'||c==' ') ? ' ' : '\n';
+ }
+
+ if ((c>'\0' && c<' ' && c!='\n') || c==127) continue;
+
+/*
+ Note: The following code is complex and thoroughly tested.
+ Be careful when modifying!
+*/
+
+ do {
+ char_not_added = 0;
+
+ if (wordbreakmode== -1) {
+ if (c==' ') {
+ break;
+ }
+ else if (c=='\n') {
+ wordbreakmode = 0;
+ break;
+ }
+ wordbreakmode = 0;
+ }
+
+ if (c=='\n') {
+ printline();
+ wordbreakmode = 0;
+ }
+
+ else if (addchar(c)) {
+ if (c!=' ') {
+ wordbreakmode = (wordbreakmode>=2)?3:1;
+ }
+ else {
+ wordbreakmode = (wordbreakmode>0)?2:0;
+ }
+ }
+
+ else if (outlinelen==0) {
+ for (i=0;i<charheight;i++) {
+ if (right2left && outputwidth>1) {
+ putstring(currchar[i]+STRLEN(currchar[i])-outlinelenlimit);
+ }
+ else {
+ putstring(currchar[i]);
+ }
+ }
+ wordbreakmode = -1;
+ }
+
+ else if (c==' ') {
+ if (wordbreakmode==2) {
+ splitline();
+ }
+ else {
+ printline();
+ }
+ wordbreakmode = -1;
+ }
+
+ else {
+ if (wordbreakmode>=2) {
+ splitline();
+ }
+ else {
+ printline();
+ }
+ wordbreakmode = (wordbreakmode==3)?1:0;
+ char_not_added = 1;
+ }
+
+ } while (char_not_added);
+ }
+
+ if (outlinelen!=0) {
+ printline();
+ }
+ return 0;
+}
diff --git a/externals/figlet/figlist b/externals/figlet/figlist
new file mode 100755
index 000000000..6dea3b2cf
--- /dev/null
+++ b/externals/figlet/figlist
@@ -0,0 +1,64 @@
+#!/bin/sh -
+# figlist by Glenn Chappell <ggc@uiuc.edu>
+# figlet release 2.1.1 -- 25 Aug 1994
+#
+# Lists all fonts and control files in figlet's default font directory.
+# Replaces "figlet -F", which was removed from figlet version 2.1.
+#
+# Usage: figlist [ -d directory ]
+
+DIR=`dirname $0`
+FIGLET=$DIR/figlet
+
+# Get figlet version
+FIGLETVERSION=`$FIGLET -I1 2>/dev/null`
+if [ -z "$FIGLETVERSION" ]; then
+ FIGLETVERSION=20000
+fi
+
+USAGE="Usage: `basename $0` [ -d directory ]"
+
+if [ "$1" = "-d" ]; then
+ FONTDIROPT="-d $2"
+ if [ $# -ne 2 ]; then
+ echo "$USAGE"
+ exit 1
+ fi
+else
+ FONTDIROPT=""
+ if [ $# -ne 0 ]; then
+ echo "$USAGE"
+ exit 1
+ fi
+fi
+
+if [ "$FIGLETVERSION" -lt 20100 ]; then
+ # figlet 2.0
+ $FIGLET $FONTDIROPT -F
+ exit
+fi
+
+# From here on we may assume figlet 2.1 or later
+
+FONTDIR=`$FIGLET $FONTDIROPT -I2`
+FONT=`$FIGLET -I3`
+echo "Default font: $FONT"
+echo "Font directory: $FONTDIR"
+
+if [ -d "$FONTDIR" ] && [ -r "$FONTDIR" ]; then
+ cd "$FONTDIR"
+ if ls *.flf >/dev/null 2>&1 ; then
+ echo "Figlet fonts in this directory:"
+ ls *.flf 2>/dev/null | sed s/\.flf$//
+ else
+ echo 'No figlet fonts in this directory'
+ fi
+ if ls *.flc >/dev/null 2>&1 ; then
+ echo "Figlet control files in this directory:"
+ ls *.flc 2>/dev/null | sed s/\.flc$//
+ else
+ echo 'No figlet control files in this directory'
+ fi
+else
+ echo 'Unable to open directory'
+fi
diff --git a/externals/figlet/figlist.6 b/externals/figlet/figlist.6
new file mode 100644
index 000000000..c8b7cae5c
--- /dev/null
+++ b/externals/figlet/figlist.6
@@ -0,0 +1,52 @@
+.\" figlist by Glenn Chappell <ggc@uiuc.edu>
+.\" figlet release 2.1.1 -- 25 Aug 1994
+.\"
+.\" Lists all fonts and control files in figlet's default font directory.
+.\" Replaces "figlet -F", which was removed from figlet version 2.1.
+.\"
+.\" Usage: figlist [ -d directory ]
+.\"
+.\" Manual page by Jonathon Abbott, for the Debian Project
+.\" slightly modified by Francesco Tapparo, for the Debian Project
+.TH FIGLIST 6 "31 May 2012" "v2.2.5"
+
+.SH NAME
+figlist \- lists figlet fonts and control files
+
+.SH SYNOPSIS
+.B figlist
+[
+.B \-d
+.I directory
+]
+
+.SH DESCRIPTION
+Lists all fonts and control files in figlet's default font directory.
+Replaces "figlet \-F", which was removed from figlet version 2.1.
+
+.SH EXAMPLES
+To use
+.B figlist
+with its default settings, simply type
+.RS
+
+.B example% figlist
+
+.RE
+
+To list all the font and control files in /usr/share/fonts/figlet
+.RS
+
+.B example% figlist \-d /usr/share/fonts/figlet
+
+.RE
+
+.SH AUTHORS
+figlist was written by Glenn Chappell <ggc@uiuc.edu>
+
+This manual page was written by Jonathon Abbott for the Debian Project.
+
+.SH "SEE ALSO"
+.BR figlet (6),
+.BR chkfont (6),
+.BR showfigfonts (6)
diff --git a/externals/figlet/figmagic b/externals/figlet/figmagic
new file mode 100644
index 000000000..5e9a01a0d
--- /dev/null
+++ b/externals/figlet/figmagic
@@ -0,0 +1,6 @@
+# Append this file to your /etc/magic or /usr/share/misc/magic file
+# to enable the ``file'' command to report on FIGlet fonts and controlfiles.
+0 string flf FIGlet font
+>3 string >2a version %-2.2s
+0 string flc FIGlet controlfile
+>3 string >2a version %-2.2s
diff --git a/externals/figlet/fonts/646-ca.flc b/externals/figlet/fonts/646-ca.flc
new file mode 100644
index 000000000..b5f307118
--- /dev/null
+++ b/externals/figlet/fonts/646-ca.flc
@@ -0,0 +1,157 @@
+#
+# Name: CSA_Z243.4-1985-1 to Unicode
+# Unicode version: 2.0
+# Table version: 0.1
+# Table format: Format A
+# Date: 0097-01-24
+# Authors: John Cowan <cowan@ccil.org> (conversion)
+# Keld Simonsen <Keld.Simonsen@dkuug.dk> (RFC 1345)
+#
+# General notes:
+#
+# This table contains data obtained from RFC 1345 on how
+# CSA_Z243.4-1985-1 characters map into Unicode.
+#
+# Format: Three tab-separated columns
+# Column #1 is the CSA_Z243.4-1985-1 code (in hex as 0xXX)
+# Column #2 is the Unicode (in hex as 0xXXXX)
+# Column #3 the Unicode name (follows a comment sign, '#')
+#
+# The entries are in CSA_Z243.4-1985-1 order
+#
+# Any comments or problems, contact <cowan@ccil.org>
+#
+# &rem source: ECMA registry
+# &alias iso-ir-121
+# &g0esc x2877 &g1esc x2977 &g2esc x2a77 &g3esc x2b77
+# &alias ISO646-CA
+# &alias csa7-1
+# &alias ca
+0x00 0x0000 # NULL (NUL)
+0x01 0x0001 # START OF HEADING (SOH)
+0x02 0x0002 # START OF TEXT (STX)
+0x03 0x0003 # END OF TEXT (ETX)
+0x04 0x0004 # END OF TRANSMISSION (EOT)
+0x05 0x0005 # ENQUIRY (ENQ)
+0x06 0x0006 # ACKNOWLEDGE (ACK)
+0x07 0x0007 # BELL (BEL)
+0x08 0x0008 # BACKSPACE (BS)
+0x09 0x0009 # CHARACTER TABULATION (HT)
+0x0A 0x000A # LINE FEED (LF)
+0x0B 0x000B # LINE TABULATION (VT)
+0x0C 0x000C # FORM FEED (FF)
+0x0D 0x000D # CARRIAGE RETURN (CR)
+0x0E 0x000E # SHIFT OUT (SO)
+0x0F 0x000F # SHIFT IN (SI)
+0x10 0x0010 # DATALINK ESCAPE (DLE)
+0x11 0x0011 # DEVICE CONTROL ONE (DC1)
+0x12 0x0012 # DEVICE CONTROL TWO (DC2)
+0x13 0x0013 # DEVICE CONTROL THREE (DC3)
+0x14 0x0014 # DEVICE CONTROL FOUR (DC4)
+0x15 0x0015 # NEGATIVE ACKNOWLEDGE (NAK)
+0x16 0x0016 # SYNCRONOUS IDLE (SYN)
+0x17 0x0017 # END OF TRANSMISSION BLOCK (ETB)
+0x18 0x0018 # CANCEL (CAN)
+0x19 0x0019 # END OF MEDIUM (EM)
+0x1A 0x001A # SUBSTITUTE (SUB)
+0x1B 0x001B # ESCAPE (ESC)
+0x1C 0x001C # FILE SEPARATOR (IS4)
+0x1D 0x001D # GROUP SEPARATOR (IS3)
+0x1E 0x001E # RECORD SEPARATOR (IS2)
+0x1F 0x001F # UNIT SEPARATOR (IS1)
+0x20 0x0020 # SPACE
+0x21 0x0021 # EXCLAMATION MARK
+0x22 0x0022 # QUOTATION MARK
+0x23 0x0023 # NUMBER SIGN
+0x24 0x0024 # DOLLAR SIGN
+0x25 0x0025 # PERCENT SIGN
+0x26 0x0026 # AMPERSAND
+0x27 0x0027 # APOSTROPHE
+0x28 0x0028 # LEFT PARENTHESIS
+0x29 0x0029 # RIGHT PARENTHESIS
+0x2A 0x002A # ASTERISK
+0x2B 0x002B # PLUS SIGN
+0x2C 0x002C # COMMA
+0x2D 0x002D # HYPHEN-MINUS
+0x2E 0x002E # FULL STOP
+0x2F 0x002F # SOLIDUS
+0x30 0x0030 # DIGIT ZERO
+0x31 0x0031 # DIGIT ONE
+0x32 0x0032 # DIGIT TWO
+0x33 0x0033 # DIGIT THREE
+0x34 0x0034 # DIGIT FOUR
+0x35 0x0035 # DIGIT FIVE
+0x36 0x0036 # DIGIT SIX
+0x37 0x0037 # DIGIT SEVEN
+0x38 0x0038 # DIGIT EIGHT
+0x39 0x0039 # DIGIT NINE
+0x3A 0x003A # COLON
+0x3B 0x003B # SEMICOLON
+0x3C 0x003C # LESS-THAN SIGN
+0x3D 0x003D # EQUALS SIGN
+0x3E 0x003E # GREATER-THAN SIGN
+0x3F 0x003F # QUESTION MARK
+0x40 0x00E0 # LATIN SMALL LETTER A WITH GRAVE
+0x41 0x0041 # LATIN CAPITAL LETTER A
+0x42 0x0042 # LATIN CAPITAL LETTER B
+0x43 0x0043 # LATIN CAPITAL LETTER C
+0x44 0x0044 # LATIN CAPITAL LETTER D
+0x45 0x0045 # LATIN CAPITAL LETTER E
+0x46 0x0046 # LATIN CAPITAL LETTER F
+0x47 0x0047 # LATIN CAPITAL LETTER G
+0x48 0x0048 # LATIN CAPITAL LETTER H
+0x49 0x0049 # LATIN CAPITAL LETTER I
+0x4A 0x004A # LATIN CAPITAL LETTER J
+0x4B 0x004B # LATIN CAPITAL LETTER K
+0x4C 0x004C # LATIN CAPITAL LETTER L
+0x4D 0x004D # LATIN CAPITAL LETTER M
+0x4E 0x004E # LATIN CAPITAL LETTER N
+0x4F 0x004F # LATIN CAPITAL LETTER O
+0x50 0x0050 # LATIN CAPITAL LETTER P
+0x51 0x0051 # LATIN CAPITAL LETTER Q
+0x52 0x0052 # LATIN CAPITAL LETTER R
+0x53 0x0053 # LATIN CAPITAL LETTER S
+0x54 0x0054 # LATIN CAPITAL LETTER T
+0x55 0x0055 # LATIN CAPITAL LETTER U
+0x56 0x0056 # LATIN CAPITAL LETTER V
+0x57 0x0057 # LATIN CAPITAL LETTER W
+0x58 0x0058 # LATIN CAPITAL LETTER X
+0x59 0x0059 # LATIN CAPITAL LETTER Y
+0x5A 0x005A # LATIN CAPITAL LETTER Z
+0x5B 0x00E2 # LATIN SMALL LETTER A WITH CIRCUMFLEX
+0x5C 0x00E7 # LATIN SMALL LETTER C WITH CEDILLA
+0x5D 0x00EA # LATIN SMALL LETTER E WITH CIRCUMFLEX
+0x5E 0x00EE # LATIN SMALL LETTER I WITH CIRCUMFLEX
+0x5F 0x005F # LOW LINE
+0x60 0x00F4 # LATIN SMALL LETTER O WITH CIRCUMFLEX
+0x61 0x0061 # LATIN SMALL LETTER A
+0x62 0x0062 # LATIN SMALL LETTER B
+0x63 0x0063 # LATIN SMALL LETTER C
+0x64 0x0064 # LATIN SMALL LETTER D
+0x65 0x0065 # LATIN SMALL LETTER E
+0x66 0x0066 # LATIN SMALL LETTER F
+0x67 0x0067 # LATIN SMALL LETTER G
+0x68 0x0068 # LATIN SMALL LETTER H
+0x69 0x0069 # LATIN SMALL LETTER I
+0x6A 0x006A # LATIN SMALL LETTER J
+0x6B 0x006B # LATIN SMALL LETTER K
+0x6C 0x006C # LATIN SMALL LETTER L
+0x6D 0x006D # LATIN SMALL LETTER M
+0x6E 0x006E # LATIN SMALL LETTER N
+0x6F 0x006F # LATIN SMALL LETTER O
+0x70 0x0070 # LATIN SMALL LETTER P
+0x71 0x0071 # LATIN SMALL LETTER Q
+0x72 0x0072 # LATIN SMALL LETTER R
+0x73 0x0073 # LATIN SMALL LETTER S
+0x74 0x0074 # LATIN SMALL LETTER T
+0x75 0x0075 # LATIN SMALL LETTER U
+0x76 0x0076 # LATIN SMALL LETTER V
+0x77 0x0077 # LATIN SMALL LETTER W
+0x78 0x0078 # LATIN SMALL LETTER X
+0x79 0x0079 # LATIN SMALL LETTER Y
+0x7A 0x007A # LATIN SMALL LETTER Z
+0x7B 0x00E9 # LATIN SMALL LETTER E WITH ACUTE
+0x7C 0x00F9 # LATIN SMALL LETTER U WITH GRAVE
+0x7D 0x00E8 # LATIN SMALL LETTER E WITH GRAVE
+0x7E 0x00FB # LATIN SMALL LETTER U WITH CIRCUMFLEX
+0x7F 0x007F # DELETE (DEL)
diff --git a/externals/figlet/fonts/646-ca2.flc b/externals/figlet/fonts/646-ca2.flc
new file mode 100644
index 000000000..a7be02f68
--- /dev/null
+++ b/externals/figlet/fonts/646-ca2.flc
@@ -0,0 +1,156 @@
+#
+# Name: CSA_Z243.4-1985-2 to Unicode
+# Unicode version: 2.0
+# Table version: 0.1
+# Table format: Format A
+# Date: 0097-01-24
+# Authors: John Cowan <cowan@ccil.org> (conversion)
+# Keld Simonsen <Keld.Simonsen@dkuug.dk> (RFC 1345)
+#
+# General notes:
+#
+# This table contains data obtained from RFC 1345 on how
+# CSA_Z243.4-1985-2 characters map into Unicode.
+#
+# Format: Three tab-separated columns
+# Column #1 is the CSA_Z243.4-1985-2 code (in hex as 0xXX)
+# Column #2 is the Unicode (in hex as 0xXXXX)
+# Column #3 the Unicode name (follows a comment sign, '#')
+#
+# The entries are in CSA_Z243.4-1985-2 order
+#
+# Any comments or problems, contact <cowan@ccil.org>
+#
+# &rem source: ECMA registry
+# &alias iso-ir-122
+# &alias ISO646-CA2
+# &g0esc x2878 &g1esc x2978 &g2esc x2a78 &g3esc x2b78
+# &alias csa7-2
+0x00 0x0000 # NULL (NUL)
+0x01 0x0001 # START OF HEADING (SOH)
+0x02 0x0002 # START OF TEXT (STX)
+0x03 0x0003 # END OF TEXT (ETX)
+0x04 0x0004 # END OF TRANSMISSION (EOT)
+0x05 0x0005 # ENQUIRY (ENQ)
+0x06 0x0006 # ACKNOWLEDGE (ACK)
+0x07 0x0007 # BELL (BEL)
+0x08 0x0008 # BACKSPACE (BS)
+0x09 0x0009 # CHARACTER TABULATION (HT)
+0x0A 0x000A # LINE FEED (LF)
+0x0B 0x000B # LINE TABULATION (VT)
+0x0C 0x000C # FORM FEED (FF)
+0x0D 0x000D # CARRIAGE RETURN (CR)
+0x0E 0x000E # SHIFT OUT (SO)
+0x0F 0x000F # SHIFT IN (SI)
+0x10 0x0010 # DATALINK ESCAPE (DLE)
+0x11 0x0011 # DEVICE CONTROL ONE (DC1)
+0x12 0x0012 # DEVICE CONTROL TWO (DC2)
+0x13 0x0013 # DEVICE CONTROL THREE (DC3)
+0x14 0x0014 # DEVICE CONTROL FOUR (DC4)
+0x15 0x0015 # NEGATIVE ACKNOWLEDGE (NAK)
+0x16 0x0016 # SYNCRONOUS IDLE (SYN)
+0x17 0x0017 # END OF TRANSMISSION BLOCK (ETB)
+0x18 0x0018 # CANCEL (CAN)
+0x19 0x0019 # END OF MEDIUM (EM)
+0x1A 0x001A # SUBSTITUTE (SUB)
+0x1B 0x001B # ESCAPE (ESC)
+0x1C 0x001C # FILE SEPARATOR (IS4)
+0x1D 0x001D # GROUP SEPARATOR (IS3)
+0x1E 0x001E # RECORD SEPARATOR (IS2)
+0x1F 0x001F # UNIT SEPARATOR (IS1)
+0x20 0x0020 # SPACE
+0x21 0x0021 # EXCLAMATION MARK
+0x22 0x0022 # QUOTATION MARK
+0x23 0x0023 # NUMBER SIGN
+0x24 0x0024 # DOLLAR SIGN
+0x25 0x0025 # PERCENT SIGN
+0x26 0x0026 # AMPERSAND
+0x27 0x0027 # APOSTROPHE
+0x28 0x0028 # LEFT PARENTHESIS
+0x29 0x0029 # RIGHT PARENTHESIS
+0x2A 0x002A # ASTERISK
+0x2B 0x002B # PLUS SIGN
+0x2C 0x002C # COMMA
+0x2D 0x002D # HYPHEN-MINUS
+0x2E 0x002E # FULL STOP
+0x2F 0x002F # SOLIDUS
+0x30 0x0030 # DIGIT ZERO
+0x31 0x0031 # DIGIT ONE
+0x32 0x0032 # DIGIT TWO
+0x33 0x0033 # DIGIT THREE
+0x34 0x0034 # DIGIT FOUR
+0x35 0x0035 # DIGIT FIVE
+0x36 0x0036 # DIGIT SIX
+0x37 0x0037 # DIGIT SEVEN
+0x38 0x0038 # DIGIT EIGHT
+0x39 0x0039 # DIGIT NINE
+0x3A 0x003A # COLON
+0x3B 0x003B # SEMICOLON
+0x3C 0x003C # LESS-THAN SIGN
+0x3D 0x003D # EQUALS SIGN
+0x3E 0x003E # GREATER-THAN SIGN
+0x3F 0x003F # QUESTION MARK
+0x40 0x00E0 # LATIN SMALL LETTER A WITH GRAVE
+0x41 0x0041 # LATIN CAPITAL LETTER A
+0x42 0x0042 # LATIN CAPITAL LETTER B
+0x43 0x0043 # LATIN CAPITAL LETTER C
+0x44 0x0044 # LATIN CAPITAL LETTER D
+0x45 0x0045 # LATIN CAPITAL LETTER E
+0x46 0x0046 # LATIN CAPITAL LETTER F
+0x47 0x0047 # LATIN CAPITAL LETTER G
+0x48 0x0048 # LATIN CAPITAL LETTER H
+0x49 0x0049 # LATIN CAPITAL LETTER I
+0x4A 0x004A # LATIN CAPITAL LETTER J
+0x4B 0x004B # LATIN CAPITAL LETTER K
+0x4C 0x004C # LATIN CAPITAL LETTER L
+0x4D 0x004D # LATIN CAPITAL LETTER M
+0x4E 0x004E # LATIN CAPITAL LETTER N
+0x4F 0x004F # LATIN CAPITAL LETTER O
+0x50 0x0050 # LATIN CAPITAL LETTER P
+0x51 0x0051 # LATIN CAPITAL LETTER Q
+0x52 0x0052 # LATIN CAPITAL LETTER R
+0x53 0x0053 # LATIN CAPITAL LETTER S
+0x54 0x0054 # LATIN CAPITAL LETTER T
+0x55 0x0055 # LATIN CAPITAL LETTER U
+0x56 0x0056 # LATIN CAPITAL LETTER V
+0x57 0x0057 # LATIN CAPITAL LETTER W
+0x58 0x0058 # LATIN CAPITAL LETTER X
+0x59 0x0059 # LATIN CAPITAL LETTER Y
+0x5A 0x005A # LATIN CAPITAL LETTER Z
+0x5B 0x00E2 # LATIN SMALL LETTER A WITH CIRCUMFLEX
+0x5C 0x00E7 # LATIN SMALL LETTER C WITH CEDILLA
+0x5D 0x00EA # LATIN SMALL LETTER E WITH CIRCUMFLEX
+0x5E 0x00C9 # LATIN CAPITAL LETTER E WITH ACUTE
+0x5F 0x005F # LOW LINE
+0x60 0x00F4 # LATIN SMALL LETTER O WITH CIRCUMFLEX
+0x61 0x0061 # LATIN SMALL LETTER A
+0x62 0x0062 # LATIN SMALL LETTER B
+0x63 0x0063 # LATIN SMALL LETTER C
+0x64 0x0064 # LATIN SMALL LETTER D
+0x65 0x0065 # LATIN SMALL LETTER E
+0x66 0x0066 # LATIN SMALL LETTER F
+0x67 0x0067 # LATIN SMALL LETTER G
+0x68 0x0068 # LATIN SMALL LETTER H
+0x69 0x0069 # LATIN SMALL LETTER I
+0x6A 0x006A # LATIN SMALL LETTER J
+0x6B 0x006B # LATIN SMALL LETTER K
+0x6C 0x006C # LATIN SMALL LETTER L
+0x6D 0x006D # LATIN SMALL LETTER M
+0x6E 0x006E # LATIN SMALL LETTER N
+0x6F 0x006F # LATIN SMALL LETTER O
+0x70 0x0070 # LATIN SMALL LETTER P
+0x71 0x0071 # LATIN SMALL LETTER Q
+0x72 0x0072 # LATIN SMALL LETTER R
+0x73 0x0073 # LATIN SMALL LETTER S
+0x74 0x0074 # LATIN SMALL LETTER T
+0x75 0x0075 # LATIN SMALL LETTER U
+0x76 0x0076 # LATIN SMALL LETTER V
+0x77 0x0077 # LATIN SMALL LETTER W
+0x78 0x0078 # LATIN SMALL LETTER X
+0x79 0x0079 # LATIN SMALL LETTER Y
+0x7A 0x007A # LATIN SMALL LETTER Z
+0x7B 0x00E9 # LATIN SMALL LETTER E WITH ACUTE
+0x7C 0x00F9 # LATIN SMALL LETTER U WITH GRAVE
+0x7D 0x00E8 # LATIN SMALL LETTER E WITH GRAVE
+0x7E 0x00FB # LATIN SMALL LETTER U WITH CIRCUMFLEX
+0x7F 0x007F # DELETE (DEL)
diff --git a/externals/figlet/fonts/646-cn.flc b/externals/figlet/fonts/646-cn.flc
new file mode 100644
index 000000000..fc42581b8
--- /dev/null
+++ b/externals/figlet/fonts/646-cn.flc
@@ -0,0 +1,156 @@
+#
+# Name: GB_1988-80 to Unicode
+# Unicode version: 2.0
+# Table version: 0.1
+# Table format: Format A
+# Date: 0097-01-24
+# Authors: John Cowan <cowan@ccil.org> (conversion)
+# Keld Simonsen <Keld.Simonsen@dkuug.dk> (RFC 1345)
+#
+# General notes:
+#
+# This table contains data obtained from RFC 1345 on how
+# GB_1988-80 characters map into Unicode.
+#
+# Format: Three tab-separated columns
+# Column #1 is the GB_1988-80 code (in hex as 0xXX)
+# Column #2 is the Unicode (in hex as 0xXXXX)
+# Column #3 the Unicode name (follows a comment sign, '#')
+#
+# The entries are in GB_1988-80 order
+#
+# Any comments or problems, contact <cowan@ccil.org>
+#
+# &rem source: ECMA registry
+# &alias iso-ir-57
+# &g0esc x2854 &g1esc x2954 &g2esc x2a54 &g3esc x2b54
+# &alias cn
+# &alias ISO646-CN
+0x00 0x0000 # NULL (NUL)
+0x01 0x0001 # START OF HEADING (SOH)
+0x02 0x0002 # START OF TEXT (STX)
+0x03 0x0003 # END OF TEXT (ETX)
+0x04 0x0004 # END OF TRANSMISSION (EOT)
+0x05 0x0005 # ENQUIRY (ENQ)
+0x06 0x0006 # ACKNOWLEDGE (ACK)
+0x07 0x0007 # BELL (BEL)
+0x08 0x0008 # BACKSPACE (BS)
+0x09 0x0009 # CHARACTER TABULATION (HT)
+0x0A 0x000A # LINE FEED (LF)
+0x0B 0x000B # LINE TABULATION (VT)
+0x0C 0x000C # FORM FEED (FF)
+0x0D 0x000D # CARRIAGE RETURN (CR)
+0x0E 0x000E # SHIFT OUT (SO)
+0x0F 0x000F # SHIFT IN (SI)
+0x10 0x0010 # DATALINK ESCAPE (DLE)
+0x11 0x0011 # DEVICE CONTROL ONE (DC1)
+0x12 0x0012 # DEVICE CONTROL TWO (DC2)
+0x13 0x0013 # DEVICE CONTROL THREE (DC3)
+0x14 0x0014 # DEVICE CONTROL FOUR (DC4)
+0x15 0x0015 # NEGATIVE ACKNOWLEDGE (NAK)
+0x16 0x0016 # SYNCRONOUS IDLE (SYN)
+0x17 0x0017 # END OF TRANSMISSION BLOCK (ETB)
+0x18 0x0018 # CANCEL (CAN)
+0x19 0x0019 # END OF MEDIUM (EM)
+0x1A 0x001A # SUBSTITUTE (SUB)
+0x1B 0x001B # ESCAPE (ESC)
+0x1C 0x001C # FILE SEPARATOR (IS4)
+0x1D 0x001D # GROUP SEPARATOR (IS3)
+0x1E 0x001E # RECORD SEPARATOR (IS2)
+0x1F 0x001F # UNIT SEPARATOR (IS1)
+0x20 0x0020 # SPACE
+0x21 0x0021 # EXCLAMATION MARK
+0x22 0x0022 # QUOTATION MARK
+0x23 0x0023 # NUMBER SIGN
+0x24 0x00A5 # YEN SIGN
+0x25 0x0025 # PERCENT SIGN
+0x26 0x0026 # AMPERSAND
+0x27 0x0027 # APOSTROPHE
+0x28 0x0028 # LEFT PARENTHESIS
+0x29 0x0029 # RIGHT PARENTHESIS
+0x2A 0x002A # ASTERISK
+0x2B 0x002B # PLUS SIGN
+0x2C 0x002C # COMMA
+0x2D 0x002D # HYPHEN-MINUS
+0x2E 0x002E # FULL STOP
+0x2F 0x002F # SOLIDUS
+0x30 0x0030 # DIGIT ZERO
+0x31 0x0031 # DIGIT ONE
+0x32 0x0032 # DIGIT TWO
+0x33 0x0033 # DIGIT THREE
+0x34 0x0034 # DIGIT FOUR
+0x35 0x0035 # DIGIT FIVE
+0x36 0x0036 # DIGIT SIX
+0x37 0x0037 # DIGIT SEVEN
+0x38 0x0038 # DIGIT EIGHT
+0x39 0x0039 # DIGIT NINE
+0x3A 0x003A # COLON
+0x3B 0x003B # SEMICOLON
+0x3C 0x003C # LESS-THAN SIGN
+0x3D 0x003D # EQUALS SIGN
+0x3E 0x003E # GREATER-THAN SIGN
+0x3F 0x003F # QUESTION MARK
+0x40 0x0040 # COMMERCIAL AT
+0x41 0x0041 # LATIN CAPITAL LETTER A
+0x42 0x0042 # LATIN CAPITAL LETTER B
+0x43 0x0043 # LATIN CAPITAL LETTER C
+0x44 0x0044 # LATIN CAPITAL LETTER D
+0x45 0x0045 # LATIN CAPITAL LETTER E
+0x46 0x0046 # LATIN CAPITAL LETTER F
+0x47 0x0047 # LATIN CAPITAL LETTER G
+0x48 0x0048 # LATIN CAPITAL LETTER H
+0x49 0x0049 # LATIN CAPITAL LETTER I
+0x4A 0x004A # LATIN CAPITAL LETTER J
+0x4B 0x004B # LATIN CAPITAL LETTER K
+0x4C 0x004C # LATIN CAPITAL LETTER L
+0x4D 0x004D # LATIN CAPITAL LETTER M
+0x4E 0x004E # LATIN CAPITAL LETTER N
+0x4F 0x004F # LATIN CAPITAL LETTER O
+0x50 0x0050 # LATIN CAPITAL LETTER P
+0x51 0x0051 # LATIN CAPITAL LETTER Q
+0x52 0x0052 # LATIN CAPITAL LETTER R
+0x53 0x0053 # LATIN CAPITAL LETTER S
+0x54 0x0054 # LATIN CAPITAL LETTER T
+0x55 0x0055 # LATIN CAPITAL LETTER U
+0x56 0x0056 # LATIN CAPITAL LETTER V
+0x57 0x0057 # LATIN CAPITAL LETTER W
+0x58 0x0058 # LATIN CAPITAL LETTER X
+0x59 0x0059 # LATIN CAPITAL LETTER Y
+0x5A 0x005A # LATIN CAPITAL LETTER Z
+0x5B 0x005B # LEFT SQUARE BRACKET
+0x5C 0x005C # REVERSE SOLIDUS
+0x5D 0x005D # RIGHT SQUARE BRACKET
+0x5E 0x005E # CIRCUMFLEX ACCENT
+0x5F 0x005F # LOW LINE
+0x60 0x0060 # GRAVE ACCENT
+0x61 0x0061 # LATIN SMALL LETTER A
+0x62 0x0062 # LATIN SMALL LETTER B
+0x63 0x0063 # LATIN SMALL LETTER C
+0x64 0x0064 # LATIN SMALL LETTER D
+0x65 0x0065 # LATIN SMALL LETTER E
+0x66 0x0066 # LATIN SMALL LETTER F
+0x67 0x0067 # LATIN SMALL LETTER G
+0x68 0x0068 # LATIN SMALL LETTER H
+0x69 0x0069 # LATIN SMALL LETTER I
+0x6A 0x006A # LATIN SMALL LETTER J
+0x6B 0x006B # LATIN SMALL LETTER K
+0x6C 0x006C # LATIN SMALL LETTER L
+0x6D 0x006D # LATIN SMALL LETTER M
+0x6E 0x006E # LATIN SMALL LETTER N
+0x6F 0x006F # LATIN SMALL LETTER O
+0x70 0x0070 # LATIN SMALL LETTER P
+0x71 0x0071 # LATIN SMALL LETTER Q
+0x72 0x0072 # LATIN SMALL LETTER R
+0x73 0x0073 # LATIN SMALL LETTER S
+0x74 0x0074 # LATIN SMALL LETTER T
+0x75 0x0075 # LATIN SMALL LETTER U
+0x76 0x0076 # LATIN SMALL LETTER V
+0x77 0x0077 # LATIN SMALL LETTER W
+0x78 0x0078 # LATIN SMALL LETTER X
+0x79 0x0079 # LATIN SMALL LETTER Y
+0x7A 0x007A # LATIN SMALL LETTER Z
+0x7B 0x007B # LEFT CURLY BRACKET
+0x7C 0x007C # VERTICAL LINE
+0x7D 0x007D # RIGHT CURLY BRACKET
+0x7E 0x203E # OVERLINE
+0x7F 0x007F # DELETE (DEL)
diff --git a/externals/figlet/fonts/646-cu.flc b/externals/figlet/fonts/646-cu.flc
new file mode 100644
index 000000000..a9cd5fdb0
--- /dev/null
+++ b/externals/figlet/fonts/646-cu.flc
@@ -0,0 +1,156 @@
+#
+# Name: NC_NC00-10:81 to Unicode
+# Unicode version: 2.0
+# Table version: 0.1
+# Table format: Format A
+# Date: 0097-01-24
+# Authors: John Cowan <cowan@ccil.org> (conversion)
+# Keld Simonsen <Keld.Simonsen@dkuug.dk> (RFC 1345)
+#
+# General notes:
+#
+# This table contains data obtained from RFC 1345 on how
+# NC_NC00-10:81 characters map into Unicode.
+#
+# Format: Three tab-separated columns
+# Column #1 is the NC_NC00-10:81 code (in hex as 0xXX)
+# Column #2 is the Unicode (in hex as 0xXXXX)
+# Column #3 the Unicode name (follows a comment sign, '#')
+#
+# The entries are in NC_NC00-10:81 order
+#
+# Any comments or problems, contact <cowan@ccil.org>
+#
+# &rem source: ECMA registry
+# &alias cuba
+# &alias iso-ir-151
+# &alias ISO646-CU
+# &g0esc x282141 &g1esc x292141 &g2esc x2a2141 &g3esc x2b2141
+0x00 0x0000 # NULL (NUL)
+0x01 0x0001 # START OF HEADING (SOH)
+0x02 0x0002 # START OF TEXT (STX)
+0x03 0x0003 # END OF TEXT (ETX)
+0x04 0x0004 # END OF TRANSMISSION (EOT)
+0x05 0x0005 # ENQUIRY (ENQ)
+0x06 0x0006 # ACKNOWLEDGE (ACK)
+0x07 0x0007 # BELL (BEL)
+0x08 0x0008 # BACKSPACE (BS)
+0x09 0x0009 # CHARACTER TABULATION (HT)
+0x0A 0x000A # LINE FEED (LF)
+0x0B 0x000B # LINE TABULATION (VT)
+0x0C 0x000C # FORM FEED (FF)
+0x0D 0x000D # CARRIAGE RETURN (CR)
+0x0E 0x000E # SHIFT OUT (SO)
+0x0F 0x000F # SHIFT IN (SI)
+0x10 0x0010 # DATALINK ESCAPE (DLE)
+0x11 0x0011 # DEVICE CONTROL ONE (DC1)
+0x12 0x0012 # DEVICE CONTROL TWO (DC2)
+0x13 0x0013 # DEVICE CONTROL THREE (DC3)
+0x14 0x0014 # DEVICE CONTROL FOUR (DC4)
+0x15 0x0015 # NEGATIVE ACKNOWLEDGE (NAK)
+0x16 0x0016 # SYNCRONOUS IDLE (SYN)
+0x17 0x0017 # END OF TRANSMISSION BLOCK (ETB)
+0x18 0x0018 # CANCEL (CAN)
+0x19 0x0019 # END OF MEDIUM (EM)
+0x1A 0x001A # SUBSTITUTE (SUB)
+0x1B 0x001B # ESCAPE (ESC)
+0x1C 0x001C # FILE SEPARATOR (IS4)
+0x1D 0x001D # GROUP SEPARATOR (IS3)
+0x1E 0x001E # RECORD SEPARATOR (IS2)
+0x1F 0x001F # UNIT SEPARATOR (IS1)
+0x20 0x0020 # SPACE
+0x21 0x0021 # EXCLAMATION MARK
+0x22 0x0022 # QUOTATION MARK
+0x23 0x0023 # NUMBER SIGN
+0x24 0x00A4 # CURRENCY SIGN
+0x25 0x0025 # PERCENT SIGN
+0x26 0x0026 # AMPERSAND
+0x27 0x0027 # APOSTROPHE
+0x28 0x0028 # LEFT PARENTHESIS
+0x29 0x0029 # RIGHT PARENTHESIS
+0x2A 0x002A # ASTERISK
+0x2B 0x002B # PLUS SIGN
+0x2C 0x002C # COMMA
+0x2D 0x002D # HYPHEN-MINUS
+0x2E 0x002E # FULL STOP
+0x2F 0x002F # SOLIDUS
+0x30 0x0030 # DIGIT ZERO
+0x31 0x0031 # DIGIT ONE
+0x32 0x0032 # DIGIT TWO
+0x33 0x0033 # DIGIT THREE
+0x34 0x0034 # DIGIT FOUR
+0x35 0x0035 # DIGIT FIVE
+0x36 0x0036 # DIGIT SIX
+0x37 0x0037 # DIGIT SEVEN
+0x38 0x0038 # DIGIT EIGHT
+0x39 0x0039 # DIGIT NINE
+0x3A 0x003A # COLON
+0x3B 0x003B # SEMICOLON
+0x3C 0x003C # LESS-THAN SIGN
+0x3D 0x003D # EQUALS SIGN
+0x3E 0x003E # GREATER-THAN SIGN
+0x3F 0x003F # QUESTION MARK
+0x40 0x0040 # COMMERCIAL AT
+0x41 0x0041 # LATIN CAPITAL LETTER A
+0x42 0x0042 # LATIN CAPITAL LETTER B
+0x43 0x0043 # LATIN CAPITAL LETTER C
+0x44 0x0044 # LATIN CAPITAL LETTER D
+0x45 0x0045 # LATIN CAPITAL LETTER E
+0x46 0x0046 # LATIN CAPITAL LETTER F
+0x47 0x0047 # LATIN CAPITAL LETTER G
+0x48 0x0048 # LATIN CAPITAL LETTER H
+0x49 0x0049 # LATIN CAPITAL LETTER I
+0x4A 0x004A # LATIN CAPITAL LETTER J
+0x4B 0x004B # LATIN CAPITAL LETTER K
+0x4C 0x004C # LATIN CAPITAL LETTER L
+0x4D 0x004D # LATIN CAPITAL LETTER M
+0x4E 0x004E # LATIN CAPITAL LETTER N
+0x4F 0x004F # LATIN CAPITAL LETTER O
+0x50 0x0050 # LATIN CAPITAL LETTER P
+0x51 0x0051 # LATIN CAPITAL LETTER Q
+0x52 0x0052 # LATIN CAPITAL LETTER R
+0x53 0x0053 # LATIN CAPITAL LETTER S
+0x54 0x0054 # LATIN CAPITAL LETTER T
+0x55 0x0055 # LATIN CAPITAL LETTER U
+0x56 0x0056 # LATIN CAPITAL LETTER V
+0x57 0x0057 # LATIN CAPITAL LETTER W
+0x58 0x0058 # LATIN CAPITAL LETTER X
+0x59 0x0059 # LATIN CAPITAL LETTER Y
+0x5A 0x005A # LATIN CAPITAL LETTER Z
+0x5B 0x00A1 # INVERTED EXCLAMATION MARK
+0x5C 0x00D1 # LATIN CAPITAL LETTER N WITH TILDE
+0x5D 0x005D # RIGHT SQUARE BRACKET
+0x5E 0x00BF # INVERTED QUESTION MARK
+0x5F 0x005F # LOW LINE
+0x60 0x0060 # GRAVE ACCENT
+0x61 0x0061 # LATIN SMALL LETTER A
+0x62 0x0062 # LATIN SMALL LETTER B
+0x63 0x0063 # LATIN SMALL LETTER C
+0x64 0x0064 # LATIN SMALL LETTER D
+0x65 0x0065 # LATIN SMALL LETTER E
+0x66 0x0066 # LATIN SMALL LETTER F
+0x67 0x0067 # LATIN SMALL LETTER G
+0x68 0x0068 # LATIN SMALL LETTER H
+0x69 0x0069 # LATIN SMALL LETTER I
+0x6A 0x006A # LATIN SMALL LETTER J
+0x6B 0x006B # LATIN SMALL LETTER K
+0x6C 0x006C # LATIN SMALL LETTER L
+0x6D 0x006D # LATIN SMALL LETTER M
+0x6E 0x006E # LATIN SMALL LETTER N
+0x6F 0x006F # LATIN SMALL LETTER O
+0x70 0x0070 # LATIN SMALL LETTER P
+0x71 0x0071 # LATIN SMALL LETTER Q
+0x72 0x0072 # LATIN SMALL LETTER R
+0x73 0x0073 # LATIN SMALL LETTER S
+0x74 0x0074 # LATIN SMALL LETTER T
+0x75 0x0075 # LATIN SMALL LETTER U
+0x76 0x0076 # LATIN SMALL LETTER V
+0x77 0x0077 # LATIN SMALL LETTER W
+0x78 0x0078 # LATIN SMALL LETTER X
+0x79 0x0079 # LATIN SMALL LETTER Y
+0x7A 0x007A # LATIN SMALL LETTER Z
+0x7B 0x00B4 # ACUTE ACCENT
+0x7C 0x00F1 # LATIN SMALL LETTER N WITH TILDE
+0x7D 0x005B # LEFT SQUARE BRACKET
+0x7E 0x00A8 # DIAERESIS
+0x7F 0x007F # DELETE (DEL)
diff --git a/externals/figlet/fonts/646-de.flc b/externals/figlet/fonts/646-de.flc
new file mode 100644
index 000000000..716a42ffb
--- /dev/null
+++ b/externals/figlet/fonts/646-de.flc
@@ -0,0 +1,156 @@
+#
+# Name: DIN_66003 to Unicode
+# Unicode version: 2.0
+# Table version: 0.1
+# Table format: Format A
+# Date: 0097-01-24
+# Authors: John Cowan <cowan@ccil.org> (conversion)
+# Keld Simonsen <Keld.Simonsen@dkuug.dk> (RFC 1345)
+#
+# General notes:
+#
+# This table contains data obtained from RFC 1345 on how
+# DIN_66003 characters map into Unicode.
+#
+# Format: Three tab-separated columns
+# Column #1 is the DIN_66003 code (in hex as 0xXX)
+# Column #2 is the Unicode (in hex as 0xXXXX)
+# Column #3 the Unicode name (follows a comment sign, '#')
+#
+# The entries are in DIN_66003 order
+#
+# Any comments or problems, contact <cowan@ccil.org>
+#
+# &rem source: ECMA registry
+# &alias iso-ir-21
+# &g0esc x284b &g1esc x294b &g2esc x2a4b &g3esc x2b4b
+# &alias de
+# &alias ISO646-DE
+0x00 0x0000 # NULL (NUL)
+0x01 0x0001 # START OF HEADING (SOH)
+0x02 0x0002 # START OF TEXT (STX)
+0x03 0x0003 # END OF TEXT (ETX)
+0x04 0x0004 # END OF TRANSMISSION (EOT)
+0x05 0x0005 # ENQUIRY (ENQ)
+0x06 0x0006 # ACKNOWLEDGE (ACK)
+0x07 0x0007 # BELL (BEL)
+0x08 0x0008 # BACKSPACE (BS)
+0x09 0x0009 # CHARACTER TABULATION (HT)
+0x0A 0x000A # LINE FEED (LF)
+0x0B 0x000B # LINE TABULATION (VT)
+0x0C 0x000C # FORM FEED (FF)
+0x0D 0x000D # CARRIAGE RETURN (CR)
+0x0E 0x000E # SHIFT OUT (SO)
+0x0F 0x000F # SHIFT IN (SI)
+0x10 0x0010 # DATALINK ESCAPE (DLE)
+0x11 0x0011 # DEVICE CONTROL ONE (DC1)
+0x12 0x0012 # DEVICE CONTROL TWO (DC2)
+0x13 0x0013 # DEVICE CONTROL THREE (DC3)
+0x14 0x0014 # DEVICE CONTROL FOUR (DC4)
+0x15 0x0015 # NEGATIVE ACKNOWLEDGE (NAK)
+0x16 0x0016 # SYNCRONOUS IDLE (SYN)
+0x17 0x0017 # END OF TRANSMISSION BLOCK (ETB)
+0x18 0x0018 # CANCEL (CAN)
+0x19 0x0019 # END OF MEDIUM (EM)
+0x1A 0x001A # SUBSTITUTE (SUB)
+0x1B 0x001B # ESCAPE (ESC)
+0x1C 0x001C # FILE SEPARATOR (IS4)
+0x1D 0x001D # GROUP SEPARATOR (IS3)
+0x1E 0x001E # RECORD SEPARATOR (IS2)
+0x1F 0x001F # UNIT SEPARATOR (IS1)
+0x20 0x0020 # SPACE
+0x21 0x0021 # EXCLAMATION MARK
+0x22 0x0022 # QUOTATION MARK
+0x23 0x0023 # NUMBER SIGN
+0x24 0x0024 # DOLLAR SIGN
+0x25 0x0025 # PERCENT SIGN
+0x26 0x0026 # AMPERSAND
+0x27 0x0027 # APOSTROPHE
+0x28 0x0028 # LEFT PARENTHESIS
+0x29 0x0029 # RIGHT PARENTHESIS
+0x2A 0x002A # ASTERISK
+0x2B 0x002B # PLUS SIGN
+0x2C 0x002C # COMMA
+0x2D 0x002D # HYPHEN-MINUS
+0x2E 0x002E # FULL STOP
+0x2F 0x002F # SOLIDUS
+0x30 0x0030 # DIGIT ZERO
+0x31 0x0031 # DIGIT ONE
+0x32 0x0032 # DIGIT TWO
+0x33 0x0033 # DIGIT THREE
+0x34 0x0034 # DIGIT FOUR
+0x35 0x0035 # DIGIT FIVE
+0x36 0x0036 # DIGIT SIX
+0x37 0x0037 # DIGIT SEVEN
+0x38 0x0038 # DIGIT EIGHT
+0x39 0x0039 # DIGIT NINE
+0x3A 0x003A # COLON
+0x3B 0x003B # SEMICOLON
+0x3C 0x003C # LESS-THAN SIGN
+0x3D 0x003D # EQUALS SIGN
+0x3E 0x003E # GREATER-THAN SIGN
+0x3F 0x003F # QUESTION MARK
+0x40 0x00A7 # SECTION SIGN
+0x41 0x0041 # LATIN CAPITAL LETTER A
+0x42 0x0042 # LATIN CAPITAL LETTER B
+0x43 0x0043 # LATIN CAPITAL LETTER C
+0x44 0x0044 # LATIN CAPITAL LETTER D
+0x45 0x0045 # LATIN CAPITAL LETTER E
+0x46 0x0046 # LATIN CAPITAL LETTER F
+0x47 0x0047 # LATIN CAPITAL LETTER G
+0x48 0x0048 # LATIN CAPITAL LETTER H
+0x49 0x0049 # LATIN CAPITAL LETTER I
+0x4A 0x004A # LATIN CAPITAL LETTER J
+0x4B 0x004B # LATIN CAPITAL LETTER K
+0x4C 0x004C # LATIN CAPITAL LETTER L
+0x4D 0x004D # LATIN CAPITAL LETTER M
+0x4E 0x004E # LATIN CAPITAL LETTER N
+0x4F 0x004F # LATIN CAPITAL LETTER O
+0x50 0x0050 # LATIN CAPITAL LETTER P
+0x51 0x0051 # LATIN CAPITAL LETTER Q
+0x52 0x0052 # LATIN CAPITAL LETTER R
+0x53 0x0053 # LATIN CAPITAL LETTER S
+0x54 0x0054 # LATIN CAPITAL LETTER T
+0x55 0x0055 # LATIN CAPITAL LETTER U
+0x56 0x0056 # LATIN CAPITAL LETTER V
+0x57 0x0057 # LATIN CAPITAL LETTER W
+0x58 0x0058 # LATIN CAPITAL LETTER X
+0x59 0x0059 # LATIN CAPITAL LETTER Y
+0x5A 0x005A # LATIN CAPITAL LETTER Z
+0x5B 0x00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS
+0x5C 0x00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS
+0x5D 0x00DC # LATIN CAPITAL LETTER U WITH DIAERESIS
+0x5E 0x005E # CIRCUMFLEX ACCENT
+0x5F 0x005F # LOW LINE
+0x60 0x0060 # GRAVE ACCENT
+0x61 0x0061 # LATIN SMALL LETTER A
+0x62 0x0062 # LATIN SMALL LETTER B
+0x63 0x0063 # LATIN SMALL LETTER C
+0x64 0x0064 # LATIN SMALL LETTER D
+0x65 0x0065 # LATIN SMALL LETTER E
+0x66 0x0066 # LATIN SMALL LETTER F
+0x67 0x0067 # LATIN SMALL LETTER G
+0x68 0x0068 # LATIN SMALL LETTER H
+0x69 0x0069 # LATIN SMALL LETTER I
+0x6A 0x006A # LATIN SMALL LETTER J
+0x6B 0x006B # LATIN SMALL LETTER K
+0x6C 0x006C # LATIN SMALL LETTER L
+0x6D 0x006D # LATIN SMALL LETTER M
+0x6E 0x006E # LATIN SMALL LETTER N
+0x6F 0x006F # LATIN SMALL LETTER O
+0x70 0x0070 # LATIN SMALL LETTER P
+0x71 0x0071 # LATIN SMALL LETTER Q
+0x72 0x0072 # LATIN SMALL LETTER R
+0x73 0x0073 # LATIN SMALL LETTER S
+0x74 0x0074 # LATIN SMALL LETTER T
+0x75 0x0075 # LATIN SMALL LETTER U
+0x76 0x0076 # LATIN SMALL LETTER V
+0x77 0x0077 # LATIN SMALL LETTER W
+0x78 0x0078 # LATIN SMALL LETTER X
+0x79 0x0079 # LATIN SMALL LETTER Y
+0x7A 0x007A # LATIN SMALL LETTER Z
+0x7B 0x00E4 # LATIN SMALL LETTER A WITH DIAERESIS
+0x7C 0x00F6 # LATIN SMALL LETTER O WITH DIAERESIS
+0x7D 0x00FC # LATIN SMALL LETTER U WITH DIAERESIS
+0x7E 0x00DF # LATIN SMALL LETTER SHARP S (German)
+0x7F 0x007F # DELETE (DEL)
diff --git a/externals/figlet/fonts/646-dk.flc b/externals/figlet/fonts/646-dk.flc
new file mode 100644
index 000000000..3d9ddae01
--- /dev/null
+++ b/externals/figlet/fonts/646-dk.flc
@@ -0,0 +1,155 @@
+#
+# Name: DS_2089 to Unicode
+# Unicode version: 2.0
+# Table version: 0.1
+# Table format: Format A
+# Date: 0097-01-24
+# Authors: John Cowan <cowan@ccil.org> (conversion)
+# Keld Simonsen <Keld.Simonsen@dkuug.dk> (RFC 1345)
+#
+# General notes:
+#
+# This table contains data obtained from RFC 1345 on how
+# DS_2089 characters map into Unicode.
+#
+# Format: Three tab-separated columns
+# Column #1 is the DS_2089 code (in hex as 0xXX)
+# Column #2 is the Unicode (in hex as 0xXXXX)
+# Column #3 the Unicode name (follows a comment sign, '#')
+#
+# The entries are in DS_2089 order
+#
+# Any comments or problems, contact <cowan@ccil.org>
+#
+# &rem source: Danish Standard, DS 2089, February 1974
+# &alias DS2089
+# &alias ISO646-DK
+# &alias dk
+0x00 0x0000 # NULL (NUL)
+0x01 0x0001 # START OF HEADING (SOH)
+0x02 0x0002 # START OF TEXT (STX)
+0x03 0x0003 # END OF TEXT (ETX)
+0x04 0x0004 # END OF TRANSMISSION (EOT)
+0x05 0x0005 # ENQUIRY (ENQ)
+0x06 0x0006 # ACKNOWLEDGE (ACK)
+0x07 0x0007 # BELL (BEL)
+0x08 0x0008 # BACKSPACE (BS)
+0x09 0x0009 # CHARACTER TABULATION (HT)
+0x0A 0x000A # LINE FEED (LF)
+0x0B 0x000B # LINE TABULATION (VT)
+0x0C 0x000C # FORM FEED (FF)
+0x0D 0x000D # CARRIAGE RETURN (CR)
+0x0E 0x000E # SHIFT OUT (SO)
+0x0F 0x000F # SHIFT IN (SI)
+0x10 0x0010 # DATALINK ESCAPE (DLE)
+0x11 0x0011 # DEVICE CONTROL ONE (DC1)
+0x12 0x0012 # DEVICE CONTROL TWO (DC2)
+0x13 0x0013 # DEVICE CONTROL THREE (DC3)
+0x14 0x0014 # DEVICE CONTROL FOUR (DC4)
+0x15 0x0015 # NEGATIVE ACKNOWLEDGE (NAK)
+0x16 0x0016 # SYNCRONOUS IDLE (SYN)
+0x17 0x0017 # END OF TRANSMISSION BLOCK (ETB)
+0x18 0x0018 # CANCEL (CAN)
+0x19 0x0019 # END OF MEDIUM (EM)
+0x1A 0x001A # SUBSTITUTE (SUB)
+0x1B 0x001B # ESCAPE (ESC)
+0x1C 0x001C # FILE SEPARATOR (IS4)
+0x1D 0x001D # GROUP SEPARATOR (IS3)
+0x1E 0x001E # RECORD SEPARATOR (IS2)
+0x1F 0x001F # UNIT SEPARATOR (IS1)
+0x20 0x0020 # SPACE
+0x21 0x0021 # EXCLAMATION MARK
+0x22 0x0022 # QUOTATION MARK
+0x23 0x0023 # NUMBER SIGN
+0x24 0x0024 # DOLLAR SIGN
+0x25 0x0025 # PERCENT SIGN
+0x26 0x0026 # AMPERSAND
+0x27 0x0027 # APOSTROPHE
+0x28 0x0028 # LEFT PARENTHESIS
+0x29 0x0029 # RIGHT PARENTHESIS
+0x2A 0x002A # ASTERISK
+0x2B 0x002B # PLUS SIGN
+0x2C 0x002C # COMMA
+0x2D 0x002D # HYPHEN-MINUS
+0x2E 0x002E # FULL STOP
+0x2F 0x002F # SOLIDUS
+0x30 0x0030 # DIGIT ZERO
+0x31 0x0031 # DIGIT ONE
+0x32 0x0032 # DIGIT TWO
+0x33 0x0033 # DIGIT THREE
+0x34 0x0034 # DIGIT FOUR
+0x35 0x0035 # DIGIT FIVE
+0x36 0x0036 # DIGIT SIX
+0x37 0x0037 # DIGIT SEVEN
+0x38 0x0038 # DIGIT EIGHT
+0x39 0x0039 # DIGIT NINE
+0x3A 0x003A # COLON
+0x3B 0x003B # SEMICOLON
+0x3C 0x003C # LESS-THAN SIGN
+0x3D 0x003D # EQUALS SIGN
+0x3E 0x003E # GREATER-THAN SIGN
+0x3F 0x003F # QUESTION MARK
+0x40 0x0040 # COMMERCIAL AT
+0x41 0x0041 # LATIN CAPITAL LETTER A
+0x42 0x0042 # LATIN CAPITAL LETTER B
+0x43 0x0043 # LATIN CAPITAL LETTER C
+0x44 0x0044 # LATIN CAPITAL LETTER D
+0x45 0x0045 # LATIN CAPITAL LETTER E
+0x46 0x0046 # LATIN CAPITAL LETTER F
+0x47 0x0047 # LATIN CAPITAL LETTER G
+0x48 0x0048 # LATIN CAPITAL LETTER H
+0x49 0x0049 # LATIN CAPITAL LETTER I
+0x4A 0x004A # LATIN CAPITAL LETTER J
+0x4B 0x004B # LATIN CAPITAL LETTER K
+0x4C 0x004C # LATIN CAPITAL LETTER L
+0x4D 0x004D # LATIN CAPITAL LETTER M
+0x4E 0x004E # LATIN CAPITAL LETTER N
+0x4F 0x004F # LATIN CAPITAL LETTER O
+0x50 0x0050 # LATIN CAPITAL LETTER P
+0x51 0x0051 # LATIN CAPITAL LETTER Q
+0x52 0x0052 # LATIN CAPITAL LETTER R
+0x53 0x0053 # LATIN CAPITAL LETTER S
+0x54 0x0054 # LATIN CAPITAL LETTER T
+0x55 0x0055 # LATIN CAPITAL LETTER U
+0x56 0x0056 # LATIN CAPITAL LETTER V
+0x57 0x0057 # LATIN CAPITAL LETTER W
+0x58 0x0058 # LATIN CAPITAL LETTER X
+0x59 0x0059 # LATIN CAPITAL LETTER Y
+0x5A 0x005A # LATIN CAPITAL LETTER Z
+0x5B 0x00C6 # LATIN CAPITAL LETTER AE
+0x5C 0x00D8 # LATIN CAPITAL LETTER O WITH STROKE
+0x5D 0x00C5 # LATIN CAPITAL LETTER A WITH RING ABOVE
+0x5E 0x005E # CIRCUMFLEX ACCENT
+0x5F 0x005F # LOW LINE
+0x60 0x0060 # GRAVE ACCENT
+0x61 0x0061 # LATIN SMALL LETTER A
+0x62 0x0062 # LATIN SMALL LETTER B
+0x63 0x0063 # LATIN SMALL LETTER C
+0x64 0x0064 # LATIN SMALL LETTER D
+0x65 0x0065 # LATIN SMALL LETTER E
+0x66 0x0066 # LATIN SMALL LETTER F
+0x67 0x0067 # LATIN SMALL LETTER G
+0x68 0x0068 # LATIN SMALL LETTER H
+0x69 0x0069 # LATIN SMALL LETTER I
+0x6A 0x006A # LATIN SMALL LETTER J
+0x6B 0x006B # LATIN SMALL LETTER K
+0x6C 0x006C # LATIN SMALL LETTER L
+0x6D 0x006D # LATIN SMALL LETTER M
+0x6E 0x006E # LATIN SMALL LETTER N
+0x6F 0x006F # LATIN SMALL LETTER O
+0x70 0x0070 # LATIN SMALL LETTER P
+0x71 0x0071 # LATIN SMALL LETTER Q
+0x72 0x0072 # LATIN SMALL LETTER R
+0x73 0x0073 # LATIN SMALL LETTER S
+0x74 0x0074 # LATIN SMALL LETTER T
+0x75 0x0075 # LATIN SMALL LETTER U
+0x76 0x0076 # LATIN SMALL LETTER V
+0x77 0x0077 # LATIN SMALL LETTER W
+0x78 0x0078 # LATIN SMALL LETTER X
+0x79 0x0079 # LATIN SMALL LETTER Y
+0x7A 0x007A # LATIN SMALL LETTER Z
+0x7B 0x00E6 # LATIN SMALL LETTER AE
+0x7C 0x00F8 # LATIN SMALL LETTER O WITH STROKE
+0x7D 0x00E5 # LATIN SMALL LETTER A WITH RING ABOVE
+0x7E 0x007E # TILDE
+0x7F 0x007F # DELETE (DEL)
diff --git a/externals/figlet/fonts/646-es.flc b/externals/figlet/fonts/646-es.flc
new file mode 100644
index 000000000..b996d786b
--- /dev/null
+++ b/externals/figlet/fonts/646-es.flc
@@ -0,0 +1,155 @@
+#
+# Name: ES to Unicode
+# Unicode version: 2.0
+# Table version: 0.1
+# Table format: Format A
+# Date: 0097-01-24
+# Authors: John Cowan <cowan@ccil.org> (conversion)
+# Keld Simonsen <Keld.Simonsen@dkuug.dk> (RFC 1345)
+#
+# General notes:
+#
+# This table contains data obtained from RFC 1345 on how
+# ES characters map into Unicode.
+#
+# Format: Three tab-separated columns
+# Column #1 is the ES code (in hex as 0xXX)
+# Column #2 is the Unicode (in hex as 0xXXXX)
+# Column #3 the Unicode name (follows a comment sign, '#')
+#
+# The entries are in ES order
+#
+# Any comments or problems, contact <cowan@ccil.org>
+#
+# &rem source: ECMA registry
+# &alias iso-ir-17
+# &alias ISO646-ES
+# &g0esc x285a &g1esc x295a &g2esc x2a5a &g3esc x2b5a
+0x00 0x0000 # NULL (NUL)
+0x01 0x0001 # START OF HEADING (SOH)
+0x02 0x0002 # START OF TEXT (STX)
+0x03 0x0003 # END OF TEXT (ETX)
+0x04 0x0004 # END OF TRANSMISSION (EOT)
+0x05 0x0005 # ENQUIRY (ENQ)
+0x06 0x0006 # ACKNOWLEDGE (ACK)
+0x07 0x0007 # BELL (BEL)
+0x08 0x0008 # BACKSPACE (BS)
+0x09 0x0009 # CHARACTER TABULATION (HT)
+0x0A 0x000A # LINE FEED (LF)
+0x0B 0x000B # LINE TABULATION (VT)
+0x0C 0x000C # FORM FEED (FF)
+0x0D 0x000D # CARRIAGE RETURN (CR)
+0x0E 0x000E # SHIFT OUT (SO)
+0x0F 0x000F # SHIFT IN (SI)
+0x10 0x0010 # DATALINK ESCAPE (DLE)
+0x11 0x0011 # DEVICE CONTROL ONE (DC1)
+0x12 0x0012 # DEVICE CONTROL TWO (DC2)
+0x13 0x0013 # DEVICE CONTROL THREE (DC3)
+0x14 0x0014 # DEVICE CONTROL FOUR (DC4)
+0x15 0x0015 # NEGATIVE ACKNOWLEDGE (NAK)
+0x16 0x0016 # SYNCRONOUS IDLE (SYN)
+0x17 0x0017 # END OF TRANSMISSION BLOCK (ETB)
+0x18 0x0018 # CANCEL (CAN)
+0x19 0x0019 # END OF MEDIUM (EM)
+0x1A 0x001A # SUBSTITUTE (SUB)
+0x1B 0x001B # ESCAPE (ESC)
+0x1C 0x001C # FILE SEPARATOR (IS4)
+0x1D 0x001D # GROUP SEPARATOR (IS3)
+0x1E 0x001E # RECORD SEPARATOR (IS2)
+0x1F 0x001F # UNIT SEPARATOR (IS1)
+0x20 0x0020 # SPACE
+0x21 0x0021 # EXCLAMATION MARK
+0x22 0x0022 # QUOTATION MARK
+0x23 0x00A3 # POUND SIGN
+0x24 0x0024 # DOLLAR SIGN
+0x25 0x0025 # PERCENT SIGN
+0x26 0x0026 # AMPERSAND
+0x27 0x0027 # APOSTROPHE
+0x28 0x0028 # LEFT PARENTHESIS
+0x29 0x0029 # RIGHT PARENTHESIS
+0x2A 0x002A # ASTERISK
+0x2B 0x002B # PLUS SIGN
+0x2C 0x002C # COMMA
+0x2D 0x002D # HYPHEN-MINUS
+0x2E 0x002E # FULL STOP
+0x2F 0x002F # SOLIDUS
+0x30 0x0030 # DIGIT ZERO
+0x31 0x0031 # DIGIT ONE
+0x32 0x0032 # DIGIT TWO
+0x33 0x0033 # DIGIT THREE
+0x34 0x0034 # DIGIT FOUR
+0x35 0x0035 # DIGIT FIVE
+0x36 0x0036 # DIGIT SIX
+0x37 0x0037 # DIGIT SEVEN
+0x38 0x0038 # DIGIT EIGHT
+0x39 0x0039 # DIGIT NINE
+0x3A 0x003A # COLON
+0x3B 0x003B # SEMICOLON
+0x3C 0x003C # LESS-THAN SIGN
+0x3D 0x003D # EQUALS SIGN
+0x3E 0x003E # GREATER-THAN SIGN
+0x3F 0x003F # QUESTION MARK
+0x40 0x00A7 # SECTION SIGN
+0x41 0x0041 # LATIN CAPITAL LETTER A
+0x42 0x0042 # LATIN CAPITAL LETTER B
+0x43 0x0043 # LATIN CAPITAL LETTER C
+0x44 0x0044 # LATIN CAPITAL LETTER D
+0x45 0x0045 # LATIN CAPITAL LETTER E
+0x46 0x0046 # LATIN CAPITAL LETTER F
+0x47 0x0047 # LATIN CAPITAL LETTER G
+0x48 0x0048 # LATIN CAPITAL LETTER H
+0x49 0x0049 # LATIN CAPITAL LETTER I
+0x4A 0x004A # LATIN CAPITAL LETTER J
+0x4B 0x004B # LATIN CAPITAL LETTER K
+0x4C 0x004C # LATIN CAPITAL LETTER L
+0x4D 0x004D # LATIN CAPITAL LETTER M
+0x4E 0x004E # LATIN CAPITAL LETTER N
+0x4F 0x004F # LATIN CAPITAL LETTER O
+0x50 0x0050 # LATIN CAPITAL LETTER P
+0x51 0x0051 # LATIN CAPITAL LETTER Q
+0x52 0x0052 # LATIN CAPITAL LETTER R
+0x53 0x0053 # LATIN CAPITAL LETTER S
+0x54 0x0054 # LATIN CAPITAL LETTER T
+0x55 0x0055 # LATIN CAPITAL LETTER U
+0x56 0x0056 # LATIN CAPITAL LETTER V
+0x57 0x0057 # LATIN CAPITAL LETTER W
+0x58 0x0058 # LATIN CAPITAL LETTER X
+0x59 0x0059 # LATIN CAPITAL LETTER Y
+0x5A 0x005A # LATIN CAPITAL LETTER Z
+0x5B 0x00A1 # INVERTED EXCLAMATION MARK
+0x5C 0x00D1 # LATIN CAPITAL LETTER N WITH TILDE
+0x5D 0x00BF # INVERTED QUESTION MARK
+0x5E 0x005E # CIRCUMFLEX ACCENT
+0x5F 0x005F # LOW LINE
+0x60 0x0060 # GRAVE ACCENT
+0x61 0x0061 # LATIN SMALL LETTER A
+0x62 0x0062 # LATIN SMALL LETTER B
+0x63 0x0063 # LATIN SMALL LETTER C
+0x64 0x0064 # LATIN SMALL LETTER D
+0x65 0x0065 # LATIN SMALL LETTER E
+0x66 0x0066 # LATIN SMALL LETTER F
+0x67 0x0067 # LATIN SMALL LETTER G
+0x68 0x0068 # LATIN SMALL LETTER H
+0x69 0x0069 # LATIN SMALL LETTER I
+0x6A 0x006A # LATIN SMALL LETTER J
+0x6B 0x006B # LATIN SMALL LETTER K
+0x6C 0x006C # LATIN SMALL LETTER L
+0x6D 0x006D # LATIN SMALL LETTER M
+0x6E 0x006E # LATIN SMALL LETTER N
+0x6F 0x006F # LATIN SMALL LETTER O
+0x70 0x0070 # LATIN SMALL LETTER P
+0x71 0x0071 # LATIN SMALL LETTER Q
+0x72 0x0072 # LATIN SMALL LETTER R
+0x73 0x0073 # LATIN SMALL LETTER S
+0x74 0x0074 # LATIN SMALL LETTER T
+0x75 0x0075 # LATIN SMALL LETTER U
+0x76 0x0076 # LATIN SMALL LETTER V
+0x77 0x0077 # LATIN SMALL LETTER W
+0x78 0x0078 # LATIN SMALL LETTER X
+0x79 0x0079 # LATIN SMALL LETTER Y
+0x7A 0x007A # LATIN SMALL LETTER Z
+0x7B 0x00B0 # DEGREE SIGN
+0x7C 0x00F1 # LATIN SMALL LETTER N WITH TILDE
+0x7D 0x00E7 # LATIN SMALL LETTER C WITH CEDILLA
+0x7E 0x007E # TILDE
+0x7F 0x007F # DELETE (DEL)
diff --git a/externals/figlet/fonts/646-es2.flc b/externals/figlet/fonts/646-es2.flc
new file mode 100644
index 000000000..1f282ceb7
--- /dev/null
+++ b/externals/figlet/fonts/646-es2.flc
@@ -0,0 +1,155 @@
+#
+# Name: ES2 to Unicode
+# Unicode version: 2.0
+# Table version: 0.1
+# Table format: Format A
+# Date: 0097-01-24
+# Authors: John Cowan <cowan@ccil.org> (conversion)
+# Keld Simonsen <Keld.Simonsen@dkuug.dk> (RFC 1345)
+#
+# General notes:
+#
+# This table contains data obtained from RFC 1345 on how
+# ES2 characters map into Unicode.
+#
+# Format: Three tab-separated columns
+# Column #1 is the ES2 code (in hex as 0xXX)
+# Column #2 is the Unicode (in hex as 0xXXXX)
+# Column #3 the Unicode name (follows a comment sign, '#')
+#
+# The entries are in ES2 order
+#
+# Any comments or problems, contact <cowan@ccil.org>
+#
+# &rem source: ECMA registry
+# &alias iso-ir-85
+# &alias ISO646-ES2
+# &g0esc x2868 &g1esc x2968 &g2esc x2a68 &g3esc x2b68
+0x00 0x0000 # NULL (NUL)
+0x01 0x0001 # START OF HEADING (SOH)
+0x02 0x0002 # START OF TEXT (STX)
+0x03 0x0003 # END OF TEXT (ETX)
+0x04 0x0004 # END OF TRANSMISSION (EOT)
+0x05 0x0005 # ENQUIRY (ENQ)
+0x06 0x0006 # ACKNOWLEDGE (ACK)
+0x07 0x0007 # BELL (BEL)
+0x08 0x0008 # BACKSPACE (BS)
+0x09 0x0009 # CHARACTER TABULATION (HT)
+0x0A 0x000A # LINE FEED (LF)
+0x0B 0x000B # LINE TABULATION (VT)
+0x0C 0x000C # FORM FEED (FF)
+0x0D 0x000D # CARRIAGE RETURN (CR)
+0x0E 0x000E # SHIFT OUT (SO)
+0x0F 0x000F # SHIFT IN (SI)
+0x10 0x0010 # DATALINK ESCAPE (DLE)
+0x11 0x0011 # DEVICE CONTROL ONE (DC1)
+0x12 0x0012 # DEVICE CONTROL TWO (DC2)
+0x13 0x0013 # DEVICE CONTROL THREE (DC3)
+0x14 0x0014 # DEVICE CONTROL FOUR (DC4)
+0x15 0x0015 # NEGATIVE ACKNOWLEDGE (NAK)
+0x16 0x0016 # SYNCRONOUS IDLE (SYN)
+0x17 0x0017 # END OF TRANSMISSION BLOCK (ETB)
+0x18 0x0018 # CANCEL (CAN)
+0x19 0x0019 # END OF MEDIUM (EM)
+0x1A 0x001A # SUBSTITUTE (SUB)
+0x1B 0x001B # ESCAPE (ESC)
+0x1C 0x001C # FILE SEPARATOR (IS4)
+0x1D 0x001D # GROUP SEPARATOR (IS3)
+0x1E 0x001E # RECORD SEPARATOR (IS2)
+0x1F 0x001F # UNIT SEPARATOR (IS1)
+0x20 0x0020 # SPACE
+0x21 0x0021 # EXCLAMATION MARK
+0x22 0x0022 # QUOTATION MARK
+0x23 0x0023 # NUMBER SIGN
+0x24 0x0024 # DOLLAR SIGN
+0x25 0x0025 # PERCENT SIGN
+0x26 0x0026 # AMPERSAND
+0x27 0x0027 # APOSTROPHE
+0x28 0x0028 # LEFT PARENTHESIS
+0x29 0x0029 # RIGHT PARENTHESIS
+0x2A 0x002A # ASTERISK
+0x2B 0x002B # PLUS SIGN
+0x2C 0x002C # COMMA
+0x2D 0x002D # HYPHEN-MINUS
+0x2E 0x002E # FULL STOP
+0x2F 0x002F # SOLIDUS
+0x30 0x0030 # DIGIT ZERO
+0x31 0x0031 # DIGIT ONE
+0x32 0x0032 # DIGIT TWO
+0x33 0x0033 # DIGIT THREE
+0x34 0x0034 # DIGIT FOUR
+0x35 0x0035 # DIGIT FIVE
+0x36 0x0036 # DIGIT SIX
+0x37 0x0037 # DIGIT SEVEN
+0x38 0x0038 # DIGIT EIGHT
+0x39 0x0039 # DIGIT NINE
+0x3A 0x003A # COLON
+0x3B 0x003B # SEMICOLON
+0x3C 0x003C # LESS-THAN SIGN
+0x3D 0x003D # EQUALS SIGN
+0x3E 0x003E # GREATER-THAN SIGN
+0x3F 0x003F # QUESTION MARK
+0x40 0x2219 # BULLET OPERATOR
+0x41 0x0041 # LATIN CAPITAL LETTER A
+0x42 0x0042 # LATIN CAPITAL LETTER B
+0x43 0x0043 # LATIN CAPITAL LETTER C
+0x44 0x0044 # LATIN CAPITAL LETTER D
+0x45 0x0045 # LATIN CAPITAL LETTER E
+0x46 0x0046 # LATIN CAPITAL LETTER F
+0x47 0x0047 # LATIN CAPITAL LETTER G
+0x48 0x0048 # LATIN CAPITAL LETTER H
+0x49 0x0049 # LATIN CAPITAL LETTER I
+0x4A 0x004A # LATIN CAPITAL LETTER J
+0x4B 0x004B # LATIN CAPITAL LETTER K
+0x4C 0x004C # LATIN CAPITAL LETTER L
+0x4D 0x004D # LATIN CAPITAL LETTER M
+0x4E 0x004E # LATIN CAPITAL LETTER N
+0x4F 0x004F # LATIN CAPITAL LETTER O
+0x50 0x0050 # LATIN CAPITAL LETTER P
+0x51 0x0051 # LATIN CAPITAL LETTER Q
+0x52 0x0052 # LATIN CAPITAL LETTER R
+0x53 0x0053 # LATIN CAPITAL LETTER S
+0x54 0x0054 # LATIN CAPITAL LETTER T
+0x55 0x0055 # LATIN CAPITAL LETTER U
+0x56 0x0056 # LATIN CAPITAL LETTER V
+0x57 0x0057 # LATIN CAPITAL LETTER W
+0x58 0x0058 # LATIN CAPITAL LETTER X
+0x59 0x0059 # LATIN CAPITAL LETTER Y
+0x5A 0x005A # LATIN CAPITAL LETTER Z
+0x5B 0x00A1 # INVERTED EXCLAMATION MARK
+0x5C 0x00D1 # LATIN CAPITAL LETTER N WITH TILDE
+0x5D 0x00C7 # LATIN CAPITAL LETTER C WITH CEDILLA
+0x5E 0x00BF # INVERTED QUESTION MARK
+0x5F 0x005F # LOW LINE
+0x60 0x0060 # GRAVE ACCENT
+0x61 0x0061 # LATIN SMALL LETTER A
+0x62 0x0062 # LATIN SMALL LETTER B
+0x63 0x0063 # LATIN SMALL LETTER C
+0x64 0x0064 # LATIN SMALL LETTER D
+0x65 0x0065 # LATIN SMALL LETTER E
+0x66 0x0066 # LATIN SMALL LETTER F
+0x67 0x0067 # LATIN SMALL LETTER G
+0x68 0x0068 # LATIN SMALL LETTER H
+0x69 0x0069 # LATIN SMALL LETTER I
+0x6A 0x006A # LATIN SMALL LETTER J
+0x6B 0x006B # LATIN SMALL LETTER K
+0x6C 0x006C # LATIN SMALL LETTER L
+0x6D 0x006D # LATIN SMALL LETTER M
+0x6E 0x006E # LATIN SMALL LETTER N
+0x6F 0x006F # LATIN SMALL LETTER O
+0x70 0x0070 # LATIN SMALL LETTER P
+0x71 0x0071 # LATIN SMALL LETTER Q
+0x72 0x0072 # LATIN SMALL LETTER R
+0x73 0x0073 # LATIN SMALL LETTER S
+0x74 0x0074 # LATIN SMALL LETTER T
+0x75 0x0075 # LATIN SMALL LETTER U
+0x76 0x0076 # LATIN SMALL LETTER V
+0x77 0x0077 # LATIN SMALL LETTER W
+0x78 0x0078 # LATIN SMALL LETTER X
+0x79 0x0079 # LATIN SMALL LETTER Y
+0x7A 0x007A # LATIN SMALL LETTER Z
+0x7B 0x00B4 # ACUTE ACCENT
+0x7C 0x00F1 # LATIN SMALL LETTER N WITH TILDE
+0x7D 0x00E7 # LATIN SMALL LETTER C WITH CEDILLA
+0x7E 0x00A8 # DIAERESIS
+0x7F 0x007F # DELETE (DEL)
diff --git a/externals/figlet/fonts/646-fr.flc b/externals/figlet/fonts/646-fr.flc
new file mode 100644
index 000000000..225b2fb8e
--- /dev/null
+++ b/externals/figlet/fonts/646-fr.flc
@@ -0,0 +1,156 @@
+#
+# Name: NF_Z_62-010 to Unicode
+# Unicode version: 2.0
+# Table version: 0.1
+# Table format: Format A
+# Date: 0097-01-24
+# Authors: John Cowan <cowan@ccil.org> (conversion)
+# Keld Simonsen <Keld.Simonsen@dkuug.dk> (RFC 1345)
+#
+# General notes:
+#
+# This table contains data obtained from RFC 1345 on how
+# NF_Z_62-010 characters map into Unicode.
+#
+# Format: Three tab-separated columns
+# Column #1 is the NF_Z_62-010 code (in hex as 0xXX)
+# Column #2 is the Unicode (in hex as 0xXXXX)
+# Column #3 the Unicode name (follows a comment sign, '#')
+#
+# The entries are in NF_Z_62-010 order
+#
+# Any comments or problems, contact <cowan@ccil.org>
+#
+# &rem source: ECMA registry
+# &alias iso-ir-69
+# &alias ISO646-FR
+# &g0esc x2866 &g1esc x2966 &g2esc x2a66 &g3esc x2b66
+# &alias fr
+0x00 0x0000 # NULL (NUL)
+0x01 0x0001 # START OF HEADING (SOH)
+0x02 0x0002 # START OF TEXT (STX)
+0x03 0x0003 # END OF TEXT (ETX)
+0x04 0x0004 # END OF TRANSMISSION (EOT)
+0x05 0x0005 # ENQUIRY (ENQ)
+0x06 0x0006 # ACKNOWLEDGE (ACK)
+0x07 0x0007 # BELL (BEL)
+0x08 0x0008 # BACKSPACE (BS)
+0x09 0x0009 # CHARACTER TABULATION (HT)
+0x0A 0x000A # LINE FEED (LF)
+0x0B 0x000B # LINE TABULATION (VT)
+0x0C 0x000C # FORM FEED (FF)
+0x0D 0x000D # CARRIAGE RETURN (CR)
+0x0E 0x000E # SHIFT OUT (SO)
+0x0F 0x000F # SHIFT IN (SI)
+0x10 0x0010 # DATALINK ESCAPE (DLE)
+0x11 0x0011 # DEVICE CONTROL ONE (DC1)
+0x12 0x0012 # DEVICE CONTROL TWO (DC2)
+0x13 0x0013 # DEVICE CONTROL THREE (DC3)
+0x14 0x0014 # DEVICE CONTROL FOUR (DC4)
+0x15 0x0015 # NEGATIVE ACKNOWLEDGE (NAK)
+0x16 0x0016 # SYNCRONOUS IDLE (SYN)
+0x17 0x0017 # END OF TRANSMISSION BLOCK (ETB)
+0x18 0x0018 # CANCEL (CAN)
+0x19 0x0019 # END OF MEDIUM (EM)
+0x1A 0x001A # SUBSTITUTE (SUB)
+0x1B 0x001B # ESCAPE (ESC)
+0x1C 0x001C # FILE SEPARATOR (IS4)
+0x1D 0x001D # GROUP SEPARATOR (IS3)
+0x1E 0x001E # RECORD SEPARATOR (IS2)
+0x1F 0x001F # UNIT SEPARATOR (IS1)
+0x20 0x0020 # SPACE
+0x21 0x0021 # EXCLAMATION MARK
+0x22 0x0022 # QUOTATION MARK
+0x23 0x00A3 # POUND SIGN
+0x24 0x0024 # DOLLAR SIGN
+0x25 0x0025 # PERCENT SIGN
+0x26 0x0026 # AMPERSAND
+0x27 0x0027 # APOSTROPHE
+0x28 0x0028 # LEFT PARENTHESIS
+0x29 0x0029 # RIGHT PARENTHESIS
+0x2A 0x002A # ASTERISK
+0x2B 0x002B # PLUS SIGN
+0x2C 0x002C # COMMA
+0x2D 0x002D # HYPHEN-MINUS
+0x2E 0x002E # FULL STOP
+0x2F 0x002F # SOLIDUS
+0x30 0x0030 # DIGIT ZERO
+0x31 0x0031 # DIGIT ONE
+0x32 0x0032 # DIGIT TWO
+0x33 0x0033 # DIGIT THREE
+0x34 0x0034 # DIGIT FOUR
+0x35 0x0035 # DIGIT FIVE
+0x36 0x0036 # DIGIT SIX
+0x37 0x0037 # DIGIT SEVEN
+0x38 0x0038 # DIGIT EIGHT
+0x39 0x0039 # DIGIT NINE
+0x3A 0x003A # COLON
+0x3B 0x003B # SEMICOLON
+0x3C 0x003C # LESS-THAN SIGN
+0x3D 0x003D # EQUALS SIGN
+0x3E 0x003E # GREATER-THAN SIGN
+0x3F 0x003F # QUESTION MARK
+0x40 0x00E0 # LATIN SMALL LETTER A WITH GRAVE
+0x41 0x0041 # LATIN CAPITAL LETTER A
+0x42 0x0042 # LATIN CAPITAL LETTER B
+0x43 0x0043 # LATIN CAPITAL LETTER C
+0x44 0x0044 # LATIN CAPITAL LETTER D
+0x45 0x0045 # LATIN CAPITAL LETTER E
+0x46 0x0046 # LATIN CAPITAL LETTER F
+0x47 0x0047 # LATIN CAPITAL LETTER G
+0x48 0x0048 # LATIN CAPITAL LETTER H
+0x49 0x0049 # LATIN CAPITAL LETTER I
+0x4A 0x004A # LATIN CAPITAL LETTER J
+0x4B 0x004B # LATIN CAPITAL LETTER K
+0x4C 0x004C # LATIN CAPITAL LETTER L
+0x4D 0x004D # LATIN CAPITAL LETTER M
+0x4E 0x004E # LATIN CAPITAL LETTER N
+0x4F 0x004F # LATIN CAPITAL LETTER O
+0x50 0x0050 # LATIN CAPITAL LETTER P
+0x51 0x0051 # LATIN CAPITAL LETTER Q
+0x52 0x0052 # LATIN CAPITAL LETTER R
+0x53 0x0053 # LATIN CAPITAL LETTER S
+0x54 0x0054 # LATIN CAPITAL LETTER T
+0x55 0x0055 # LATIN CAPITAL LETTER U
+0x56 0x0056 # LATIN CAPITAL LETTER V
+0x57 0x0057 # LATIN CAPITAL LETTER W
+0x58 0x0058 # LATIN CAPITAL LETTER X
+0x59 0x0059 # LATIN CAPITAL LETTER Y
+0x5A 0x005A # LATIN CAPITAL LETTER Z
+0x5B 0x00B0 # DEGREE SIGN
+0x5C 0x00E7 # LATIN SMALL LETTER C WITH CEDILLA
+0x5D 0x00A7 # SECTION SIGN
+0x5E 0x005E # CIRCUMFLEX ACCENT
+0x5F 0x005F # LOW LINE
+0x60 0x00B5 # MICRO SIGN
+0x61 0x0061 # LATIN SMALL LETTER A
+0x62 0x0062 # LATIN SMALL LETTER B
+0x63 0x0063 # LATIN SMALL LETTER C
+0x64 0x0064 # LATIN SMALL LETTER D
+0x65 0x0065 # LATIN SMALL LETTER E
+0x66 0x0066 # LATIN SMALL LETTER F
+0x67 0x0067 # LATIN SMALL LETTER G
+0x68 0x0068 # LATIN SMALL LETTER H
+0x69 0x0069 # LATIN SMALL LETTER I
+0x6A 0x006A # LATIN SMALL LETTER J
+0x6B 0x006B # LATIN SMALL LETTER K
+0x6C 0x006C # LATIN SMALL LETTER L
+0x6D 0x006D # LATIN SMALL LETTER M
+0x6E 0x006E # LATIN SMALL LETTER N
+0x6F 0x006F # LATIN SMALL LETTER O
+0x70 0x0070 # LATIN SMALL LETTER P
+0x71 0x0071 # LATIN SMALL LETTER Q
+0x72 0x0072 # LATIN SMALL LETTER R
+0x73 0x0073 # LATIN SMALL LETTER S
+0x74 0x0074 # LATIN SMALL LETTER T
+0x75 0x0075 # LATIN SMALL LETTER U
+0x76 0x0076 # LATIN SMALL LETTER V
+0x77 0x0077 # LATIN SMALL LETTER W
+0x78 0x0078 # LATIN SMALL LETTER X
+0x79 0x0079 # LATIN SMALL LETTER Y
+0x7A 0x007A # LATIN SMALL LETTER Z
+0x7B 0x00E9 # LATIN SMALL LETTER E WITH ACUTE
+0x7C 0x00F9 # LATIN SMALL LETTER U WITH GRAVE
+0x7D 0x00E8 # LATIN SMALL LETTER E WITH GRAVE
+0x7E 0x00A8 # DIAERESIS
+0x7F 0x007F # DELETE (DEL)
diff --git a/externals/figlet/fonts/646-gb.flc b/externals/figlet/fonts/646-gb.flc
new file mode 100644
index 000000000..4e9d648c9
--- /dev/null
+++ b/externals/figlet/fonts/646-gb.flc
@@ -0,0 +1,157 @@
+#
+# Name: BS_4730 to Unicode
+# Unicode version: 2.0
+# Table version: 0.1
+# Table format: Format A
+# Date: 0097-01-24
+# Authors: John Cowan <cowan@ccil.org> (conversion)
+# Keld Simonsen <Keld.Simonsen@dkuug.dk> (RFC 1345)
+#
+# General notes:
+#
+# This table contains data obtained from RFC 1345 on how
+# BS_4730 characters map into Unicode.
+#
+# Format: Three tab-separated columns
+# Column #1 is the BS_4730 code (in hex as 0xXX)
+# Column #2 is the Unicode (in hex as 0xXXXX)
+# Column #3 the Unicode name (follows a comment sign, '#')
+#
+# The entries are in BS_4730 order
+#
+# Any comments or problems, contact <cowan@ccil.org>
+#
+# &rem source: ECMA registry
+# &alias iso-ir-4
+# &alias ISO646-GB
+# &g0esc x2841 &g1esc x2941 &g2esc x2a41 &g3esc x2b41
+# &alias gb
+# &alias uk
+0x00 0x0000 # NULL (NUL)
+0x01 0x0001 # START OF HEADING (SOH)
+0x02 0x0002 # START OF TEXT (STX)
+0x03 0x0003 # END OF TEXT (ETX)
+0x04 0x0004 # END OF TRANSMISSION (EOT)
+0x05 0x0005 # ENQUIRY (ENQ)
+0x06 0x0006 # ACKNOWLEDGE (ACK)
+0x07 0x0007 # BELL (BEL)
+0x08 0x0008 # BACKSPACE (BS)
+0x09 0x0009 # CHARACTER TABULATION (HT)
+0x0A 0x000A # LINE FEED (LF)
+0x0B 0x000B # LINE TABULATION (VT)
+0x0C 0x000C # FORM FEED (FF)
+0x0D 0x000D # CARRIAGE RETURN (CR)
+0x0E 0x000E # SHIFT OUT (SO)
+0x0F 0x000F # SHIFT IN (SI)
+0x10 0x0010 # DATALINK ESCAPE (DLE)
+0x11 0x0011 # DEVICE CONTROL ONE (DC1)
+0x12 0x0012 # DEVICE CONTROL TWO (DC2)
+0x13 0x0013 # DEVICE CONTROL THREE (DC3)
+0x14 0x0014 # DEVICE CONTROL FOUR (DC4)
+0x15 0x0015 # NEGATIVE ACKNOWLEDGE (NAK)
+0x16 0x0016 # SYNCRONOUS IDLE (SYN)
+0x17 0x0017 # END OF TRANSMISSION BLOCK (ETB)
+0x18 0x0018 # CANCEL (CAN)
+0x19 0x0019 # END OF MEDIUM (EM)
+0x1A 0x001A # SUBSTITUTE (SUB)
+0x1B 0x001B # ESCAPE (ESC)
+0x1C 0x001C # FILE SEPARATOR (IS4)
+0x1D 0x001D # GROUP SEPARATOR (IS3)
+0x1E 0x001E # RECORD SEPARATOR (IS2)
+0x1F 0x001F # UNIT SEPARATOR (IS1)
+0x20 0x0020 # SPACE
+0x21 0x0021 # EXCLAMATION MARK
+0x22 0x0022 # QUOTATION MARK
+0x23 0x00A3 # POUND SIGN
+0x24 0x0024 # DOLLAR SIGN
+0x25 0x0025 # PERCENT SIGN
+0x26 0x0026 # AMPERSAND
+0x27 0x0027 # APOSTROPHE
+0x28 0x0028 # LEFT PARENTHESIS
+0x29 0x0029 # RIGHT PARENTHESIS
+0x2A 0x002A # ASTERISK
+0x2B 0x002B # PLUS SIGN
+0x2C 0x002C # COMMA
+0x2D 0x002D # HYPHEN-MINUS
+0x2E 0x002E # FULL STOP
+0x2F 0x002F # SOLIDUS
+0x30 0x0030 # DIGIT ZERO
+0x31 0x0031 # DIGIT ONE
+0x32 0x0032 # DIGIT TWO
+0x33 0x0033 # DIGIT THREE
+0x34 0x0034 # DIGIT FOUR
+0x35 0x0035 # DIGIT FIVE
+0x36 0x0036 # DIGIT SIX
+0x37 0x0037 # DIGIT SEVEN
+0x38 0x0038 # DIGIT EIGHT
+0x39 0x0039 # DIGIT NINE
+0x3A 0x003A # COLON
+0x3B 0x003B # SEMICOLON
+0x3C 0x003C # LESS-THAN SIGN
+0x3D 0x003D # EQUALS SIGN
+0x3E 0x003E # GREATER-THAN SIGN
+0x3F 0x003F # QUESTION MARK
+0x40 0x0040 # COMMERCIAL AT
+0x41 0x0041 # LATIN CAPITAL LETTER A
+0x42 0x0042 # LATIN CAPITAL LETTER B
+0x43 0x0043 # LATIN CAPITAL LETTER C
+0x44 0x0044 # LATIN CAPITAL LETTER D
+0x45 0x0045 # LATIN CAPITAL LETTER E
+0x46 0x0046 # LATIN CAPITAL LETTER F
+0x47 0x0047 # LATIN CAPITAL LETTER G
+0x48 0x0048 # LATIN CAPITAL LETTER H
+0x49 0x0049 # LATIN CAPITAL LETTER I
+0x4A 0x004A # LATIN CAPITAL LETTER J
+0x4B 0x004B # LATIN CAPITAL LETTER K
+0x4C 0x004C # LATIN CAPITAL LETTER L
+0x4D 0x004D # LATIN CAPITAL LETTER M
+0x4E 0x004E # LATIN CAPITAL LETTER N
+0x4F 0x004F # LATIN CAPITAL LETTER O
+0x50 0x0050 # LATIN CAPITAL LETTER P
+0x51 0x0051 # LATIN CAPITAL LETTER Q
+0x52 0x0052 # LATIN CAPITAL LETTER R
+0x53 0x0053 # LATIN CAPITAL LETTER S
+0x54 0x0054 # LATIN CAPITAL LETTER T
+0x55 0x0055 # LATIN CAPITAL LETTER U
+0x56 0x0056 # LATIN CAPITAL LETTER V
+0x57 0x0057 # LATIN CAPITAL LETTER W
+0x58 0x0058 # LATIN CAPITAL LETTER X
+0x59 0x0059 # LATIN CAPITAL LETTER Y
+0x5A 0x005A # LATIN CAPITAL LETTER Z
+0x5B 0x005B # LEFT SQUARE BRACKET
+0x5C 0x005C # REVERSE SOLIDUS
+0x5D 0x005D # RIGHT SQUARE BRACKET
+0x5E 0x005E # CIRCUMFLEX ACCENT
+0x5F 0x005F # LOW LINE
+0x60 0x0060 # GRAVE ACCENT
+0x61 0x0061 # LATIN SMALL LETTER A
+0x62 0x0062 # LATIN SMALL LETTER B
+0x63 0x0063 # LATIN SMALL LETTER C
+0x64 0x0064 # LATIN SMALL LETTER D
+0x65 0x0065 # LATIN SMALL LETTER E
+0x66 0x0066 # LATIN SMALL LETTER F
+0x67 0x0067 # LATIN SMALL LETTER G
+0x68 0x0068 # LATIN SMALL LETTER H
+0x69 0x0069 # LATIN SMALL LETTER I
+0x6A 0x006A # LATIN SMALL LETTER J
+0x6B 0x006B # LATIN SMALL LETTER K
+0x6C 0x006C # LATIN SMALL LETTER L
+0x6D 0x006D # LATIN SMALL LETTER M
+0x6E 0x006E # LATIN SMALL LETTER N
+0x6F 0x006F # LATIN SMALL LETTER O
+0x70 0x0070 # LATIN SMALL LETTER P
+0x71 0x0071 # LATIN SMALL LETTER Q
+0x72 0x0072 # LATIN SMALL LETTER R
+0x73 0x0073 # LATIN SMALL LETTER S
+0x74 0x0074 # LATIN SMALL LETTER T
+0x75 0x0075 # LATIN SMALL LETTER U
+0x76 0x0076 # LATIN SMALL LETTER V
+0x77 0x0077 # LATIN SMALL LETTER W
+0x78 0x0078 # LATIN SMALL LETTER X
+0x79 0x0079 # LATIN SMALL LETTER Y
+0x7A 0x007A # LATIN SMALL LETTER Z
+0x7B 0x007B # LEFT CURLY BRACKET
+0x7C 0x007C # VERTICAL LINE
+0x7D 0x007D # RIGHT CURLY BRACKET
+0x7E 0x203E # OVERLINE
+0x7F 0x007F # DELETE (DEL)
diff --git a/externals/figlet/fonts/646-hu.flc b/externals/figlet/fonts/646-hu.flc
new file mode 100644
index 000000000..9ad58c31e
--- /dev/null
+++ b/externals/figlet/fonts/646-hu.flc
@@ -0,0 +1,156 @@
+#
+# Name: MSZ_7795.3 to Unicode
+# Unicode version: 2.0
+# Table version: 0.1
+# Table format: Format A
+# Date: 0097-01-24
+# Authors: John Cowan <cowan@ccil.org> (conversion)
+# Keld Simonsen <Keld.Simonsen@dkuug.dk> (RFC 1345)
+#
+# General notes:
+#
+# This table contains data obtained from RFC 1345 on how
+# MSZ_7795.3 characters map into Unicode.
+#
+# Format: Three tab-separated columns
+# Column #1 is the MSZ_7795.3 code (in hex as 0xXX)
+# Column #2 is the Unicode (in hex as 0xXXXX)
+# Column #3 the Unicode name (follows a comment sign, '#')
+#
+# The entries are in MSZ_7795.3 order
+#
+# Any comments or problems, contact <cowan@ccil.org>
+#
+# &rem source: ECMA registry
+# &alias iso-ir-86
+# &alias ISO646-HU
+# &g0esc x2869 &g1esc x2969 &g2esc x2a69 &g3esc x2b69
+# &alias hu
+0x00 0x0000 # NULL (NUL)
+0x01 0x0001 # START OF HEADING (SOH)
+0x02 0x0002 # START OF TEXT (STX)
+0x03 0x0003 # END OF TEXT (ETX)
+0x04 0x0004 # END OF TRANSMISSION (EOT)
+0x05 0x0005 # ENQUIRY (ENQ)
+0x06 0x0006 # ACKNOWLEDGE (ACK)
+0x07 0x0007 # BELL (BEL)
+0x08 0x0008 # BACKSPACE (BS)
+0x09 0x0009 # CHARACTER TABULATION (HT)
+0x0A 0x000A # LINE FEED (LF)
+0x0B 0x000B # LINE TABULATION (VT)
+0x0C 0x000C # FORM FEED (FF)
+0x0D 0x000D # CARRIAGE RETURN (CR)
+0x0E 0x000E # SHIFT OUT (SO)
+0x0F 0x000F # SHIFT IN (SI)
+0x10 0x0010 # DATALINK ESCAPE (DLE)
+0x11 0x0011 # DEVICE CONTROL ONE (DC1)
+0x12 0x0012 # DEVICE CONTROL TWO (DC2)
+0x13 0x0013 # DEVICE CONTROL THREE (DC3)
+0x14 0x0014 # DEVICE CONTROL FOUR (DC4)
+0x15 0x0015 # NEGATIVE ACKNOWLEDGE (NAK)
+0x16 0x0016 # SYNCRONOUS IDLE (SYN)
+0x17 0x0017 # END OF TRANSMISSION BLOCK (ETB)
+0x18 0x0018 # CANCEL (CAN)
+0x19 0x0019 # END OF MEDIUM (EM)
+0x1A 0x001A # SUBSTITUTE (SUB)
+0x1B 0x001B # ESCAPE (ESC)
+0x1C 0x001C # FILE SEPARATOR (IS4)
+0x1D 0x001D # GROUP SEPARATOR (IS3)
+0x1E 0x001E # RECORD SEPARATOR (IS2)
+0x1F 0x001F # UNIT SEPARATOR (IS1)
+0x20 0x0020 # SPACE
+0x21 0x0021 # EXCLAMATION MARK
+0x22 0x0022 # QUOTATION MARK
+0x23 0x0023 # NUMBER SIGN
+0x24 0x00A4 # CURRENCY SIGN
+0x25 0x0025 # PERCENT SIGN
+0x26 0x0026 # AMPERSAND
+0x27 0x0027 # APOSTROPHE
+0x28 0x0028 # LEFT PARENTHESIS
+0x29 0x0029 # RIGHT PARENTHESIS
+0x2A 0x002A # ASTERISK
+0x2B 0x002B # PLUS SIGN
+0x2C 0x002C # COMMA
+0x2D 0x002D # HYPHEN-MINUS
+0x2E 0x002E # FULL STOP
+0x2F 0x002F # SOLIDUS
+0x30 0x0030 # DIGIT ZERO
+0x31 0x0031 # DIGIT ONE
+0x32 0x0032 # DIGIT TWO
+0x33 0x0033 # DIGIT THREE
+0x34 0x0034 # DIGIT FOUR
+0x35 0x0035 # DIGIT FIVE
+0x36 0x0036 # DIGIT SIX
+0x37 0x0037 # DIGIT SEVEN
+0x38 0x0038 # DIGIT EIGHT
+0x39 0x0039 # DIGIT NINE
+0x3A 0x003A # COLON
+0x3B 0x003B # SEMICOLON
+0x3C 0x003C # LESS-THAN SIGN
+0x3D 0x003D # EQUALS SIGN
+0x3E 0x003E # GREATER-THAN SIGN
+0x3F 0x003F # QUESTION MARK
+0x40 0x00C1 # LATIN CAPITAL LETTER A WITH ACUTE
+0x41 0x0041 # LATIN CAPITAL LETTER A
+0x42 0x0042 # LATIN CAPITAL LETTER B
+0x43 0x0043 # LATIN CAPITAL LETTER C
+0x44 0x0044 # LATIN CAPITAL LETTER D
+0x45 0x0045 # LATIN CAPITAL LETTER E
+0x46 0x0046 # LATIN CAPITAL LETTER F
+0x47 0x0047 # LATIN CAPITAL LETTER G
+0x48 0x0048 # LATIN CAPITAL LETTER H
+0x49 0x0049 # LATIN CAPITAL LETTER I
+0x4A 0x004A # LATIN CAPITAL LETTER J
+0x4B 0x004B # LATIN CAPITAL LETTER K
+0x4C 0x004C # LATIN CAPITAL LETTER L
+0x4D 0x004D # LATIN CAPITAL LETTER M
+0x4E 0x004E # LATIN CAPITAL LETTER N
+0x4F 0x004F # LATIN CAPITAL LETTER O
+0x50 0x0050 # LATIN CAPITAL LETTER P
+0x51 0x0051 # LATIN CAPITAL LETTER Q
+0x52 0x0052 # LATIN CAPITAL LETTER R
+0x53 0x0053 # LATIN CAPITAL LETTER S
+0x54 0x0054 # LATIN CAPITAL LETTER T
+0x55 0x0055 # LATIN CAPITAL LETTER U
+0x56 0x0056 # LATIN CAPITAL LETTER V
+0x57 0x0057 # LATIN CAPITAL LETTER W
+0x58 0x0058 # LATIN CAPITAL LETTER X
+0x59 0x0059 # LATIN CAPITAL LETTER Y
+0x5A 0x005A # LATIN CAPITAL LETTER Z
+0x5B 0x00C9 # LATIN CAPITAL LETTER E WITH ACUTE
+0x5C 0x00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS
+0x5D 0x00DC # LATIN CAPITAL LETTER U WITH DIAERESIS
+0x5E 0x005E # CIRCUMFLEX ACCENT
+0x5F 0x005F # LOW LINE
+0x60 0x00E1 # LATIN SMALL LETTER A WITH ACUTE
+0x61 0x0061 # LATIN SMALL LETTER A
+0x62 0x0062 # LATIN SMALL LETTER B
+0x63 0x0063 # LATIN SMALL LETTER C
+0x64 0x0064 # LATIN SMALL LETTER D
+0x65 0x0065 # LATIN SMALL LETTER E
+0x66 0x0066 # LATIN SMALL LETTER F
+0x67 0x0067 # LATIN SMALL LETTER G
+0x68 0x0068 # LATIN SMALL LETTER H
+0x69 0x0069 # LATIN SMALL LETTER I
+0x6A 0x006A # LATIN SMALL LETTER J
+0x6B 0x006B # LATIN SMALL LETTER K
+0x6C 0x006C # LATIN SMALL LETTER L
+0x6D 0x006D # LATIN SMALL LETTER M
+0x6E 0x006E # LATIN SMALL LETTER N
+0x6F 0x006F # LATIN SMALL LETTER O
+0x70 0x0070 # LATIN SMALL LETTER P
+0x71 0x0071 # LATIN SMALL LETTER Q
+0x72 0x0072 # LATIN SMALL LETTER R
+0x73 0x0073 # LATIN SMALL LETTER S
+0x74 0x0074 # LATIN SMALL LETTER T
+0x75 0x0075 # LATIN SMALL LETTER U
+0x76 0x0076 # LATIN SMALL LETTER V
+0x77 0x0077 # LATIN SMALL LETTER W
+0x78 0x0078 # LATIN SMALL LETTER X
+0x79 0x0079 # LATIN SMALL LETTER Y
+0x7A 0x007A # LATIN SMALL LETTER Z
+0x7B 0x00E9 # LATIN SMALL LETTER E WITH ACUTE
+0x7C 0x00F6 # LATIN SMALL LETTER O WITH DIAERESIS
+0x7D 0x00FC # LATIN SMALL LETTER U WITH DIAERESIS
+0x7E 0x02DD # DOUBLE ACUTE ACCENT
+0x7F 0x007F # DELETE (DEL)
diff --git a/externals/figlet/fonts/646-irv.flc b/externals/figlet/fonts/646-irv.flc
new file mode 100644
index 000000000..caf629229
--- /dev/null
+++ b/externals/figlet/fonts/646-irv.flc
@@ -0,0 +1,155 @@
+#
+# Name: ISO_646.irv:1983 to Unicode
+# Unicode version: 2.0
+# Table version: 0.1
+# Table format: Format A
+# Date: 0097-01-24
+# Authors: John Cowan <cowan@ccil.org> (conversion)
+# Keld Simonsen <Keld.Simonsen@dkuug.dk> (RFC 1345)
+#
+# General notes:
+#
+# This table contains data obtained from RFC 1345 on how
+# ISO_646.irv:1983 characters map into Unicode.
+#
+# Format: Three tab-separated columns
+# Column #1 is the ISO_646.irv:1983 code (in hex as 0xXX)
+# Column #2 is the Unicode (in hex as 0xXXXX)
+# Column #3 the Unicode name (follows a comment sign, '#')
+#
+# The entries are in ISO_646.irv:1983 order
+#
+# Any comments or problems, contact <cowan@ccil.org>
+#
+# &rem source: ECMA registry
+# &alias iso-ir-2
+# &alias irv
+# &g0esc x2840 &g1esc x2940 &g2esc x2a40 &g3esc x2b40
+0x00 0x0000 # NULL (NUL)
+0x01 0x0001 # START OF HEADING (SOH)
+0x02 0x0002 # START OF TEXT (STX)
+0x03 0x0003 # END OF TEXT (ETX)
+0x04 0x0004 # END OF TRANSMISSION (EOT)
+0x05 0x0005 # ENQUIRY (ENQ)
+0x06 0x0006 # ACKNOWLEDGE (ACK)
+0x07 0x0007 # BELL (BEL)
+0x08 0x0008 # BACKSPACE (BS)
+0x09 0x0009 # CHARACTER TABULATION (HT)
+0x0A 0x000A # LINE FEED (LF)
+0x0B 0x000B # LINE TABULATION (VT)
+0x0C 0x000C # FORM FEED (FF)
+0x0D 0x000D # CARRIAGE RETURN (CR)
+0x0E 0x000E # SHIFT OUT (SO)
+0x0F 0x000F # SHIFT IN (SI)
+0x10 0x0010 # DATALINK ESCAPE (DLE)
+0x11 0x0011 # DEVICE CONTROL ONE (DC1)
+0x12 0x0012 # DEVICE CONTROL TWO (DC2)
+0x13 0x0013 # DEVICE CONTROL THREE (DC3)
+0x14 0x0014 # DEVICE CONTROL FOUR (DC4)
+0x15 0x0015 # NEGATIVE ACKNOWLEDGE (NAK)
+0x16 0x0016 # SYNCRONOUS IDLE (SYN)
+0x17 0x0017 # END OF TRANSMISSION BLOCK (ETB)
+0x18 0x0018 # CANCEL (CAN)
+0x19 0x0019 # END OF MEDIUM (EM)
+0x1A 0x001A # SUBSTITUTE (SUB)
+0x1B 0x001B # ESCAPE (ESC)
+0x1C 0x001C # FILE SEPARATOR (IS4)
+0x1D 0x001D # GROUP SEPARATOR (IS3)
+0x1E 0x001E # RECORD SEPARATOR (IS2)
+0x1F 0x001F # UNIT SEPARATOR (IS1)
+0x20 0x0020 # SPACE
+0x21 0x0021 # EXCLAMATION MARK
+0x22 0x0022 # QUOTATION MARK
+0x23 0x0023 # NUMBER SIGN
+0x24 0x00A4 # CURRENCY SIGN
+0x25 0x0025 # PERCENT SIGN
+0x26 0x0026 # AMPERSAND
+0x27 0x0027 # APOSTROPHE
+0x28 0x0028 # LEFT PARENTHESIS
+0x29 0x0029 # RIGHT PARENTHESIS
+0x2A 0x002A # ASTERISK
+0x2B 0x002B # PLUS SIGN
+0x2C 0x002C # COMMA
+0x2D 0x002D # HYPHEN-MINUS
+0x2E 0x002E # FULL STOP
+0x2F 0x002F # SOLIDUS
+0x30 0x0030 # DIGIT ZERO
+0x31 0x0031 # DIGIT ONE
+0x32 0x0032 # DIGIT TWO
+0x33 0x0033 # DIGIT THREE
+0x34 0x0034 # DIGIT FOUR
+0x35 0x0035 # DIGIT FIVE
+0x36 0x0036 # DIGIT SIX
+0x37 0x0037 # DIGIT SEVEN
+0x38 0x0038 # DIGIT EIGHT
+0x39 0x0039 # DIGIT NINE
+0x3A 0x003A # COLON
+0x3B 0x003B # SEMICOLON
+0x3C 0x003C # LESS-THAN SIGN
+0x3D 0x003D # EQUALS SIGN
+0x3E 0x003E # GREATER-THAN SIGN
+0x3F 0x003F # QUESTION MARK
+0x40 0x0040 # COMMERCIAL AT
+0x41 0x0041 # LATIN CAPITAL LETTER A
+0x42 0x0042 # LATIN CAPITAL LETTER B
+0x43 0x0043 # LATIN CAPITAL LETTER C
+0x44 0x0044 # LATIN CAPITAL LETTER D
+0x45 0x0045 # LATIN CAPITAL LETTER E
+0x46 0x0046 # LATIN CAPITAL LETTER F
+0x47 0x0047 # LATIN CAPITAL LETTER G
+0x48 0x0048 # LATIN CAPITAL LETTER H
+0x49 0x0049 # LATIN CAPITAL LETTER I
+0x4A 0x004A # LATIN CAPITAL LETTER J
+0x4B 0x004B # LATIN CAPITAL LETTER K
+0x4C 0x004C # LATIN CAPITAL LETTER L
+0x4D 0x004D # LATIN CAPITAL LETTER M
+0x4E 0x004E # LATIN CAPITAL LETTER N
+0x4F 0x004F # LATIN CAPITAL LETTER O
+0x50 0x0050 # LATIN CAPITAL LETTER P
+0x51 0x0051 # LATIN CAPITAL LETTER Q
+0x52 0x0052 # LATIN CAPITAL LETTER R
+0x53 0x0053 # LATIN CAPITAL LETTER S
+0x54 0x0054 # LATIN CAPITAL LETTER T
+0x55 0x0055 # LATIN CAPITAL LETTER U
+0x56 0x0056 # LATIN CAPITAL LETTER V
+0x57 0x0057 # LATIN CAPITAL LETTER W
+0x58 0x0058 # LATIN CAPITAL LETTER X
+0x59 0x0059 # LATIN CAPITAL LETTER Y
+0x5A 0x005A # LATIN CAPITAL LETTER Z
+0x5B 0x005B # LEFT SQUARE BRACKET
+0x5C 0x005C # REVERSE SOLIDUS
+0x5D 0x005D # RIGHT SQUARE BRACKET
+0x5E 0x005E # CIRCUMFLEX ACCENT
+0x5F 0x005F # LOW LINE
+0x60 0x0060 # GRAVE ACCENT
+0x61 0x0061 # LATIN SMALL LETTER A
+0x62 0x0062 # LATIN SMALL LETTER B
+0x63 0x0063 # LATIN SMALL LETTER C
+0x64 0x0064 # LATIN SMALL LETTER D
+0x65 0x0065 # LATIN SMALL LETTER E
+0x66 0x0066 # LATIN SMALL LETTER F
+0x67 0x0067 # LATIN SMALL LETTER G
+0x68 0x0068 # LATIN SMALL LETTER H
+0x69 0x0069 # LATIN SMALL LETTER I
+0x6A 0x006A # LATIN SMALL LETTER J
+0x6B 0x006B # LATIN SMALL LETTER K
+0x6C 0x006C # LATIN SMALL LETTER L
+0x6D 0x006D # LATIN SMALL LETTER M
+0x6E 0x006E # LATIN SMALL LETTER N
+0x6F 0x006F # LATIN SMALL LETTER O
+0x70 0x0070 # LATIN SMALL LETTER P
+0x71 0x0071 # LATIN SMALL LETTER Q
+0x72 0x0072 # LATIN SMALL LETTER R
+0x73 0x0073 # LATIN SMALL LETTER S
+0x74 0x0074 # LATIN SMALL LETTER T
+0x75 0x0075 # LATIN SMALL LETTER U
+0x76 0x0076 # LATIN SMALL LETTER V
+0x77 0x0077 # LATIN SMALL LETTER W
+0x78 0x0078 # LATIN SMALL LETTER X
+0x79 0x0079 # LATIN SMALL LETTER Y
+0x7A 0x007A # LATIN SMALL LETTER Z
+0x7B 0x007B # LEFT CURLY BRACKET
+0x7C 0x007C # VERTICAL LINE
+0x7D 0x007D # RIGHT CURLY BRACKET
+0x7E 0x203E # OVERLINE
+0x7F 0x007F # DELETE (DEL)
diff --git a/externals/figlet/fonts/646-it.flc b/externals/figlet/fonts/646-it.flc
new file mode 100644
index 000000000..657125bd8
--- /dev/null
+++ b/externals/figlet/fonts/646-it.flc
@@ -0,0 +1,155 @@
+#
+# Name: IT to Unicode
+# Unicode version: 2.0
+# Table version: 0.1
+# Table format: Format A
+# Date: 0097-01-24
+# Authors: John Cowan <cowan@ccil.org> (conversion)
+# Keld Simonsen <Keld.Simonsen@dkuug.dk> (RFC 1345)
+#
+# General notes:
+#
+# This table contains data obtained from RFC 1345 on how
+# IT characters map into Unicode.
+#
+# Format: Three tab-separated columns
+# Column #1 is the IT code (in hex as 0xXX)
+# Column #2 is the Unicode (in hex as 0xXXXX)
+# Column #3 the Unicode name (follows a comment sign, '#')
+#
+# The entries are in IT order
+#
+# Any comments or problems, contact <cowan@ccil.org>
+#
+# &rem source: ECMA registry
+# &alias iso-ir-15
+# &alias ISO646-IT
+# &g0esc x2859 &g1esc x2959 &g2esc x2a59 &g3esc x2b59
+0x00 0x0000 # NULL (NUL)
+0x01 0x0001 # START OF HEADING (SOH)
+0x02 0x0002 # START OF TEXT (STX)
+0x03 0x0003 # END OF TEXT (ETX)
+0x04 0x0004 # END OF TRANSMISSION (EOT)
+0x05 0x0005 # ENQUIRY (ENQ)
+0x06 0x0006 # ACKNOWLEDGE (ACK)
+0x07 0x0007 # BELL (BEL)
+0x08 0x0008 # BACKSPACE (BS)
+0x09 0x0009 # CHARACTER TABULATION (HT)
+0x0A 0x000A # LINE FEED (LF)
+0x0B 0x000B # LINE TABULATION (VT)
+0x0C 0x000C # FORM FEED (FF)
+0x0D 0x000D # CARRIAGE RETURN (CR)
+0x0E 0x000E # SHIFT OUT (SO)
+0x0F 0x000F # SHIFT IN (SI)
+0x10 0x0010 # DATALINK ESCAPE (DLE)
+0x11 0x0011 # DEVICE CONTROL ONE (DC1)
+0x12 0x0012 # DEVICE CONTROL TWO (DC2)
+0x13 0x0013 # DEVICE CONTROL THREE (DC3)
+0x14 0x0014 # DEVICE CONTROL FOUR (DC4)
+0x15 0x0015 # NEGATIVE ACKNOWLEDGE (NAK)
+0x16 0x0016 # SYNCRONOUS IDLE (SYN)
+0x17 0x0017 # END OF TRANSMISSION BLOCK (ETB)
+0x18 0x0018 # CANCEL (CAN)
+0x19 0x0019 # END OF MEDIUM (EM)
+0x1A 0x001A # SUBSTITUTE (SUB)
+0x1B 0x001B # ESCAPE (ESC)
+0x1C 0x001C # FILE SEPARATOR (IS4)
+0x1D 0x001D # GROUP SEPARATOR (IS3)
+0x1E 0x001E # RECORD SEPARATOR (IS2)
+0x1F 0x001F # UNIT SEPARATOR (IS1)
+0x20 0x0020 # SPACE
+0x21 0x0021 # EXCLAMATION MARK
+0x22 0x0022 # QUOTATION MARK
+0x23 0x00A3 # POUND SIGN
+0x24 0x0024 # DOLLAR SIGN
+0x25 0x0025 # PERCENT SIGN
+0x26 0x0026 # AMPERSAND
+0x27 0x0027 # APOSTROPHE
+0x28 0x0028 # LEFT PARENTHESIS
+0x29 0x0029 # RIGHT PARENTHESIS
+0x2A 0x002A # ASTERISK
+0x2B 0x002B # PLUS SIGN
+0x2C 0x002C # COMMA
+0x2D 0x002D # HYPHEN-MINUS
+0x2E 0x002E # FULL STOP
+0x2F 0x002F # SOLIDUS
+0x30 0x0030 # DIGIT ZERO
+0x31 0x0031 # DIGIT ONE
+0x32 0x0032 # DIGIT TWO
+0x33 0x0033 # DIGIT THREE
+0x34 0x0034 # DIGIT FOUR
+0x35 0x0035 # DIGIT FIVE
+0x36 0x0036 # DIGIT SIX
+0x37 0x0037 # DIGIT SEVEN
+0x38 0x0038 # DIGIT EIGHT
+0x39 0x0039 # DIGIT NINE
+0x3A 0x003A # COLON
+0x3B 0x003B # SEMICOLON
+0x3C 0x003C # LESS-THAN SIGN
+0x3D 0x003D # EQUALS SIGN
+0x3E 0x003E # GREATER-THAN SIGN
+0x3F 0x003F # QUESTION MARK
+0x40 0x00A7 # SECTION SIGN
+0x41 0x0041 # LATIN CAPITAL LETTER A
+0x42 0x0042 # LATIN CAPITAL LETTER B
+0x43 0x0043 # LATIN CAPITAL LETTER C
+0x44 0x0044 # LATIN CAPITAL LETTER D
+0x45 0x0045 # LATIN CAPITAL LETTER E
+0x46 0x0046 # LATIN CAPITAL LETTER F
+0x47 0x0047 # LATIN CAPITAL LETTER G
+0x48 0x0048 # LATIN CAPITAL LETTER H
+0x49 0x0049 # LATIN CAPITAL LETTER I
+0x4A 0x004A # LATIN CAPITAL LETTER J
+0x4B 0x004B # LATIN CAPITAL LETTER K
+0x4C 0x004C # LATIN CAPITAL LETTER L
+0x4D 0x004D # LATIN CAPITAL LETTER M
+0x4E 0x004E # LATIN CAPITAL LETTER N
+0x4F 0x004F # LATIN CAPITAL LETTER O
+0x50 0x0050 # LATIN CAPITAL LETTER P
+0x51 0x0051 # LATIN CAPITAL LETTER Q
+0x52 0x0052 # LATIN CAPITAL LETTER R
+0x53 0x0053 # LATIN CAPITAL LETTER S
+0x54 0x0054 # LATIN CAPITAL LETTER T
+0x55 0x0055 # LATIN CAPITAL LETTER U
+0x56 0x0056 # LATIN CAPITAL LETTER V
+0x57 0x0057 # LATIN CAPITAL LETTER W
+0x58 0x0058 # LATIN CAPITAL LETTER X
+0x59 0x0059 # LATIN CAPITAL LETTER Y
+0x5A 0x005A # LATIN CAPITAL LETTER Z
+0x5B 0x00B0 # DEGREE SIGN
+0x5C 0x00E7 # LATIN SMALL LETTER C WITH CEDILLA
+0x5D 0x00E9 # LATIN SMALL LETTER E WITH ACUTE
+0x5E 0x005E # CIRCUMFLEX ACCENT
+0x5F 0x005F # LOW LINE
+0x60 0x00F9 # LATIN SMALL LETTER U WITH GRAVE
+0x61 0x0061 # LATIN SMALL LETTER A
+0x62 0x0062 # LATIN SMALL LETTER B
+0x63 0x0063 # LATIN SMALL LETTER C
+0x64 0x0064 # LATIN SMALL LETTER D
+0x65 0x0065 # LATIN SMALL LETTER E
+0x66 0x0066 # LATIN SMALL LETTER F
+0x67 0x0067 # LATIN SMALL LETTER G
+0x68 0x0068 # LATIN SMALL LETTER H
+0x69 0x0069 # LATIN SMALL LETTER I
+0x6A 0x006A # LATIN SMALL LETTER J
+0x6B 0x006B # LATIN SMALL LETTER K
+0x6C 0x006C # LATIN SMALL LETTER L
+0x6D 0x006D # LATIN SMALL LETTER M
+0x6E 0x006E # LATIN SMALL LETTER N
+0x6F 0x006F # LATIN SMALL LETTER O
+0x70 0x0070 # LATIN SMALL LETTER P
+0x71 0x0071 # LATIN SMALL LETTER Q
+0x72 0x0072 # LATIN SMALL LETTER R
+0x73 0x0073 # LATIN SMALL LETTER S
+0x74 0x0074 # LATIN SMALL LETTER T
+0x75 0x0075 # LATIN SMALL LETTER U
+0x76 0x0076 # LATIN SMALL LETTER V
+0x77 0x0077 # LATIN SMALL LETTER W
+0x78 0x0078 # LATIN SMALL LETTER X
+0x79 0x0079 # LATIN SMALL LETTER Y
+0x7A 0x007A # LATIN SMALL LETTER Z
+0x7B 0x00E0 # LATIN SMALL LETTER A WITH GRAVE
+0x7C 0x00F2 # LATIN SMALL LETTER O WITH GRAVE
+0x7D 0x00E8 # LATIN SMALL LETTER E WITH GRAVE
+0x7E 0x00EC # LATIN SMALL LETTER I WITH GRAVE
+0x7F 0x007F # DELETE (DEL)
diff --git a/externals/figlet/fonts/646-jp.flc b/externals/figlet/fonts/646-jp.flc
new file mode 100644
index 000000000..a3bc3513d
--- /dev/null
+++ b/externals/figlet/fonts/646-jp.flc
@@ -0,0 +1,156 @@
+#
+# Name: JIS_C6220-1969-ro to Unicode
+# Unicode version: 2.0
+# Table version: 0.1
+# Table format: Format A
+# Date: 0097-01-24
+# Authors: John Cowan <cowan@ccil.org> (conversion)
+# Keld Simonsen <Keld.Simonsen@dkuug.dk> (RFC 1345)
+#
+# General notes:
+#
+# This table contains data obtained from RFC 1345 on how
+# JIS_C6220-1969-ro characters map into Unicode.
+#
+# Format: Three tab-separated columns
+# Column #1 is the JIS_C6220-1969-ro code (in hex as 0xXX)
+# Column #2 is the Unicode (in hex as 0xXXXX)
+# Column #3 the Unicode name (follows a comment sign, '#')
+#
+# The entries are in JIS_C6220-1969-ro order
+#
+# Any comments or problems, contact <cowan@ccil.org>
+#
+# &rem source: ECMA registry
+# &alias iso-ir-14
+# &g0esc x284a &g1esc x294a &g2esc x2a4a &g3esc x2b4a
+# &alias jp
+# &alias ISO646-JP
+0x00 0x0000 # NULL (NUL)
+0x01 0x0001 # START OF HEADING (SOH)
+0x02 0x0002 # START OF TEXT (STX)
+0x03 0x0003 # END OF TEXT (ETX)
+0x04 0x0004 # END OF TRANSMISSION (EOT)
+0x05 0x0005 # ENQUIRY (ENQ)
+0x06 0x0006 # ACKNOWLEDGE (ACK)
+0x07 0x0007 # BELL (BEL)
+0x08 0x0008 # BACKSPACE (BS)
+0x09 0x0009 # CHARACTER TABULATION (HT)
+0x0A 0x000A # LINE FEED (LF)
+0x0B 0x000B # LINE TABULATION (VT)
+0x0C 0x000C # FORM FEED (FF)
+0x0D 0x000D # CARRIAGE RETURN (CR)
+0x0E 0x000E # SHIFT OUT (SO)
+0x0F 0x000F # SHIFT IN (SI)
+0x10 0x0010 # DATALINK ESCAPE (DLE)
+0x11 0x0011 # DEVICE CONTROL ONE (DC1)
+0x12 0x0012 # DEVICE CONTROL TWO (DC2)
+0x13 0x0013 # DEVICE CONTROL THREE (DC3)
+0x14 0x0014 # DEVICE CONTROL FOUR (DC4)
+0x15 0x0015 # NEGATIVE ACKNOWLEDGE (NAK)
+0x16 0x0016 # SYNCRONOUS IDLE (SYN)
+0x17 0x0017 # END OF TRANSMISSION BLOCK (ETB)
+0x18 0x0018 # CANCEL (CAN)
+0x19 0x0019 # END OF MEDIUM (EM)
+0x1A 0x001A # SUBSTITUTE (SUB)
+0x1B 0x001B # ESCAPE (ESC)
+0x1C 0x001C # FILE SEPARATOR (IS4)
+0x1D 0x001D # GROUP SEPARATOR (IS3)
+0x1E 0x001E # RECORD SEPARATOR (IS2)
+0x1F 0x001F # UNIT SEPARATOR (IS1)
+0x20 0x0020 # SPACE
+0x21 0x0021 # EXCLAMATION MARK
+0x22 0x0022 # QUOTATION MARK
+0x23 0x0023 # NUMBER SIGN
+0x24 0x0024 # DOLLAR SIGN
+0x25 0x0025 # PERCENT SIGN
+0x26 0x0026 # AMPERSAND
+0x27 0x0027 # APOSTROPHE
+0x28 0x0028 # LEFT PARENTHESIS
+0x29 0x0029 # RIGHT PARENTHESIS
+0x2A 0x002A # ASTERISK
+0x2B 0x002B # PLUS SIGN
+0x2C 0x002C # COMMA
+0x2D 0x002D # HYPHEN-MINUS
+0x2E 0x002E # FULL STOP
+0x2F 0x002F # SOLIDUS
+0x30 0x0030 # DIGIT ZERO
+0x31 0x0031 # DIGIT ONE
+0x32 0x0032 # DIGIT TWO
+0x33 0x0033 # DIGIT THREE
+0x34 0x0034 # DIGIT FOUR
+0x35 0x0035 # DIGIT FIVE
+0x36 0x0036 # DIGIT SIX
+0x37 0x0037 # DIGIT SEVEN
+0x38 0x0038 # DIGIT EIGHT
+0x39 0x0039 # DIGIT NINE
+0x3A 0x003A # COLON
+0x3B 0x003B # SEMICOLON
+0x3C 0x003C # LESS-THAN SIGN
+0x3D 0x003D # EQUALS SIGN
+0x3E 0x003E # GREATER-THAN SIGN
+0x3F 0x003F # QUESTION MARK
+0x40 0x0040 # COMMERCIAL AT
+0x41 0x0041 # LATIN CAPITAL LETTER A
+0x42 0x0042 # LATIN CAPITAL LETTER B
+0x43 0x0043 # LATIN CAPITAL LETTER C
+0x44 0x0044 # LATIN CAPITAL LETTER D
+0x45 0x0045 # LATIN CAPITAL LETTER E
+0x46 0x0046 # LATIN CAPITAL LETTER F
+0x47 0x0047 # LATIN CAPITAL LETTER G
+0x48 0x0048 # LATIN CAPITAL LETTER H
+0x49 0x0049 # LATIN CAPITAL LETTER I
+0x4A 0x004A # LATIN CAPITAL LETTER J
+0x4B 0x004B # LATIN CAPITAL LETTER K
+0x4C 0x004C # LATIN CAPITAL LETTER L
+0x4D 0x004D # LATIN CAPITAL LETTER M
+0x4E 0x004E # LATIN CAPITAL LETTER N
+0x4F 0x004F # LATIN CAPITAL LETTER O
+0x50 0x0050 # LATIN CAPITAL LETTER P
+0x51 0x0051 # LATIN CAPITAL LETTER Q
+0x52 0x0052 # LATIN CAPITAL LETTER R
+0x53 0x0053 # LATIN CAPITAL LETTER S
+0x54 0x0054 # LATIN CAPITAL LETTER T
+0x55 0x0055 # LATIN CAPITAL LETTER U
+0x56 0x0056 # LATIN CAPITAL LETTER V
+0x57 0x0057 # LATIN CAPITAL LETTER W
+0x58 0x0058 # LATIN CAPITAL LETTER X
+0x59 0x0059 # LATIN CAPITAL LETTER Y
+0x5A 0x005A # LATIN CAPITAL LETTER Z
+0x5B 0x005B # LEFT SQUARE BRACKET
+0x5C 0x00A5 # YEN SIGN
+0x5D 0x005D # RIGHT SQUARE BRACKET
+0x5E 0x005E # CIRCUMFLEX ACCENT
+0x5F 0x005F # LOW LINE
+0x60 0x0060 # GRAVE ACCENT
+0x61 0x0061 # LATIN SMALL LETTER A
+0x62 0x0062 # LATIN SMALL LETTER B
+0x63 0x0063 # LATIN SMALL LETTER C
+0x64 0x0064 # LATIN SMALL LETTER D
+0x65 0x0065 # LATIN SMALL LETTER E
+0x66 0x0066 # LATIN SMALL LETTER F
+0x67 0x0067 # LATIN SMALL LETTER G
+0x68 0x0068 # LATIN SMALL LETTER H
+0x69 0x0069 # LATIN SMALL LETTER I
+0x6A 0x006A # LATIN SMALL LETTER J
+0x6B 0x006B # LATIN SMALL LETTER K
+0x6C 0x006C # LATIN SMALL LETTER L
+0x6D 0x006D # LATIN SMALL LETTER M
+0x6E 0x006E # LATIN SMALL LETTER N
+0x6F 0x006F # LATIN SMALL LETTER O
+0x70 0x0070 # LATIN SMALL LETTER P
+0x71 0x0071 # LATIN SMALL LETTER Q
+0x72 0x0072 # LATIN SMALL LETTER R
+0x73 0x0073 # LATIN SMALL LETTER S
+0x74 0x0074 # LATIN SMALL LETTER T
+0x75 0x0075 # LATIN SMALL LETTER U
+0x76 0x0076 # LATIN SMALL LETTER V
+0x77 0x0077 # LATIN SMALL LETTER W
+0x78 0x0078 # LATIN SMALL LETTER X
+0x79 0x0079 # LATIN SMALL LETTER Y
+0x7A 0x007A # LATIN SMALL LETTER Z
+0x7B 0x007B # LEFT CURLY BRACKET
+0x7C 0x007C # VERTICAL LINE
+0x7D 0x007D # RIGHT CURLY BRACKET
+0x7E 0x203E # OVERLINE
+0x7F 0x007F # DELETE (DEL)
diff --git a/externals/figlet/fonts/646-kr.flc b/externals/figlet/fonts/646-kr.flc
new file mode 100644
index 000000000..6966895e5
--- /dev/null
+++ b/externals/figlet/fonts/646-kr.flc
@@ -0,0 +1,152 @@
+#
+# Name: KSC5636 to Unicode
+# Unicode version: 2.0
+# Table version: 0.1
+# Table format: Format A
+# Date: 0097-01-24
+# Authors: John Cowan <cowan@ccil.org> (conversion)
+# Keld Simonsen <Keld.Simonsen@dkuug.dk> (RFC 1345)
+#
+# General notes:
+#
+# This table contains data obtained from RFC 1345 on how
+# KSC5636 characters map into Unicode.
+#
+# Format: Three tab-separated columns
+# Column #1 is the KSC5636 code (in hex as 0xXX)
+# Column #2 is the Unicode (in hex as 0xXXXX)
+# Column #3 the Unicode name (follows a comment sign, '#')
+#
+# The entries are in KSC5636 order
+#
+# Any comments or problems, contact <cowan@ccil.org>
+#
+# &alias ISO646-KR
+0x00 0x0000 # NULL (NUL)
+0x01 0x0001 # START OF HEADING (SOH)
+0x02 0x0002 # START OF TEXT (STX)
+0x03 0x0003 # END OF TEXT (ETX)
+0x04 0x0004 # END OF TRANSMISSION (EOT)
+0x05 0x0005 # ENQUIRY (ENQ)
+0x06 0x0006 # ACKNOWLEDGE (ACK)
+0x07 0x0007 # BELL (BEL)
+0x08 0x0008 # BACKSPACE (BS)
+0x09 0x0009 # CHARACTER TABULATION (HT)
+0x0A 0x000A # LINE FEED (LF)
+0x0B 0x000B # LINE TABULATION (VT)
+0x0C 0x000C # FORM FEED (FF)
+0x0D 0x000D # CARRIAGE RETURN (CR)
+0x0E 0x000E # SHIFT OUT (SO)
+0x0F 0x000F # SHIFT IN (SI)
+0x10 0x0010 # DATALINK ESCAPE (DLE)
+0x11 0x0011 # DEVICE CONTROL ONE (DC1)
+0x12 0x0012 # DEVICE CONTROL TWO (DC2)
+0x13 0x0013 # DEVICE CONTROL THREE (DC3)
+0x14 0x0014 # DEVICE CONTROL FOUR (DC4)
+0x15 0x0015 # NEGATIVE ACKNOWLEDGE (NAK)
+0x16 0x0016 # SYNCRONOUS IDLE (SYN)
+0x17 0x0017 # END OF TRANSMISSION BLOCK (ETB)
+0x18 0x0018 # CANCEL (CAN)
+0x19 0x0019 # END OF MEDIUM (EM)
+0x1A 0x001A # SUBSTITUTE (SUB)
+0x1B 0x001B # ESCAPE (ESC)
+0x1C 0x001C # FILE SEPARATOR (IS4)
+0x1D 0x001D # GROUP SEPARATOR (IS3)
+0x1E 0x001E # RECORD SEPARATOR (IS2)
+0x1F 0x001F # UNIT SEPARATOR (IS1)
+0x20 0x0020 # SPACE
+0x21 0x0021 # EXCLAMATION MARK
+0x22 0x0022 # QUOTATION MARK
+0x23 0x0023 # NUMBER SIGN
+0x24 0x0024 # DOLLAR SIGN
+0x25 0x0025 # PERCENT SIGN
+0x26 0x0026 # AMPERSAND
+0x27 0x0027 # APOSTROPHE
+0x28 0x0028 # LEFT PARENTHESIS
+0x29 0x0029 # RIGHT PARENTHESIS
+0x2A 0x002A # ASTERISK
+0x2B 0x002B # PLUS SIGN
+0x2C 0x002C # COMMA
+0x2D 0x002D # HYPHEN-MINUS
+0x2E 0x002E # FULL STOP
+0x2F 0x002F # SOLIDUS
+0x30 0x0030 # DIGIT ZERO
+0x31 0x0031 # DIGIT ONE
+0x32 0x0032 # DIGIT TWO
+0x33 0x0033 # DIGIT THREE
+0x34 0x0034 # DIGIT FOUR
+0x35 0x0035 # DIGIT FIVE
+0x36 0x0036 # DIGIT SIX
+0x37 0x0037 # DIGIT SEVEN
+0x38 0x0038 # DIGIT EIGHT
+0x39 0x0039 # DIGIT NINE
+0x3A 0x003A # COLON
+0x3B 0x003B # SEMICOLON
+0x3C 0x003C # LESS-THAN SIGN
+0x3D 0x003D # EQUALS SIGN
+0x3E 0x003E # GREATER-THAN SIGN
+0x3F 0x003F # QUESTION MARK
+0x40 0x0040 # COMMERCIAL AT
+0x41 0x0041 # LATIN CAPITAL LETTER A
+0x42 0x0042 # LATIN CAPITAL LETTER B
+0x43 0x0043 # LATIN CAPITAL LETTER C
+0x44 0x0044 # LATIN CAPITAL LETTER D
+0x45 0x0045 # LATIN CAPITAL LETTER E
+0x46 0x0046 # LATIN CAPITAL LETTER F
+0x47 0x0047 # LATIN CAPITAL LETTER G
+0x48 0x0048 # LATIN CAPITAL LETTER H
+0x49 0x0049 # LATIN CAPITAL LETTER I
+0x4A 0x004A # LATIN CAPITAL LETTER J
+0x4B 0x004B # LATIN CAPITAL LETTER K
+0x4C 0x004C # LATIN CAPITAL LETTER L
+0x4D 0x004D # LATIN CAPITAL LETTER M
+0x4E 0x004E # LATIN CAPITAL LETTER N
+0x4F 0x004F # LATIN CAPITAL LETTER O
+0x50 0x0050 # LATIN CAPITAL LETTER P
+0x51 0x0051 # LATIN CAPITAL LETTER Q
+0x52 0x0052 # LATIN CAPITAL LETTER R
+0x53 0x0053 # LATIN CAPITAL LETTER S
+0x54 0x0054 # LATIN CAPITAL LETTER T
+0x55 0x0055 # LATIN CAPITAL LETTER U
+0x56 0x0056 # LATIN CAPITAL LETTER V
+0x57 0x0057 # LATIN CAPITAL LETTER W
+0x58 0x0058 # LATIN CAPITAL LETTER X
+0x59 0x0059 # LATIN CAPITAL LETTER Y
+0x5A 0x005A # LATIN CAPITAL LETTER Z
+0x5B 0x005B # LEFT SQUARE BRACKET
+0x5C 0x20A9 # WON SIGN
+0x5D 0x005D # RIGHT SQUARE BRACKET
+0x5E 0x005E # CIRCUMFLEX ACCENT
+0x5F 0x005F # LOW LINE
+0x60 0x0060 # GRAVE ACCENT
+0x61 0x0061 # LATIN SMALL LETTER A
+0x62 0x0062 # LATIN SMALL LETTER B
+0x63 0x0063 # LATIN SMALL LETTER C
+0x64 0x0064 # LATIN SMALL LETTER D
+0x65 0x0065 # LATIN SMALL LETTER E
+0x66 0x0066 # LATIN SMALL LETTER F
+0x67 0x0067 # LATIN SMALL LETTER G
+0x68 0x0068 # LATIN SMALL LETTER H
+0x69 0x0069 # LATIN SMALL LETTER I
+0x6A 0x006A # LATIN SMALL LETTER J
+0x6B 0x006B # LATIN SMALL LETTER K
+0x6C 0x006C # LATIN SMALL LETTER L
+0x6D 0x006D # LATIN SMALL LETTER M
+0x6E 0x006E # LATIN SMALL LETTER N
+0x6F 0x006F # LATIN SMALL LETTER O
+0x70 0x0070 # LATIN SMALL LETTER P
+0x71 0x0071 # LATIN SMALL LETTER Q
+0x72 0x0072 # LATIN SMALL LETTER R
+0x73 0x0073 # LATIN SMALL LETTER S
+0x74 0x0074 # LATIN SMALL LETTER T
+0x75 0x0075 # LATIN SMALL LETTER U
+0x76 0x0076 # LATIN SMALL LETTER V
+0x77 0x0077 # LATIN SMALL LETTER W
+0x78 0x0078 # LATIN SMALL LETTER X
+0x79 0x0079 # LATIN SMALL LETTER Y
+0x7A 0x007A # LATIN SMALL LETTER Z
+0x7B 0x007B # LEFT CURLY BRACKET
+0x7C 0x007C # VERTICAL LINE
+0x7D 0x007D # RIGHT CURLY BRACKET
+0x7E 0x007E # TILDE
+0x7F 0x007F # DELETE (DEL)
diff --git a/externals/figlet/fonts/646-no.flc b/externals/figlet/fonts/646-no.flc
new file mode 100644
index 000000000..3f4776656
--- /dev/null
+++ b/externals/figlet/fonts/646-no.flc
@@ -0,0 +1,156 @@
+#
+# Name: NS_4551-1 to Unicode
+# Unicode version: 2.0
+# Table version: 0.1
+# Table format: Format A
+# Date: 0097-01-24
+# Authors: John Cowan <cowan@ccil.org> (conversion)
+# Keld Simonsen <Keld.Simonsen@dkuug.dk> (RFC 1345)
+#
+# General notes:
+#
+# This table contains data obtained from RFC 1345 on how
+# NS_4551-1 characters map into Unicode.
+#
+# Format: Three tab-separated columns
+# Column #1 is the NS_4551-1 code (in hex as 0xXX)
+# Column #2 is the Unicode (in hex as 0xXXXX)
+# Column #3 the Unicode name (follows a comment sign, '#')
+#
+# The entries are in NS_4551-1 order
+#
+# Any comments or problems, contact <cowan@ccil.org>
+#
+# &rem source: ECMA registry
+# &alias iso-ir-60
+# &alias ISO646-NO
+# &g0esc x2860 &g1esc x2960 &g2esc x2a60 &g3esc x2b60
+# &alias no
+0x00 0x0000 # NULL (NUL)
+0x01 0x0001 # START OF HEADING (SOH)
+0x02 0x0002 # START OF TEXT (STX)
+0x03 0x0003 # END OF TEXT (ETX)
+0x04 0x0004 # END OF TRANSMISSION (EOT)
+0x05 0x0005 # ENQUIRY (ENQ)
+0x06 0x0006 # ACKNOWLEDGE (ACK)
+0x07 0x0007 # BELL (BEL)
+0x08 0x0008 # BACKSPACE (BS)
+0x09 0x0009 # CHARACTER TABULATION (HT)
+0x0A 0x000A # LINE FEED (LF)
+0x0B 0x000B # LINE TABULATION (VT)
+0x0C 0x000C # FORM FEED (FF)
+0x0D 0x000D # CARRIAGE RETURN (CR)
+0x0E 0x000E # SHIFT OUT (SO)
+0x0F 0x000F # SHIFT IN (SI)
+0x10 0x0010 # DATALINK ESCAPE (DLE)
+0x11 0x0011 # DEVICE CONTROL ONE (DC1)
+0x12 0x0012 # DEVICE CONTROL TWO (DC2)
+0x13 0x0013 # DEVICE CONTROL THREE (DC3)
+0x14 0x0014 # DEVICE CONTROL FOUR (DC4)
+0x15 0x0015 # NEGATIVE ACKNOWLEDGE (NAK)
+0x16 0x0016 # SYNCRONOUS IDLE (SYN)
+0x17 0x0017 # END OF TRANSMISSION BLOCK (ETB)
+0x18 0x0018 # CANCEL (CAN)
+0x19 0x0019 # END OF MEDIUM (EM)
+0x1A 0x001A # SUBSTITUTE (SUB)
+0x1B 0x001B # ESCAPE (ESC)
+0x1C 0x001C # FILE SEPARATOR (IS4)
+0x1D 0x001D # GROUP SEPARATOR (IS3)
+0x1E 0x001E # RECORD SEPARATOR (IS2)
+0x1F 0x001F # UNIT SEPARATOR (IS1)
+0x20 0x0020 # SPACE
+0x21 0x0021 # EXCLAMATION MARK
+0x22 0x0022 # QUOTATION MARK
+0x23 0x0023 # NUMBER SIGN
+0x24 0x0024 # DOLLAR SIGN
+0x25 0x0025 # PERCENT SIGN
+0x26 0x0026 # AMPERSAND
+0x27 0x0027 # APOSTROPHE
+0x28 0x0028 # LEFT PARENTHESIS
+0x29 0x0029 # RIGHT PARENTHESIS
+0x2A 0x002A # ASTERISK
+0x2B 0x002B # PLUS SIGN
+0x2C 0x002C # COMMA
+0x2D 0x002D # HYPHEN-MINUS
+0x2E 0x002E # FULL STOP
+0x2F 0x002F # SOLIDUS
+0x30 0x0030 # DIGIT ZERO
+0x31 0x0031 # DIGIT ONE
+0x32 0x0032 # DIGIT TWO
+0x33 0x0033 # DIGIT THREE
+0x34 0x0034 # DIGIT FOUR
+0x35 0x0035 # DIGIT FIVE
+0x36 0x0036 # DIGIT SIX
+0x37 0x0037 # DIGIT SEVEN
+0x38 0x0038 # DIGIT EIGHT
+0x39 0x0039 # DIGIT NINE
+0x3A 0x003A # COLON
+0x3B 0x003B # SEMICOLON
+0x3C 0x003C # LESS-THAN SIGN
+0x3D 0x003D # EQUALS SIGN
+0x3E 0x003E # GREATER-THAN SIGN
+0x3F 0x003F # QUESTION MARK
+0x40 0x0040 # COMMERCIAL AT
+0x41 0x0041 # LATIN CAPITAL LETTER A
+0x42 0x0042 # LATIN CAPITAL LETTER B
+0x43 0x0043 # LATIN CAPITAL LETTER C
+0x44 0x0044 # LATIN CAPITAL LETTER D
+0x45 0x0045 # LATIN CAPITAL LETTER E
+0x46 0x0046 # LATIN CAPITAL LETTER F
+0x47 0x0047 # LATIN CAPITAL LETTER G
+0x48 0x0048 # LATIN CAPITAL LETTER H
+0x49 0x0049 # LATIN CAPITAL LETTER I
+0x4A 0x004A # LATIN CAPITAL LETTER J
+0x4B 0x004B # LATIN CAPITAL LETTER K
+0x4C 0x004C # LATIN CAPITAL LETTER L
+0x4D 0x004D # LATIN CAPITAL LETTER M
+0x4E 0x004E # LATIN CAPITAL LETTER N
+0x4F 0x004F # LATIN CAPITAL LETTER O
+0x50 0x0050 # LATIN CAPITAL LETTER P
+0x51 0x0051 # LATIN CAPITAL LETTER Q
+0x52 0x0052 # LATIN CAPITAL LETTER R
+0x53 0x0053 # LATIN CAPITAL LETTER S
+0x54 0x0054 # LATIN CAPITAL LETTER T
+0x55 0x0055 # LATIN CAPITAL LETTER U
+0x56 0x0056 # LATIN CAPITAL LETTER V
+0x57 0x0057 # LATIN CAPITAL LETTER W
+0x58 0x0058 # LATIN CAPITAL LETTER X
+0x59 0x0059 # LATIN CAPITAL LETTER Y
+0x5A 0x005A # LATIN CAPITAL LETTER Z
+0x5B 0x00C6 # LATIN CAPITAL LETTER AE
+0x5C 0x00D8 # LATIN CAPITAL LETTER O WITH STROKE
+0x5D 0x00C5 # LATIN CAPITAL LETTER A WITH RING ABOVE
+0x5E 0x005E # CIRCUMFLEX ACCENT
+0x5F 0x005F # LOW LINE
+0x60 0x0060 # GRAVE ACCENT
+0x61 0x0061 # LATIN SMALL LETTER A
+0x62 0x0062 # LATIN SMALL LETTER B
+0x63 0x0063 # LATIN SMALL LETTER C
+0x64 0x0064 # LATIN SMALL LETTER D
+0x65 0x0065 # LATIN SMALL LETTER E
+0x66 0x0066 # LATIN SMALL LETTER F
+0x67 0x0067 # LATIN SMALL LETTER G
+0x68 0x0068 # LATIN SMALL LETTER H
+0x69 0x0069 # LATIN SMALL LETTER I
+0x6A 0x006A # LATIN SMALL LETTER J
+0x6B 0x006B # LATIN SMALL LETTER K
+0x6C 0x006C # LATIN SMALL LETTER L
+0x6D 0x006D # LATIN SMALL LETTER M
+0x6E 0x006E # LATIN SMALL LETTER N
+0x6F 0x006F # LATIN SMALL LETTER O
+0x70 0x0070 # LATIN SMALL LETTER P
+0x71 0x0071 # LATIN SMALL LETTER Q
+0x72 0x0072 # LATIN SMALL LETTER R
+0x73 0x0073 # LATIN SMALL LETTER S
+0x74 0x0074 # LATIN SMALL LETTER T
+0x75 0x0075 # LATIN SMALL LETTER U
+0x76 0x0076 # LATIN SMALL LETTER V
+0x77 0x0077 # LATIN SMALL LETTER W
+0x78 0x0078 # LATIN SMALL LETTER X
+0x79 0x0079 # LATIN SMALL LETTER Y
+0x7A 0x007A # LATIN SMALL LETTER Z
+0x7B 0x00E6 # LATIN SMALL LETTER AE
+0x7C 0x00F8 # LATIN SMALL LETTER O WITH STROKE
+0x7D 0x00E5 # LATIN SMALL LETTER A WITH RING ABOVE
+0x7E 0x203E # OVERLINE
+0x7F 0x007F # DELETE (DEL)
diff --git a/externals/figlet/fonts/646-no2.flc b/externals/figlet/fonts/646-no2.flc
new file mode 100644
index 000000000..c5ca075a2
--- /dev/null
+++ b/externals/figlet/fonts/646-no2.flc
@@ -0,0 +1,156 @@
+#
+# Name: NS_4551-2 to Unicode
+# Unicode version: 2.0
+# Table version: 0.1
+# Table format: Format A
+# Date: 0097-01-24
+# Authors: John Cowan <cowan@ccil.org> (conversion)
+# Keld Simonsen <Keld.Simonsen@dkuug.dk> (RFC 1345)
+#
+# General notes:
+#
+# This table contains data obtained from RFC 1345 on how
+# NS_4551-2 characters map into Unicode.
+#
+# Format: Three tab-separated columns
+# Column #1 is the NS_4551-2 code (in hex as 0xXX)
+# Column #2 is the Unicode (in hex as 0xXXXX)
+# Column #3 the Unicode name (follows a comment sign, '#')
+#
+# The entries are in NS_4551-2 order
+#
+# Any comments or problems, contact <cowan@ccil.org>
+#
+# &rem source: ECMA registry
+# &alias ISO646-NO2
+# &alias iso-ir-61
+# &g0esc x2861 &g1esc x2961 &g2esc x2a61 &g3esc x2b61
+# &alias no2
+0x00 0x0000 # NULL (NUL)
+0x01 0x0001 # START OF HEADING (SOH)
+0x02 0x0002 # START OF TEXT (STX)
+0x03 0x0003 # END OF TEXT (ETX)
+0x04 0x0004 # END OF TRANSMISSION (EOT)
+0x05 0x0005 # ENQUIRY (ENQ)
+0x06 0x0006 # ACKNOWLEDGE (ACK)
+0x07 0x0007 # BELL (BEL)
+0x08 0x0008 # BACKSPACE (BS)
+0x09 0x0009 # CHARACTER TABULATION (HT)
+0x0A 0x000A # LINE FEED (LF)
+0x0B 0x000B # LINE TABULATION (VT)
+0x0C 0x000C # FORM FEED (FF)
+0x0D 0x000D # CARRIAGE RETURN (CR)
+0x0E 0x000E # SHIFT OUT (SO)
+0x0F 0x000F # SHIFT IN (SI)
+0x10 0x0010 # DATALINK ESCAPE (DLE)
+0x11 0x0011 # DEVICE CONTROL ONE (DC1)
+0x12 0x0012 # DEVICE CONTROL TWO (DC2)
+0x13 0x0013 # DEVICE CONTROL THREE (DC3)
+0x14 0x0014 # DEVICE CONTROL FOUR (DC4)
+0x15 0x0015 # NEGATIVE ACKNOWLEDGE (NAK)
+0x16 0x0016 # SYNCRONOUS IDLE (SYN)
+0x17 0x0017 # END OF TRANSMISSION BLOCK (ETB)
+0x18 0x0018 # CANCEL (CAN)
+0x19 0x0019 # END OF MEDIUM (EM)
+0x1A 0x001A # SUBSTITUTE (SUB)
+0x1B 0x001B # ESCAPE (ESC)
+0x1C 0x001C # FILE SEPARATOR (IS4)
+0x1D 0x001D # GROUP SEPARATOR (IS3)
+0x1E 0x001E # RECORD SEPARATOR (IS2)
+0x1F 0x001F # UNIT SEPARATOR (IS1)
+0x20 0x0020 # SPACE
+0x21 0x0021 # EXCLAMATION MARK
+0x22 0x0022 # QUOTATION MARK
+0x23 0x00B6 # PILCROW SIGN
+0x24 0x0024 # DOLLAR SIGN
+0x25 0x0025 # PERCENT SIGN
+0x26 0x0026 # AMPERSAND
+0x27 0x0027 # APOSTROPHE
+0x28 0x0028 # LEFT PARENTHESIS
+0x29 0x0029 # RIGHT PARENTHESIS
+0x2A 0x002A # ASTERISK
+0x2B 0x002B # PLUS SIGN
+0x2C 0x002C # COMMA
+0x2D 0x002D # HYPHEN-MINUS
+0x2E 0x002E # FULL STOP
+0x2F 0x002F # SOLIDUS
+0x30 0x0030 # DIGIT ZERO
+0x31 0x0031 # DIGIT ONE
+0x32 0x0032 # DIGIT TWO
+0x33 0x0033 # DIGIT THREE
+0x34 0x0034 # DIGIT FOUR
+0x35 0x0035 # DIGIT FIVE
+0x36 0x0036 # DIGIT SIX
+0x37 0x0037 # DIGIT SEVEN
+0x38 0x0038 # DIGIT EIGHT
+0x39 0x0039 # DIGIT NINE
+0x3A 0x003A # COLON
+0x3B 0x003B # SEMICOLON
+0x3C 0x003C # LESS-THAN SIGN
+0x3D 0x003D # EQUALS SIGN
+0x3E 0x003E # GREATER-THAN SIGN
+0x3F 0x003F # QUESTION MARK
+0x40 0x0040 # COMMERCIAL AT
+0x41 0x0041 # LATIN CAPITAL LETTER A
+0x42 0x0042 # LATIN CAPITAL LETTER B
+0x43 0x0043 # LATIN CAPITAL LETTER C
+0x44 0x0044 # LATIN CAPITAL LETTER D
+0x45 0x0045 # LATIN CAPITAL LETTER E
+0x46 0x0046 # LATIN CAPITAL LETTER F
+0x47 0x0047 # LATIN CAPITAL LETTER G
+0x48 0x0048 # LATIN CAPITAL LETTER H
+0x49 0x0049 # LATIN CAPITAL LETTER I
+0x4A 0x004A # LATIN CAPITAL LETTER J
+0x4B 0x004B # LATIN CAPITAL LETTER K
+0x4C 0x004C # LATIN CAPITAL LETTER L
+0x4D 0x004D # LATIN CAPITAL LETTER M
+0x4E 0x004E # LATIN CAPITAL LETTER N
+0x4F 0x004F # LATIN CAPITAL LETTER O
+0x50 0x0050 # LATIN CAPITAL LETTER P
+0x51 0x0051 # LATIN CAPITAL LETTER Q
+0x52 0x0052 # LATIN CAPITAL LETTER R
+0x53 0x0053 # LATIN CAPITAL LETTER S
+0x54 0x0054 # LATIN CAPITAL LETTER T
+0x55 0x0055 # LATIN CAPITAL LETTER U
+0x56 0x0056 # LATIN CAPITAL LETTER V
+0x57 0x0057 # LATIN CAPITAL LETTER W
+0x58 0x0058 # LATIN CAPITAL LETTER X
+0x59 0x0059 # LATIN CAPITAL LETTER Y
+0x5A 0x005A # LATIN CAPITAL LETTER Z
+0x5B 0x00C6 # LATIN CAPITAL LETTER AE
+0x5C 0x00D8 # LATIN CAPITAL LETTER O WITH STROKE
+0x5D 0x00C5 # LATIN CAPITAL LETTER A WITH RING ABOVE
+0x5E 0x005E # CIRCUMFLEX ACCENT
+0x5F 0x005F # LOW LINE
+0x60 0x0060 # GRAVE ACCENT
+0x61 0x0061 # LATIN SMALL LETTER A
+0x62 0x0062 # LATIN SMALL LETTER B
+0x63 0x0063 # LATIN SMALL LETTER C
+0x64 0x0064 # LATIN SMALL LETTER D
+0x65 0x0065 # LATIN SMALL LETTER E
+0x66 0x0066 # LATIN SMALL LETTER F
+0x67 0x0067 # LATIN SMALL LETTER G
+0x68 0x0068 # LATIN SMALL LETTER H
+0x69 0x0069 # LATIN SMALL LETTER I
+0x6A 0x006A # LATIN SMALL LETTER J
+0x6B 0x006B # LATIN SMALL LETTER K
+0x6C 0x006C # LATIN SMALL LETTER L
+0x6D 0x006D # LATIN SMALL LETTER M
+0x6E 0x006E # LATIN SMALL LETTER N
+0x6F 0x006F # LATIN SMALL LETTER O
+0x70 0x0070 # LATIN SMALL LETTER P
+0x71 0x0071 # LATIN SMALL LETTER Q
+0x72 0x0072 # LATIN SMALL LETTER R
+0x73 0x0073 # LATIN SMALL LETTER S
+0x74 0x0074 # LATIN SMALL LETTER T
+0x75 0x0075 # LATIN SMALL LETTER U
+0x76 0x0076 # LATIN SMALL LETTER V
+0x77 0x0077 # LATIN SMALL LETTER W
+0x78 0x0078 # LATIN SMALL LETTER X
+0x79 0x0079 # LATIN SMALL LETTER Y
+0x7A 0x007A # LATIN SMALL LETTER Z
+0x7B 0x00E6 # LATIN SMALL LETTER AE
+0x7C 0x00F8 # LATIN SMALL LETTER O WITH STROKE
+0x7D 0x00E5 # LATIN SMALL LETTER A WITH RING ABOVE
+0x7E 0x007C # VERTICAL LINE
+0x7F 0x007F # DELETE (DEL)
diff --git a/externals/figlet/fonts/646-pt.flc b/externals/figlet/fonts/646-pt.flc
new file mode 100644
index 000000000..37571886c
--- /dev/null
+++ b/externals/figlet/fonts/646-pt.flc
@@ -0,0 +1,155 @@
+#
+# Name: PT to Unicode
+# Unicode version: 2.0
+# Table version: 0.1
+# Table format: Format A
+# Date: 0097-01-24
+# Authors: John Cowan <cowan@ccil.org> (conversion)
+# Keld Simonsen <Keld.Simonsen@dkuug.dk> (RFC 1345)
+#
+# General notes:
+#
+# This table contains data obtained from RFC 1345 on how
+# PT characters map into Unicode.
+#
+# Format: Three tab-separated columns
+# Column #1 is the PT code (in hex as 0xXX)
+# Column #2 is the Unicode (in hex as 0xXXXX)
+# Column #3 the Unicode name (follows a comment sign, '#')
+#
+# The entries are in PT order
+#
+# Any comments or problems, contact <cowan@ccil.org>
+#
+# &rem source: ECMA registry
+# &alias iso-ir-16
+# &alias ISO646-PT
+# &g0esc x284c &g1esc x294c &g2esc x2a4c &g3esc x2b4c
+0x00 0x0000 # NULL (NUL)
+0x01 0x0001 # START OF HEADING (SOH)
+0x02 0x0002 # START OF TEXT (STX)
+0x03 0x0003 # END OF TEXT (ETX)
+0x04 0x0004 # END OF TRANSMISSION (EOT)
+0x05 0x0005 # ENQUIRY (ENQ)
+0x06 0x0006 # ACKNOWLEDGE (ACK)
+0x07 0x0007 # BELL (BEL)
+0x08 0x0008 # BACKSPACE (BS)
+0x09 0x0009 # CHARACTER TABULATION (HT)
+0x0A 0x000A # LINE FEED (LF)
+0x0B 0x000B # LINE TABULATION (VT)
+0x0C 0x000C # FORM FEED (FF)
+0x0D 0x000D # CARRIAGE RETURN (CR)
+0x0E 0x000E # SHIFT OUT (SO)
+0x0F 0x000F # SHIFT IN (SI)
+0x10 0x0010 # DATALINK ESCAPE (DLE)
+0x11 0x0011 # DEVICE CONTROL ONE (DC1)
+0x12 0x0012 # DEVICE CONTROL TWO (DC2)
+0x13 0x0013 # DEVICE CONTROL THREE (DC3)
+0x14 0x0014 # DEVICE CONTROL FOUR (DC4)
+0x15 0x0015 # NEGATIVE ACKNOWLEDGE (NAK)
+0x16 0x0016 # SYNCRONOUS IDLE (SYN)
+0x17 0x0017 # END OF TRANSMISSION BLOCK (ETB)
+0x18 0x0018 # CANCEL (CAN)
+0x19 0x0019 # END OF MEDIUM (EM)
+0x1A 0x001A # SUBSTITUTE (SUB)
+0x1B 0x001B # ESCAPE (ESC)
+0x1C 0x001C # FILE SEPARATOR (IS4)
+0x1D 0x001D # GROUP SEPARATOR (IS3)
+0x1E 0x001E # RECORD SEPARATOR (IS2)
+0x1F 0x001F # UNIT SEPARATOR (IS1)
+0x20 0x0020 # SPACE
+0x21 0x0021 # EXCLAMATION MARK
+0x22 0x0022 # QUOTATION MARK
+0x23 0x0023 # NUMBER SIGN
+0x24 0x0024 # DOLLAR SIGN
+0x25 0x0025 # PERCENT SIGN
+0x26 0x0026 # AMPERSAND
+0x27 0x0027 # APOSTROPHE
+0x28 0x0028 # LEFT PARENTHESIS
+0x29 0x0029 # RIGHT PARENTHESIS
+0x2A 0x002A # ASTERISK
+0x2B 0x002B # PLUS SIGN
+0x2C 0x002C # COMMA
+0x2D 0x002D # HYPHEN-MINUS
+0x2E 0x002E # FULL STOP
+0x2F 0x002F # SOLIDUS
+0x30 0x0030 # DIGIT ZERO
+0x31 0x0031 # DIGIT ONE
+0x32 0x0032 # DIGIT TWO
+0x33 0x0033 # DIGIT THREE
+0x34 0x0034 # DIGIT FOUR
+0x35 0x0035 # DIGIT FIVE
+0x36 0x0036 # DIGIT SIX
+0x37 0x0037 # DIGIT SEVEN
+0x38 0x0038 # DIGIT EIGHT
+0x39 0x0039 # DIGIT NINE
+0x3A 0x003A # COLON
+0x3B 0x003B # SEMICOLON
+0x3C 0x003C # LESS-THAN SIGN
+0x3D 0x003D # EQUALS SIGN
+0x3E 0x003E # GREATER-THAN SIGN
+0x3F 0x003F # QUESTION MARK
+0x40 0x00A7 # SECTION SIGN
+0x41 0x0041 # LATIN CAPITAL LETTER A
+0x42 0x0042 # LATIN CAPITAL LETTER B
+0x43 0x0043 # LATIN CAPITAL LETTER C
+0x44 0x0044 # LATIN CAPITAL LETTER D
+0x45 0x0045 # LATIN CAPITAL LETTER E
+0x46 0x0046 # LATIN CAPITAL LETTER F
+0x47 0x0047 # LATIN CAPITAL LETTER G
+0x48 0x0048 # LATIN CAPITAL LETTER H
+0x49 0x0049 # LATIN CAPITAL LETTER I
+0x4A 0x004A # LATIN CAPITAL LETTER J
+0x4B 0x004B # LATIN CAPITAL LETTER K
+0x4C 0x004C # LATIN CAPITAL LETTER L
+0x4D 0x004D # LATIN CAPITAL LETTER M
+0x4E 0x004E # LATIN CAPITAL LETTER N
+0x4F 0x004F # LATIN CAPITAL LETTER O
+0x50 0x0050 # LATIN CAPITAL LETTER P
+0x51 0x0051 # LATIN CAPITAL LETTER Q
+0x52 0x0052 # LATIN CAPITAL LETTER R
+0x53 0x0053 # LATIN CAPITAL LETTER S
+0x54 0x0054 # LATIN CAPITAL LETTER T
+0x55 0x0055 # LATIN CAPITAL LETTER U
+0x56 0x0056 # LATIN CAPITAL LETTER V
+0x57 0x0057 # LATIN CAPITAL LETTER W
+0x58 0x0058 # LATIN CAPITAL LETTER X
+0x59 0x0059 # LATIN CAPITAL LETTER Y
+0x5A 0x005A # LATIN CAPITAL LETTER Z
+0x5B 0x00C3 # LATIN CAPITAL LETTER A WITH TILDE
+0x5C 0x00C7 # LATIN CAPITAL LETTER C WITH CEDILLA
+0x5D 0x00D5 # LATIN CAPITAL LETTER O WITH TILDE
+0x5E 0x005E # CIRCUMFLEX ACCENT
+0x5F 0x005F # LOW LINE
+0x60 0x0060 # GRAVE ACCENT
+0x61 0x0061 # LATIN SMALL LETTER A
+0x62 0x0062 # LATIN SMALL LETTER B
+0x63 0x0063 # LATIN SMALL LETTER C
+0x64 0x0064 # LATIN SMALL LETTER D
+0x65 0x0065 # LATIN SMALL LETTER E
+0x66 0x0066 # LATIN SMALL LETTER F
+0x67 0x0067 # LATIN SMALL LETTER G
+0x68 0x0068 # LATIN SMALL LETTER H
+0x69 0x0069 # LATIN SMALL LETTER I
+0x6A 0x006A # LATIN SMALL LETTER J
+0x6B 0x006B # LATIN SMALL LETTER K
+0x6C 0x006C # LATIN SMALL LETTER L
+0x6D 0x006D # LATIN SMALL LETTER M
+0x6E 0x006E # LATIN SMALL LETTER N
+0x6F 0x006F # LATIN SMALL LETTER O
+0x70 0x0070 # LATIN SMALL LETTER P
+0x71 0x0071 # LATIN SMALL LETTER Q
+0x72 0x0072 # LATIN SMALL LETTER R
+0x73 0x0073 # LATIN SMALL LETTER S
+0x74 0x0074 # LATIN SMALL LETTER T
+0x75 0x0075 # LATIN SMALL LETTER U
+0x76 0x0076 # LATIN SMALL LETTER V
+0x77 0x0077 # LATIN SMALL LETTER W
+0x78 0x0078 # LATIN SMALL LETTER X
+0x79 0x0079 # LATIN SMALL LETTER Y
+0x7A 0x007A # LATIN SMALL LETTER Z
+0x7B 0x00E3 # LATIN SMALL LETTER A WITH TILDE
+0x7C 0x00E7 # LATIN SMALL LETTER C WITH CEDILLA
+0x7D 0x00F5 # LATIN SMALL LETTER O WITH TILDE
+0x7E 0x00B0 # DEGREE SIGN
+0x7F 0x007F # DELETE (DEL)
diff --git a/externals/figlet/fonts/646-pt2.flc b/externals/figlet/fonts/646-pt2.flc
new file mode 100644
index 000000000..8a00e61ec
--- /dev/null
+++ b/externals/figlet/fonts/646-pt2.flc
@@ -0,0 +1,155 @@
+#
+# Name: PT2 to Unicode
+# Unicode version: 2.0
+# Table version: 0.1
+# Table format: Format A
+# Date: 0097-01-24
+# Authors: John Cowan <cowan@ccil.org> (conversion)
+# Keld Simonsen <Keld.Simonsen@dkuug.dk> (RFC 1345)
+#
+# General notes:
+#
+# This table contains data obtained from RFC 1345 on how
+# PT2 characters map into Unicode.
+#
+# Format: Three tab-separated columns
+# Column #1 is the PT2 code (in hex as 0xXX)
+# Column #2 is the Unicode (in hex as 0xXXXX)
+# Column #3 the Unicode name (follows a comment sign, '#')
+#
+# The entries are in PT2 order
+#
+# Any comments or problems, contact <cowan@ccil.org>
+#
+# &rem source: ECMA registry
+# &alias iso-ir-84
+# &alias ISO646-PT2
+# &g0esc x2867 &g1esc x2967 &g2esc x2a67 &g3esc x2b67
+0x00 0x0000 # NULL (NUL)
+0x01 0x0001 # START OF HEADING (SOH)
+0x02 0x0002 # START OF TEXT (STX)
+0x03 0x0003 # END OF TEXT (ETX)
+0x04 0x0004 # END OF TRANSMISSION (EOT)
+0x05 0x0005 # ENQUIRY (ENQ)
+0x06 0x0006 # ACKNOWLEDGE (ACK)
+0x07 0x0007 # BELL (BEL)
+0x08 0x0008 # BACKSPACE (BS)
+0x09 0x0009 # CHARACTER TABULATION (HT)
+0x0A 0x000A # LINE FEED (LF)
+0x0B 0x000B # LINE TABULATION (VT)
+0x0C 0x000C # FORM FEED (FF)
+0x0D 0x000D # CARRIAGE RETURN (CR)
+0x0E 0x000E # SHIFT OUT (SO)
+0x0F 0x000F # SHIFT IN (SI)
+0x10 0x0010 # DATALINK ESCAPE (DLE)
+0x11 0x0011 # DEVICE CONTROL ONE (DC1)
+0x12 0x0012 # DEVICE CONTROL TWO (DC2)
+0x13 0x0013 # DEVICE CONTROL THREE (DC3)
+0x14 0x0014 # DEVICE CONTROL FOUR (DC4)
+0x15 0x0015 # NEGATIVE ACKNOWLEDGE (NAK)
+0x16 0x0016 # SYNCRONOUS IDLE (SYN)
+0x17 0x0017 # END OF TRANSMISSION BLOCK (ETB)
+0x18 0x0018 # CANCEL (CAN)
+0x19 0x0019 # END OF MEDIUM (EM)
+0x1A 0x001A # SUBSTITUTE (SUB)
+0x1B 0x001B # ESCAPE (ESC)
+0x1C 0x001C # FILE SEPARATOR (IS4)
+0x1D 0x001D # GROUP SEPARATOR (IS3)
+0x1E 0x001E # RECORD SEPARATOR (IS2)
+0x1F 0x001F # UNIT SEPARATOR (IS1)
+0x20 0x0020 # SPACE
+0x21 0x0021 # EXCLAMATION MARK
+0x22 0x0022 # QUOTATION MARK
+0x23 0x0023 # NUMBER SIGN
+0x24 0x0024 # DOLLAR SIGN
+0x25 0x0025 # PERCENT SIGN
+0x26 0x0026 # AMPERSAND
+0x27 0x0027 # APOSTROPHE
+0x28 0x0028 # LEFT PARENTHESIS
+0x29 0x0029 # RIGHT PARENTHESIS
+0x2A 0x002A # ASTERISK
+0x2B 0x002B # PLUS SIGN
+0x2C 0x002C # COMMA
+0x2D 0x002D # HYPHEN-MINUS
+0x2E 0x002E # FULL STOP
+0x2F 0x002F # SOLIDUS
+0x30 0x0030 # DIGIT ZERO
+0x31 0x0031 # DIGIT ONE
+0x32 0x0032 # DIGIT TWO
+0x33 0x0033 # DIGIT THREE
+0x34 0x0034 # DIGIT FOUR
+0x35 0x0035 # DIGIT FIVE
+0x36 0x0036 # DIGIT SIX
+0x37 0x0037 # DIGIT SEVEN
+0x38 0x0038 # DIGIT EIGHT
+0x39 0x0039 # DIGIT NINE
+0x3A 0x003A # COLON
+0x3B 0x003B # SEMICOLON
+0x3C 0x003C # LESS-THAN SIGN
+0x3D 0x003D # EQUALS SIGN
+0x3E 0x003E # GREATER-THAN SIGN
+0x3F 0x003F # QUESTION MARK
+0x40 0x00B4 # ACUTE ACCENT
+0x41 0x0041 # LATIN CAPITAL LETTER A
+0x42 0x0042 # LATIN CAPITAL LETTER B
+0x43 0x0043 # LATIN CAPITAL LETTER C
+0x44 0x0044 # LATIN CAPITAL LETTER D
+0x45 0x0045 # LATIN CAPITAL LETTER E
+0x46 0x0046 # LATIN CAPITAL LETTER F
+0x47 0x0047 # LATIN CAPITAL LETTER G
+0x48 0x0048 # LATIN CAPITAL LETTER H
+0x49 0x0049 # LATIN CAPITAL LETTER I
+0x4A 0x004A # LATIN CAPITAL LETTER J
+0x4B 0x004B # LATIN CAPITAL LETTER K
+0x4C 0x004C # LATIN CAPITAL LETTER L
+0x4D 0x004D # LATIN CAPITAL LETTER M
+0x4E 0x004E # LATIN CAPITAL LETTER N
+0x4F 0x004F # LATIN CAPITAL LETTER O
+0x50 0x0050 # LATIN CAPITAL LETTER P
+0x51 0x0051 # LATIN CAPITAL LETTER Q
+0x52 0x0052 # LATIN CAPITAL LETTER R
+0x53 0x0053 # LATIN CAPITAL LETTER S
+0x54 0x0054 # LATIN CAPITAL LETTER T
+0x55 0x0055 # LATIN CAPITAL LETTER U
+0x56 0x0056 # LATIN CAPITAL LETTER V
+0x57 0x0057 # LATIN CAPITAL LETTER W
+0x58 0x0058 # LATIN CAPITAL LETTER X
+0x59 0x0059 # LATIN CAPITAL LETTER Y
+0x5A 0x005A # LATIN CAPITAL LETTER Z
+0x5B 0x00C3 # LATIN CAPITAL LETTER A WITH TILDE
+0x5C 0x00C7 # LATIN CAPITAL LETTER C WITH CEDILLA
+0x5D 0x00D5 # LATIN CAPITAL LETTER O WITH TILDE
+0x5E 0x005E # CIRCUMFLEX ACCENT
+0x5F 0x005F # LOW LINE
+0x60 0x0060 # GRAVE ACCENT
+0x61 0x0061 # LATIN SMALL LETTER A
+0x62 0x0062 # LATIN SMALL LETTER B
+0x63 0x0063 # LATIN SMALL LETTER C
+0x64 0x0064 # LATIN SMALL LETTER D
+0x65 0x0065 # LATIN SMALL LETTER E
+0x66 0x0066 # LATIN SMALL LETTER F
+0x67 0x0067 # LATIN SMALL LETTER G
+0x68 0x0068 # LATIN SMALL LETTER H
+0x69 0x0069 # LATIN SMALL LETTER I
+0x6A 0x006A # LATIN SMALL LETTER J
+0x6B 0x006B # LATIN SMALL LETTER K
+0x6C 0x006C # LATIN SMALL LETTER L
+0x6D 0x006D # LATIN SMALL LETTER M
+0x6E 0x006E # LATIN SMALL LETTER N
+0x6F 0x006F # LATIN SMALL LETTER O
+0x70 0x0070 # LATIN SMALL LETTER P
+0x71 0x0071 # LATIN SMALL LETTER Q
+0x72 0x0072 # LATIN SMALL LETTER R
+0x73 0x0073 # LATIN SMALL LETTER S
+0x74 0x0074 # LATIN SMALL LETTER T
+0x75 0x0075 # LATIN SMALL LETTER U
+0x76 0x0076 # LATIN SMALL LETTER V
+0x77 0x0077 # LATIN SMALL LETTER W
+0x78 0x0078 # LATIN SMALL LETTER X
+0x79 0x0079 # LATIN SMALL LETTER Y
+0x7A 0x007A # LATIN SMALL LETTER Z
+0x7B 0x00E3 # LATIN SMALL LETTER A WITH TILDE
+0x7C 0x00E7 # LATIN SMALL LETTER C WITH CEDILLA
+0x7D 0x00F5 # LATIN SMALL LETTER O WITH TILDE
+0x7E 0x203E # OVERLINE
+0x7F 0x007F # DELETE (DEL)
diff --git a/externals/figlet/fonts/646-se.flc b/externals/figlet/fonts/646-se.flc
new file mode 100644
index 000000000..424e886a0
--- /dev/null
+++ b/externals/figlet/fonts/646-se.flc
@@ -0,0 +1,158 @@
+#
+# Name: SEN_850200_B to Unicode
+# Unicode version: 2.0
+# Table version: 0.1
+# Table format: Format A
+# Date: 0097-01-24
+# Authors: John Cowan <cowan@ccil.org> (conversion)
+# Keld Simonsen <Keld.Simonsen@dkuug.dk> (RFC 1345)
+#
+# General notes:
+#
+# This table contains data obtained from RFC 1345 on how
+# SEN_850200_B characters map into Unicode.
+#
+# Format: Three tab-separated columns
+# Column #1 is the SEN_850200_B code (in hex as 0xXX)
+# Column #2 is the Unicode (in hex as 0xXXXX)
+# Column #3 the Unicode name (follows a comment sign, '#')
+#
+# The entries are in SEN_850200_B order
+#
+# Any comments or problems, contact <cowan@ccil.org>
+#
+# &rem source: ECMA registry
+# &alias iso-ir-10
+# &alias FI
+# &alias ISO646-FI
+# &alias ISO646-SE
+# &alias se
+# &g0esc x2847 &g1esc x2947 &g2esc x2a47 &g3esc x2b47
+0x00 0x0000 # NULL (NUL)
+0x01 0x0001 # START OF HEADING (SOH)
+0x02 0x0002 # START OF TEXT (STX)
+0x03 0x0003 # END OF TEXT (ETX)
+0x04 0x0004 # END OF TRANSMISSION (EOT)
+0x05 0x0005 # ENQUIRY (ENQ)
+0x06 0x0006 # ACKNOWLEDGE (ACK)
+0x07 0x0007 # BELL (BEL)
+0x08 0x0008 # BACKSPACE (BS)
+0x09 0x0009 # CHARACTER TABULATION (HT)
+0x0A 0x000A # LINE FEED (LF)
+0x0B 0x000B # LINE TABULATION (VT)
+0x0C 0x000C # FORM FEED (FF)
+0x0D 0x000D # CARRIAGE RETURN (CR)
+0x0E 0x000E # SHIFT OUT (SO)
+0x0F 0x000F # SHIFT IN (SI)
+0x10 0x0010 # DATALINK ESCAPE (DLE)
+0x11 0x0011 # DEVICE CONTROL ONE (DC1)
+0x12 0x0012 # DEVICE CONTROL TWO (DC2)
+0x13 0x0013 # DEVICE CONTROL THREE (DC3)
+0x14 0x0014 # DEVICE CONTROL FOUR (DC4)
+0x15 0x0015 # NEGATIVE ACKNOWLEDGE (NAK)
+0x16 0x0016 # SYNCRONOUS IDLE (SYN)
+0x17 0x0017 # END OF TRANSMISSION BLOCK (ETB)
+0x18 0x0018 # CANCEL (CAN)
+0x19 0x0019 # END OF MEDIUM (EM)
+0x1A 0x001A # SUBSTITUTE (SUB)
+0x1B 0x001B # ESCAPE (ESC)
+0x1C 0x001C # FILE SEPARATOR (IS4)
+0x1D 0x001D # GROUP SEPARATOR (IS3)
+0x1E 0x001E # RECORD SEPARATOR (IS2)
+0x1F 0x001F # UNIT SEPARATOR (IS1)
+0x20 0x0020 # SPACE
+0x21 0x0021 # EXCLAMATION MARK
+0x22 0x0022 # QUOTATION MARK
+0x23 0x0023 # NUMBER SIGN
+0x24 0x00A4 # CURRENCY SIGN
+0x25 0x0025 # PERCENT SIGN
+0x26 0x0026 # AMPERSAND
+0x27 0x0027 # APOSTROPHE
+0x28 0x0028 # LEFT PARENTHESIS
+0x29 0x0029 # RIGHT PARENTHESIS
+0x2A 0x002A # ASTERISK
+0x2B 0x002B # PLUS SIGN
+0x2C 0x002C # COMMA
+0x2D 0x002D # HYPHEN-MINUS
+0x2E 0x002E # FULL STOP
+0x2F 0x002F # SOLIDUS
+0x30 0x0030 # DIGIT ZERO
+0x31 0x0031 # DIGIT ONE
+0x32 0x0032 # DIGIT TWO
+0x33 0x0033 # DIGIT THREE
+0x34 0x0034 # DIGIT FOUR
+0x35 0x0035 # DIGIT FIVE
+0x36 0x0036 # DIGIT SIX
+0x37 0x0037 # DIGIT SEVEN
+0x38 0x0038 # DIGIT EIGHT
+0x39 0x0039 # DIGIT NINE
+0x3A 0x003A # COLON
+0x3B 0x003B # SEMICOLON
+0x3C 0x003C # LESS-THAN SIGN
+0x3D 0x003D # EQUALS SIGN
+0x3E 0x003E # GREATER-THAN SIGN
+0x3F 0x003F # QUESTION MARK
+0x40 0x0040 # COMMERCIAL AT
+0x41 0x0041 # LATIN CAPITAL LETTER A
+0x42 0x0042 # LATIN CAPITAL LETTER B
+0x43 0x0043 # LATIN CAPITAL LETTER C
+0x44 0x0044 # LATIN CAPITAL LETTER D
+0x45 0x0045 # LATIN CAPITAL LETTER E
+0x46 0x0046 # LATIN CAPITAL LETTER F
+0x47 0x0047 # LATIN CAPITAL LETTER G
+0x48 0x0048 # LATIN CAPITAL LETTER H
+0x49 0x0049 # LATIN CAPITAL LETTER I
+0x4A 0x004A # LATIN CAPITAL LETTER J
+0x4B 0x004B # LATIN CAPITAL LETTER K
+0x4C 0x004C # LATIN CAPITAL LETTER L
+0x4D 0x004D # LATIN CAPITAL LETTER M
+0x4E 0x004E # LATIN CAPITAL LETTER N
+0x4F 0x004F # LATIN CAPITAL LETTER O
+0x50 0x0050 # LATIN CAPITAL LETTER P
+0x51 0x0051 # LATIN CAPITAL LETTER Q
+0x52 0x0052 # LATIN CAPITAL LETTER R
+0x53 0x0053 # LATIN CAPITAL LETTER S
+0x54 0x0054 # LATIN CAPITAL LETTER T
+0x55 0x0055 # LATIN CAPITAL LETTER U
+0x56 0x0056 # LATIN CAPITAL LETTER V
+0x57 0x0057 # LATIN CAPITAL LETTER W
+0x58 0x0058 # LATIN CAPITAL LETTER X
+0x59 0x0059 # LATIN CAPITAL LETTER Y
+0x5A 0x005A # LATIN CAPITAL LETTER Z
+0x5B 0x00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS
+0x5C 0x00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS
+0x5D 0x00C5 # LATIN CAPITAL LETTER A WITH RING ABOVE
+0x5E 0x005E # CIRCUMFLEX ACCENT
+0x5F 0x005F # LOW LINE
+0x60 0x0060 # GRAVE ACCENT
+0x61 0x0061 # LATIN SMALL LETTER A
+0x62 0x0062 # LATIN SMALL LETTER B
+0x63 0x0063 # LATIN SMALL LETTER C
+0x64 0x0064 # LATIN SMALL LETTER D
+0x65 0x0065 # LATIN SMALL LETTER E
+0x66 0x0066 # LATIN SMALL LETTER F
+0x67 0x0067 # LATIN SMALL LETTER G
+0x68 0x0068 # LATIN SMALL LETTER H
+0x69 0x0069 # LATIN SMALL LETTER I
+0x6A 0x006A # LATIN SMALL LETTER J
+0x6B 0x006B # LATIN SMALL LETTER K
+0x6C 0x006C # LATIN SMALL LETTER L
+0x6D 0x006D # LATIN SMALL LETTER M
+0x6E 0x006E # LATIN SMALL LETTER N
+0x6F 0x006F # LATIN SMALL LETTER O
+0x70 0x0070 # LATIN SMALL LETTER P
+0x71 0x0071 # LATIN SMALL LETTER Q
+0x72 0x0072 # LATIN SMALL LETTER R
+0x73 0x0073 # LATIN SMALL LETTER S
+0x74 0x0074 # LATIN SMALL LETTER T
+0x75 0x0075 # LATIN SMALL LETTER U
+0x76 0x0076 # LATIN SMALL LETTER V
+0x77 0x0077 # LATIN SMALL LETTER W
+0x78 0x0078 # LATIN SMALL LETTER X
+0x79 0x0079 # LATIN SMALL LETTER Y
+0x7A 0x007A # LATIN SMALL LETTER Z
+0x7B 0x00E4 # LATIN SMALL LETTER A WITH DIAERESIS
+0x7C 0x00F6 # LATIN SMALL LETTER O WITH DIAERESIS
+0x7D 0x00E5 # LATIN SMALL LETTER A WITH RING ABOVE
+0x7E 0x203E # OVERLINE
+0x7F 0x007F # DELETE (DEL)
diff --git a/externals/figlet/fonts/646-se2.flc b/externals/figlet/fonts/646-se2.flc
new file mode 100644
index 000000000..38c86cd37
--- /dev/null
+++ b/externals/figlet/fonts/646-se2.flc
@@ -0,0 +1,156 @@
+#
+# Name: SEN_850200_C to Unicode
+# Unicode version: 2.0
+# Table version: 0.1
+# Table format: Format A
+# Date: 0097-01-24
+# Authors: John Cowan <cowan@ccil.org> (conversion)
+# Keld Simonsen <Keld.Simonsen@dkuug.dk> (RFC 1345)
+#
+# General notes:
+#
+# This table contains data obtained from RFC 1345 on how
+# SEN_850200_C characters map into Unicode.
+#
+# Format: Three tab-separated columns
+# Column #1 is the SEN_850200_C code (in hex as 0xXX)
+# Column #2 is the Unicode (in hex as 0xXXXX)
+# Column #3 the Unicode name (follows a comment sign, '#')
+#
+# The entries are in SEN_850200_C order
+#
+# Any comments or problems, contact <cowan@ccil.org>
+#
+# &rem source: ECMA registry
+# &alias iso-ir-11
+# &alias ISO646-SE2
+# &g0esc x2848 &g1esc x2948 &g2esc x2a48 &g3esc x2b48
+# &alias se2
+0x00 0x0000 # NULL (NUL)
+0x01 0x0001 # START OF HEADING (SOH)
+0x02 0x0002 # START OF TEXT (STX)
+0x03 0x0003 # END OF TEXT (ETX)
+0x04 0x0004 # END OF TRANSMISSION (EOT)
+0x05 0x0005 # ENQUIRY (ENQ)
+0x06 0x0006 # ACKNOWLEDGE (ACK)
+0x07 0x0007 # BELL (BEL)
+0x08 0x0008 # BACKSPACE (BS)
+0x09 0x0009 # CHARACTER TABULATION (HT)
+0x0A 0x000A # LINE FEED (LF)
+0x0B 0x000B # LINE TABULATION (VT)
+0x0C 0x000C # FORM FEED (FF)
+0x0D 0x000D # CARRIAGE RETURN (CR)
+0x0E 0x000E # SHIFT OUT (SO)
+0x0F 0x000F # SHIFT IN (SI)
+0x10 0x0010 # DATALINK ESCAPE (DLE)
+0x11 0x0011 # DEVICE CONTROL ONE (DC1)
+0x12 0x0012 # DEVICE CONTROL TWO (DC2)
+0x13 0x0013 # DEVICE CONTROL THREE (DC3)
+0x14 0x0014 # DEVICE CONTROL FOUR (DC4)
+0x15 0x0015 # NEGATIVE ACKNOWLEDGE (NAK)
+0x16 0x0016 # SYNCRONOUS IDLE (SYN)
+0x17 0x0017 # END OF TRANSMISSION BLOCK (ETB)
+0x18 0x0018 # CANCEL (CAN)
+0x19 0x0019 # END OF MEDIUM (EM)
+0x1A 0x001A # SUBSTITUTE (SUB)
+0x1B 0x001B # ESCAPE (ESC)
+0x1C 0x001C # FILE SEPARATOR (IS4)
+0x1D 0x001D # GROUP SEPARATOR (IS3)
+0x1E 0x001E # RECORD SEPARATOR (IS2)
+0x1F 0x001F # UNIT SEPARATOR (IS1)
+0x20 0x0020 # SPACE
+0x21 0x0021 # EXCLAMATION MARK
+0x22 0x0022 # QUOTATION MARK
+0x23 0x0023 # NUMBER SIGN
+0x24 0x00A4 # CURRENCY SIGN
+0x25 0x0025 # PERCENT SIGN
+0x26 0x0026 # AMPERSAND
+0x27 0x0027 # APOSTROPHE
+0x28 0x0028 # LEFT PARENTHESIS
+0x29 0x0029 # RIGHT PARENTHESIS
+0x2A 0x002A # ASTERISK
+0x2B 0x002B # PLUS SIGN
+0x2C 0x002C # COMMA
+0x2D 0x002D # HYPHEN-MINUS
+0x2E 0x002E # FULL STOP
+0x2F 0x002F # SOLIDUS
+0x30 0x0030 # DIGIT ZERO
+0x31 0x0031 # DIGIT ONE
+0x32 0x0032 # DIGIT TWO
+0x33 0x0033 # DIGIT THREE
+0x34 0x0034 # DIGIT FOUR
+0x35 0x0035 # DIGIT FIVE
+0x36 0x0036 # DIGIT SIX
+0x37 0x0037 # DIGIT SEVEN
+0x38 0x0038 # DIGIT EIGHT
+0x39 0x0039 # DIGIT NINE
+0x3A 0x003A # COLON
+0x3B 0x003B # SEMICOLON
+0x3C 0x003C # LESS-THAN SIGN
+0x3D 0x003D # EQUALS SIGN
+0x3E 0x003E # GREATER-THAN SIGN
+0x3F 0x003F # QUESTION MARK
+0x40 0x00C9 # LATIN CAPITAL LETTER E WITH ACUTE
+0x41 0x0041 # LATIN CAPITAL LETTER A
+0x42 0x0042 # LATIN CAPITAL LETTER B
+0x43 0x0043 # LATIN CAPITAL LETTER C
+0x44 0x0044 # LATIN CAPITAL LETTER D
+0x45 0x0045 # LATIN CAPITAL LETTER E
+0x46 0x0046 # LATIN CAPITAL LETTER F
+0x47 0x0047 # LATIN CAPITAL LETTER G
+0x48 0x0048 # LATIN CAPITAL LETTER H
+0x49 0x0049 # LATIN CAPITAL LETTER I
+0x4A 0x004A # LATIN CAPITAL LETTER J
+0x4B 0x004B # LATIN CAPITAL LETTER K
+0x4C 0x004C # LATIN CAPITAL LETTER L
+0x4D 0x004D # LATIN CAPITAL LETTER M
+0x4E 0x004E # LATIN CAPITAL LETTER N
+0x4F 0x004F # LATIN CAPITAL LETTER O
+0x50 0x0050 # LATIN CAPITAL LETTER P
+0x51 0x0051 # LATIN CAPITAL LETTER Q
+0x52 0x0052 # LATIN CAPITAL LETTER R
+0x53 0x0053 # LATIN CAPITAL LETTER S
+0x54 0x0054 # LATIN CAPITAL LETTER T
+0x55 0x0055 # LATIN CAPITAL LETTER U
+0x56 0x0056 # LATIN CAPITAL LETTER V
+0x57 0x0057 # LATIN CAPITAL LETTER W
+0x58 0x0058 # LATIN CAPITAL LETTER X
+0x59 0x0059 # LATIN CAPITAL LETTER Y
+0x5A 0x005A # LATIN CAPITAL LETTER Z
+0x5B 0x00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS
+0x5C 0x00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS
+0x5D 0x00C5 # LATIN CAPITAL LETTER A WITH RING ABOVE
+0x5E 0x00DC # LATIN CAPITAL LETTER U WITH DIAERESIS
+0x5F 0x005F # LOW LINE
+0x60 0x00E9 # LATIN SMALL LETTER E WITH ACUTE
+0x61 0x0061 # LATIN SMALL LETTER A
+0x62 0x0062 # LATIN SMALL LETTER B
+0x63 0x0063 # LATIN SMALL LETTER C
+0x64 0x0064 # LATIN SMALL LETTER D
+0x65 0x0065 # LATIN SMALL LETTER E
+0x66 0x0066 # LATIN SMALL LETTER F
+0x67 0x0067 # LATIN SMALL LETTER G
+0x68 0x0068 # LATIN SMALL LETTER H
+0x69 0x0069 # LATIN SMALL LETTER I
+0x6A 0x006A # LATIN SMALL LETTER J
+0x6B 0x006B # LATIN SMALL LETTER K
+0x6C 0x006C # LATIN SMALL LETTER L
+0x6D 0x006D # LATIN SMALL LETTER M
+0x6E 0x006E # LATIN SMALL LETTER N
+0x6F 0x006F # LATIN SMALL LETTER O
+0x70 0x0070 # LATIN SMALL LETTER P
+0x71 0x0071 # LATIN SMALL LETTER Q
+0x72 0x0072 # LATIN SMALL LETTER R
+0x73 0x0073 # LATIN SMALL LETTER S
+0x74 0x0074 # LATIN SMALL LETTER T
+0x75 0x0075 # LATIN SMALL LETTER U
+0x76 0x0076 # LATIN SMALL LETTER V
+0x77 0x0077 # LATIN SMALL LETTER W
+0x78 0x0078 # LATIN SMALL LETTER X
+0x79 0x0079 # LATIN SMALL LETTER Y
+0x7A 0x007A # LATIN SMALL LETTER Z
+0x7B 0x00E4 # LATIN SMALL LETTER A WITH DIAERESIS
+0x7C 0x00F6 # LATIN SMALL LETTER O WITH DIAERESIS
+0x7D 0x00E5 # LATIN SMALL LETTER A WITH RING ABOVE
+0x7E 0x00FC # LATIN SMALL LETTER U WITH DIAERESIS
+0x7F 0x007F # DELETE (DEL)
diff --git a/externals/figlet/fonts/646-yu.flc b/externals/figlet/fonts/646-yu.flc
new file mode 100644
index 000000000..6307a6aff
--- /dev/null
+++ b/externals/figlet/fonts/646-yu.flc
@@ -0,0 +1,157 @@
+#
+# Name: JUS_I.B1.002 to Unicode
+# Unicode version: 2.0
+# Table version: 0.1
+# Table format: Format A
+# Date: 0097-01-24
+# Authors: John Cowan <cowan@ccil.org> (conversion)
+# Keld Simonsen <Keld.Simonsen@dkuug.dk> (RFC 1345)
+#
+# General notes:
+#
+# This table contains data obtained from RFC 1345 on how
+# JUS_I.B1.002 characters map into Unicode.
+#
+# Format: Three tab-separated columns
+# Column #1 is the JUS_I.B1.002 code (in hex as 0xXX)
+# Column #2 is the Unicode (in hex as 0xXXXX)
+# Column #3 the Unicode name (follows a comment sign, '#')
+#
+# The entries are in JUS_I.B1.002 order
+#
+# Any comments or problems, contact <cowan@ccil.org>
+#
+# &rem source: ECMA registry
+# &alias iso-ir-141
+# &g0esc x287a &g1esc x297a &g2esc x2a7a &g3esc x2b7a
+# &alias ISO646-YU
+# &alias js
+# &alias yu
+0x00 0x0000 # NULL (NUL)
+0x01 0x0001 # START OF HEADING (SOH)
+0x02 0x0002 # START OF TEXT (STX)
+0x03 0x0003 # END OF TEXT (ETX)
+0x04 0x0004 # END OF TRANSMISSION (EOT)
+0x05 0x0005 # ENQUIRY (ENQ)
+0x06 0x0006 # ACKNOWLEDGE (ACK)
+0x07 0x0007 # BELL (BEL)
+0x08 0x0008 # BACKSPACE (BS)
+0x09 0x0009 # CHARACTER TABULATION (HT)
+0x0A 0x000A # LINE FEED (LF)
+0x0B 0x000B # LINE TABULATION (VT)
+0x0C 0x000C # FORM FEED (FF)
+0x0D 0x000D # CARRIAGE RETURN (CR)
+0x0E 0x000E # SHIFT OUT (SO)
+0x0F 0x000F # SHIFT IN (SI)
+0x10 0x0010 # DATALINK ESCAPE (DLE)
+0x11 0x0011 # DEVICE CONTROL ONE (DC1)
+0x12 0x0012 # DEVICE CONTROL TWO (DC2)
+0x13 0x0013 # DEVICE CONTROL THREE (DC3)
+0x14 0x0014 # DEVICE CONTROL FOUR (DC4)
+0x15 0x0015 # NEGATIVE ACKNOWLEDGE (NAK)
+0x16 0x0016 # SYNCRONOUS IDLE (SYN)
+0x17 0x0017 # END OF TRANSMISSION BLOCK (ETB)
+0x18 0x0018 # CANCEL (CAN)
+0x19 0x0019 # END OF MEDIUM (EM)
+0x1A 0x001A # SUBSTITUTE (SUB)
+0x1B 0x001B # ESCAPE (ESC)
+0x1C 0x001C # FILE SEPARATOR (IS4)
+0x1D 0x001D # GROUP SEPARATOR (IS3)
+0x1E 0x001E # RECORD SEPARATOR (IS2)
+0x1F 0x001F # UNIT SEPARATOR (IS1)
+0x20 0x0020 # SPACE
+0x21 0x0021 # EXCLAMATION MARK
+0x22 0x0022 # QUOTATION MARK
+0x23 0x0023 # NUMBER SIGN
+0x24 0x0024 # DOLLAR SIGN
+0x25 0x0025 # PERCENT SIGN
+0x26 0x0026 # AMPERSAND
+0x27 0x0027 # APOSTROPHE
+0x28 0x0028 # LEFT PARENTHESIS
+0x29 0x0029 # RIGHT PARENTHESIS
+0x2A 0x002A # ASTERISK
+0x2B 0x002B # PLUS SIGN
+0x2C 0x002C # COMMA
+0x2D 0x002D # HYPHEN-MINUS
+0x2E 0x002E # FULL STOP
+0x2F 0x002F # SOLIDUS
+0x30 0x0030 # DIGIT ZERO
+0x31 0x0031 # DIGIT ONE
+0x32 0x0032 # DIGIT TWO
+0x33 0x0033 # DIGIT THREE
+0x34 0x0034 # DIGIT FOUR
+0x35 0x0035 # DIGIT FIVE
+0x36 0x0036 # DIGIT SIX
+0x37 0x0037 # DIGIT SEVEN
+0x38 0x0038 # DIGIT EIGHT
+0x39 0x0039 # DIGIT NINE
+0x3A 0x003A # COLON
+0x3B 0x003B # SEMICOLON
+0x3C 0x003C # LESS-THAN SIGN
+0x3D 0x003D # EQUALS SIGN
+0x3E 0x003E # GREATER-THAN SIGN
+0x3F 0x003F # QUESTION MARK
+0x40 0x017D # LATIN CAPITAL LETTER Z WITH CARON
+0x41 0x0041 # LATIN CAPITAL LETTER A
+0x42 0x0042 # LATIN CAPITAL LETTER B
+0x43 0x0043 # LATIN CAPITAL LETTER C
+0x44 0x0044 # LATIN CAPITAL LETTER D
+0x45 0x0045 # LATIN CAPITAL LETTER E
+0x46 0x0046 # LATIN CAPITAL LETTER F
+0x47 0x0047 # LATIN CAPITAL LETTER G
+0x48 0x0048 # LATIN CAPITAL LETTER H
+0x49 0x0049 # LATIN CAPITAL LETTER I
+0x4A 0x004A # LATIN CAPITAL LETTER J
+0x4B 0x004B # LATIN CAPITAL LETTER K
+0x4C 0x004C # LATIN CAPITAL LETTER L
+0x4D 0x004D # LATIN CAPITAL LETTER M
+0x4E 0x004E # LATIN CAPITAL LETTER N
+0x4F 0x004F # LATIN CAPITAL LETTER O
+0x50 0x0050 # LATIN CAPITAL LETTER P
+0x51 0x0051 # LATIN CAPITAL LETTER Q
+0x52 0x0052 # LATIN CAPITAL LETTER R
+0x53 0x0053 # LATIN CAPITAL LETTER S
+0x54 0x0054 # LATIN CAPITAL LETTER T
+0x55 0x0055 # LATIN CAPITAL LETTER U
+0x56 0x0056 # LATIN CAPITAL LETTER V
+0x57 0x0057 # LATIN CAPITAL LETTER W
+0x58 0x0058 # LATIN CAPITAL LETTER X
+0x59 0x0059 # LATIN CAPITAL LETTER Y
+0x5A 0x005A # LATIN CAPITAL LETTER Z
+0x5B 0x0160 # LATIN CAPITAL LETTER S WITH CARON
+0x5C 0x0110 # LATIN CAPITAL LETTER D WITH STROKE
+0x5D 0x0106 # LATIN CAPITAL LETTER C WITH ACUTE
+0x5E 0x010C # LATIN CAPITAL LETTER C WITH CARON
+0x5F 0x005F # LOW LINE
+0x60 0x017E # LATIN SMALL LETTER Z WITH CARON
+0x61 0x0061 # LATIN SMALL LETTER A
+0x62 0x0062 # LATIN SMALL LETTER B
+0x63 0x0063 # LATIN SMALL LETTER C
+0x64 0x0064 # LATIN SMALL LETTER D
+0x65 0x0065 # LATIN SMALL LETTER E
+0x66 0x0066 # LATIN SMALL LETTER F
+0x67 0x0067 # LATIN SMALL LETTER G
+0x68 0x0068 # LATIN SMALL LETTER H
+0x69 0x0069 # LATIN SMALL LETTER I
+0x6A 0x006A # LATIN SMALL LETTER J
+0x6B 0x006B # LATIN SMALL LETTER K
+0x6C 0x006C # LATIN SMALL LETTER L
+0x6D 0x006D # LATIN SMALL LETTER M
+0x6E 0x006E # LATIN SMALL LETTER N
+0x6F 0x006F # LATIN SMALL LETTER O
+0x70 0x0070 # LATIN SMALL LETTER P
+0x71 0x0071 # LATIN SMALL LETTER Q
+0x72 0x0072 # LATIN SMALL LETTER R
+0x73 0x0073 # LATIN SMALL LETTER S
+0x74 0x0074 # LATIN SMALL LETTER T
+0x75 0x0075 # LATIN SMALL LETTER U
+0x76 0x0076 # LATIN SMALL LETTER V
+0x77 0x0077 # LATIN SMALL LETTER W
+0x78 0x0078 # LATIN SMALL LETTER X
+0x79 0x0079 # LATIN SMALL LETTER Y
+0x7A 0x007A # LATIN SMALL LETTER Z
+0x7B 0x0161 # LATIN SMALL LETTER S WITH CARON
+0x7C 0x0111 # LATIN SMALL LETTER D WITH STROKE
+0x7D 0x0107 # LATIN SMALL LETTER C WITH ACUTE
+0x7E 0x010D # LATIN SMALL LETTER C WITH CARON
+0x7F 0x007F # DELETE (DEL)
diff --git a/externals/figlet/fonts/8859-2.flc b/externals/figlet/fonts/8859-2.flc
new file mode 100644
index 000000000..e45df25eb
--- /dev/null
+++ b/externals/figlet/fonts/8859-2.flc
@@ -0,0 +1,303 @@
+#
+# Name: ISO 8859-2:1999 to Unicode
+# Unicode version: 3.0
+# Table version: 1.0
+# Table format: Format A
+# Date: 1999 July 27
+# Authors: Ken Whistler <kenw@sybase.com>
+#
+# Copyright (c) 1991-1999 Unicode, Inc. All Rights reserved.
+#
+# This file is provided as-is by Unicode, Inc. (The Unicode Consortium).
+# No claims are made as to fitness for any particular purpose. No
+# warranties of any kind are expressed or implied. The recipient
+# agrees to determine applicability of information provided. If this
+# file has been provided on optical media by Unicode, Inc., the sole
+# remedy for any claim will be exchange of defective media within 90
+# days of receipt.
+#
+# Unicode, Inc. hereby grants the right to freely use the information
+# supplied in this file in the creation of products supporting the
+# Unicode Standard, and to make copies of this file in any form for
+# internal or external distribution as long as this notice remains
+# attached.
+#
+# General notes:
+#
+# This table contains the data the Unicode Consortium has on how
+# ISO/IEC 8859-2:1999 characters map into Unicode.
+#
+# Format: Three tab-separated columns
+# Column #1 is the ISO/IEC 8859-2 code (in hex as 0xXX)
+# Column #2 is the Unicode (in hex as 0xXXXX)
+# Column #3 the Unicode name (follows a comment sign, '#')
+#
+# The entries are in ISO/IEC 8859-2 order.
+#
+# Version history
+# 1.0 version updates 0.1 version by adding mappings for all
+# control characters.
+#
+# Updated versions of this file may be found in:
+# <ftp://ftp.unicode.org/Public/MAPPINGS/>
+#
+# Any comments or problems, contact <errata@unicode.org>
+# Please note that <errata@unicode.org> is an archival address;
+# notices will be checked, but do not expect an immediate response.
+#
+0x00 0x0000 # NULL
+0x01 0x0001 # START OF HEADING
+0x02 0x0002 # START OF TEXT
+0x03 0x0003 # END OF TEXT
+0x04 0x0004 # END OF TRANSMISSION
+0x05 0x0005 # ENQUIRY
+0x06 0x0006 # ACKNOWLEDGE
+0x07 0x0007 # BELL
+0x08 0x0008 # BACKSPACE
+0x09 0x0009 # HORIZONTAL TABULATION
+0x0A 0x000A # LINE FEED
+0x0B 0x000B # VERTICAL TABULATION
+0x0C 0x000C # FORM FEED
+0x0D 0x000D # CARRIAGE RETURN
+0x0E 0x000E # SHIFT OUT
+0x0F 0x000F # SHIFT IN
+0x10 0x0010 # DATA LINK ESCAPE
+0x11 0x0011 # DEVICE CONTROL ONE
+0x12 0x0012 # DEVICE CONTROL TWO
+0x13 0x0013 # DEVICE CONTROL THREE
+0x14 0x0014 # DEVICE CONTROL FOUR
+0x15 0x0015 # NEGATIVE ACKNOWLEDGE
+0x16 0x0016 # SYNCHRONOUS IDLE
+0x17 0x0017 # END OF TRANSMISSION BLOCK
+0x18 0x0018 # CANCEL
+0x19 0x0019 # END OF MEDIUM
+0x1A 0x001A # SUBSTITUTE
+0x1B 0x001B # ESCAPE
+0x1C 0x001C # FILE SEPARATOR
+0x1D 0x001D # GROUP SEPARATOR
+0x1E 0x001E # RECORD SEPARATOR
+0x1F 0x001F # UNIT SEPARATOR
+0x20 0x0020 # SPACE
+0x21 0x0021 # EXCLAMATION MARK
+0x22 0x0022 # QUOTATION MARK
+0x23 0x0023 # NUMBER SIGN
+0x24 0x0024 # DOLLAR SIGN
+0x25 0x0025 # PERCENT SIGN
+0x26 0x0026 # AMPERSAND
+0x27 0x0027 # APOSTROPHE
+0x28 0x0028 # LEFT PARENTHESIS
+0x29 0x0029 # RIGHT PARENTHESIS
+0x2A 0x002A # ASTERISK
+0x2B 0x002B # PLUS SIGN
+0x2C 0x002C # COMMA
+0x2D 0x002D # HYPHEN-MINUS
+0x2E 0x002E # FULL STOP
+0x2F 0x002F # SOLIDUS
+0x30 0x0030 # DIGIT ZERO
+0x31 0x0031 # DIGIT ONE
+0x32 0x0032 # DIGIT TWO
+0x33 0x0033 # DIGIT THREE
+0x34 0x0034 # DIGIT FOUR
+0x35 0x0035 # DIGIT FIVE
+0x36 0x0036 # DIGIT SIX
+0x37 0x0037 # DIGIT SEVEN
+0x38 0x0038 # DIGIT EIGHT
+0x39 0x0039 # DIGIT NINE
+0x3A 0x003A # COLON
+0x3B 0x003B # SEMICOLON
+0x3C 0x003C # LESS-THAN SIGN
+0x3D 0x003D # EQUALS SIGN
+0x3E 0x003E # GREATER-THAN SIGN
+0x3F 0x003F # QUESTION MARK
+0x40 0x0040 # COMMERCIAL AT
+0x41 0x0041 # LATIN CAPITAL LETTER A
+0x42 0x0042 # LATIN CAPITAL LETTER B
+0x43 0x0043 # LATIN CAPITAL LETTER C
+0x44 0x0044 # LATIN CAPITAL LETTER D
+0x45 0x0045 # LATIN CAPITAL LETTER E
+0x46 0x0046 # LATIN CAPITAL LETTER F
+0x47 0x0047 # LATIN CAPITAL LETTER G
+0x48 0x0048 # LATIN CAPITAL LETTER H
+0x49 0x0049 # LATIN CAPITAL LETTER I
+0x4A 0x004A # LATIN CAPITAL LETTER J
+0x4B 0x004B # LATIN CAPITAL LETTER K
+0x4C 0x004C # LATIN CAPITAL LETTER L
+0x4D 0x004D # LATIN CAPITAL LETTER M
+0x4E 0x004E # LATIN CAPITAL LETTER N
+0x4F 0x004F # LATIN CAPITAL LETTER O
+0x50 0x0050 # LATIN CAPITAL LETTER P
+0x51 0x0051 # LATIN CAPITAL LETTER Q
+0x52 0x0052 # LATIN CAPITAL LETTER R
+0x53 0x0053 # LATIN CAPITAL LETTER S
+0x54 0x0054 # LATIN CAPITAL LETTER T
+0x55 0x0055 # LATIN CAPITAL LETTER U
+0x56 0x0056 # LATIN CAPITAL LETTER V
+0x57 0x0057 # LATIN CAPITAL LETTER W
+0x58 0x0058 # LATIN CAPITAL LETTER X
+0x59 0x0059 # LATIN CAPITAL LETTER Y
+0x5A 0x005A # LATIN CAPITAL LETTER Z
+0x5B 0x005B # LEFT SQUARE BRACKET
+0x5C 0x005C # REVERSE SOLIDUS
+0x5D 0x005D # RIGHT SQUARE BRACKET
+0x5E 0x005E # CIRCUMFLEX ACCENT
+0x5F 0x005F # LOW LINE
+0x60 0x0060 # GRAVE ACCENT
+0x61 0x0061 # LATIN SMALL LETTER A
+0x62 0x0062 # LATIN SMALL LETTER B
+0x63 0x0063 # LATIN SMALL LETTER C
+0x64 0x0064 # LATIN SMALL LETTER D
+0x65 0x0065 # LATIN SMALL LETTER E
+0x66 0x0066 # LATIN SMALL LETTER F
+0x67 0x0067 # LATIN SMALL LETTER G
+0x68 0x0068 # LATIN SMALL LETTER H
+0x69 0x0069 # LATIN SMALL LETTER I
+0x6A 0x006A # LATIN SMALL LETTER J
+0x6B 0x006B # LATIN SMALL LETTER K
+0x6C 0x006C # LATIN SMALL LETTER L
+0x6D 0x006D # LATIN SMALL LETTER M
+0x6E 0x006E # LATIN SMALL LETTER N
+0x6F 0x006F # LATIN SMALL LETTER O
+0x70 0x0070 # LATIN SMALL LETTER P
+0x71 0x0071 # LATIN SMALL LETTER Q
+0x72 0x0072 # LATIN SMALL LETTER R
+0x73 0x0073 # LATIN SMALL LETTER S
+0x74 0x0074 # LATIN SMALL LETTER T
+0x75 0x0075 # LATIN SMALL LETTER U
+0x76 0x0076 # LATIN SMALL LETTER V
+0x77 0x0077 # LATIN SMALL LETTER W
+0x78 0x0078 # LATIN SMALL LETTER X
+0x79 0x0079 # LATIN SMALL LETTER Y
+0x7A 0x007A # LATIN SMALL LETTER Z
+0x7B 0x007B # LEFT CURLY BRACKET
+0x7C 0x007C # VERTICAL LINE
+0x7D 0x007D # RIGHT CURLY BRACKET
+0x7E 0x007E # TILDE
+0x7F 0x007F # DELETE
+0x80 0x0080 # <control>
+0x81 0x0081 # <control>
+0x82 0x0082 # <control>
+0x83 0x0083 # <control>
+0x84 0x0084 # <control>
+0x85 0x0085 # <control>
+0x86 0x0086 # <control>
+0x87 0x0087 # <control>
+0x88 0x0088 # <control>
+0x89 0x0089 # <control>
+0x8A 0x008A # <control>
+0x8B 0x008B # <control>
+0x8C 0x008C # <control>
+0x8D 0x008D # <control>
+0x8E 0x008E # <control>
+0x8F 0x008F # <control>
+0x90 0x0090 # <control>
+0x91 0x0091 # <control>
+0x92 0x0092 # <control>
+0x93 0x0093 # <control>
+0x94 0x0094 # <control>
+0x95 0x0095 # <control>
+0x96 0x0096 # <control>
+0x97 0x0097 # <control>
+0x98 0x0098 # <control>
+0x99 0x0099 # <control>
+0x9A 0x009A # <control>
+0x9B 0x009B # <control>
+0x9C 0x009C # <control>
+0x9D 0x009D # <control>
+0x9E 0x009E # <control>
+0x9F 0x009F # <control>
+0xA0 0x00A0 # NO-BREAK SPACE
+0xA1 0x0104 # LATIN CAPITAL LETTER A WITH OGONEK
+0xA2 0x02D8 # BREVE
+0xA3 0x0141 # LATIN CAPITAL LETTER L WITH STROKE
+0xA4 0x00A4 # CURRENCY SIGN
+0xA5 0x013D # LATIN CAPITAL LETTER L WITH CARON
+0xA6 0x015A # LATIN CAPITAL LETTER S WITH ACUTE
+0xA7 0x00A7 # SECTION SIGN
+0xA8 0x00A8 # DIAERESIS
+0xA9 0x0160 # LATIN CAPITAL LETTER S WITH CARON
+0xAA 0x015E # LATIN CAPITAL LETTER S WITH CEDILLA
+0xAB 0x0164 # LATIN CAPITAL LETTER T WITH CARON
+0xAC 0x0179 # LATIN CAPITAL LETTER Z WITH ACUTE
+0xAD 0x00AD # SOFT HYPHEN
+0xAE 0x017D # LATIN CAPITAL LETTER Z WITH CARON
+0xAF 0x017B # LATIN CAPITAL LETTER Z WITH DOT ABOVE
+0xB0 0x00B0 # DEGREE SIGN
+0xB1 0x0105 # LATIN SMALL LETTER A WITH OGONEK
+0xB2 0x02DB # OGONEK
+0xB3 0x0142 # LATIN SMALL LETTER L WITH STROKE
+0xB4 0x00B4 # ACUTE ACCENT
+0xB5 0x013E # LATIN SMALL LETTER L WITH CARON
+0xB6 0x015B # LATIN SMALL LETTER S WITH ACUTE
+0xB7 0x02C7 # CARON
+0xB8 0x00B8 # CEDILLA
+0xB9 0x0161 # LATIN SMALL LETTER S WITH CARON
+0xBA 0x015F # LATIN SMALL LETTER S WITH CEDILLA
+0xBB 0x0165 # LATIN SMALL LETTER T WITH CARON
+0xBC 0x017A # LATIN SMALL LETTER Z WITH ACUTE
+0xBD 0x02DD # DOUBLE ACUTE ACCENT
+0xBE 0x017E # LATIN SMALL LETTER Z WITH CARON
+0xBF 0x017C # LATIN SMALL LETTER Z WITH DOT ABOVE
+0xC0 0x0154 # LATIN CAPITAL LETTER R WITH ACUTE
+0xC1 0x00C1 # LATIN CAPITAL LETTER A WITH ACUTE
+0xC2 0x00C2 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+0xC3 0x0102 # LATIN CAPITAL LETTER A WITH BREVE
+0xC4 0x00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS
+0xC5 0x0139 # LATIN CAPITAL LETTER L WITH ACUTE
+0xC6 0x0106 # LATIN CAPITAL LETTER C WITH ACUTE
+0xC7 0x00C7 # LATIN CAPITAL LETTER C WITH CEDILLA
+0xC8 0x010C # LATIN CAPITAL LETTER C WITH CARON
+0xC9 0x00C9 # LATIN CAPITAL LETTER E WITH ACUTE
+0xCA 0x0118 # LATIN CAPITAL LETTER E WITH OGONEK
+0xCB 0x00CB # LATIN CAPITAL LETTER E WITH DIAERESIS
+0xCC 0x011A # LATIN CAPITAL LETTER E WITH CARON
+0xCD 0x00CD # LATIN CAPITAL LETTER I WITH ACUTE
+0xCE 0x00CE # LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+0xCF 0x010E # LATIN CAPITAL LETTER D WITH CARON
+0xD0 0x0110 # LATIN CAPITAL LETTER D WITH STROKE
+0xD1 0x0143 # LATIN CAPITAL LETTER N WITH ACUTE
+0xD2 0x0147 # LATIN CAPITAL LETTER N WITH CARON
+0xD3 0x00D3 # LATIN CAPITAL LETTER O WITH ACUTE
+0xD4 0x00D4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+0xD5 0x0150 # LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
+0xD6 0x00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS
+0xD7 0x00D7 # MULTIPLICATION SIGN
+0xD8 0x0158 # LATIN CAPITAL LETTER R WITH CARON
+0xD9 0x016E # LATIN CAPITAL LETTER U WITH RING ABOVE
+0xDA 0x00DA # LATIN CAPITAL LETTER U WITH ACUTE
+0xDB 0x0170 # LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
+0xDC 0x00DC # LATIN CAPITAL LETTER U WITH DIAERESIS
+0xDD 0x00DD # LATIN CAPITAL LETTER Y WITH ACUTE
+0xDE 0x0162 # LATIN CAPITAL LETTER T WITH CEDILLA
+0xDF 0x00DF # LATIN SMALL LETTER SHARP S
+0xE0 0x0155 # LATIN SMALL LETTER R WITH ACUTE
+0xE1 0x00E1 # LATIN SMALL LETTER A WITH ACUTE
+0xE2 0x00E2 # LATIN SMALL LETTER A WITH CIRCUMFLEX
+0xE3 0x0103 # LATIN SMALL LETTER A WITH BREVE
+0xE4 0x00E4 # LATIN SMALL LETTER A WITH DIAERESIS
+0xE5 0x013A # LATIN SMALL LETTER L WITH ACUTE
+0xE6 0x0107 # LATIN SMALL LETTER C WITH ACUTE
+0xE7 0x00E7 # LATIN SMALL LETTER C WITH CEDILLA
+0xE8 0x010D # LATIN SMALL LETTER C WITH CARON
+0xE9 0x00E9 # LATIN SMALL LETTER E WITH ACUTE
+0xEA 0x0119 # LATIN SMALL LETTER E WITH OGONEK
+0xEB 0x00EB # LATIN SMALL LETTER E WITH DIAERESIS
+0xEC 0x011B # LATIN SMALL LETTER E WITH CARON
+0xED 0x00ED # LATIN SMALL LETTER I WITH ACUTE
+0xEE 0x00EE # LATIN SMALL LETTER I WITH CIRCUMFLEX
+0xEF 0x010F # LATIN SMALL LETTER D WITH CARON
+0xF0 0x0111 # LATIN SMALL LETTER D WITH STROKE
+0xF1 0x0144 # LATIN SMALL LETTER N WITH ACUTE
+0xF2 0x0148 # LATIN SMALL LETTER N WITH CARON
+0xF3 0x00F3 # LATIN SMALL LETTER O WITH ACUTE
+0xF4 0x00F4 # LATIN SMALL LETTER O WITH CIRCUMFLEX
+0xF5 0x0151 # LATIN SMALL LETTER O WITH DOUBLE ACUTE
+0xF6 0x00F6 # LATIN SMALL LETTER O WITH DIAERESIS
+0xF7 0x00F7 # DIVISION SIGN
+0xF8 0x0159 # LATIN SMALL LETTER R WITH CARON
+0xF9 0x016F # LATIN SMALL LETTER U WITH RING ABOVE
+0xFA 0x00FA # LATIN SMALL LETTER U WITH ACUTE
+0xFB 0x0171 # LATIN SMALL LETTER U WITH DOUBLE ACUTE
+0xFC 0x00FC # LATIN SMALL LETTER U WITH DIAERESIS
+0xFD 0x00FD # LATIN SMALL LETTER Y WITH ACUTE
+0xFE 0x0163 # LATIN SMALL LETTER T WITH CEDILLA
+0xFF 0x02D9 # DOT ABOVE
diff --git a/externals/figlet/fonts/8859-3.flc b/externals/figlet/fonts/8859-3.flc
new file mode 100644
index 000000000..9b6ac69dd
--- /dev/null
+++ b/externals/figlet/fonts/8859-3.flc
@@ -0,0 +1,296 @@
+#
+# Name: ISO/IEC 8859-3:1999 to Unicode
+# Unicode version: 3.0
+# Table version: 1.0
+# Table format: Format A
+# Date: 1999 July 27
+# Authors: Ken Whistler <kenw@sybase.com>
+#
+# Copyright (c) 1991-1999 Unicode, Inc. All Rights reserved.
+#
+# This file is provided as-is by Unicode, Inc. (The Unicode Consortium).
+# No claims are made as to fitness for any particular purpose. No
+# warranties of any kind are expressed or implied. The recipient
+# agrees to determine applicability of information provided. If this
+# file has been provided on optical media by Unicode, Inc., the sole
+# remedy for any claim will be exchange of defective media within 90
+# days of receipt.
+#
+# Unicode, Inc. hereby grants the right to freely use the information
+# supplied in this file in the creation of products supporting the
+# Unicode Standard, and to make copies of this file in any form for
+# internal or external distribution as long as this notice remains
+# attached.
+#
+# General notes:
+#
+# This table contains the data the Unicode Consortium has on how
+# ISO/IEC 8859-3:1999 characters map into Unicode.
+#
+# Format: Three tab-separated columns
+# Column #1 is the ISO/IEC 8859-3 code (in hex as 0xXX)
+# Column #2 is the Unicode (in hex as 0xXXXX)
+# Column #3 the Unicode name (follows a comment sign, '#')
+#
+# The entries are in ISO/IEC 8859-3 order.
+#
+# Version history
+# 1.0 version updates 0.1 version by adding mappings for all
+# control characters.
+#
+# Updated versions of this file may be found in:
+# <ftp://ftp.unicode.org/Public/MAPPINGS/>
+#
+# Any comments or problems, contact <errata@unicode.org>
+# Please note that <errata@unicode.org> is an archival address;
+# notices will be checked, but do not expect an immediate response.
+#
+0x00 0x0000 # NULL
+0x01 0x0001 # START OF HEADING
+0x02 0x0002 # START OF TEXT
+0x03 0x0003 # END OF TEXT
+0x04 0x0004 # END OF TRANSMISSION
+0x05 0x0005 # ENQUIRY
+0x06 0x0006 # ACKNOWLEDGE
+0x07 0x0007 # BELL
+0x08 0x0008 # BACKSPACE
+0x09 0x0009 # HORIZONTAL TABULATION
+0x0A 0x000A # LINE FEED
+0x0B 0x000B # VERTICAL TABULATION
+0x0C 0x000C # FORM FEED
+0x0D 0x000D # CARRIAGE RETURN
+0x0E 0x000E # SHIFT OUT
+0x0F 0x000F # SHIFT IN
+0x10 0x0010 # DATA LINK ESCAPE
+0x11 0x0011 # DEVICE CONTROL ONE
+0x12 0x0012 # DEVICE CONTROL TWO
+0x13 0x0013 # DEVICE CONTROL THREE
+0x14 0x0014 # DEVICE CONTROL FOUR
+0x15 0x0015 # NEGATIVE ACKNOWLEDGE
+0x16 0x0016 # SYNCHRONOUS IDLE
+0x17 0x0017 # END OF TRANSMISSION BLOCK
+0x18 0x0018 # CANCEL
+0x19 0x0019 # END OF MEDIUM
+0x1A 0x001A # SUBSTITUTE
+0x1B 0x001B # ESCAPE
+0x1C 0x001C # FILE SEPARATOR
+0x1D 0x001D # GROUP SEPARATOR
+0x1E 0x001E # RECORD SEPARATOR
+0x1F 0x001F # UNIT SEPARATOR
+0x20 0x0020 # SPACE
+0x21 0x0021 # EXCLAMATION MARK
+0x22 0x0022 # QUOTATION MARK
+0x23 0x0023 # NUMBER SIGN
+0x24 0x0024 # DOLLAR SIGN
+0x25 0x0025 # PERCENT SIGN
+0x26 0x0026 # AMPERSAND
+0x27 0x0027 # APOSTROPHE
+0x28 0x0028 # LEFT PARENTHESIS
+0x29 0x0029 # RIGHT PARENTHESIS
+0x2A 0x002A # ASTERISK
+0x2B 0x002B # PLUS SIGN
+0x2C 0x002C # COMMA
+0x2D 0x002D # HYPHEN-MINUS
+0x2E 0x002E # FULL STOP
+0x2F 0x002F # SOLIDUS
+0x30 0x0030 # DIGIT ZERO
+0x31 0x0031 # DIGIT ONE
+0x32 0x0032 # DIGIT TWO
+0x33 0x0033 # DIGIT THREE
+0x34 0x0034 # DIGIT FOUR
+0x35 0x0035 # DIGIT FIVE
+0x36 0x0036 # DIGIT SIX
+0x37 0x0037 # DIGIT SEVEN
+0x38 0x0038 # DIGIT EIGHT
+0x39 0x0039 # DIGIT NINE
+0x3A 0x003A # COLON
+0x3B 0x003B # SEMICOLON
+0x3C 0x003C # LESS-THAN SIGN
+0x3D 0x003D # EQUALS SIGN
+0x3E 0x003E # GREATER-THAN SIGN
+0x3F 0x003F # QUESTION MARK
+0x40 0x0040 # COMMERCIAL AT
+0x41 0x0041 # LATIN CAPITAL LETTER A
+0x42 0x0042 # LATIN CAPITAL LETTER B
+0x43 0x0043 # LATIN CAPITAL LETTER C
+0x44 0x0044 # LATIN CAPITAL LETTER D
+0x45 0x0045 # LATIN CAPITAL LETTER E
+0x46 0x0046 # LATIN CAPITAL LETTER F
+0x47 0x0047 # LATIN CAPITAL LETTER G
+0x48 0x0048 # LATIN CAPITAL LETTER H
+0x49 0x0049 # LATIN CAPITAL LETTER I
+0x4A 0x004A # LATIN CAPITAL LETTER J
+0x4B 0x004B # LATIN CAPITAL LETTER K
+0x4C 0x004C # LATIN CAPITAL LETTER L
+0x4D 0x004D # LATIN CAPITAL LETTER M
+0x4E 0x004E # LATIN CAPITAL LETTER N
+0x4F 0x004F # LATIN CAPITAL LETTER O
+0x50 0x0050 # LATIN CAPITAL LETTER P
+0x51 0x0051 # LATIN CAPITAL LETTER Q
+0x52 0x0052 # LATIN CAPITAL LETTER R
+0x53 0x0053 # LATIN CAPITAL LETTER S
+0x54 0x0054 # LATIN CAPITAL LETTER T
+0x55 0x0055 # LATIN CAPITAL LETTER U
+0x56 0x0056 # LATIN CAPITAL LETTER V
+0x57 0x0057 # LATIN CAPITAL LETTER W
+0x58 0x0058 # LATIN CAPITAL LETTER X
+0x59 0x0059 # LATIN CAPITAL LETTER Y
+0x5A 0x005A # LATIN CAPITAL LETTER Z
+0x5B 0x005B # LEFT SQUARE BRACKET
+0x5C 0x005C # REVERSE SOLIDUS
+0x5D 0x005D # RIGHT SQUARE BRACKET
+0x5E 0x005E # CIRCUMFLEX ACCENT
+0x5F 0x005F # LOW LINE
+0x60 0x0060 # GRAVE ACCENT
+0x61 0x0061 # LATIN SMALL LETTER A
+0x62 0x0062 # LATIN SMALL LETTER B
+0x63 0x0063 # LATIN SMALL LETTER C
+0x64 0x0064 # LATIN SMALL LETTER D
+0x65 0x0065 # LATIN SMALL LETTER E
+0x66 0x0066 # LATIN SMALL LETTER F
+0x67 0x0067 # LATIN SMALL LETTER G
+0x68 0x0068 # LATIN SMALL LETTER H
+0x69 0x0069 # LATIN SMALL LETTER I
+0x6A 0x006A # LATIN SMALL LETTER J
+0x6B 0x006B # LATIN SMALL LETTER K
+0x6C 0x006C # LATIN SMALL LETTER L
+0x6D 0x006D # LATIN SMALL LETTER M
+0x6E 0x006E # LATIN SMALL LETTER N
+0x6F 0x006F # LATIN SMALL LETTER O
+0x70 0x0070 # LATIN SMALL LETTER P
+0x71 0x0071 # LATIN SMALL LETTER Q
+0x72 0x0072 # LATIN SMALL LETTER R
+0x73 0x0073 # LATIN SMALL LETTER S
+0x74 0x0074 # LATIN SMALL LETTER T
+0x75 0x0075 # LATIN SMALL LETTER U
+0x76 0x0076 # LATIN SMALL LETTER V
+0x77 0x0077 # LATIN SMALL LETTER W
+0x78 0x0078 # LATIN SMALL LETTER X
+0x79 0x0079 # LATIN SMALL LETTER Y
+0x7A 0x007A # LATIN SMALL LETTER Z
+0x7B 0x007B # LEFT CURLY BRACKET
+0x7C 0x007C # VERTICAL LINE
+0x7D 0x007D # RIGHT CURLY BRACKET
+0x7E 0x007E # TILDE
+0x7F 0x007F # DELETE
+0x80 0x0080 # <control>
+0x81 0x0081 # <control>
+0x82 0x0082 # <control>
+0x83 0x0083 # <control>
+0x84 0x0084 # <control>
+0x85 0x0085 # <control>
+0x86 0x0086 # <control>
+0x87 0x0087 # <control>
+0x88 0x0088 # <control>
+0x89 0x0089 # <control>
+0x8A 0x008A # <control>
+0x8B 0x008B # <control>
+0x8C 0x008C # <control>
+0x8D 0x008D # <control>
+0x8E 0x008E # <control>
+0x8F 0x008F # <control>
+0x90 0x0090 # <control>
+0x91 0x0091 # <control>
+0x92 0x0092 # <control>
+0x93 0x0093 # <control>
+0x94 0x0094 # <control>
+0x95 0x0095 # <control>
+0x96 0x0096 # <control>
+0x97 0x0097 # <control>
+0x98 0x0098 # <control>
+0x99 0x0099 # <control>
+0x9A 0x009A # <control>
+0x9B 0x009B # <control>
+0x9C 0x009C # <control>
+0x9D 0x009D # <control>
+0x9E 0x009E # <control>
+0x9F 0x009F # <control>
+0xA0 0x00A0 # NO-BREAK SPACE
+0xA1 0x0126 # LATIN CAPITAL LETTER H WITH STROKE
+0xA2 0x02D8 # BREVE
+0xA3 0x00A3 # POUND SIGN
+0xA4 0x00A4 # CURRENCY SIGN
+0xA6 0x0124 # LATIN CAPITAL LETTER H WITH CIRCUMFLEX
+0xA7 0x00A7 # SECTION SIGN
+0xA8 0x00A8 # DIAERESIS
+0xA9 0x0130 # LATIN CAPITAL LETTER I WITH DOT ABOVE
+0xAA 0x015E # LATIN CAPITAL LETTER S WITH CEDILLA
+0xAB 0x011E # LATIN CAPITAL LETTER G WITH BREVE
+0xAC 0x0134 # LATIN CAPITAL LETTER J WITH CIRCUMFLEX
+0xAD 0x00AD # SOFT HYPHEN
+0xAF 0x017B # LATIN CAPITAL LETTER Z WITH DOT ABOVE
+0xB0 0x00B0 # DEGREE SIGN
+0xB1 0x0127 # LATIN SMALL LETTER H WITH STROKE
+0xB2 0x00B2 # SUPERSCRIPT TWO
+0xB3 0x00B3 # SUPERSCRIPT THREE
+0xB4 0x00B4 # ACUTE ACCENT
+0xB5 0x00B5 # MICRO SIGN
+0xB6 0x0125 # LATIN SMALL LETTER H WITH CIRCUMFLEX
+0xB7 0x00B7 # MIDDLE DOT
+0xB8 0x00B8 # CEDILLA
+0xB9 0x0131 # LATIN SMALL LETTER DOTLESS I
+0xBA 0x015F # LATIN SMALL LETTER S WITH CEDILLA
+0xBB 0x011F # LATIN SMALL LETTER G WITH BREVE
+0xBC 0x0135 # LATIN SMALL LETTER J WITH CIRCUMFLEX
+0xBD 0x00BD # VULGAR FRACTION ONE HALF
+0xBF 0x017C # LATIN SMALL LETTER Z WITH DOT ABOVE
+0xC0 0x00C0 # LATIN CAPITAL LETTER A WITH GRAVE
+0xC1 0x00C1 # LATIN CAPITAL LETTER A WITH ACUTE
+0xC2 0x00C2 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+0xC4 0x00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS
+0xC5 0x010A # LATIN CAPITAL LETTER C WITH DOT ABOVE
+0xC6 0x0108 # LATIN CAPITAL LETTER C WITH CIRCUMFLEX
+0xC7 0x00C7 # LATIN CAPITAL LETTER C WITH CEDILLA
+0xC8 0x00C8 # LATIN CAPITAL LETTER E WITH GRAVE
+0xC9 0x00C9 # LATIN CAPITAL LETTER E WITH ACUTE
+0xCA 0x00CA # LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+0xCB 0x00CB # LATIN CAPITAL LETTER E WITH DIAERESIS
+0xCC 0x00CC # LATIN CAPITAL LETTER I WITH GRAVE
+0xCD 0x00CD # LATIN CAPITAL LETTER I WITH ACUTE
+0xCE 0x00CE # LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+0xCF 0x00CF # LATIN CAPITAL LETTER I WITH DIAERESIS
+0xD1 0x00D1 # LATIN CAPITAL LETTER N WITH TILDE
+0xD2 0x00D2 # LATIN CAPITAL LETTER O WITH GRAVE
+0xD3 0x00D3 # LATIN CAPITAL LETTER O WITH ACUTE
+0xD4 0x00D4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+0xD5 0x0120 # LATIN CAPITAL LETTER G WITH DOT ABOVE
+0xD6 0x00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS
+0xD7 0x00D7 # MULTIPLICATION SIGN
+0xD8 0x011C # LATIN CAPITAL LETTER G WITH CIRCUMFLEX
+0xD9 0x00D9 # LATIN CAPITAL LETTER U WITH GRAVE
+0xDA 0x00DA # LATIN CAPITAL LETTER U WITH ACUTE
+0xDB 0x00DB # LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+0xDC 0x00DC # LATIN CAPITAL LETTER U WITH DIAERESIS
+0xDD 0x016C # LATIN CAPITAL LETTER U WITH BREVE
+0xDE 0x015C # LATIN CAPITAL LETTER S WITH CIRCUMFLEX
+0xDF 0x00DF # LATIN SMALL LETTER SHARP S
+0xE0 0x00E0 # LATIN SMALL LETTER A WITH GRAVE
+0xE1 0x00E1 # LATIN SMALL LETTER A WITH ACUTE
+0xE2 0x00E2 # LATIN SMALL LETTER A WITH CIRCUMFLEX
+0xE4 0x00E4 # LATIN SMALL LETTER A WITH DIAERESIS
+0xE5 0x010B # LATIN SMALL LETTER C WITH DOT ABOVE
+0xE6 0x0109 # LATIN SMALL LETTER C WITH CIRCUMFLEX
+0xE7 0x00E7 # LATIN SMALL LETTER C WITH CEDILLA
+0xE8 0x00E8 # LATIN SMALL LETTER E WITH GRAVE
+0xE9 0x00E9 # LATIN SMALL LETTER E WITH ACUTE
+0xEA 0x00EA # LATIN SMALL LETTER E WITH CIRCUMFLEX
+0xEB 0x00EB # LATIN SMALL LETTER E WITH DIAERESIS
+0xEC 0x00EC # LATIN SMALL LETTER I WITH GRAVE
+0xED 0x00ED # LATIN SMALL LETTER I WITH ACUTE
+0xEE 0x00EE # LATIN SMALL LETTER I WITH CIRCUMFLEX
+0xEF 0x00EF # LATIN SMALL LETTER I WITH DIAERESIS
+0xF1 0x00F1 # LATIN SMALL LETTER N WITH TILDE
+0xF2 0x00F2 # LATIN SMALL LETTER O WITH GRAVE
+0xF3 0x00F3 # LATIN SMALL LETTER O WITH ACUTE
+0xF4 0x00F4 # LATIN SMALL LETTER O WITH CIRCUMFLEX
+0xF5 0x0121 # LATIN SMALL LETTER G WITH DOT ABOVE
+0xF6 0x00F6 # LATIN SMALL LETTER O WITH DIAERESIS
+0xF7 0x00F7 # DIVISION SIGN
+0xF8 0x011D # LATIN SMALL LETTER G WITH CIRCUMFLEX
+0xF9 0x00F9 # LATIN SMALL LETTER U WITH GRAVE
+0xFA 0x00FA # LATIN SMALL LETTER U WITH ACUTE
+0xFB 0x00FB # LATIN SMALL LETTER U WITH CIRCUMFLEX
+0xFC 0x00FC # LATIN SMALL LETTER U WITH DIAERESIS
+0xFD 0x016D # LATIN SMALL LETTER U WITH BREVE
+0xFE 0x015D # LATIN SMALL LETTER S WITH CIRCUMFLEX
+0xFF 0x02D9 # DOT ABOVE
diff --git a/externals/figlet/fonts/8859-4.flc b/externals/figlet/fonts/8859-4.flc
new file mode 100644
index 000000000..662e698ab
--- /dev/null
+++ b/externals/figlet/fonts/8859-4.flc
@@ -0,0 +1,303 @@
+#
+# Name: ISO/IEC 8859-4:1998 to Unicode
+# Unicode version: 3.0
+# Table version: 1.0
+# Table format: Format A
+# Date: 1999 July 27
+# Authors: Ken Whistler <kenw@sybase.com>
+#
+# Copyright (c) 1991-1999 Unicode, Inc. All Rights reserved.
+#
+# This file is provided as-is by Unicode, Inc. (The Unicode Consortium).
+# No claims are made as to fitness for any particular purpose. No
+# warranties of any kind are expressed or implied. The recipient
+# agrees to determine applicability of information provided. If this
+# file has been provided on optical media by Unicode, Inc., the sole
+# remedy for any claim will be exchange of defective media within 90
+# days of receipt.
+#
+# Unicode, Inc. hereby grants the right to freely use the information
+# supplied in this file in the creation of products supporting the
+# Unicode Standard, and to make copies of this file in any form for
+# internal or external distribution as long as this notice remains
+# attached.
+#
+# General notes:
+#
+# This table contains the data the Unicode Consortium has on how
+# ISO/IEC 8859-4:1998 characters map into Unicode.
+#
+# Format: Three tab-separated columns
+# Column #1 is the ISO/IEC 8859-4 code (in hex as 0xXX)
+# Column #2 is the Unicode (in hex as 0xXXXX)
+# Column #3 the Unicode name (follows a comment sign, '#')
+#
+# The entries are in ISO/IEC 8859-4 order.
+#
+# Version history
+# 1.0 version updates 0.1 version by adding mappings for all
+# control characters.
+#
+# Updated versions of this file may be found in:
+# <ftp://ftp.unicode.org/Public/MAPPINGS/>
+#
+# Any comments or problems, contact <errata@unicode.org>
+# Please note that <errata@unicode.org> is an archival address;
+# notices will be checked, but do not expect an immediate response.
+#
+0x00 0x0000 # NULL
+0x01 0x0001 # START OF HEADING
+0x02 0x0002 # START OF TEXT
+0x03 0x0003 # END OF TEXT
+0x04 0x0004 # END OF TRANSMISSION
+0x05 0x0005 # ENQUIRY
+0x06 0x0006 # ACKNOWLEDGE
+0x07 0x0007 # BELL
+0x08 0x0008 # BACKSPACE
+0x09 0x0009 # HORIZONTAL TABULATION
+0x0A 0x000A # LINE FEED
+0x0B 0x000B # VERTICAL TABULATION
+0x0C 0x000C # FORM FEED
+0x0D 0x000D # CARRIAGE RETURN
+0x0E 0x000E # SHIFT OUT
+0x0F 0x000F # SHIFT IN
+0x10 0x0010 # DATA LINK ESCAPE
+0x11 0x0011 # DEVICE CONTROL ONE
+0x12 0x0012 # DEVICE CONTROL TWO
+0x13 0x0013 # DEVICE CONTROL THREE
+0x14 0x0014 # DEVICE CONTROL FOUR
+0x15 0x0015 # NEGATIVE ACKNOWLEDGE
+0x16 0x0016 # SYNCHRONOUS IDLE
+0x17 0x0017 # END OF TRANSMISSION BLOCK
+0x18 0x0018 # CANCEL
+0x19 0x0019 # END OF MEDIUM
+0x1A 0x001A # SUBSTITUTE
+0x1B 0x001B # ESCAPE
+0x1C 0x001C # FILE SEPARATOR
+0x1D 0x001D # GROUP SEPARATOR
+0x1E 0x001E # RECORD SEPARATOR
+0x1F 0x001F # UNIT SEPARATOR
+0x20 0x0020 # SPACE
+0x21 0x0021 # EXCLAMATION MARK
+0x22 0x0022 # QUOTATION MARK
+0x23 0x0023 # NUMBER SIGN
+0x24 0x0024 # DOLLAR SIGN
+0x25 0x0025 # PERCENT SIGN
+0x26 0x0026 # AMPERSAND
+0x27 0x0027 # APOSTROPHE
+0x28 0x0028 # LEFT PARENTHESIS
+0x29 0x0029 # RIGHT PARENTHESIS
+0x2A 0x002A # ASTERISK
+0x2B 0x002B # PLUS SIGN
+0x2C 0x002C # COMMA
+0x2D 0x002D # HYPHEN-MINUS
+0x2E 0x002E # FULL STOP
+0x2F 0x002F # SOLIDUS
+0x30 0x0030 # DIGIT ZERO
+0x31 0x0031 # DIGIT ONE
+0x32 0x0032 # DIGIT TWO
+0x33 0x0033 # DIGIT THREE
+0x34 0x0034 # DIGIT FOUR
+0x35 0x0035 # DIGIT FIVE
+0x36 0x0036 # DIGIT SIX
+0x37 0x0037 # DIGIT SEVEN
+0x38 0x0038 # DIGIT EIGHT
+0x39 0x0039 # DIGIT NINE
+0x3A 0x003A # COLON
+0x3B 0x003B # SEMICOLON
+0x3C 0x003C # LESS-THAN SIGN
+0x3D 0x003D # EQUALS SIGN
+0x3E 0x003E # GREATER-THAN SIGN
+0x3F 0x003F # QUESTION MARK
+0x40 0x0040 # COMMERCIAL AT
+0x41 0x0041 # LATIN CAPITAL LETTER A
+0x42 0x0042 # LATIN CAPITAL LETTER B
+0x43 0x0043 # LATIN CAPITAL LETTER C
+0x44 0x0044 # LATIN CAPITAL LETTER D
+0x45 0x0045 # LATIN CAPITAL LETTER E
+0x46 0x0046 # LATIN CAPITAL LETTER F
+0x47 0x0047 # LATIN CAPITAL LETTER G
+0x48 0x0048 # LATIN CAPITAL LETTER H
+0x49 0x0049 # LATIN CAPITAL LETTER I
+0x4A 0x004A # LATIN CAPITAL LETTER J
+0x4B 0x004B # LATIN CAPITAL LETTER K
+0x4C 0x004C # LATIN CAPITAL LETTER L
+0x4D 0x004D # LATIN CAPITAL LETTER M
+0x4E 0x004E # LATIN CAPITAL LETTER N
+0x4F 0x004F # LATIN CAPITAL LETTER O
+0x50 0x0050 # LATIN CAPITAL LETTER P
+0x51 0x0051 # LATIN CAPITAL LETTER Q
+0x52 0x0052 # LATIN CAPITAL LETTER R
+0x53 0x0053 # LATIN CAPITAL LETTER S
+0x54 0x0054 # LATIN CAPITAL LETTER T
+0x55 0x0055 # LATIN CAPITAL LETTER U
+0x56 0x0056 # LATIN CAPITAL LETTER V
+0x57 0x0057 # LATIN CAPITAL LETTER W
+0x58 0x0058 # LATIN CAPITAL LETTER X
+0x59 0x0059 # LATIN CAPITAL LETTER Y
+0x5A 0x005A # LATIN CAPITAL LETTER Z
+0x5B 0x005B # LEFT SQUARE BRACKET
+0x5C 0x005C # REVERSE SOLIDUS
+0x5D 0x005D # RIGHT SQUARE BRACKET
+0x5E 0x005E # CIRCUMFLEX ACCENT
+0x5F 0x005F # LOW LINE
+0x60 0x0060 # GRAVE ACCENT
+0x61 0x0061 # LATIN SMALL LETTER A
+0x62 0x0062 # LATIN SMALL LETTER B
+0x63 0x0063 # LATIN SMALL LETTER C
+0x64 0x0064 # LATIN SMALL LETTER D
+0x65 0x0065 # LATIN SMALL LETTER E
+0x66 0x0066 # LATIN SMALL LETTER F
+0x67 0x0067 # LATIN SMALL LETTER G
+0x68 0x0068 # LATIN SMALL LETTER H
+0x69 0x0069 # LATIN SMALL LETTER I
+0x6A 0x006A # LATIN SMALL LETTER J
+0x6B 0x006B # LATIN SMALL LETTER K
+0x6C 0x006C # LATIN SMALL LETTER L
+0x6D 0x006D # LATIN SMALL LETTER M
+0x6E 0x006E # LATIN SMALL LETTER N
+0x6F 0x006F # LATIN SMALL LETTER O
+0x70 0x0070 # LATIN SMALL LETTER P
+0x71 0x0071 # LATIN SMALL LETTER Q
+0x72 0x0072 # LATIN SMALL LETTER R
+0x73 0x0073 # LATIN SMALL LETTER S
+0x74 0x0074 # LATIN SMALL LETTER T
+0x75 0x0075 # LATIN SMALL LETTER U
+0x76 0x0076 # LATIN SMALL LETTER V
+0x77 0x0077 # LATIN SMALL LETTER W
+0x78 0x0078 # LATIN SMALL LETTER X
+0x79 0x0079 # LATIN SMALL LETTER Y
+0x7A 0x007A # LATIN SMALL LETTER Z
+0x7B 0x007B # LEFT CURLY BRACKET
+0x7C 0x007C # VERTICAL LINE
+0x7D 0x007D # RIGHT CURLY BRACKET
+0x7E 0x007E # TILDE
+0x7F 0x007F # DELETE
+0x80 0x0080 # <control>
+0x81 0x0081 # <control>
+0x82 0x0082 # <control>
+0x83 0x0083 # <control>
+0x84 0x0084 # <control>
+0x85 0x0085 # <control>
+0x86 0x0086 # <control>
+0x87 0x0087 # <control>
+0x88 0x0088 # <control>
+0x89 0x0089 # <control>
+0x8A 0x008A # <control>
+0x8B 0x008B # <control>
+0x8C 0x008C # <control>
+0x8D 0x008D # <control>
+0x8E 0x008E # <control>
+0x8F 0x008F # <control>
+0x90 0x0090 # <control>
+0x91 0x0091 # <control>
+0x92 0x0092 # <control>
+0x93 0x0093 # <control>
+0x94 0x0094 # <control>
+0x95 0x0095 # <control>
+0x96 0x0096 # <control>
+0x97 0x0097 # <control>
+0x98 0x0098 # <control>
+0x99 0x0099 # <control>
+0x9A 0x009A # <control>
+0x9B 0x009B # <control>
+0x9C 0x009C # <control>
+0x9D 0x009D # <control>
+0x9E 0x009E # <control>
+0x9F 0x009F # <control>
+0xA0 0x00A0 # NO-BREAK SPACE
+0xA1 0x0104 # LATIN CAPITAL LETTER A WITH OGONEK
+0xA2 0x0138 # LATIN SMALL LETTER KRA
+0xA3 0x0156 # LATIN CAPITAL LETTER R WITH CEDILLA
+0xA4 0x00A4 # CURRENCY SIGN
+0xA5 0x0128 # LATIN CAPITAL LETTER I WITH TILDE
+0xA6 0x013B # LATIN CAPITAL LETTER L WITH CEDILLA
+0xA7 0x00A7 # SECTION SIGN
+0xA8 0x00A8 # DIAERESIS
+0xA9 0x0160 # LATIN CAPITAL LETTER S WITH CARON
+0xAA 0x0112 # LATIN CAPITAL LETTER E WITH MACRON
+0xAB 0x0122 # LATIN CAPITAL LETTER G WITH CEDILLA
+0xAC 0x0166 # LATIN CAPITAL LETTER T WITH STROKE
+0xAD 0x00AD # SOFT HYPHEN
+0xAE 0x017D # LATIN CAPITAL LETTER Z WITH CARON
+0xAF 0x00AF # MACRON
+0xB0 0x00B0 # DEGREE SIGN
+0xB1 0x0105 # LATIN SMALL LETTER A WITH OGONEK
+0xB2 0x02DB # OGONEK
+0xB3 0x0157 # LATIN SMALL LETTER R WITH CEDILLA
+0xB4 0x00B4 # ACUTE ACCENT
+0xB5 0x0129 # LATIN SMALL LETTER I WITH TILDE
+0xB6 0x013C # LATIN SMALL LETTER L WITH CEDILLA
+0xB7 0x02C7 # CARON
+0xB8 0x00B8 # CEDILLA
+0xB9 0x0161 # LATIN SMALL LETTER S WITH CARON
+0xBA 0x0113 # LATIN SMALL LETTER E WITH MACRON
+0xBB 0x0123 # LATIN SMALL LETTER G WITH CEDILLA
+0xBC 0x0167 # LATIN SMALL LETTER T WITH STROKE
+0xBD 0x014A # LATIN CAPITAL LETTER ENG
+0xBE 0x017E # LATIN SMALL LETTER Z WITH CARON
+0xBF 0x014B # LATIN SMALL LETTER ENG
+0xC0 0x0100 # LATIN CAPITAL LETTER A WITH MACRON
+0xC1 0x00C1 # LATIN CAPITAL LETTER A WITH ACUTE
+0xC2 0x00C2 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+0xC3 0x00C3 # LATIN CAPITAL LETTER A WITH TILDE
+0xC4 0x00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS
+0xC5 0x00C5 # LATIN CAPITAL LETTER A WITH RING ABOVE
+0xC6 0x00C6 # LATIN CAPITAL LETTER AE
+0xC7 0x012E # LATIN CAPITAL LETTER I WITH OGONEK
+0xC8 0x010C # LATIN CAPITAL LETTER C WITH CARON
+0xC9 0x00C9 # LATIN CAPITAL LETTER E WITH ACUTE
+0xCA 0x0118 # LATIN CAPITAL LETTER E WITH OGONEK
+0xCB 0x00CB # LATIN CAPITAL LETTER E WITH DIAERESIS
+0xCC 0x0116 # LATIN CAPITAL LETTER E WITH DOT ABOVE
+0xCD 0x00CD # LATIN CAPITAL LETTER I WITH ACUTE
+0xCE 0x00CE # LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+0xCF 0x012A # LATIN CAPITAL LETTER I WITH MACRON
+0xD0 0x0110 # LATIN CAPITAL LETTER D WITH STROKE
+0xD1 0x0145 # LATIN CAPITAL LETTER N WITH CEDILLA
+0xD2 0x014C # LATIN CAPITAL LETTER O WITH MACRON
+0xD3 0x0136 # LATIN CAPITAL LETTER K WITH CEDILLA
+0xD4 0x00D4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+0xD5 0x00D5 # LATIN CAPITAL LETTER O WITH TILDE
+0xD6 0x00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS
+0xD7 0x00D7 # MULTIPLICATION SIGN
+0xD8 0x00D8 # LATIN CAPITAL LETTER O WITH STROKE
+0xD9 0x0172 # LATIN CAPITAL LETTER U WITH OGONEK
+0xDA 0x00DA # LATIN CAPITAL LETTER U WITH ACUTE
+0xDB 0x00DB # LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+0xDC 0x00DC # LATIN CAPITAL LETTER U WITH DIAERESIS
+0xDD 0x0168 # LATIN CAPITAL LETTER U WITH TILDE
+0xDE 0x016A # LATIN CAPITAL LETTER U WITH MACRON
+0xDF 0x00DF # LATIN SMALL LETTER SHARP S
+0xE0 0x0101 # LATIN SMALL LETTER A WITH MACRON
+0xE1 0x00E1 # LATIN SMALL LETTER A WITH ACUTE
+0xE2 0x00E2 # LATIN SMALL LETTER A WITH CIRCUMFLEX
+0xE3 0x00E3 # LATIN SMALL LETTER A WITH TILDE
+0xE4 0x00E4 # LATIN SMALL LETTER A WITH DIAERESIS
+0xE5 0x00E5 # LATIN SMALL LETTER A WITH RING ABOVE
+0xE6 0x00E6 # LATIN SMALL LETTER AE
+0xE7 0x012F # LATIN SMALL LETTER I WITH OGONEK
+0xE8 0x010D # LATIN SMALL LETTER C WITH CARON
+0xE9 0x00E9 # LATIN SMALL LETTER E WITH ACUTE
+0xEA 0x0119 # LATIN SMALL LETTER E WITH OGONEK
+0xEB 0x00EB # LATIN SMALL LETTER E WITH DIAERESIS
+0xEC 0x0117 # LATIN SMALL LETTER E WITH DOT ABOVE
+0xED 0x00ED # LATIN SMALL LETTER I WITH ACUTE
+0xEE 0x00EE # LATIN SMALL LETTER I WITH CIRCUMFLEX
+0xEF 0x012B # LATIN SMALL LETTER I WITH MACRON
+0xF0 0x0111 # LATIN SMALL LETTER D WITH STROKE
+0xF1 0x0146 # LATIN SMALL LETTER N WITH CEDILLA
+0xF2 0x014D # LATIN SMALL LETTER O WITH MACRON
+0xF3 0x0137 # LATIN SMALL LETTER K WITH CEDILLA
+0xF4 0x00F4 # LATIN SMALL LETTER O WITH CIRCUMFLEX
+0xF5 0x00F5 # LATIN SMALL LETTER O WITH TILDE
+0xF6 0x00F6 # LATIN SMALL LETTER O WITH DIAERESIS
+0xF7 0x00F7 # DIVISION SIGN
+0xF8 0x00F8 # LATIN SMALL LETTER O WITH STROKE
+0xF9 0x0173 # LATIN SMALL LETTER U WITH OGONEK
+0xFA 0x00FA # LATIN SMALL LETTER U WITH ACUTE
+0xFB 0x00FB # LATIN SMALL LETTER U WITH CIRCUMFLEX
+0xFC 0x00FC # LATIN SMALL LETTER U WITH DIAERESIS
+0xFD 0x0169 # LATIN SMALL LETTER U WITH TILDE
+0xFE 0x016B # LATIN SMALL LETTER U WITH MACRON
+0xFF 0x02D9 # DOT ABOVE
diff --git a/externals/figlet/fonts/8859-5.flc b/externals/figlet/fonts/8859-5.flc
new file mode 100644
index 000000000..a7ed1ce2a
--- /dev/null
+++ b/externals/figlet/fonts/8859-5.flc
@@ -0,0 +1,303 @@
+#
+# Name: ISO 8859-5:1999 to Unicode
+# Unicode version: 3.0
+# Table version: 1.0
+# Table format: Format A
+# Date: 1999 July 27
+# Authors: Ken Whistler <kenw@sybase.com>
+#
+# Copyright (c) 1991-1999 Unicode, Inc. All Rights reserved.
+#
+# This file is provided as-is by Unicode, Inc. (The Unicode Consortium).
+# No claims are made as to fitness for any particular purpose. No
+# warranties of any kind are expressed or implied. The recipient
+# agrees to determine applicability of information provided. If this
+# file has been provided on optical media by Unicode, Inc., the sole
+# remedy for any claim will be exchange of defective media within 90
+# days of receipt.
+#
+# Unicode, Inc. hereby grants the right to freely use the information
+# supplied in this file in the creation of products supporting the
+# Unicode Standard, and to make copies of this file in any form for
+# internal or external distribution as long as this notice remains
+# attached.
+#
+# General notes:
+#
+# This table contains the data the Unicode Consortium has on how
+# ISO/IEC 8859-5:1999 characters map into Unicode.
+#
+# Format: Three tab-separated columns
+# Column #1 is the ISO/IEC 8859-5 code (in hex as 0xXX)
+# Column #2 is the Unicode (in hex as 0xXXXX)
+# Column #3 the Unicode name (follows a comment sign, '#')
+#
+# The entries are in ISO/IEC 8859-5 order.
+#
+# Version history
+# 1.0 version updates 0.1 version by adding mappings for all
+# control characters.
+#
+# Updated versions of this file may be found in:
+# <ftp://ftp.unicode.org/Public/MAPPINGS/>
+#
+# Any comments or problems, contact <errata@unicode.org>
+# Please note that <errata@unicode.org> is an archival address;
+# notices will be checked, but do not expect an immediate response.
+#
+0x00 0x0000 # NULL
+0x01 0x0001 # START OF HEADING
+0x02 0x0002 # START OF TEXT
+0x03 0x0003 # END OF TEXT
+0x04 0x0004 # END OF TRANSMISSION
+0x05 0x0005 # ENQUIRY
+0x06 0x0006 # ACKNOWLEDGE
+0x07 0x0007 # BELL
+0x08 0x0008 # BACKSPACE
+0x09 0x0009 # HORIZONTAL TABULATION
+0x0A 0x000A # LINE FEED
+0x0B 0x000B # VERTICAL TABULATION
+0x0C 0x000C # FORM FEED
+0x0D 0x000D # CARRIAGE RETURN
+0x0E 0x000E # SHIFT OUT
+0x0F 0x000F # SHIFT IN
+0x10 0x0010 # DATA LINK ESCAPE
+0x11 0x0011 # DEVICE CONTROL ONE
+0x12 0x0012 # DEVICE CONTROL TWO
+0x13 0x0013 # DEVICE CONTROL THREE
+0x14 0x0014 # DEVICE CONTROL FOUR
+0x15 0x0015 # NEGATIVE ACKNOWLEDGE
+0x16 0x0016 # SYNCHRONOUS IDLE
+0x17 0x0017 # END OF TRANSMISSION BLOCK
+0x18 0x0018 # CANCEL
+0x19 0x0019 # END OF MEDIUM
+0x1A 0x001A # SUBSTITUTE
+0x1B 0x001B # ESCAPE
+0x1C 0x001C # FILE SEPARATOR
+0x1D 0x001D # GROUP SEPARATOR
+0x1E 0x001E # RECORD SEPARATOR
+0x1F 0x001F # UNIT SEPARATOR
+0x20 0x0020 # SPACE
+0x21 0x0021 # EXCLAMATION MARK
+0x22 0x0022 # QUOTATION MARK
+0x23 0x0023 # NUMBER SIGN
+0x24 0x0024 # DOLLAR SIGN
+0x25 0x0025 # PERCENT SIGN
+0x26 0x0026 # AMPERSAND
+0x27 0x0027 # APOSTROPHE
+0x28 0x0028 # LEFT PARENTHESIS
+0x29 0x0029 # RIGHT PARENTHESIS
+0x2A 0x002A # ASTERISK
+0x2B 0x002B # PLUS SIGN
+0x2C 0x002C # COMMA
+0x2D 0x002D # HYPHEN-MINUS
+0x2E 0x002E # FULL STOP
+0x2F 0x002F # SOLIDUS
+0x30 0x0030 # DIGIT ZERO
+0x31 0x0031 # DIGIT ONE
+0x32 0x0032 # DIGIT TWO
+0x33 0x0033 # DIGIT THREE
+0x34 0x0034 # DIGIT FOUR
+0x35 0x0035 # DIGIT FIVE
+0x36 0x0036 # DIGIT SIX
+0x37 0x0037 # DIGIT SEVEN
+0x38 0x0038 # DIGIT EIGHT
+0x39 0x0039 # DIGIT NINE
+0x3A 0x003A # COLON
+0x3B 0x003B # SEMICOLON
+0x3C 0x003C # LESS-THAN SIGN
+0x3D 0x003D # EQUALS SIGN
+0x3E 0x003E # GREATER-THAN SIGN
+0x3F 0x003F # QUESTION MARK
+0x40 0x0040 # COMMERCIAL AT
+0x41 0x0041 # LATIN CAPITAL LETTER A
+0x42 0x0042 # LATIN CAPITAL LETTER B
+0x43 0x0043 # LATIN CAPITAL LETTER C
+0x44 0x0044 # LATIN CAPITAL LETTER D
+0x45 0x0045 # LATIN CAPITAL LETTER E
+0x46 0x0046 # LATIN CAPITAL LETTER F
+0x47 0x0047 # LATIN CAPITAL LETTER G
+0x48 0x0048 # LATIN CAPITAL LETTER H
+0x49 0x0049 # LATIN CAPITAL LETTER I
+0x4A 0x004A # LATIN CAPITAL LETTER J
+0x4B 0x004B # LATIN CAPITAL LETTER K
+0x4C 0x004C # LATIN CAPITAL LETTER L
+0x4D 0x004D # LATIN CAPITAL LETTER M
+0x4E 0x004E # LATIN CAPITAL LETTER N
+0x4F 0x004F # LATIN CAPITAL LETTER O
+0x50 0x0050 # LATIN CAPITAL LETTER P
+0x51 0x0051 # LATIN CAPITAL LETTER Q
+0x52 0x0052 # LATIN CAPITAL LETTER R
+0x53 0x0053 # LATIN CAPITAL LETTER S
+0x54 0x0054 # LATIN CAPITAL LETTER T
+0x55 0x0055 # LATIN CAPITAL LETTER U
+0x56 0x0056 # LATIN CAPITAL LETTER V
+0x57 0x0057 # LATIN CAPITAL LETTER W
+0x58 0x0058 # LATIN CAPITAL LETTER X
+0x59 0x0059 # LATIN CAPITAL LETTER Y
+0x5A 0x005A # LATIN CAPITAL LETTER Z
+0x5B 0x005B # LEFT SQUARE BRACKET
+0x5C 0x005C # REVERSE SOLIDUS
+0x5D 0x005D # RIGHT SQUARE BRACKET
+0x5E 0x005E # CIRCUMFLEX ACCENT
+0x5F 0x005F # LOW LINE
+0x60 0x0060 # GRAVE ACCENT
+0x61 0x0061 # LATIN SMALL LETTER A
+0x62 0x0062 # LATIN SMALL LETTER B
+0x63 0x0063 # LATIN SMALL LETTER C
+0x64 0x0064 # LATIN SMALL LETTER D
+0x65 0x0065 # LATIN SMALL LETTER E
+0x66 0x0066 # LATIN SMALL LETTER F
+0x67 0x0067 # LATIN SMALL LETTER G
+0x68 0x0068 # LATIN SMALL LETTER H
+0x69 0x0069 # LATIN SMALL LETTER I
+0x6A 0x006A # LATIN SMALL LETTER J
+0x6B 0x006B # LATIN SMALL LETTER K
+0x6C 0x006C # LATIN SMALL LETTER L
+0x6D 0x006D # LATIN SMALL LETTER M
+0x6E 0x006E # LATIN SMALL LETTER N
+0x6F 0x006F # LATIN SMALL LETTER O
+0x70 0x0070 # LATIN SMALL LETTER P
+0x71 0x0071 # LATIN SMALL LETTER Q
+0x72 0x0072 # LATIN SMALL LETTER R
+0x73 0x0073 # LATIN SMALL LETTER S
+0x74 0x0074 # LATIN SMALL LETTER T
+0x75 0x0075 # LATIN SMALL LETTER U
+0x76 0x0076 # LATIN SMALL LETTER V
+0x77 0x0077 # LATIN SMALL LETTER W
+0x78 0x0078 # LATIN SMALL LETTER X
+0x79 0x0079 # LATIN SMALL LETTER Y
+0x7A 0x007A # LATIN SMALL LETTER Z
+0x7B 0x007B # LEFT CURLY BRACKET
+0x7C 0x007C # VERTICAL LINE
+0x7D 0x007D # RIGHT CURLY BRACKET
+0x7E 0x007E # TILDE
+0x7F 0x007F # DELETE
+0x80 0x0080 # <control>
+0x81 0x0081 # <control>
+0x82 0x0082 # <control>
+0x83 0x0083 # <control>
+0x84 0x0084 # <control>
+0x85 0x0085 # <control>
+0x86 0x0086 # <control>
+0x87 0x0087 # <control>
+0x88 0x0088 # <control>
+0x89 0x0089 # <control>
+0x8A 0x008A # <control>
+0x8B 0x008B # <control>
+0x8C 0x008C # <control>
+0x8D 0x008D # <control>
+0x8E 0x008E # <control>
+0x8F 0x008F # <control>
+0x90 0x0090 # <control>
+0x91 0x0091 # <control>
+0x92 0x0092 # <control>
+0x93 0x0093 # <control>
+0x94 0x0094 # <control>
+0x95 0x0095 # <control>
+0x96 0x0096 # <control>
+0x97 0x0097 # <control>
+0x98 0x0098 # <control>
+0x99 0x0099 # <control>
+0x9A 0x009A # <control>
+0x9B 0x009B # <control>
+0x9C 0x009C # <control>
+0x9D 0x009D # <control>
+0x9E 0x009E # <control>
+0x9F 0x009F # <control>
+0xA0 0x00A0 # NO-BREAK SPACE
+0xA1 0x0401 # CYRILLIC CAPITAL LETTER IO
+0xA2 0x0402 # CYRILLIC CAPITAL LETTER DJE
+0xA3 0x0403 # CYRILLIC CAPITAL LETTER GJE
+0xA4 0x0404 # CYRILLIC CAPITAL LETTER UKRAINIAN IE
+0xA5 0x0405 # CYRILLIC CAPITAL LETTER DZE
+0xA6 0x0406 # CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I
+0xA7 0x0407 # CYRILLIC CAPITAL LETTER YI
+0xA8 0x0408 # CYRILLIC CAPITAL LETTER JE
+0xA9 0x0409 # CYRILLIC CAPITAL LETTER LJE
+0xAA 0x040A # CYRILLIC CAPITAL LETTER NJE
+0xAB 0x040B # CYRILLIC CAPITAL LETTER TSHE
+0xAC 0x040C # CYRILLIC CAPITAL LETTER KJE
+0xAD 0x00AD # SOFT HYPHEN
+0xAE 0x040E # CYRILLIC CAPITAL LETTER SHORT U
+0xAF 0x040F # CYRILLIC CAPITAL LETTER DZHE
+0xB0 0x0410 # CYRILLIC CAPITAL LETTER A
+0xB1 0x0411 # CYRILLIC CAPITAL LETTER BE
+0xB2 0x0412 # CYRILLIC CAPITAL LETTER VE
+0xB3 0x0413 # CYRILLIC CAPITAL LETTER GHE
+0xB4 0x0414 # CYRILLIC CAPITAL LETTER DE
+0xB5 0x0415 # CYRILLIC CAPITAL LETTER IE
+0xB6 0x0416 # CYRILLIC CAPITAL LETTER ZHE
+0xB7 0x0417 # CYRILLIC CAPITAL LETTER ZE
+0xB8 0x0418 # CYRILLIC CAPITAL LETTER I
+0xB9 0x0419 # CYRILLIC CAPITAL LETTER SHORT I
+0xBA 0x041A # CYRILLIC CAPITAL LETTER KA
+0xBB 0x041B # CYRILLIC CAPITAL LETTER EL
+0xBC 0x041C # CYRILLIC CAPITAL LETTER EM
+0xBD 0x041D # CYRILLIC CAPITAL LETTER EN
+0xBE 0x041E # CYRILLIC CAPITAL LETTER O
+0xBF 0x041F # CYRILLIC CAPITAL LETTER PE
+0xC0 0x0420 # CYRILLIC CAPITAL LETTER ER
+0xC1 0x0421 # CYRILLIC CAPITAL LETTER ES
+0xC2 0x0422 # CYRILLIC CAPITAL LETTER TE
+0xC3 0x0423 # CYRILLIC CAPITAL LETTER U
+0xC4 0x0424 # CYRILLIC CAPITAL LETTER EF
+0xC5 0x0425 # CYRILLIC CAPITAL LETTER HA
+0xC6 0x0426 # CYRILLIC CAPITAL LETTER TSE
+0xC7 0x0427 # CYRILLIC CAPITAL LETTER CHE
+0xC8 0x0428 # CYRILLIC CAPITAL LETTER SHA
+0xC9 0x0429 # CYRILLIC CAPITAL LETTER SHCHA
+0xCA 0x042A # CYRILLIC CAPITAL LETTER HARD SIGN
+0xCB 0x042B # CYRILLIC CAPITAL LETTER YERU
+0xCC 0x042C # CYRILLIC CAPITAL LETTER SOFT SIGN
+0xCD 0x042D # CYRILLIC CAPITAL LETTER E
+0xCE 0x042E # CYRILLIC CAPITAL LETTER YU
+0xCF 0x042F # CYRILLIC CAPITAL LETTER YA
+0xD0 0x0430 # CYRILLIC SMALL LETTER A
+0xD1 0x0431 # CYRILLIC SMALL LETTER BE
+0xD2 0x0432 # CYRILLIC SMALL LETTER VE
+0xD3 0x0433 # CYRILLIC SMALL LETTER GHE
+0xD4 0x0434 # CYRILLIC SMALL LETTER DE
+0xD5 0x0435 # CYRILLIC SMALL LETTER IE
+0xD6 0x0436 # CYRILLIC SMALL LETTER ZHE
+0xD7 0x0437 # CYRILLIC SMALL LETTER ZE
+0xD8 0x0438 # CYRILLIC SMALL LETTER I
+0xD9 0x0439 # CYRILLIC SMALL LETTER SHORT I
+0xDA 0x043A # CYRILLIC SMALL LETTER KA
+0xDB 0x043B # CYRILLIC SMALL LETTER EL
+0xDC 0x043C # CYRILLIC SMALL LETTER EM
+0xDD 0x043D # CYRILLIC SMALL LETTER EN
+0xDE 0x043E # CYRILLIC SMALL LETTER O
+0xDF 0x043F # CYRILLIC SMALL LETTER PE
+0xE0 0x0440 # CYRILLIC SMALL LETTER ER
+0xE1 0x0441 # CYRILLIC SMALL LETTER ES
+0xE2 0x0442 # CYRILLIC SMALL LETTER TE
+0xE3 0x0443 # CYRILLIC SMALL LETTER U
+0xE4 0x0444 # CYRILLIC SMALL LETTER EF
+0xE5 0x0445 # CYRILLIC SMALL LETTER HA
+0xE6 0x0446 # CYRILLIC SMALL LETTER TSE
+0xE7 0x0447 # CYRILLIC SMALL LETTER CHE
+0xE8 0x0448 # CYRILLIC SMALL LETTER SHA
+0xE9 0x0449 # CYRILLIC SMALL LETTER SHCHA
+0xEA 0x044A # CYRILLIC SMALL LETTER HARD SIGN
+0xEB 0x044B # CYRILLIC SMALL LETTER YERU
+0xEC 0x044C # CYRILLIC SMALL LETTER SOFT SIGN
+0xED 0x044D # CYRILLIC SMALL LETTER E
+0xEE 0x044E # CYRILLIC SMALL LETTER YU
+0xEF 0x044F # CYRILLIC SMALL LETTER YA
+0xF0 0x2116 # NUMERO SIGN
+0xF1 0x0451 # CYRILLIC SMALL LETTER IO
+0xF2 0x0452 # CYRILLIC SMALL LETTER DJE
+0xF3 0x0453 # CYRILLIC SMALL LETTER GJE
+0xF4 0x0454 # CYRILLIC SMALL LETTER UKRAINIAN IE
+0xF5 0x0455 # CYRILLIC SMALL LETTER DZE
+0xF6 0x0456 # CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I
+0xF7 0x0457 # CYRILLIC SMALL LETTER YI
+0xF8 0x0458 # CYRILLIC SMALL LETTER JE
+0xF9 0x0459 # CYRILLIC SMALL LETTER LJE
+0xFA 0x045A # CYRILLIC SMALL LETTER NJE
+0xFB 0x045B # CYRILLIC SMALL LETTER TSHE
+0xFC 0x045C # CYRILLIC SMALL LETTER KJE
+0xFD 0x00A7 # SECTION SIGN
+0xFE 0x045E # CYRILLIC SMALL LETTER SHORT U
+0xFF 0x045F # CYRILLIC SMALL LETTER DZHE
diff --git a/externals/figlet/fonts/8859-7.flc b/externals/figlet/fonts/8859-7.flc
new file mode 100644
index 000000000..bc46b7471
--- /dev/null
+++ b/externals/figlet/fonts/8859-7.flc
@@ -0,0 +1,308 @@
+#
+# Name: ISO 8859-7:2003 to Unicode
+# Unicode version: 4.0
+# Table version: 2.0
+# Table format: Format A
+# Date: 2003-Nov-12
+# Authors: Ken Whistler <kenw@sybase.com>
+#
+# Copyright (c) 1991-2003 Unicode, Inc. All Rights reserved.
+#
+# This file is provided as-is by Unicode, Inc. (The Unicode Consortium).
+# No claims are made as to fitness for any particular purpose. No
+# warranties of any kind are expressed or implied. The recipient
+# agrees to determine applicability of information provided. If this
+# file has been provided on optical media by Unicode, Inc., the sole
+# remedy for any claim will be exchange of defective media within 90
+# days of receipt.
+#
+# Unicode, Inc. hereby grants the right to freely use the information
+# supplied in this file in the creation of products supporting the
+# Unicode Standard, and to make copies of this file in any form for
+# internal or external distribution as long as this notice remains
+# attached.
+#
+# General notes:
+#
+# This table contains the data the Unicode Consortium has on how
+# ISO 8859-7:2003 characters map into Unicode.
+#
+# ISO 8859-7:1987 is equivalent to ISO-IR-126, ELOT 928,
+# and ECMA 118. ISO 8859-7:2003 adds two currency signs
+# and one other character not in the earlier standard.
+#
+# Format: Three tab-separated columns
+# Column #1 is the ISO 8859-7 code (in hex as 0xXX)
+# Column #2 is the Unicode (in hex as 0xXXXX)
+# Column #3 the Unicode name (follows a comment sign, '#')
+#
+# The entries are in ISO 8859-7 order.
+#
+# Version history
+# 1.0 version updates 0.1 version by adding mappings for all
+# control characters.
+# Remap 0xA1 to U+2018 (instead of 0x02BD) to match text of 8859-7
+# Remap 0xA2 to U+2019 (instead of 0x02BC) to match text of 8859-7
+#
+# 2.0 version updates 1.0 version by adding mappings for the
+# three newly added characters 0xA4, 0xA5, 0xAA.
+#
+# Updated versions of this file may be found in:
+# <http://www.unicode.org/Public/MAPPINGS/>
+#
+# Any comments or problems, contact the Unicode Consortium at:
+# <http://www.unicode.org/reporting.html>
+#
+0x00 0x0000 # NULL
+0x01 0x0001 # START OF HEADING
+0x02 0x0002 # START OF TEXT
+0x03 0x0003 # END OF TEXT
+0x04 0x0004 # END OF TRANSMISSION
+0x05 0x0005 # ENQUIRY
+0x06 0x0006 # ACKNOWLEDGE
+0x07 0x0007 # BELL
+0x08 0x0008 # BACKSPACE
+0x09 0x0009 # HORIZONTAL TABULATION
+0x0A 0x000A # LINE FEED
+0x0B 0x000B # VERTICAL TABULATION
+0x0C 0x000C # FORM FEED
+0x0D 0x000D # CARRIAGE RETURN
+0x0E 0x000E # SHIFT OUT
+0x0F 0x000F # SHIFT IN
+0x10 0x0010 # DATA LINK ESCAPE
+0x11 0x0011 # DEVICE CONTROL ONE
+0x12 0x0012 # DEVICE CONTROL TWO
+0x13 0x0013 # DEVICE CONTROL THREE
+0x14 0x0014 # DEVICE CONTROL FOUR
+0x15 0x0015 # NEGATIVE ACKNOWLEDGE
+0x16 0x0016 # SYNCHRONOUS IDLE
+0x17 0x0017 # END OF TRANSMISSION BLOCK
+0x18 0x0018 # CANCEL
+0x19 0x0019 # END OF MEDIUM
+0x1A 0x001A # SUBSTITUTE
+0x1B 0x001B # ESCAPE
+0x1C 0x001C # FILE SEPARATOR
+0x1D 0x001D # GROUP SEPARATOR
+0x1E 0x001E # RECORD SEPARATOR
+0x1F 0x001F # UNIT SEPARATOR
+0x20 0x0020 # SPACE
+0x21 0x0021 # EXCLAMATION MARK
+0x22 0x0022 # QUOTATION MARK
+0x23 0x0023 # NUMBER SIGN
+0x24 0x0024 # DOLLAR SIGN
+0x25 0x0025 # PERCENT SIGN
+0x26 0x0026 # AMPERSAND
+0x27 0x0027 # APOSTROPHE
+0x28 0x0028 # LEFT PARENTHESIS
+0x29 0x0029 # RIGHT PARENTHESIS
+0x2A 0x002A # ASTERISK
+0x2B 0x002B # PLUS SIGN
+0x2C 0x002C # COMMA
+0x2D 0x002D # HYPHEN-MINUS
+0x2E 0x002E # FULL STOP
+0x2F 0x002F # SOLIDUS
+0x30 0x0030 # DIGIT ZERO
+0x31 0x0031 # DIGIT ONE
+0x32 0x0032 # DIGIT TWO
+0x33 0x0033 # DIGIT THREE
+0x34 0x0034 # DIGIT FOUR
+0x35 0x0035 # DIGIT FIVE
+0x36 0x0036 # DIGIT SIX
+0x37 0x0037 # DIGIT SEVEN
+0x38 0x0038 # DIGIT EIGHT
+0x39 0x0039 # DIGIT NINE
+0x3A 0x003A # COLON
+0x3B 0x003B # SEMICOLON
+0x3C 0x003C # LESS-THAN SIGN
+0x3D 0x003D # EQUALS SIGN
+0x3E 0x003E # GREATER-THAN SIGN
+0x3F 0x003F # QUESTION MARK
+0x40 0x0040 # COMMERCIAL AT
+0x41 0x0041 # LATIN CAPITAL LETTER A
+0x42 0x0042 # LATIN CAPITAL LETTER B
+0x43 0x0043 # LATIN CAPITAL LETTER C
+0x44 0x0044 # LATIN CAPITAL LETTER D
+0x45 0x0045 # LATIN CAPITAL LETTER E
+0x46 0x0046 # LATIN CAPITAL LETTER F
+0x47 0x0047 # LATIN CAPITAL LETTER G
+0x48 0x0048 # LATIN CAPITAL LETTER H
+0x49 0x0049 # LATIN CAPITAL LETTER I
+0x4A 0x004A # LATIN CAPITAL LETTER J
+0x4B 0x004B # LATIN CAPITAL LETTER K
+0x4C 0x004C # LATIN CAPITAL LETTER L
+0x4D 0x004D # LATIN CAPITAL LETTER M
+0x4E 0x004E # LATIN CAPITAL LETTER N
+0x4F 0x004F # LATIN CAPITAL LETTER O
+0x50 0x0050 # LATIN CAPITAL LETTER P
+0x51 0x0051 # LATIN CAPITAL LETTER Q
+0x52 0x0052 # LATIN CAPITAL LETTER R
+0x53 0x0053 # LATIN CAPITAL LETTER S
+0x54 0x0054 # LATIN CAPITAL LETTER T
+0x55 0x0055 # LATIN CAPITAL LETTER U
+0x56 0x0056 # LATIN CAPITAL LETTER V
+0x57 0x0057 # LATIN CAPITAL LETTER W
+0x58 0x0058 # LATIN CAPITAL LETTER X
+0x59 0x0059 # LATIN CAPITAL LETTER Y
+0x5A 0x005A # LATIN CAPITAL LETTER Z
+0x5B 0x005B # LEFT SQUARE BRACKET
+0x5C 0x005C # REVERSE SOLIDUS
+0x5D 0x005D # RIGHT SQUARE BRACKET
+0x5E 0x005E # CIRCUMFLEX ACCENT
+0x5F 0x005F # LOW LINE
+0x60 0x0060 # GRAVE ACCENT
+0x61 0x0061 # LATIN SMALL LETTER A
+0x62 0x0062 # LATIN SMALL LETTER B
+0x63 0x0063 # LATIN SMALL LETTER C
+0x64 0x0064 # LATIN SMALL LETTER D
+0x65 0x0065 # LATIN SMALL LETTER E
+0x66 0x0066 # LATIN SMALL LETTER F
+0x67 0x0067 # LATIN SMALL LETTER G
+0x68 0x0068 # LATIN SMALL LETTER H
+0x69 0x0069 # LATIN SMALL LETTER I
+0x6A 0x006A # LATIN SMALL LETTER J
+0x6B 0x006B # LATIN SMALL LETTER K
+0x6C 0x006C # LATIN SMALL LETTER L
+0x6D 0x006D # LATIN SMALL LETTER M
+0x6E 0x006E # LATIN SMALL LETTER N
+0x6F 0x006F # LATIN SMALL LETTER O
+0x70 0x0070 # LATIN SMALL LETTER P
+0x71 0x0071 # LATIN SMALL LETTER Q
+0x72 0x0072 # LATIN SMALL LETTER R
+0x73 0x0073 # LATIN SMALL LETTER S
+0x74 0x0074 # LATIN SMALL LETTER T
+0x75 0x0075 # LATIN SMALL LETTER U
+0x76 0x0076 # LATIN SMALL LETTER V
+0x77 0x0077 # LATIN SMALL LETTER W
+0x78 0x0078 # LATIN SMALL LETTER X
+0x79 0x0079 # LATIN SMALL LETTER Y
+0x7A 0x007A # LATIN SMALL LETTER Z
+0x7B 0x007B # LEFT CURLY BRACKET
+0x7C 0x007C # VERTICAL LINE
+0x7D 0x007D # RIGHT CURLY BRACKET
+0x7E 0x007E # TILDE
+0x7F 0x007F # DELETE
+0x80 0x0080 # <control>
+0x81 0x0081 # <control>
+0x82 0x0082 # <control>
+0x83 0x0083 # <control>
+0x84 0x0084 # <control>
+0x85 0x0085 # <control>
+0x86 0x0086 # <control>
+0x87 0x0087 # <control>
+0x88 0x0088 # <control>
+0x89 0x0089 # <control>
+0x8A 0x008A # <control>
+0x8B 0x008B # <control>
+0x8C 0x008C # <control>
+0x8D 0x008D # <control>
+0x8E 0x008E # <control>
+0x8F 0x008F # <control>
+0x90 0x0090 # <control>
+0x91 0x0091 # <control>
+0x92 0x0092 # <control>
+0x93 0x0093 # <control>
+0x94 0x0094 # <control>
+0x95 0x0095 # <control>
+0x96 0x0096 # <control>
+0x97 0x0097 # <control>
+0x98 0x0098 # <control>
+0x99 0x0099 # <control>
+0x9A 0x009A # <control>
+0x9B 0x009B # <control>
+0x9C 0x009C # <control>
+0x9D 0x009D # <control>
+0x9E 0x009E # <control>
+0x9F 0x009F # <control>
+0xA0 0x00A0 # NO-BREAK SPACE
+0xA1 0x2018 # LEFT SINGLE QUOTATION MARK
+0xA2 0x2019 # RIGHT SINGLE QUOTATION MARK
+0xA3 0x00A3 # POUND SIGN
+0xA4 0x20AC # EURO SIGN
+0xA5 0x20AF # DRACHMA SIGN
+0xA6 0x00A6 # BROKEN BAR
+0xA7 0x00A7 # SECTION SIGN
+0xA8 0x00A8 # DIAERESIS
+0xA9 0x00A9 # COPYRIGHT SIGN
+0xAA 0x037A # GREEK YPOGEGRAMMENI
+0xAB 0x00AB # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+0xAC 0x00AC # NOT SIGN
+0xAD 0x00AD # SOFT HYPHEN
+0xAF 0x2015 # HORIZONTAL BAR
+0xB0 0x00B0 # DEGREE SIGN
+0xB1 0x00B1 # PLUS-MINUS SIGN
+0xB2 0x00B2 # SUPERSCRIPT TWO
+0xB3 0x00B3 # SUPERSCRIPT THREE
+0xB4 0x0384 # GREEK TONOS
+0xB5 0x0385 # GREEK DIALYTIKA TONOS
+0xB6 0x0386 # GREEK CAPITAL LETTER ALPHA WITH TONOS
+0xB7 0x00B7 # MIDDLE DOT
+0xB8 0x0388 # GREEK CAPITAL LETTER EPSILON WITH TONOS
+0xB9 0x0389 # GREEK CAPITAL LETTER ETA WITH TONOS
+0xBA 0x038A # GREEK CAPITAL LETTER IOTA WITH TONOS
+0xBB 0x00BB # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+0xBC 0x038C # GREEK CAPITAL LETTER OMICRON WITH TONOS
+0xBD 0x00BD # VULGAR FRACTION ONE HALF
+0xBE 0x038E # GREEK CAPITAL LETTER UPSILON WITH TONOS
+0xBF 0x038F # GREEK CAPITAL LETTER OMEGA WITH TONOS
+0xC0 0x0390 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS
+0xC1 0x0391 # GREEK CAPITAL LETTER ALPHA
+0xC2 0x0392 # GREEK CAPITAL LETTER BETA
+0xC3 0x0393 # GREEK CAPITAL LETTER GAMMA
+0xC4 0x0394 # GREEK CAPITAL LETTER DELTA
+0xC5 0x0395 # GREEK CAPITAL LETTER EPSILON
+0xC6 0x0396 # GREEK CAPITAL LETTER ZETA
+0xC7 0x0397 # GREEK CAPITAL LETTER ETA
+0xC8 0x0398 # GREEK CAPITAL LETTER THETA
+0xC9 0x0399 # GREEK CAPITAL LETTER IOTA
+0xCA 0x039A # GREEK CAPITAL LETTER KAPPA
+0xCB 0x039B # GREEK CAPITAL LETTER LAMDA
+0xCC 0x039C # GREEK CAPITAL LETTER MU
+0xCD 0x039D # GREEK CAPITAL LETTER NU
+0xCE 0x039E # GREEK CAPITAL LETTER XI
+0xCF 0x039F # GREEK CAPITAL LETTER OMICRON
+0xD0 0x03A0 # GREEK CAPITAL LETTER PI
+0xD1 0x03A1 # GREEK CAPITAL LETTER RHO
+0xD3 0x03A3 # GREEK CAPITAL LETTER SIGMA
+0xD4 0x03A4 # GREEK CAPITAL LETTER TAU
+0xD5 0x03A5 # GREEK CAPITAL LETTER UPSILON
+0xD6 0x03A6 # GREEK CAPITAL LETTER PHI
+0xD7 0x03A7 # GREEK CAPITAL LETTER CHI
+0xD8 0x03A8 # GREEK CAPITAL LETTER PSI
+0xD9 0x03A9 # GREEK CAPITAL LETTER OMEGA
+0xDA 0x03AA # GREEK CAPITAL LETTER IOTA WITH DIALYTIKA
+0xDB 0x03AB # GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA
+0xDC 0x03AC # GREEK SMALL LETTER ALPHA WITH TONOS
+0xDD 0x03AD # GREEK SMALL LETTER EPSILON WITH TONOS
+0xDE 0x03AE # GREEK SMALL LETTER ETA WITH TONOS
+0xDF 0x03AF # GREEK SMALL LETTER IOTA WITH TONOS
+0xE0 0x03B0 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS
+0xE1 0x03B1 # GREEK SMALL LETTER ALPHA
+0xE2 0x03B2 # GREEK SMALL LETTER BETA
+0xE3 0x03B3 # GREEK SMALL LETTER GAMMA
+0xE4 0x03B4 # GREEK SMALL LETTER DELTA
+0xE5 0x03B5 # GREEK SMALL LETTER EPSILON
+0xE6 0x03B6 # GREEK SMALL LETTER ZETA
+0xE7 0x03B7 # GREEK SMALL LETTER ETA
+0xE8 0x03B8 # GREEK SMALL LETTER THETA
+0xE9 0x03B9 # GREEK SMALL LETTER IOTA
+0xEA 0x03BA # GREEK SMALL LETTER KAPPA
+0xEB 0x03BB # GREEK SMALL LETTER LAMDA
+0xEC 0x03BC # GREEK SMALL LETTER MU
+0xED 0x03BD # GREEK SMALL LETTER NU
+0xEE 0x03BE # GREEK SMALL LETTER XI
+0xEF 0x03BF # GREEK SMALL LETTER OMICRON
+0xF0 0x03C0 # GREEK SMALL LETTER PI
+0xF1 0x03C1 # GREEK SMALL LETTER RHO
+0xF2 0x03C2 # GREEK SMALL LETTER FINAL SIGMA
+0xF3 0x03C3 # GREEK SMALL LETTER SIGMA
+0xF4 0x03C4 # GREEK SMALL LETTER TAU
+0xF5 0x03C5 # GREEK SMALL LETTER UPSILON
+0xF6 0x03C6 # GREEK SMALL LETTER PHI
+0xF7 0x03C7 # GREEK SMALL LETTER CHI
+0xF8 0x03C8 # GREEK SMALL LETTER PSI
+0xF9 0x03C9 # GREEK SMALL LETTER OMEGA
+0xFA 0x03CA # GREEK SMALL LETTER IOTA WITH DIALYTIKA
+0xFB 0x03CB # GREEK SMALL LETTER UPSILON WITH DIALYTIKA
+0xFC 0x03CC # GREEK SMALL LETTER OMICRON WITH TONOS
+0xFD 0x03CD # GREEK SMALL LETTER UPSILON WITH TONOS
+0xFE 0x03CE # GREEK SMALL LETTER OMEGA WITH TONOS
diff --git a/externals/figlet/fonts/8859-8.flc b/externals/figlet/fonts/8859-8.flc
new file mode 100644
index 000000000..bc8da4c7f
--- /dev/null
+++ b/externals/figlet/fonts/8859-8.flc
@@ -0,0 +1,270 @@
+#
+# Name: ISO/IEC 8859-8:1999 to Unicode
+# Unicode version: 3.0
+# Table version: 1.1
+# Table format: Format A
+# Date: 2000-Jan-03
+# Authors: Ken Whistler <kenw@sybase.com>
+#
+# Copyright (c) 1991-1999 Unicode, Inc. All Rights reserved.
+#
+# This file is provided as-is by Unicode, Inc. (The Unicode Consortium).
+# No claims are made as to fitness for any particular purpose. No
+# warranties of any kind are expressed or implied. The recipient
+# agrees to determine applicability of information provided. If this
+# file has been provided on optical media by Unicode, Inc., the sole
+# remedy for any claim will be exchange of defective media within 90
+# days of receipt.
+#
+# Unicode, Inc. hereby grants the right to freely use the information
+# supplied in this file in the creation of products supporting the
+# Unicode Standard, and to make copies of this file in any form for
+# internal or external distribution as long as this notice remains
+# attached.
+#
+# General notes:
+#
+# This table contains the data the Unicode Consortium has on how
+# ISO/IEC 8859-8:1999 characters map into Unicode.
+#
+# Format: Three tab-separated columns
+# Column #1 is the ISO/IEC 8859-8 code (in hex as 0xXX)
+# Column #2 is the Unicode (in hex as 0xXXXX)
+# Column #3 the Unicode name (follows a comment sign, '#')
+#
+# The entries are in ISO/IEC 8859-8 order.
+#
+# Version history
+# 1.0 version updates 0.1 version by adding mappings for all
+# control characters.
+# 1.1 version updates to the published 8859-8:1999, correcting
+# the mapping of 0xAF and adding mappings for LRM and RLM.
+#
+# Updated versions of this file may be found in:
+# <ftp://ftp.unicode.org/Public/MAPPINGS/>
+#
+# Any comments or problems, contact <errata@unicode.org>
+# Please note that <errata@unicode.org> is an archival address;
+# notices will be checked, but do not expect an immediate response.
+#
+0x00 0x0000 # NULL
+0x01 0x0001 # START OF HEADING
+0x02 0x0002 # START OF TEXT
+0x03 0x0003 # END OF TEXT
+0x04 0x0004 # END OF TRANSMISSION
+0x05 0x0005 # ENQUIRY
+0x06 0x0006 # ACKNOWLEDGE
+0x07 0x0007 # BELL
+0x08 0x0008 # BACKSPACE
+0x09 0x0009 # HORIZONTAL TABULATION
+0x0A 0x000A # LINE FEED
+0x0B 0x000B # VERTICAL TABULATION
+0x0C 0x000C # FORM FEED
+0x0D 0x000D # CARRIAGE RETURN
+0x0E 0x000E # SHIFT OUT
+0x0F 0x000F # SHIFT IN
+0x10 0x0010 # DATA LINK ESCAPE
+0x11 0x0011 # DEVICE CONTROL ONE
+0x12 0x0012 # DEVICE CONTROL TWO
+0x13 0x0013 # DEVICE CONTROL THREE
+0x14 0x0014 # DEVICE CONTROL FOUR
+0x15 0x0015 # NEGATIVE ACKNOWLEDGE
+0x16 0x0016 # SYNCHRONOUS IDLE
+0x17 0x0017 # END OF TRANSMISSION BLOCK
+0x18 0x0018 # CANCEL
+0x19 0x0019 # END OF MEDIUM
+0x1A 0x001A # SUBSTITUTE
+0x1B 0x001B # ESCAPE
+0x1C 0x001C # FILE SEPARATOR
+0x1D 0x001D # GROUP SEPARATOR
+0x1E 0x001E # RECORD SEPARATOR
+0x1F 0x001F # UNIT SEPARATOR
+0x20 0x0020 # SPACE
+0x21 0x0021 # EXCLAMATION MARK
+0x22 0x0022 # QUOTATION MARK
+0x23 0x0023 # NUMBER SIGN
+0x24 0x0024 # DOLLAR SIGN
+0x25 0x0025 # PERCENT SIGN
+0x26 0x0026 # AMPERSAND
+0x27 0x0027 # APOSTROPHE
+0x28 0x0028 # LEFT PARENTHESIS
+0x29 0x0029 # RIGHT PARENTHESIS
+0x2A 0x002A # ASTERISK
+0x2B 0x002B # PLUS SIGN
+0x2C 0x002C # COMMA
+0x2D 0x002D # HYPHEN-MINUS
+0x2E 0x002E # FULL STOP
+0x2F 0x002F # SOLIDUS
+0x30 0x0030 # DIGIT ZERO
+0x31 0x0031 # DIGIT ONE
+0x32 0x0032 # DIGIT TWO
+0x33 0x0033 # DIGIT THREE
+0x34 0x0034 # DIGIT FOUR
+0x35 0x0035 # DIGIT FIVE
+0x36 0x0036 # DIGIT SIX
+0x37 0x0037 # DIGIT SEVEN
+0x38 0x0038 # DIGIT EIGHT
+0x39 0x0039 # DIGIT NINE
+0x3A 0x003A # COLON
+0x3B 0x003B # SEMICOLON
+0x3C 0x003C # LESS-THAN SIGN
+0x3D 0x003D # EQUALS SIGN
+0x3E 0x003E # GREATER-THAN SIGN
+0x3F 0x003F # QUESTION MARK
+0x40 0x0040 # COMMERCIAL AT
+0x41 0x0041 # LATIN CAPITAL LETTER A
+0x42 0x0042 # LATIN CAPITAL LETTER B
+0x43 0x0043 # LATIN CAPITAL LETTER C
+0x44 0x0044 # LATIN CAPITAL LETTER D
+0x45 0x0045 # LATIN CAPITAL LETTER E
+0x46 0x0046 # LATIN CAPITAL LETTER F
+0x47 0x0047 # LATIN CAPITAL LETTER G
+0x48 0x0048 # LATIN CAPITAL LETTER H
+0x49 0x0049 # LATIN CAPITAL LETTER I
+0x4A 0x004A # LATIN CAPITAL LETTER J
+0x4B 0x004B # LATIN CAPITAL LETTER K
+0x4C 0x004C # LATIN CAPITAL LETTER L
+0x4D 0x004D # LATIN CAPITAL LETTER M
+0x4E 0x004E # LATIN CAPITAL LETTER N
+0x4F 0x004F # LATIN CAPITAL LETTER O
+0x50 0x0050 # LATIN CAPITAL LETTER P
+0x51 0x0051 # LATIN CAPITAL LETTER Q
+0x52 0x0052 # LATIN CAPITAL LETTER R
+0x53 0x0053 # LATIN CAPITAL LETTER S
+0x54 0x0054 # LATIN CAPITAL LETTER T
+0x55 0x0055 # LATIN CAPITAL LETTER U
+0x56 0x0056 # LATIN CAPITAL LETTER V
+0x57 0x0057 # LATIN CAPITAL LETTER W
+0x58 0x0058 # LATIN CAPITAL LETTER X
+0x59 0x0059 # LATIN CAPITAL LETTER Y
+0x5A 0x005A # LATIN CAPITAL LETTER Z
+0x5B 0x005B # LEFT SQUARE BRACKET
+0x5C 0x005C # REVERSE SOLIDUS
+0x5D 0x005D # RIGHT SQUARE BRACKET
+0x5E 0x005E # CIRCUMFLEX ACCENT
+0x5F 0x005F # LOW LINE
+0x60 0x0060 # GRAVE ACCENT
+0x61 0x0061 # LATIN SMALL LETTER A
+0x62 0x0062 # LATIN SMALL LETTER B
+0x63 0x0063 # LATIN SMALL LETTER C
+0x64 0x0064 # LATIN SMALL LETTER D
+0x65 0x0065 # LATIN SMALL LETTER E
+0x66 0x0066 # LATIN SMALL LETTER F
+0x67 0x0067 # LATIN SMALL LETTER G
+0x68 0x0068 # LATIN SMALL LETTER H
+0x69 0x0069 # LATIN SMALL LETTER I
+0x6A 0x006A # LATIN SMALL LETTER J
+0x6B 0x006B # LATIN SMALL LETTER K
+0x6C 0x006C # LATIN SMALL LETTER L
+0x6D 0x006D # LATIN SMALL LETTER M
+0x6E 0x006E # LATIN SMALL LETTER N
+0x6F 0x006F # LATIN SMALL LETTER O
+0x70 0x0070 # LATIN SMALL LETTER P
+0x71 0x0071 # LATIN SMALL LETTER Q
+0x72 0x0072 # LATIN SMALL LETTER R
+0x73 0x0073 # LATIN SMALL LETTER S
+0x74 0x0074 # LATIN SMALL LETTER T
+0x75 0x0075 # LATIN SMALL LETTER U
+0x76 0x0076 # LATIN SMALL LETTER V
+0x77 0x0077 # LATIN SMALL LETTER W
+0x78 0x0078 # LATIN SMALL LETTER X
+0x79 0x0079 # LATIN SMALL LETTER Y
+0x7A 0x007A # LATIN SMALL LETTER Z
+0x7B 0x007B # LEFT CURLY BRACKET
+0x7C 0x007C # VERTICAL LINE
+0x7D 0x007D # RIGHT CURLY BRACKET
+0x7E 0x007E # TILDE
+0x7F 0x007F # DELETE
+0x80 0x0080 # <control>
+0x81 0x0081 # <control>
+0x82 0x0082 # <control>
+0x83 0x0083 # <control>
+0x84 0x0084 # <control>
+0x85 0x0085 # <control>
+0x86 0x0086 # <control>
+0x87 0x0087 # <control>
+0x88 0x0088 # <control>
+0x89 0x0089 # <control>
+0x8A 0x008A # <control>
+0x8B 0x008B # <control>
+0x8C 0x008C # <control>
+0x8D 0x008D # <control>
+0x8E 0x008E # <control>
+0x8F 0x008F # <control>
+0x90 0x0090 # <control>
+0x91 0x0091 # <control>
+0x92 0x0092 # <control>
+0x93 0x0093 # <control>
+0x94 0x0094 # <control>
+0x95 0x0095 # <control>
+0x96 0x0096 # <control>
+0x97 0x0097 # <control>
+0x98 0x0098 # <control>
+0x99 0x0099 # <control>
+0x9A 0x009A # <control>
+0x9B 0x009B # <control>
+0x9C 0x009C # <control>
+0x9D 0x009D # <control>
+0x9E 0x009E # <control>
+0x9F 0x009F # <control>
+0xA0 0x00A0 # NO-BREAK SPACE
+0xA2 0x00A2 # CENT SIGN
+0xA3 0x00A3 # POUND SIGN
+0xA4 0x00A4 # CURRENCY SIGN
+0xA5 0x00A5 # YEN SIGN
+0xA6 0x00A6 # BROKEN BAR
+0xA7 0x00A7 # SECTION SIGN
+0xA8 0x00A8 # DIAERESIS
+0xA9 0x00A9 # COPYRIGHT SIGN
+0xAA 0x00D7 # MULTIPLICATION SIGN
+0xAB 0x00AB # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+0xAC 0x00AC # NOT SIGN
+0xAD 0x00AD # SOFT HYPHEN
+0xAE 0x00AE # REGISTERED SIGN
+0xAF 0x00AF # MACRON
+0xB0 0x00B0 # DEGREE SIGN
+0xB1 0x00B1 # PLUS-MINUS SIGN
+0xB2 0x00B2 # SUPERSCRIPT TWO
+0xB3 0x00B3 # SUPERSCRIPT THREE
+0xB4 0x00B4 # ACUTE ACCENT
+0xB5 0x00B5 # MICRO SIGN
+0xB6 0x00B6 # PILCROW SIGN
+0xB7 0x00B7 # MIDDLE DOT
+0xB8 0x00B8 # CEDILLA
+0xB9 0x00B9 # SUPERSCRIPT ONE
+0xBA 0x00F7 # DIVISION SIGN
+0xBB 0x00BB # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+0xBC 0x00BC # VULGAR FRACTION ONE QUARTER
+0xBD 0x00BD # VULGAR FRACTION ONE HALF
+0xBE 0x00BE # VULGAR FRACTION THREE QUARTERS
+0xDF 0x2017 # DOUBLE LOW LINE
+0xE0 0x05D0 # HEBREW LETTER ALEF
+0xE1 0x05D1 # HEBREW LETTER BET
+0xE2 0x05D2 # HEBREW LETTER GIMEL
+0xE3 0x05D3 # HEBREW LETTER DALET
+0xE4 0x05D4 # HEBREW LETTER HE
+0xE5 0x05D5 # HEBREW LETTER VAV
+0xE6 0x05D6 # HEBREW LETTER ZAYIN
+0xE7 0x05D7 # HEBREW LETTER HET
+0xE8 0x05D8 # HEBREW LETTER TET
+0xE9 0x05D9 # HEBREW LETTER YOD
+0xEA 0x05DA # HEBREW LETTER FINAL KAF
+0xEB 0x05DB # HEBREW LETTER KAF
+0xEC 0x05DC # HEBREW LETTER LAMED
+0xED 0x05DD # HEBREW LETTER FINAL MEM
+0xEE 0x05DE # HEBREW LETTER MEM
+0xEF 0x05DF # HEBREW LETTER FINAL NUN
+0xF0 0x05E0 # HEBREW LETTER NUN
+0xF1 0x05E1 # HEBREW LETTER SAMEKH
+0xF2 0x05E2 # HEBREW LETTER AYIN
+0xF3 0x05E3 # HEBREW LETTER FINAL PE
+0xF4 0x05E4 # HEBREW LETTER PE
+0xF5 0x05E5 # HEBREW LETTER FINAL TSADI
+0xF6 0x05E6 # HEBREW LETTER TSADI
+0xF7 0x05E7 # HEBREW LETTER QOF
+0xF8 0x05E8 # HEBREW LETTER RESH
+0xF9 0x05E9 # HEBREW LETTER SHIN
+0xFA 0x05EA # HEBREW LETTER TAV
+0xFD 0x200E # LEFT-TO-RIGHT MARK
+0xFE 0x200F # RIGHT-TO-LEFT MARK
+
diff --git a/externals/figlet/fonts/8859-9.flc b/externals/figlet/fonts/8859-9.flc
new file mode 100644
index 000000000..22901f107
--- /dev/null
+++ b/externals/figlet/fonts/8859-9.flc
@@ -0,0 +1,307 @@
+#
+# Name: ISO/IEC 8859-9:1999 to Unicode
+# Unicode version: 3.0
+# Table version: 1.0
+# Table format: Format A
+# Date: 1999 July 27
+# Authors: Ken Whistler <kenw@sybase.com>
+#
+# Copyright (c) 1991-1999 Unicode, Inc. All Rights reserved.
+#
+# This file is provided as-is by Unicode, Inc. (The Unicode Consortium).
+# No claims are made as to fitness for any particular purpose. No
+# warranties of any kind are expressed or implied. The recipient
+# agrees to determine applicability of information provided. If this
+# file has been provided on magnetic media by Unicode, Inc., the sole
+# remedy for any claim will be exchange of defective media within 90
+# days of receipt.
+#
+# Unicode, Inc. hereby grants the right to freely use the information
+# supplied in this file in the creation of products supporting the
+# Unicode Standard, and to make copies of this file in any form for
+# internal or external distribution as long as this notice remains
+# attached.
+#
+# General notes:
+#
+# This table contains the data the Unicode Consortium has on how
+# ISO/IEC 8859-9:1999 characters map into Unicode.
+#
+# Format: Three tab-separated columns
+# Column #1 is the ISO/IEC 8859-9 code (in hex as 0xXX)
+# Column #2 is the Unicode (in hex as 0xXXXX)
+# Column #3 the Unicode name (follows a comment sign, '#')
+#
+# The entries are in ISO/IEC 8859-9 order.
+#
+# ISO/IEC 8859-9 is also equivalent to ISO-IR-148.
+#
+# Version history
+# 1.0 version updates 0.1 version by adding mappings for all
+# control characters.
+#
+# Updated versions of this file may be found in:
+# <ftp://ftp.unicode.org/Public/MAPPINGS/>
+#
+# Any comments or problems, contact <errata@unicode.org>
+# Please note that <errata@unicode.org> is an archival address;
+# notices will be checked, but do not expect an immediate response.
+#
+0x00 0x0000 # NULL
+0x01 0x0001 # START OF HEADING
+0x02 0x0002 # START OF TEXT
+0x03 0x0003 # END OF TEXT
+0x04 0x0004 # END OF TRANSMISSION
+0x05 0x0005 # ENQUIRY
+0x06 0x0006 # ACKNOWLEDGE
+0x07 0x0007 # BELL
+0x08 0x0008 # BACKSPACE
+0x09 0x0009 # HORIZONTAL TABULATION
+0x0A 0x000A # LINE FEED
+0x0B 0x000B # VERTICAL TABULATION
+0x0C 0x000C # FORM FEED
+0x0D 0x000D # CARRIAGE RETURN
+0x0E 0x000E # SHIFT OUT
+0x0F 0x000F # SHIFT IN
+0x10 0x0010 # DATA LINK ESCAPE
+0x11 0x0011 # DEVICE CONTROL ONE
+0x12 0x0012 # DEVICE CONTROL TWO
+0x13 0x0013 # DEVICE CONTROL THREE
+0x14 0x0014 # DEVICE CONTROL FOUR
+0x15 0x0015 # NEGATIVE ACKNOWLEDGE
+0x16 0x0016 # SYNCHRONOUS IDLE
+0x17 0x0017 # END OF TRANSMISSION BLOCK
+0x18 0x0018 # CANCEL
+0x19 0x0019 # END OF MEDIUM
+0x1A 0x001A # SUBSTITUTE
+0x1B 0x001B # ESCAPE
+0x1C 0x001C # FILE SEPARATOR
+0x1D 0x001D # GROUP SEPARATOR
+0x1E 0x001E # RECORD SEPARATOR
+0x1F 0x001F # UNIT SEPARATOR
+0x20 0x0020 # SPACE
+0x21 0x0021 # EXCLAMATION MARK
+0x22 0x0022 # QUOTATION MARK
+0x23 0x0023 # NUMBER SIGN
+0x24 0x0024 # DOLLAR SIGN
+0x25 0x0025 # PERCENT SIGN
+0x26 0x0026 # AMPERSAND
+0x27 0x0027 # APOSTROPHE
+0x28 0x0028 # LEFT PARENTHESIS
+0x29 0x0029 # RIGHT PARENTHESIS
+0x2A 0x002A # ASTERISK
+0x2B 0x002B # PLUS SIGN
+0x2C 0x002C # COMMA
+0x2D 0x002D # HYPHEN-MINUS
+0x2E 0x002E # FULL STOP
+0x2F 0x002F # SOLIDUS
+0x30 0x0030 # DIGIT ZERO
+0x31 0x0031 # DIGIT ONE
+0x32 0x0032 # DIGIT TWO
+0x33 0x0033 # DIGIT THREE
+0x34 0x0034 # DIGIT FOUR
+0x35 0x0035 # DIGIT FIVE
+0x36 0x0036 # DIGIT SIX
+0x37 0x0037 # DIGIT SEVEN
+0x38 0x0038 # DIGIT EIGHT
+0x39 0x0039 # DIGIT NINE
+0x3A 0x003A # COLON
+0x3B 0x003B # SEMICOLON
+0x3C 0x003C # LESS-THAN SIGN
+0x3D 0x003D # EQUALS SIGN
+0x3E 0x003E # GREATER-THAN SIGN
+0x3F 0x003F # QUESTION MARK
+0x40 0x0040 # COMMERCIAL AT
+0x41 0x0041 # LATIN CAPITAL LETTER A
+0x42 0x0042 # LATIN CAPITAL LETTER B
+0x43 0x0043 # LATIN CAPITAL LETTER C
+0x44 0x0044 # LATIN CAPITAL LETTER D
+0x45 0x0045 # LATIN CAPITAL LETTER E
+0x46 0x0046 # LATIN CAPITAL LETTER F
+0x47 0x0047 # LATIN CAPITAL LETTER G
+0x48 0x0048 # LATIN CAPITAL LETTER H
+0x49 0x0049 # LATIN CAPITAL LETTER I
+0x4A 0x004A # LATIN CAPITAL LETTER J
+0x4B 0x004B # LATIN CAPITAL LETTER K
+0x4C 0x004C # LATIN CAPITAL LETTER L
+0x4D 0x004D # LATIN CAPITAL LETTER M
+0x4E 0x004E # LATIN CAPITAL LETTER N
+0x4F 0x004F # LATIN CAPITAL LETTER O
+0x50 0x0050 # LATIN CAPITAL LETTER P
+0x51 0x0051 # LATIN CAPITAL LETTER Q
+0x52 0x0052 # LATIN CAPITAL LETTER R
+0x53 0x0053 # LATIN CAPITAL LETTER S
+0x54 0x0054 # LATIN CAPITAL LETTER T
+0x55 0x0055 # LATIN CAPITAL LETTER U
+0x56 0x0056 # LATIN CAPITAL LETTER V
+0x57 0x0057 # LATIN CAPITAL LETTER W
+0x58 0x0058 # LATIN CAPITAL LETTER X
+0x59 0x0059 # LATIN CAPITAL LETTER Y
+0x5A 0x005A # LATIN CAPITAL LETTER Z
+0x5B 0x005B # LEFT SQUARE BRACKET
+0x5C 0x005C # REVERSE SOLIDUS
+0x5D 0x005D # RIGHT SQUARE BRACKET
+0x5E 0x005E # CIRCUMFLEX ACCENT
+0x5F 0x005F # LOW LINE
+0x60 0x0060 # GRAVE ACCENT
+0x61 0x0061 # LATIN SMALL LETTER A
+0x62 0x0062 # LATIN SMALL LETTER B
+0x63 0x0063 # LATIN SMALL LETTER C
+0x64 0x0064 # LATIN SMALL LETTER D
+0x65 0x0065 # LATIN SMALL LETTER E
+0x66 0x0066 # LATIN SMALL LETTER F
+0x67 0x0067 # LATIN SMALL LETTER G
+0x68 0x0068 # LATIN SMALL LETTER H
+0x69 0x0069 # LATIN SMALL LETTER I
+0x6A 0x006A # LATIN SMALL LETTER J
+0x6B 0x006B # LATIN SMALL LETTER K
+0x6C 0x006C # LATIN SMALL LETTER L
+0x6D 0x006D # LATIN SMALL LETTER M
+0x6E 0x006E # LATIN SMALL LETTER N
+0x6F 0x006F # LATIN SMALL LETTER O
+0x70 0x0070 # LATIN SMALL LETTER P
+0x71 0x0071 # LATIN SMALL LETTER Q
+0x72 0x0072 # LATIN SMALL LETTER R
+0x73 0x0073 # LATIN SMALL LETTER S
+0x74 0x0074 # LATIN SMALL LETTER T
+0x75 0x0075 # LATIN SMALL LETTER U
+0x76 0x0076 # LATIN SMALL LETTER V
+0x77 0x0077 # LATIN SMALL LETTER W
+0x78 0x0078 # LATIN SMALL LETTER X
+0x79 0x0079 # LATIN SMALL LETTER Y
+0x7A 0x007A # LATIN SMALL LETTER Z
+0x7B 0x007B # LEFT CURLY BRACKET
+0x7C 0x007C # VERTICAL LINE
+0x7D 0x007D # RIGHT CURLY BRACKET
+0x7E 0x007E # TILDE
+0x7F 0x007F # DELETE
+0x80 0x0080 # <control>
+0x81 0x0081 # <control>
+0x82 0x0082 # <control>
+0x83 0x0083 # <control>
+0x84 0x0084 # <control>
+0x85 0x0085 # <control>
+0x86 0x0086 # <control>
+0x87 0x0087 # <control>
+0x88 0x0088 # <control>
+0x89 0x0089 # <control>
+0x8A 0x008A # <control>
+0x8B 0x008B # <control>
+0x8C 0x008C # <control>
+0x8D 0x008D # <control>
+0x8E 0x008E # <control>
+0x8F 0x008F # <control>
+0x90 0x0090 # <control>
+0x91 0x0091 # <control>
+0x92 0x0092 # <control>
+0x93 0x0093 # <control>
+0x94 0x0094 # <control>
+0x95 0x0095 # <control>
+0x96 0x0096 # <control>
+0x97 0x0097 # <control>
+0x98 0x0098 # <control>
+0x99 0x0099 # <control>
+0x9A 0x009A # <control>
+0x9B 0x009B # <control>
+0x9C 0x009C # <control>
+0x9D 0x009D # <control>
+0x9E 0x009E # <control>
+0x9F 0x009F # <control>
+0xA0 0x00A0 # NO-BREAK SPACE
+0xA1 0x00A1 # INVERTED EXCLAMATION MARK
+0xA2 0x00A2 # CENT SIGN
+0xA3 0x00A3 # POUND SIGN
+0xA4 0x00A4 # CURRENCY SIGN
+0xA5 0x00A5 # YEN SIGN
+0xA6 0x00A6 # BROKEN BAR
+0xA7 0x00A7 # SECTION SIGN
+0xA8 0x00A8 # DIAERESIS
+0xA9 0x00A9 # COPYRIGHT SIGN
+0xAA 0x00AA # FEMININE ORDINAL INDICATOR
+0xAB 0x00AB # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+0xAC 0x00AC # NOT SIGN
+0xAD 0x00AD # SOFT HYPHEN
+0xAE 0x00AE # REGISTERED SIGN
+0xAF 0x00AF # MACRON
+0xB0 0x00B0 # DEGREE SIGN
+0xB1 0x00B1 # PLUS-MINUS SIGN
+0xB2 0x00B2 # SUPERSCRIPT TWO
+0xB3 0x00B3 # SUPERSCRIPT THREE
+0xB4 0x00B4 # ACUTE ACCENT
+0xB5 0x00B5 # MICRO SIGN
+0xB6 0x00B6 # PILCROW SIGN
+0xB7 0x00B7 # MIDDLE DOT
+0xB8 0x00B8 # CEDILLA
+0xB9 0x00B9 # SUPERSCRIPT ONE
+0xBA 0x00BA # MASCULINE ORDINAL INDICATOR
+0xBB 0x00BB # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+0xBC 0x00BC # VULGAR FRACTION ONE QUARTER
+0xBD 0x00BD # VULGAR FRACTION ONE HALF
+0xBE 0x00BE # VULGAR FRACTION THREE QUARTERS
+0xBF 0x00BF # INVERTED QUESTION MARK
+0xC0 0x00C0 # LATIN CAPITAL LETTER A WITH GRAVE
+0xC1 0x00C1 # LATIN CAPITAL LETTER A WITH ACUTE
+0xC2 0x00C2 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+0xC3 0x00C3 # LATIN CAPITAL LETTER A WITH TILDE
+0xC4 0x00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS
+0xC5 0x00C5 # LATIN CAPITAL LETTER A WITH RING ABOVE
+0xC6 0x00C6 # LATIN CAPITAL LETTER AE
+0xC7 0x00C7 # LATIN CAPITAL LETTER C WITH CEDILLA
+0xC8 0x00C8 # LATIN CAPITAL LETTER E WITH GRAVE
+0xC9 0x00C9 # LATIN CAPITAL LETTER E WITH ACUTE
+0xCA 0x00CA # LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+0xCB 0x00CB # LATIN CAPITAL LETTER E WITH DIAERESIS
+0xCC 0x00CC # LATIN CAPITAL LETTER I WITH GRAVE
+0xCD 0x00CD # LATIN CAPITAL LETTER I WITH ACUTE
+0xCE 0x00CE # LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+0xCF 0x00CF # LATIN CAPITAL LETTER I WITH DIAERESIS
+0xD0 0x011E # LATIN CAPITAL LETTER G WITH BREVE
+0xD1 0x00D1 # LATIN CAPITAL LETTER N WITH TILDE
+0xD2 0x00D2 # LATIN CAPITAL LETTER O WITH GRAVE
+0xD3 0x00D3 # LATIN CAPITAL LETTER O WITH ACUTE
+0xD4 0x00D4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+0xD5 0x00D5 # LATIN CAPITAL LETTER O WITH TILDE
+0xD6 0x00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS
+0xD7 0x00D7 # MULTIPLICATION SIGN
+0xD8 0x00D8 # LATIN CAPITAL LETTER O WITH STROKE
+0xD9 0x00D9 # LATIN CAPITAL LETTER U WITH GRAVE
+0xDA 0x00DA # LATIN CAPITAL LETTER U WITH ACUTE
+0xDB 0x00DB # LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+0xDC 0x00DC # LATIN CAPITAL LETTER U WITH DIAERESIS
+0xDD 0x0130 # LATIN CAPITAL LETTER I WITH DOT ABOVE
+0xDE 0x015E # LATIN CAPITAL LETTER S WITH CEDILLA
+0xDF 0x00DF # LATIN SMALL LETTER SHARP S
+0xE0 0x00E0 # LATIN SMALL LETTER A WITH GRAVE
+0xE1 0x00E1 # LATIN SMALL LETTER A WITH ACUTE
+0xE2 0x00E2 # LATIN SMALL LETTER A WITH CIRCUMFLEX
+0xE3 0x00E3 # LATIN SMALL LETTER A WITH TILDE
+0xE4 0x00E4 # LATIN SMALL LETTER A WITH DIAERESIS
+0xE5 0x00E5 # LATIN SMALL LETTER A WITH RING ABOVE
+0xE6 0x00E6 # LATIN SMALL LETTER AE
+0xE7 0x00E7 # LATIN SMALL LETTER C WITH CEDILLA
+0xE8 0x00E8 # LATIN SMALL LETTER E WITH GRAVE
+0xE9 0x00E9 # LATIN SMALL LETTER E WITH ACUTE
+0xEA 0x00EA # LATIN SMALL LETTER E WITH CIRCUMFLEX
+0xEB 0x00EB # LATIN SMALL LETTER E WITH DIAERESIS
+0xEC 0x00EC # LATIN SMALL LETTER I WITH GRAVE
+0xED 0x00ED # LATIN SMALL LETTER I WITH ACUTE
+0xEE 0x00EE # LATIN SMALL LETTER I WITH CIRCUMFLEX
+0xEF 0x00EF # LATIN SMALL LETTER I WITH DIAERESIS
+0xF0 0x011F # LATIN SMALL LETTER G WITH BREVE
+0xF1 0x00F1 # LATIN SMALL LETTER N WITH TILDE
+0xF2 0x00F2 # LATIN SMALL LETTER O WITH GRAVE
+0xF3 0x00F3 # LATIN SMALL LETTER O WITH ACUTE
+0xF4 0x00F4 # LATIN SMALL LETTER O WITH CIRCUMFLEX
+0xF5 0x00F5 # LATIN SMALL LETTER O WITH TILDE
+0xF6 0x00F6 # LATIN SMALL LETTER O WITH DIAERESIS
+0xF7 0x00F7 # DIVISION SIGN
+0xF8 0x00F8 # LATIN SMALL LETTER O WITH STROKE
+0xF9 0x00F9 # LATIN SMALL LETTER U WITH GRAVE
+0xFA 0x00FA # LATIN SMALL LETTER U WITH ACUTE
+0xFB 0x00FB # LATIN SMALL LETTER U WITH CIRCUMFLEX
+0xFC 0x00FC # LATIN SMALL LETTER U WITH DIAERESIS
+0xFD 0x0131 # LATIN SMALL LETTER DOTLESS I
+0xFE 0x015F # LATIN SMALL LETTER S WITH CEDILLA
+0xFF 0x00FF # LATIN SMALL LETTER Y WITH DIAERESIS
+
+
diff --git a/externals/figlet/fonts/banner.flf b/externals/figlet/fonts/banner.flf
new file mode 100644
index 000000000..8fc3489f2
--- /dev/null
+++ b/externals/figlet/fonts/banner.flf
@@ -0,0 +1,2494 @@
+flf2a$ 8 7 54 0 12 0 64 185
+banner.flf version 2 by Ryan Youck (youck@cs.uregina.ca)
+(From a unix program called banner)
+I am not responsible for use of this font
+Thanks to Glenn Chappell for his help
+Katakana characters by Vinney Thai <ssfiit@eris.cs.umb.edu>
+Cyrillic characters from "koi8x8" BDF font.
+Date: August 11, 1994
+
+Merged by John Cowan <cowan@ccil.org>
+Modified by Paul Burton <solution@earthlink.net> 12/96 to include new parameter
+supported by FIGlet and FIGWin. May also be slightly modified for better use
+of new full-width/kern/smush alternatives, but default output is NOT changed.
+ $ $@
+ $ $@
+ $ $@
+ $ $@
+ $ $@
+ $ $@
+ $ $@
+ $ $@@
+ ###$@
+ ###$@
+ ###$@
+ # $@
+ $@
+ ###$@
+ ###$@
+ $@@
+ ### ###$@
+ ### ###$@
+ # # $@
+ $ $@
+ $ $@
+ $@
+ $@
+ $@@
+ # # $@
+ # # $@
+ #######$@
+ # # $@
+ #######$@
+ # # $@
+ # # $@
+ $@@
+ ##### $@
+ # # #$@
+ # # $@
+ ##### $@
+ # #$@
+ # # #$@
+ ##### $@
+ $@@
+ ### #$@
+ # # # $@
+ ### # $@
+ # $@
+ # ###$@
+ # # #$@
+ # ###$@
+ $@@
+ ## $@
+ # # $@
+ ## $@
+ ### $@
+ # # #$@
+ # # $@
+ ### #$@
+ $@@
+ ###$@
+ ###$@
+ # $@
+ # $@
+ $@
+ $@
+ $@
+ $@@
+ ##$@
+ # $@
+ # $@
+ # $@
+ # $@
+ # $@
+ ##$@
+ $@@
+ ## $@
+ # $@
+ #$@
+ #$@
+ #$@
+ # $@
+ ## $@
+ $@@
+ $@
+ # # $@
+ # # $@
+ #######$@
+ # # $@
+ # # $@
+ $@
+ $@@
+ $@
+ # $@
+ # $@
+ #####$@
+ # $@
+ # $@
+ $@
+ $@@
+ $@
+ $@
+ $@
+ $@
+ ###$@
+ ###$@
+ # $@
+ # $@@
+ $@
+ $@
+ $@
+ #####$@
+ $@
+ $@
+ $@
+ $@@
+ $@
+ $@
+ $@
+ $@
+ ###$@
+ ###$@
+ ###$@
+ $@@
+ #$@
+ # $@
+ # $@
+ # $@
+ # $@
+ # $@
+ # $@
+ $@@
+ ### $@
+ # # $@
+ # #$@
+ # #$@
+ # #$@
+ # # $@
+ ### $@
+ $@@
+ # $@
+ ## $@
+ # # $@
+ # $@
+ # $@
+ # $@
+ #####$@
+ $@@
+ ##### $@
+ # #$@
+ #$@
+ ##### $@
+ # $@
+ # $@
+ #######$@
+ $@@
+ ##### $@
+ # #$@
+ #$@
+ ##### $@
+ #$@
+ # #$@
+ ##### $@
+ $@@
+ # $@
+ # # $@
+ # # $@
+ # # $@
+ #######$@
+ # $@
+ # $@
+ $@@
+ #######$@
+ # $@
+ # $@
+ ###### $@
+ #$@
+ # #$@
+ ##### $@
+ $@@
+ ##### $@
+ # #$@
+ # $@
+ ###### $@
+ # #$@
+ # #$@
+ ##### $@
+ $@@
+ #######$@
+ # # $@
+ # $@
+ # $@
+ # $@
+ # $@
+ # $@
+ $@@
+ ##### $@
+ # #$@
+ # #$@
+ ##### $@
+ # #$@
+ # #$@
+ ##### $@
+ $@@
+ ##### $@
+ # #$@
+ # #$@
+ ######$@
+ #$@
+ # #$@
+ ##### $@
+ $@@
+ # $@
+ ###$@
+ # $@
+ $@
+ # $@
+ ###$@
+ # $@
+ $@@
+ $@
+ ###$@
+ ###$@
+ $@
+ ###$@
+ ###$@
+ # $@
+ # $@@
+ #$@
+ # $@
+ # $@
+ # $@
+ # $@
+ # $@
+ #$@
+ $@@
+ $@
+ $@
+ #####$@
+ $@
+ #####$@
+ $@
+ $@
+ $@@
+ # $@
+ # $@
+ # $@
+ #$@
+ # $@
+ # $@
+ # $@
+ $@@
+ ##### $@
+ # #$@
+ #$@
+ ### $@
+ # $@
+ $@
+ # $@
+ $@@
+ ##### $@
+ # #$@
+ # ### #$@
+ # ### #$@
+ # #### $@
+ # $@
+ ##### $@
+ $@@
+ # $@
+ # # $@
+ # # $@
+ # #$@
+ #######$@
+ # #$@
+ # #$@
+ $@@
+ ###### $@
+ # #$@
+ # #$@
+ ###### $@
+ # #$@
+ # #$@
+ ###### $@
+ $@@
+ ##### $@
+ # #$@
+ # $@
+ # $@
+ # $@
+ # #$@
+ ##### $@
+ $@@
+ ###### $@
+ # #$@
+ # #$@
+ # #$@
+ # #$@
+ # #$@
+ ###### $@
+ $@@
+ #######$@
+ # $@
+ # $@
+ ##### $@
+ # $@
+ # $@
+ #######$@
+ $@@
+ #######$@
+ # $@
+ # $@
+ ##### $@
+ # $@
+ # $@
+ # $@
+ $@@
+ ##### $@
+ # #$@
+ # $@
+ # ####$@
+ # #$@
+ # #$@
+ ##### $@
+ $@@
+ # #$@
+ # #$@
+ # #$@
+ #######$@
+ # #$@
+ # #$@
+ # #$@
+ $@@
+ ###$@
+ # $@
+ # $@
+ # $@
+ # $@
+ # $@
+ ###$@
+ $@@
+ #$@
+ #$@
+ #$@
+ #$@
+ # #$@
+ # #$@
+ ##### $@
+ $@@
+ # #$@
+ # # $@
+ # # $@
+ ### $@
+ # # $@
+ # # $@
+ # #$@
+ $@@
+ # $@
+ # $@
+ # $@
+ # $@
+ # $@
+ # $@
+ #######$@
+ $@@
+ # #$@
+ ## ##$@
+ # # # #$@
+ # # #$@
+ # #$@
+ # #$@
+ # #$@
+ $@@
+ # #$@
+ ## #$@
+ # # #$@
+ # # #$@
+ # # #$@
+ # ##$@
+ # #$@
+ $@@
+ #######$@
+ # #$@
+ # #$@
+ # #$@
+ # #$@
+ # #$@
+ #######$@
+ $@@
+ ###### $@
+ # #$@
+ # #$@
+ ###### $@
+ # $@
+ # $@
+ # $@
+ $@@
+ ##### $@
+ # #$@
+ # #$@
+ # #$@
+ # # #$@
+ # # $@
+ #### #$@
+ $@@
+ ###### $@
+ # #$@
+ # #$@
+ ###### $@
+ # # $@
+ # # $@
+ # #$@
+ $@@
+ ##### $@
+ # #$@
+ # $@
+ ##### $@
+ #$@
+ # #$@
+ ##### $@
+ $@@
+ #######$@
+ # $@
+ # $@
+ # $@
+ # $@
+ # $@
+ # $@
+ $@@
+ # #$@
+ # #$@
+ # #$@
+ # #$@
+ # #$@
+ # #$@
+ ##### $@
+ $@@
+ # #$@
+ # #$@
+ # #$@
+ # #$@
+ # # $@
+ # # $@
+ # $@
+ $@@
+ # #$@
+ # # #$@
+ # # #$@
+ # # #$@
+ # # #$@
+ # # #$@
+ ## ## $@
+ $@@
+ # #$@
+ # # $@
+ # # $@
+ # $@
+ # # $@
+ # # $@
+ # #$@
+ $@@
+ # #$@
+ # # $@
+ # # $@
+ # $@
+ # $@
+ # $@
+ # $@
+ $@@
+ #######$@
+ # $@
+ # $@
+ # $@
+ # $@
+ # $@
+ #######$@
+ $@@
+ #####$@
+ # $@
+ # $@
+ # $@
+ # $@
+ # $@
+ #####$@
+ $@@
+ # $@
+ # $@
+ # $@
+ # $@
+ # $@
+ # $@
+ #$@
+ $@@
+ #####$@
+ #$@
+ #$@
+ #$@
+ #$@
+ #$@
+ #####$@
+ $@@
+ # $@
+ # # $@
+ # #$@
+ $@
+ $@
+ $@
+ $@
+ $@@
+ $@
+ $@
+ $@
+ $@
+ $@
+ $@
+ $@
+ #######$@@
+ ###$@
+ ###$@
+ # $@
+ #$@
+ $@
+ $@
+ $@
+ $@@
+ $@
+ ## $@
+ # # $@
+ # #$@
+ ######$@
+ # #$@
+ # #$@
+ $@@
+ $@
+ ##### $@
+ # #$@
+ ##### $@
+ # #$@
+ # #$@
+ ##### $@
+ $@@
+ $@
+ #### $@
+ # #$@
+ # $@
+ # $@
+ # #$@
+ #### $@
+ $@@
+ $@
+ ##### $@
+ # #$@
+ # #$@
+ # #$@
+ # #$@
+ ##### $@
+ $@@
+ $@
+ ######$@
+ # $@
+ ##### $@
+ # $@
+ # $@
+ ######$@
+ $@@
+ $@
+ ######$@
+ # $@
+ ##### $@
+ # $@
+ # $@
+ # $@
+ $@@
+ $@
+ #### $@
+ # #$@
+ # $@
+ # ###$@
+ # #$@
+ #### $@
+ $@@
+ $@
+ # #$@
+ # #$@
+ ######$@
+ # #$@
+ # #$@
+ # #$@
+ $@@
+ $@
+ #$@
+ #$@
+ #$@
+ #$@
+ #$@
+ #$@
+ $@@
+ $@
+ #$@
+ #$@
+ #$@
+ #$@
+ # #$@
+ #### $@
+ $@@
+ $@
+ # #$@
+ # # $@
+ #### $@
+ # # $@
+ # # $@
+ # #$@
+ $@@
+ $@
+ # $@
+ # $@
+ # $@
+ # $@
+ # $@
+ ######$@
+ $@@
+ $@
+ # #$@
+ ## ##$@
+ # ## #$@
+ # #$@
+ # #$@
+ # #$@
+ $@@
+ $@
+ # #$@
+ ## #$@
+ # # #$@
+ # # #$@
+ # ##$@
+ # #$@
+ $@@
+ $@
+ #### $@
+ # #$@
+ # #$@
+ # #$@
+ # #$@
+ #### $@
+ $@@
+ $@
+ ##### $@
+ # #$@
+ # #$@
+ ##### $@
+ # $@
+ # $@
+ $@@
+ $@
+ #### $@
+ # #$@
+ # #$@
+ # # #$@
+ # # $@
+ ### #$@
+ $@@
+ $@
+ ##### $@
+ # #$@
+ # #$@
+ ##### $@
+ # # $@
+ # #$@
+ $@@
+ $@
+ #### $@
+ # $@
+ #### $@
+ #$@
+ # #$@
+ #### $@
+ $@@
+ $@
+ #####$@
+ # $@
+ # $@
+ # $@
+ # $@
+ # $@
+ $@@
+ $@
+ # #$@
+ # #$@
+ # #$@
+ # #$@
+ # #$@
+ #### $@
+ $@@
+ $@
+ # #$@
+ # #$@
+ # #$@
+ # #$@
+ # # $@
+ ## $@
+ $@@
+ $@
+ # #$@
+ # #$@
+ # #$@
+ # ## #$@
+ ## ##$@
+ # #$@
+ $@@
+ $@
+ # #$@
+ # # $@
+ ## $@
+ ## $@
+ # # $@
+ # #$@
+ $@@
+ $@
+ # #$@
+ # # $@
+ # $@
+ # $@
+ # $@
+ # $@
+ $@@
+ $@
+ ######$@
+ # $@
+ # $@
+ # $@
+ # $@
+ ######$@
+ $@@
+ ###$@
+ # $@
+ # $@
+ ## $@
+ # $@
+ # $@
+ ###$@
+ $@@
+ #$@
+ #$@
+ #$@
+ $@
+ #$@
+ #$@
+ #$@
+ $@@
+ ### $@
+ # $@
+ # $@
+ ##$@
+ # $@
+ # $@
+ ### $@
+ $@@
+ ## $@
+ # # #$@
+ ## $@
+ $@
+ $@
+ $@
+ $@
+ $@@
+ # # #$@
+ # # $@
+ # # $@
+ # #$@
+ #######$@
+ # #$@
+ # #$@
+ $@@
+ # #$@
+ ##### $@
+ # #$@
+ # #$@
+ # #$@
+ # #$@
+ ##### $@
+ $@@
+ # #$@
+ $@
+ # #$@
+ # #$@
+ # #$@
+ # #$@
+ ##### $@
+ $@@
+ $@
+ # #$@
+ #### $@
+ # #$@
+ ######$@
+ # #$@
+ # #$@
+ $@@
+ $@
+ # #$@
+ #### $@
+ # #$@
+ # #$@
+ # #$@
+ #### $@
+ $@@
+ $@
+ # #$@
+ $@
+ # #$@
+ # #$@
+ # #$@
+ #### $@
+ $@@
+ ###### $@
+ # #$@
+ # #$@
+ ###### $@
+ # #$@
+ # #$@
+ ###### $@
+ # $@@
+160 NO-BREAK SPACE
+ $@
+ $@
+ $@
+ $@
+ ########$@
+ ## $@
+ ## $@
+ ## $@@
+169 COPYRIGHT SIGN
+ $@
+ $@
+ $@
+ $@
+ $@
+ $@
+ $@
+ $@@
+176 DEGREE SIGN
+ $@
+ $@
+ $@
+ $@
+ ########$@
+ $@
+ $@
+ $@@
+178 SUPERSCRIPT TWO
+ ## $@
+ ## $@
+ ## $@
+ ## $@
+ ########$@
+ ## $@
+ ## $@
+ ## $@@
+183 MIDDLE DOT
+ ## $@
+ ## $@
+ #####$@
+ ## $@
+ #####$@
+ ## $@
+ ## $@
+ ## $@@
+196 LATIN CAPITAL LETTER A WITH DIAERESIS
+ # # #$@
+ # # $@
+ # # $@
+ # #$@
+ #######$@
+ # #$@
+ # #$@
+ $@@
+214 LATIN CAPITAL LETTER O WITH DIAERESIS
+ # #$@
+ ##### $@
+ # #$@
+ # #$@
+ # #$@
+ # #$@
+ ##### $@
+ $@@
+220 LATIN CAPITAL LETTER U WITH DIAERESIS
+ # #$@
+ $@
+ # #$@
+ # #$@
+ # #$@
+ # #$@
+ ##### $@
+ $@@
+223 LATIN SMALL LETTER SHARP S
+ ###### $@
+ # #$@
+ # #$@
+ ###### $@
+ # #$@
+ # #$@
+ ###### $@
+ # $@@
+228 LATIN SMALL LETTER A WITH DIAERESIS
+ $@
+ # #$@
+ #### $@
+ # #$@
+ ######$@
+ # #$@
+ # #$@
+ $@@
+246 LATIN SMALL LETTER O WITH DIAERESIS
+ $@
+ # #$@
+ #### $@
+ # #$@
+ # #$@
+ # #$@
+ #### $@
+ $@@
+247 DIVISION SIGN
+ #### $@
+ #### $@
+ #### $@
+ #### $@
+ #####$@
+ #### $@
+ #### $@
+ #### $@@
+252 LATIN SMALL LETTER U WITH DIAERESIS
+ $@
+ # #$@
+ $@
+ # #$@
+ # #$@
+ # #$@
+ #### $@
+ $@@
+0x0401 CYRILLIC CAPITAL LETTER IO
+ ########$@
+ ########$@
+ ########$@
+ ########$@
+ ########$@
+ ########$@
+ ########$@
+ ########$@@
+0x0410 CYRILLIC CAPITAL LETTER A
+ ####$@
+ ## ##$@
+ ## ##$@
+ ## ##$@
+ #######$@
+ ## ##$@
+ ## ##$@
+ $@@
+0x0411 CYRILLIC CAPITAL LETTER BE
+ #######$@
+ ## $@
+ ## $@
+ ###### $@
+ ## ##$@
+ ## ##$@
+ ###### $@
+ $@@
+0x0412 CYRILLIC CAPITAL LETTER VE
+ ###### $@
+ ## ##$@
+ ## ##$@
+ ###### $@
+ ## ##$@
+ ## ##$@
+ ###### $@
+ $@@
+0x0413 CYRILLIC CAPITAL LETTER GHE
+ #######$@
+ ## $@
+ ## $@
+ ## $@
+ ## $@
+ ## $@
+ ## $@
+ $@@
+0x0414 CYRILLIC CAPITAL LETTER DE
+ #### $@
+ ## ## $@
+ ## ## $@
+ ## ## $@
+ ## ## $@
+ #######$@
+ ## ##$@
+ $@@
+0x0415 CYRILLIC CAPITAL LETTER IE
+ #######$@
+ ## $@
+ ## $@
+ ###### $@
+ ## $@
+ ## $@
+ #######$@
+ $@@
+0x0416 CYRILLIC CAPITAL LETTER ZHE
+ ## # ##$@
+ # # # $@
+ ### $@
+ ### $@
+ # # # $@
+ # # # $@
+ ## # ##$@
+ $@@
+0x0417 CYRILLIC CAPITAL LETTER ZE
+ ##### $@
+ ## ##$@
+ ##$@
+ ## $@
+ ##$@
+ ## ##$@
+ ##### $@
+ $@@
+0x0418 CYRILLIC CAPITAL LETTER I
+ ## ##$@
+ ## ###$@
+ ## ###$@
+ ## # ##$@
+ ### ##$@
+ ## ##$@
+ ## ##$@
+ $@@
+0x0419 CYRILLIC CAPITAL LETTER SHORT I
+ ## ## #$@
+ ## ##$@
+ ## ###$@
+ ## # ##$@
+ ### ##$@
+ ## ##$@
+ ## ##$@
+ $@@
+0x041A CYRILLIC CAPITAL LETTER KA
+ ## ##$@
+ ## ## $@
+ ## ## $@
+ ##### $@
+ ## ## $@
+ ## ##$@
+ ## ##$@
+ $@@
+0x041B CYRILLIC CAPITAL LETTER EL
+ #####$@
+ ## ##$@
+ ## ##$@
+ ## ##$@
+ ## ##$@
+ ## ##$@
+ ## ##$@
+ $@@
+0x041C CYRILLIC CAPITAL LETTER EM
+ ## ##$@
+ ## ##$@
+ ### ###$@
+ ## # ##$@
+ ## ##$@
+ ## ##$@
+ ## ##$@
+ $@@
+0x041D CYRILLIC CAPITAL LETTER EN
+ ## ##$@
+ ## ##$@
+ ## ##$@
+ #######$@
+ ## ##$@
+ ## ##$@
+ ## ##$@
+ $@@
+0x041E CYRILLIC CAPITAL LETTER O
+ ##### $@
+ ## ##$@
+ ## ##$@
+ ## ##$@
+ ## ##$@
+ ## ##$@
+ ##### $@
+ $@@
+0x041F CYRILLIC CAPITAL LETTER PE
+ #######$@
+ ## ##$@
+ ## ##$@
+ ## ##$@
+ ## ##$@
+ ## ##$@
+ ## ##$@
+ $@@
+0x0420 CYRILLIC CAPITAL LETTER ER
+ ###### $@
+ ## ##$@
+ ## ##$@
+ ###### $@
+ ## $@
+ ## $@
+ ## $@
+ $@@
+0x0421 CYRILLIC CAPITAL LETTER ES
+ ##### $@
+ ## ##$@
+ ## $@
+ ## $@
+ ## $@
+ ## ##$@
+ ##### $@
+ $@@
+0x0422 CYRILLIC CAPITAL LETTER TE
+ ###### $@
+ ## $@
+ ## $@
+ ## $@
+ ## $@
+ ## $@
+ ## $@
+ $@@
+0x0423 CYRILLIC CAPITAL LETTER U
+ ## ##$@
+ ## ##$@
+ ## ##$@
+ ######$@
+ ##$@
+ ## ##$@
+ ##### $@
+ $@@
+0x0424 CYRILLIC CAPITAL LETTER EF
+ # $@
+ ##### $@
+ ## # ##$@
+ ## # ##$@
+ ## # ##$@
+ ##### $@
+ # $@
+ $@@
+0x0425 CYRILLIC CAPITAL LETTER HA
+ ## ##$@
+ ## ## $@
+ ### $@
+ ### $@
+ ### $@
+ ## ## $@
+ ## ##$@
+ $@@
+0x0426 CYRILLIC CAPITAL LETTER TSE
+ ## ## $@
+ ## ## $@
+ ## ## $@
+ ## ## $@
+ ## ## $@
+ ## ## $@
+ #######$@
+ #$@@
+0x0427 CYRILLIC CAPITAL LETTER CHE
+ ## ##$@
+ ## ##$@
+ ## ##$@
+ ######$@
+ ##$@
+ ##$@
+ ##$@
+ $@@
+0x0428 CYRILLIC CAPITAL LETTER SHA
+ ## # ##$@
+ ## # ##$@
+ ## # ##$@
+ ## # ##$@
+ ## # ##$@
+ ## # ##$@
+ #######$@
+ $@@
+0x0429 CYRILLIC CAPITAL LETTER SHCHA
+ ## # ##$@
+ ## # ##$@
+ ## # ##$@
+ ## # ##$@
+ ## # ##$@
+ ## # ##$@
+ #######$@
+ #$@@
+0x042A CYRILLIC CAPITAL LETTER HARD SIGN
+ ### $@
+ ### $@
+ ## $@
+ ##### $@
+ ## ##$@
+ ## ##$@
+ ##### $@
+ $@@
+0x042B CYRILLIC CAPITAL LETTER YERU
+ ## ##$@
+ ## ##$@
+ ## ##$@
+ #### #$@
+ ## # #$@
+ ## # #$@
+ #### #$@
+ $@@
+0x042C CYRILLIC CAPITAL LETTER SOFT SIGN
+ ## $@
+ ## $@
+ ## $@
+ ###### $@
+ ## ##$@
+ ## ##$@
+ ###### $@
+ $@@
+0x042D CYRILLIC CAPITAL LETTER E
+ ##### $@
+ ## ##$@
+ ##$@
+ #####$@
+ ##$@
+ ## ##$@
+ ##### $@
+ $@@
+0x042E CYRILLIC CAPITAL LETTER YU
+ ## ## $@
+ ## # ##$@
+ ## # ##$@
+ #### ##$@
+ ## # ##$@
+ ## # ##$@
+ ## ## $@
+ $@@
+0x042F CYRILLIC CAPITAL LETTER YA
+ #####$@
+ ## ##$@
+ ## ##$@
+ #####$@
+ ## ##$@
+ ## ##$@
+ ## ##$@
+ $@@
+0x0430 CYRILLIC SMALL LETTER A
+ $@
+ $@
+ #### $@
+ ## $@
+ ##### $@
+ ## ## $@
+ ######$@
+ $@@
+0x0431 CYRILLIC SMALL LETTER BE
+ $@
+ ## $@
+ #### $@
+ ## $@
+ ###### $@
+ ## ##$@
+ ##### $@
+ $@@
+0x0432 CYRILLIC SMALL LETTER VE
+ $@
+ $@
+ ##### $@
+ ## ## $@
+ ###### $@
+ ## ##$@
+ ###### $@
+ $@@
+0x0433 CYRILLIC SMALL LETTER GHE
+ $@
+ $@
+ ##### $@
+ ##$@
+ ##### $@
+ ## $@
+ ######$@
+ $@@
+0x0434 CYRILLIC SMALL LETTER DE
+ $@
+ #### $@
+ ##$@
+ #####$@
+ ## ##$@
+ ## ##$@
+ ##### $@
+ $@@
+0x0435 CYRILLIC SMALL LETTER IE
+ $@
+ $@
+ ##### $@
+ ## ##$@
+ ###### $@
+ ## $@
+ ##### $@
+ $@@
+0x0436 CYRILLIC SMALL LETTER ZHE
+ $@
+ $@
+ ## # ##$@
+ # # # $@
+ ### $@
+ # # # $@
+ ## # ##$@
+ $@@
+0x0437 CYRILLIC SMALL LETTER ZE
+ $@
+ $@
+ ##### $@
+ ## ##$@
+ ### $@
+ ## ##$@
+ ##### $@
+ $@@
+0x0438 CYRILLIC SMALL LETTER I
+ $@
+ $@
+ ## ##$@
+ ## ###$@
+ ## # ##$@
+ ### ##$@
+ ## ##$@
+ $@@
+0x0439 CYRILLIC SMALL LETTER SHORT I
+ $@
+ ## $@
+ ## ##$@
+ ## ###$@
+ ## # ##$@
+ ### ##$@
+ ## ##$@
+ $@@
+0x043A CYRILLIC SMALL LETTER KA
+ $@
+ $@
+ ## ##$@
+ ## ## $@
+ ##### $@
+ ## ## $@
+ ## ##$@
+ $@@
+0x043B CYRILLIC SMALL LETTER EL
+ $@
+ $@
+ #####$@
+ ## ##$@
+ ## ##$@
+ ## ##$@
+ ## ##$@
+ $@@
+0x043C CYRILLIC SMALL LETTER EM
+ $@
+ $@
+ ## ##$@
+ ### ###$@
+ ## # ##$@
+ ## ##$@
+ ## ##$@
+ $@@
+0x043D CYRILLIC SMALL LETTER EN
+ $@
+ $@
+ ## ##$@
+ ## ##$@
+ #######$@
+ ## ##$@
+ ## ##$@
+ $@@
+0x043E CYRILLIC SMALL LETTER O
+ $@
+ $@
+ ##### $@
+ ## ##$@
+ ## ##$@
+ ## ##$@
+ ##### $@
+ $@@
+0x043F CYRILLIC SMALL LETTER PE
+ $@
+ $@
+ ###### $@
+ ## ##$@
+ ## ##$@
+ ## ##$@
+ ## ##$@
+ $@@
+0x0440 CYRILLIC SMALL LETTER ER
+ $@
+ $@
+ ###### $@
+ ## ##$@
+ ###### $@
+ ## $@
+ ## $@
+ $@@
+0x0441 CYRILLIC SMALL LETTER ES
+ $@
+ $@
+ ##### $@
+ ## $@
+ ## $@
+ ## $@
+ ##### $@
+ $@@
+0x0442 CYRILLIC SMALL LETTER TE
+ $@
+ $@
+ ###### $@
+ ## $@
+ ## $@
+ ## $@
+ ## $@
+ $@@
+0x0443 CYRILLIC SMALL LETTER U
+ $@
+ $@
+ ## ##$@
+ ## ##$@
+ ## ##$@
+ ######$@
+ ##$@
+ ##### $@@
+0x0444 CYRILLIC SMALL LETTER EF
+ $@
+ # $@
+ ##### $@
+ ## # ##$@
+ ## # ##$@
+ ##### $@
+ # $@
+ $@@
+0x0445 CYRILLIC SMALL LETTER HA
+ $@
+ $@
+ ## ##$@
+ ## ## $@
+ ### $@
+ ## ## $@
+ ## ##$@
+ $@@
+0x0446 CYRILLIC SMALL LETTER TSE
+ $@
+ $@
+ ## ##$@
+ ## ##$@
+ ## ##$@
+ ## ## $@
+ ### ##$@
+ #$@@
+0x0447 CYRILLIC SMALL LETTER CHE
+ $@
+ $@
+ ## ##$@
+ ## ##$@
+ ######$@
+ ##$@
+ ##$@
+ $@@
+0x0448 CYRILLIC SMALL LETTER SHA
+ $@
+ $@
+ ## # ##$@
+ ## # ##$@
+ ## # ##$@
+ ## # ##$@
+ #######$@
+ $@@
+0x0449 CYRILLIC SMALL LETTER SHCHA
+ $@
+ $@
+ ## # ##$@
+ ## # ##$@
+ ## # ##$@
+ ## # ##$@
+ #######$@
+ #$@@
+0x044A CYRILLIC SMALL LETTER HARD SIGN
+ $@
+ $@
+ ### $@
+ ## $@
+ ##### $@
+ ## ##$@
+ ##### $@
+ $@@
+0x044B CYRILLIC SMALL LETTER YERU
+ $@
+ $@
+ ## ##$@
+ ## ##$@
+ #### #$@
+ ## # #$@
+ #### #$@
+ $@@
+0x044C CYRILLIC SMALL LETTER SOFT SIGN
+ $@
+ $@
+ ## $@
+ ## $@
+ ###### $@
+ ## ##$@
+ ###### $@
+ $@@
+0x044D CYRILLIC SMALL LETTER E
+ $@
+ $@
+ ###### $@
+ ##$@
+ #####$@
+ ##$@
+ ###### $@
+ $@@
+0x044E CYRILLIC SMALL LETTER YU
+ $@
+ $@
+ # ### $@
+ # ## ##$@
+ #### ##$@
+ # ## ##$@
+ # ### $@
+ $@@
+0x044F CYRILLIC SMALL LETTER YA
+ $@
+ $@
+ #####$@
+ ## ##$@
+ #####$@
+ ## ##$@
+ ## ##$@
+ $@@
+0x0451 CYRILLIC SMALL LETTER IO
+ $@
+ $@
+ ########$@
+ $@
+ #### ###$@
+ ## ## $@
+ ## ## $@
+ ## ## $@@
+0x2219 BULLET OPERATOR
+ ## ##$@
+ ## ##$@
+ ## ##$@
+ ## ##$@
+ #######$@
+ $@
+ $@
+ $@@
+0x221A SQUARE ROOT
+ ## $@
+ ## $@
+ ##### $@
+ ## $@
+ ##### $@
+ $@
+ $@
+ $@@
+0x2248 ALMOST EQUAL TO
+ $@
+ $@
+ $@
+ $@
+ ##### $@
+ ## $@
+ ## $@
+ ## $@@
+0x2264 LESS-THAN OR EQUAL TO
+ ## $@
+ ## $@
+ ## $@
+ ## $@
+ #####$@
+ $@
+ $@
+ $@@
+0x2265 GREATER-THAN OR EQUAL TO
+ ## $@
+ ## $@
+ ## $@
+ ## $@
+ ########$@
+ $@
+ $@
+ $@@
+0x2320 TOP HALF INTEGRAL
+ $@
+ $@
+ #######$@
+ ##$@
+ #### ##$@
+ ## ##$@
+ ## ##$@
+ ## ##$@@
+0x2321 BOTTOM HALF INTEGRAL
+ ## $@
+ ## $@
+ ## $@
+ ## $@
+ #####$@
+ ## $@
+ ## $@
+ ## $@@
+0x2500 BOX DRAWINGS LIGHT HORIZONTAL
+ ## $@
+ $@
+ ## $@
+ ## $@
+ ## $@
+ ## ##$@
+ #### $@
+ $@@
+0x2502 BOX DRAWINGS LIGHT VERTICAL
+ $@
+ $@
+ $@
+ ######$@
+ ## $@
+ ## $@
+ $@
+ $@@
+0x250C BOX DRAWINGS LIGHT DOWN AND RIGHT
+ $@
+ $@
+ $@
+ ######$@
+ ##$@
+ ##$@
+ $@
+ $@@
+0x2510 BOX DRAWINGS LIGHT DOWN AND LEFT
+ ## ##$@
+ ## ## $@
+ ## ## $@
+ ## #### $@
+ ## ##$@
+ ## ## $@
+ ## ## $@
+ ####$@@
+0x2514 BOX DRAWINGS LIGHT UP AND RIGHT
+ ## ##$@
+ ## ## $@
+ ## ## $@
+ ## ## ##$@
+ ## ###$@
+ ## ####$@
+ ## ####$@
+ ##$@@
+0x2518 BOX DRAWINGS LIGHT UP AND LEFT
+ ## $@
+ ## $@
+ $@
+ ## $@
+ ## $@
+ ## $@
+ ## $@
+ $@@
+0x251C BOX DRAWINGS LIGHT VERTICAL AND RIGHT
+ $@
+ ## ##$@
+ ## ## $@
+ ## ## $@
+ ## ## $@
+ ## ##$@
+ $@
+ $@@
+0x2524 BOX DRAWINGS LIGHT VERTICAL AND LEFT
+ $@
+ ## ## $@
+ ## ## $@
+ ## ##$@
+ ## ## $@
+ ## ## $@
+ $@
+ $@@
+0x252C BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
+ # #$@
+ # # $@
+ # #$@
+ # # $@
+ # #$@
+ # # $@
+ # #$@
+ # # $@@
+0x2534 BOX DRAWINGS LIGHT UP AND HORIZONTAL
+ # # # #$@
+ # # # # $@
+ # # # #$@
+ # # # # $@
+ # # # #$@
+ # # # # $@
+ # # # #$@
+ # # # # $@@
+0x253C BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
+ ## ## ##$@
+ ### ###$@
+ ## ## ##$@
+ ### ### $@
+ ## ## ##$@
+ ### ###$@
+ ## ## ##$@
+ ### ### $@@
+0x2550 BOX DRAWINGS DOUBLE HORIZONTAL
+ ## ## $@
+ ## ## $@
+ ## ###$@
+ ## $@
+ ######$@
+ $@
+ $@
+ $@@
+0x2551 BOX DRAWINGS DOUBLE VERTICAL
+ $@
+ $@
+ ######$@
+ ## $@
+ ## ###$@
+ ## ## $@
+ ## ## $@
+ ## ## $@@
+0x2552 BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE
+ ## ## $@
+ ## ## $@
+ #### ###$@
+ $@
+ ########$@
+ $@
+ $@
+ $@@
+0x2553 BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE
+ #### $@
+ #### $@
+ #####$@
+ ## $@
+ #####$@
+ #### $@
+ #### $@
+ #### $@@
+0x2554 BOX DRAWINGS DOUBLE DOWN AND RIGHT
+ $@
+ $@
+ ########$@
+ $@
+ ########$@
+ $@
+ $@
+ $@@
+0x2555 BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE
+ #### $@
+ #### $@
+ #######$@
+ $@
+ #######$@
+ #### $@
+ #### $@
+ #### $@@
+0x2556 BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE
+ ## $@
+ ## $@
+ ########$@
+ $@
+ ########$@
+ $@
+ $@
+ $@@
+0x2557 BOX DRAWINGS DOUBLE DOWN AND LEFT
+ ## ## $@
+ ## ## $@
+ ## ## $@
+ ## ## $@
+ ########$@
+ $@
+ $@
+ $@@
+0x2558 BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE
+ $@
+ $@
+ ########$@
+ $@
+ ########$@
+ ## $@
+ ## $@
+ ## $@@
+0x2559 BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE
+ $@
+ $@
+ $@
+ $@
+ ########$@
+ ## ## $@
+ ## ## $@
+ ## ## $@@
+0x255A BOX DRAWINGS DOUBLE UP AND RIGHT
+ ## ## $@
+ ## ## $@
+ ## ## $@
+ ## ## $@
+ ######$@
+ $@
+ $@
+ $@@
+0x255B BOX DRAWINGS UP SINGLE AND LEFT DOUBLE
+ ## $@
+ ## $@
+ #####$@
+ ## $@
+ #####$@
+ $@
+ $@
+ $@@
+0x255C BOX DRAWINGS UP DOUBLE AND LEFT SINGLE
+ $@
+ $@
+ #####$@
+ ## $@
+ #####$@
+ ## $@
+ ## $@
+ ## $@@
+0x255D BOX DRAWINGS DOUBLE UP AND LEFT
+ $@
+ $@
+ $@
+ $@
+ ######$@
+ ## ## $@
+ ## ## $@
+ ## ## $@@
+0x255E BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE
+ ## ## $@
+ ## ## $@
+ ## ## $@
+ ## ## $@
+ ########$@
+ ## ## $@
+ ## ## $@
+ ## ## $@@
+0x255F BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE
+ ## $@
+ ## $@
+ ########$@
+ ## $@
+ ########$@
+ ## $@
+ ## $@
+ ## $@@
+0x2560 BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
+ ## $@
+ ## $@
+ ## $@
+ ## $@
+ ##### $@
+ $@
+ $@
+ $@@
+0x2561 BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE
+ $@
+ $@
+ $@
+ $@
+ #####$@
+ ## $@
+ ## $@
+ ## $@@
+0x2562 BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE
+ $@
+ $@
+ $@
+ $@
+ ########$@
+ ########$@
+ ########$@
+ ########$@@
+0x2563 BOX DRAWINGS DOUBLE VERTICAL AND LEFT
+ #### $@
+ #### $@
+ #### $@
+ #### $@
+ #### $@
+ #### $@
+ #### $@
+ #### $@@
+0x2564 BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE
+ ####$@
+ ####$@
+ ####$@
+ ####$@
+ ####$@
+ ####$@
+ ####$@
+ ####$@@
+0x2565 BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE
+ ########$@
+ ########$@
+ ########$@
+ ########$@
+ $@
+ $@
+ $@
+ $@@
+0x2566 BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
+ ### $@
+ ## ## $@
+ ## ## $@
+ ### $@
+ $@
+ $@
+ $@
+ $@@
+0x2567 BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE
+ $@
+ $@
+ $@
+ ## $@
+ ## $@
+ $@
+ $@
+ $@@
+0x2568 BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE
+ $@
+ $@
+ $@
+ $@
+ ## $@
+ $@
+ $@
+ $@@
+0x2569 BOX DRAWINGS DOUBLE UP AND HORIZONTAL
+ ####$@
+ ## $@
+ ## $@
+ ## $@
+ ### ## $@
+ ## ## $@
+ #### $@
+ ### $@@
+0x256A BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE
+ #### $@
+ ## ## $@
+ ## ## $@
+ ## ## $@
+ ## ## $@
+ $@
+ $@
+ $@@
+0x256B BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE
+ ### $@
+ ## $@
+ ## $@
+ ## $@
+ #### $@
+ $@
+ $@
+ $@@
+0x256C BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
+ $@
+ $@
+ #### $@
+ #### $@
+ #### $@
+ #### $@
+ $@
+ $@@
+0x2580 UPPER HALF BLOCK
+ ## $@
+ ## $@
+ ## $@
+ ## $@
+ ## $@
+ ## $@
+ ## $@
+ ## $@@
+0x2584 LOWER HALF BLOCK
+ ## $@
+ ## $@
+ ## $@
+ ## $@
+ ##### $@
+ ## $@
+ ## $@
+ ## $@@
+0x2588 FULL BLOCK
+ ## $@
+ ## $@
+ ##### $@
+ ## $@
+ ##### $@
+ ## $@
+ ## $@
+ ## $@@
+0x258C LEFT HALF BLOCK
+ ####$@
+ ####$@
+ ####$@
+ ####$@
+ ######$@
+ ####$@
+ ####$@
+ ####$@@
+0x2590 RIGHT HALF BLOCK
+ $@
+ $@
+ $@
+ $@
+ #######$@
+ ## ##$@
+ ## ##$@
+ ## ##$@@
+0x2591 LIGHT SHADE
+ $@
+ $@
+ ##### $@
+ ## $@
+ ##### $@
+ ## $@
+ ## $@
+ ## $@@
+0x2592 MEDIUM SHADE
+ ####$@
+ ####$@
+ ######$@
+ ##$@
+ ######$@
+ ####$@
+ ####$@
+ ####$@@
+0x2593 DARK SHADE
+ ####$@
+ ####$@
+ ####$@
+ ####$@
+ ####$@
+ ####$@
+ ####$@
+ ####$@@
+0x25A0 BLACK SQUARE
+ ## ##$@
+ ## ##$@
+ #### ##$@
+ ##$@
+ #######$@
+ $@
+ $@
+ $@@
+0x30A2 A
+ ##########$@
+ ### $@
+ # $@
+ # $@
+ # $@
+ # $@
+ # $@
+ $@@
+0x30A4 I
+ ##$@
+ ## $@
+ ## # $@
+ ## # $@
+ # $@
+ # $@
+ # $@
+ $@@
+0x30A6 U
+ # $@
+ ##########$@
+ # #$@
+ ## $@
+ ## $@
+ ## $@
+ ## $@
+ $@@
+0x30A8 E
+ $@
+ ####### $@
+ # $@
+ # $@
+ # $@
+ # $@
+ ##########$@
+ $@@
+0x30AA O
+ # $@
+ ##########$@
+ ## $@
+ ## # $@
+ ## # $@
+ ## ## $@
+ # $@
+ $@@
+0x30AB KA
+ # $@
+ ##########$@
+ # #$@
+ # #$@
+ # #$@
+ # # # $@
+ # # $@
+ $@@
+0x30AD KI
+ # # $@
+ # # $@
+ # # # $@
+ # $@
+ # # $@
+ # # $@
+ #$@
+ $@@
+0x30AF KU
+ # $@
+ ########$@
+ # #$@
+ # ## $@
+ ## $@
+ ## $@
+ ## $@
+ $@@
+0x30B1 KE
+ # $@
+ ########$@
+ # # $@
+ # # $@
+ # $@
+ # $@
+ # $@
+ $@@
+0x30B3 KO
+ $@
+ ##########$@
+ #$@
+ #$@
+ #$@
+ #$@
+ ######### $@
+ $@@
+0x30B5 SA
+ # # $@
+ ##########$@
+ # # $@
+ # $@
+ # $@
+ # $@
+ # $@
+ $@@
+0x30B7 SI (SHI)
+ # #$@
+ # # # $@
+ # # $@
+ ## $@
+ ## $@
+ ## $@
+ ## $@
+ $@@
+0x30B9 SU
+ ########$@
+ #$@
+ # $@
+ ## $@
+ ## # $@
+ ## # $@
+ # #$@
+ $@@
+0x30BB SE
+ # $@
+ # $@
+ ##########$@
+ # # $@
+ # $@
+ # $@
+ ###### $@
+ $@@
+0x30BD SO
+ # #$@
+ # #$@
+ # $@
+ # $@
+ ## $@
+ ## $@
+ ## $@
+ $@@
+0x30BF TA
+ # $@
+ #######$@
+ # # $@
+ # # # $@
+ ### $@
+ ## $@
+ ## $@
+ $@@
+0x30C1 TI (CHI)
+ ## $@
+ ###### $@
+ # $@
+ ##########$@
+ # $@
+ # $@
+ ## $@
+ $@@
+0x30C4 TU (TSU)
+ # # #$@
+ # # #$@
+ # $@
+ # $@
+ ## $@
+ ## $@
+ ## $@
+ $@@
+0x30C6 TE
+ ###### $@
+ $@
+ ##########$@
+ # $@
+ # $@
+ # $@
+ ## $@
+ $@@
+0x30C8 TO
+ # $@
+ # $@
+ ## $@
+ # # $@
+ # #$@
+ # $@
+ # $@
+ $@@
+0x30CA NA
+ # $@
+ ##########$@
+ # $@
+ # $@
+ # $@
+ # $@
+ ## $@
+ $@@
+0x30CB NI
+ $@
+ $@
+ ###### $@
+ $@
+ $@
+ ##########$@
+ $@
+ $@@
+0x30CC NU
+ ##########$@
+ #$@
+ # # $@
+ # ## $@
+ ## $@
+ ## # $@
+ ## # $@
+ $@@
+0x30CD NE
+ # $@
+ ##########$@
+ # $@
+ ### $@
+ ###### $@
+ ## # ##$@
+ # $@
+ $@@
+0x30CE NO
+ #$@
+ #$@
+ # $@
+ # $@
+ ## $@
+ ## $@
+ ## $@
+ $@@
+0x30CF HA
+ $@
+ $@
+ # # $@
+ # # $@
+ # #$@
+ # $@
+ $@
+ $@@
+0x30D2 HI
+ # $@
+ # ### $@
+ #### $@
+ # $@
+ # $@
+ # $@
+ #######$@
+ $@@
+0x30D5 HU (FU)
+ ########$@
+ #$@
+ #$@
+ # $@
+ ## $@
+ ## $@
+ ## $@
+ $@@
+0x30D8 HE
+ $@
+ $@
+ ## $@
+ # ## $@
+ # ## $@
+ ##$@
+ $@
+ $@@
+0x30DB HO
+ # $@
+ ##########$@
+ # $@
+ # # # $@
+ # # # $@
+ # ## #$@
+ # $@
+ $@@
+0x30DE MA
+ $@
+ ##########$@
+ # $@
+ # $@
+ # # $@
+ # $@
+ # $@
+ $@@
+0x30DF MI
+ #### $@
+ ##$@
+ ### $@
+ ###$@
+ $@
+ ### $@
+ ###$@
+ $@@
+0x30E0 MU
+ # $@
+ # $@
+ # $@
+ # $@
+ # # $@
+ ######### $@
+ #$@
+ $@@
+0x30E1 ME
+ #$@
+ # $@
+ # # $@
+ # # $@
+ # $@
+ ## # $@
+ ## # $@
+ $@@
+0x30E2 MO
+ ###### $@
+ # $@
+ ##########$@
+ # $@
+ # $@
+ # $@
+ #### $@
+ $@@
+0x30E4 YA
+ # ## $@
+ # ## # $@
+ ### $@
+ # # $@
+ # $@
+ # $@
+ # $@
+ $@@
+0x30E6 YU
+ $@
+ ###### $@
+ # $@
+ # $@
+ # $@
+ ##########$@
+ $@
+ $@@
+0x30E8 YO
+ $@
+ ###### $@
+ # $@
+ # $@
+ # $@
+ ##########$@
+ $@
+ $@@
+0x30E9 RA
+ ###### $@
+ $@
+ ##########$@
+ # #$@
+ ## $@
+ ## $@
+ ## $@
+ $@@
+0x30EA RI
+ # #$@
+ # #$@
+ # #$@
+ # #$@
+ # $@
+ # $@
+ ## $@
+ $@@
+0x30EB RU
+ # # $@
+ # # $@
+ # # $@
+ # # #$@
+ # # # $@
+ # # # $@
+ # ## $@
+ $@@
+0x30EC RE
+ # $@
+ # $@
+ # $@
+ # ##$@
+ # ## $@
+ # ## $@
+ ## $@
+ $@@
+0x30ED RO
+ $@
+ #########$@
+ # #$@
+ # #$@
+ # #$@
+ #########$@
+ $@
+ $@@
+0x30EF WA
+ ##########$@
+ # #$@
+ # $@
+ # $@
+ # $@
+ ## $@
+ ## $@
+ $@@
+0x30F0 WI
+ # $@
+ ####### $@
+ # # $@
+ # # $@
+ ##########$@
+ # $@
+ # $@
+ $@@
+0x30F1 WE
+ #########$@
+ #$@
+ #$@
+ ######## $@
+ # $@
+ # $@
+ ######## $@
+ $@@
+0x30F2 WO
+ ##########$@
+ #$@
+ # $@
+ ######## $@
+ ## $@
+ ## $@
+ ## $@
+ $@@
+0x30F3 N
+ #$@
+ # #$@
+ # # $@
+ # $@
+ ## $@
+ ## $@
+ ## $@
+ $@@
+-0x0004 KATAMAP
+ @
+a-A i-B u-C e-D o-E ka-F ki-G ku-H ke-I ko-J @
+sa-K shi-L su-M se-N so-O ta-P chi-Q tsu-R te-S to-T@
+na-U ni-V nu-W ne-X no-Y ha-Z hi-a fu-b he-c ho-d @
+ma-e mi-f mu-g me-h mo-i ya-j yu-k we-l yo-m @
+ra-n ri-o ru-p re-q ro-r wa-s wi-t wo-u @
+n-v @
+ @@
+-0x0006 MOSCOWMAP
+a-a, b-b, v-v, g-g, d-d, e-e, zh-j, z-z, i-i@
+short i->, k-k, l-l, m-m, n-n, o-o, p-p, r-r@
+s-s, t-t, u-u, f-f, kh-h, ts-q, ch-c, sh-w @
+shch-x, hard-\, yeru-|, soft-/, reverse e-~ @
+yu-`, ya-y @
+Capitals use Latin capital letters, except: @
+Reverse E-<, Yu-@ @
+No caps for short i, hard, yeru, soft. @@
diff --git a/externals/figlet/fonts/big.flf b/externals/figlet/fonts/big.flf
new file mode 100644
index 000000000..07c468c9e
--- /dev/null
+++ b/externals/figlet/fonts/big.flf
@@ -0,0 +1,2204 @@
+flf2a$ 8 6 59 15 10 0 24463 153
+Big by Glenn Chappell 4/93 -- based on Standard
+Includes ISO Latin-1
+Greek characters by Bruce Jakeway <pbjakeway@neumann.uwaterloo.ca>
+figlet release 2.2 -- November 1996
+Permission is hereby given to modify this font, as long as the
+modifier's name is placed on a comment line.
+
+Modified by Paul Burton <solution@earthlink.net> 12/96 to include new parameter
+supported by FIGlet and FIGWin. May also be slightly modified for better use
+of new full-width/kern/smush alternatives, but default output is NOT changed.
+ $@
+ $@
+ $@
+ $@
+ $@
+ $@
+ $@
+ $@@
+ _ @
+ | |@
+ | |@
+ | |@
+ |_|@
+ (_)@
+ @
+ @@
+ _ _ @
+ ( | )@
+ V V @
+ $ @
+ $ @
+ $ @
+ @
+ @@
+ _ _ @
+ _| || |_ @
+ |_ __ _|@
+ _| || |_ @
+ |_ __ _|@
+ |_||_| @
+ @
+ @@
+ _ @
+ | | @
+ / __)@
+ \__ \@
+ ( /@
+ |_| @
+ @
+ @@
+ _ __@
+ (_) / /@
+ / / @
+ / / @
+ / / _ @
+ /_/ (_)@
+ @
+ @@
+ @
+ ___ @
+ ( _ ) @
+ / _ \/\@
+ | (_> <@
+ \___/\/@
+ @
+ @@
+ _ @
+ ( )@
+ |/ @
+ $ @
+ $ @
+ $ @
+ @
+ @@
+ __@
+ / /@
+ | | @
+ | | @
+ | | @
+ | | @
+ \_\@
+ @@
+ __ @
+ \ \ @
+ | |@
+ | |@
+ | |@
+ | |@
+ /_/ @
+ @@
+ _ @
+ /\| |/\ @
+ \ ` ' / @
+ |_ _|@
+ / , . \ @
+ \/|_|\/ @
+ @
+ @@
+ @
+ _ @
+ _| |_ @
+ |_ _|@
+ |_| @
+ $ @
+ @
+ @@
+ @
+ @
+ @
+ @
+ _ @
+ ( )@
+ |/ @
+ @@
+ @
+ @
+ ______ @
+ |______|@
+ $ @
+ $ @
+ @
+ @@
+ @
+ @
+ @
+ @
+ _ @
+ (_)@
+ @
+ @@
+ __@
+ / /@
+ / / @
+ / / @
+ / / @
+ /_/ @
+ @
+ @@
+ ___ @
+ / _ \ @
+ | | | |@
+ | | | |@
+ | |_| |@
+ \___/ @
+ @
+ @@
+ __ @
+ /_ |@
+ | |@
+ | |@
+ | |@
+ |_|@
+ @
+ @@
+ ___ @
+ |__ \ @
+ $) |@
+ / / @
+ / /_ @
+ |____|@
+ @
+ @@
+ ____ @
+ |___ \ @
+ __) |@
+ |__ < @
+ ___) |@
+ |____/ @
+ @
+ @@
+ _ _ @
+ | || | @
+ | || |_ @
+ |__ _|@
+ | | @
+ |_| @
+ @
+ @@
+ _____ @
+ | ____|@
+ | |__ @
+ |___ \ @
+ ___) |@
+ |____/ @
+ @
+ @@
+ __ @
+ / / @
+ / /_ @
+ | '_ \ @
+ | (_) |@
+ \___/ @
+ @
+ @@
+ ______ @
+ |____ |@
+ $/ / @
+ / / @
+ / / @
+ /_/ @
+ @
+ @@
+ ___ @
+ / _ \ @
+ | (_) |@
+ > _ < @
+ | (_) |@
+ \___/ @
+ @
+ @@
+ ___ @
+ / _ \ @
+ | (_) |@
+ \__, |@
+ / / @
+ /_/ @
+ @
+ @@
+ @
+ _ @
+ (_)@
+ $ @
+ _ @
+ (_)@
+ @
+ @@
+ @
+ _ @
+ (_)@
+ $ @
+ _ @
+ ( )@
+ |/ @
+ @@
+ __@
+ / /@
+ / / @
+ < < @
+ \ \ @
+ \_\@
+ @
+ @@
+ @
+ ______ @
+ |______|@
+ ______ @
+ |______|@
+ @
+ @
+ @@
+ __ @
+ \ \ @
+ \ \ @
+ > >@
+ / / @
+ /_/ @
+ @
+ @@
+ ___ @
+ |__ \ @
+ ) |@
+ / / @
+ |_| @
+ (_) @
+ @
+ @@
+ @
+ ____ @
+ / __ \ @
+ / / _` |@
+ | | (_| |@
+ \ \__,_|@
+ \____/ @
+ @@
+ @
+ /\ @
+ / \ @
+ / /\ \ @
+ / ____ \ @
+ /_/ \_\@
+ @
+ @@
+ ____ @
+ | _ \ @
+ | |_) |@
+ | _ < @
+ | |_) |@
+ |____/ @
+ @
+ @@
+ _____ @
+ / ____|@
+ | | $ @
+ | | $ @
+ | |____ @
+ \_____|@
+ @
+ @@
+ _____ @
+ | __ \ @
+ | | | |@
+ | | | |@
+ | |__| |@
+ |_____/ @
+ @
+ @@
+ ______ @
+ | ____|@
+ | |__ @
+ | __| @
+ | |____ @
+ |______|@
+ @
+ @@
+ ______ @
+ | ____|@
+ | |__ @
+ | __| @
+ | | @
+ |_| @
+ @
+ @@
+ _____ @
+ / ____|@
+ | | __ @
+ | | |_ |@
+ | |__| |@
+ \_____|@
+ @
+ @@
+ _ _ @
+ | | | |@
+ | |__| |@
+ | __ |@
+ | | | |@
+ |_| |_|@
+ @
+ @@
+ _____ @
+ |_ _|@
+ | | @
+ | | @
+ _| |_ @
+ |_____|@
+ @
+ @@
+ _ @
+ | |@
+ | |@
+ _ | |@
+ | |__| |@
+ \____/ @
+ @
+ @@
+ _ __@
+ | |/ /@
+ | ' / @
+ | < @
+ | . \ @
+ |_|\_\@
+ @
+ @@
+ _ @
+ | | @
+ | | @
+ | | @
+ | |____ @
+ |______|@
+ @
+ @@
+ __ __ @
+ | \/ |@
+ | \ / |@
+ | |\/| |@
+ | | | |@
+ |_| |_|@
+ @
+ @@
+ _ _ @
+ | \ | |@
+ | \| |@
+ | . ` |@
+ | |\ |@
+ |_| \_|@
+ @
+ @@
+ ____ @
+ / __ \ @
+ | | | |@
+ | | | |@
+ | |__| |@
+ \____/ @
+ @
+ @@
+ _____ @
+ | __ \ @
+ | |__) |@
+ | ___/ @
+ | | @
+ |_| @
+ @
+ @@
+ ____ @
+ / __ \ @
+ | | | |@
+ | | | |@
+ | |__| |@
+ \___\_\@
+ @
+ @@
+ _____ @
+ | __ \ @
+ | |__) |@
+ | _ / @
+ | | \ \ @
+ |_| \_\@
+ @
+ @@
+ _____ @
+ / ____|@
+ | (___ @
+ \___ \ @
+ ____) |@
+ |_____/ @
+ @
+ @@
+ _______ @
+ |__ __|@
+ | | @
+ | | @
+ | | @
+ |_| @
+ @
+ @@
+ _ _ @
+ | | | |@
+ | | | |@
+ | | | |@
+ | |__| |@
+ \____/ @
+ @
+ @@
+ __ __@
+ \ \ / /@
+ \ \ / / @
+ \ \/ / @
+ \ / @
+ \/ @
+ @
+ @@
+ __ __@
+ \ \ / /@
+ \ \ /\ / / @
+ \ \/ \/ / @
+ \ /\ / @
+ \/ \/ @
+ @
+ @@
+ __ __@
+ \ \ / /@
+ \ V / @
+ > < @
+ / . \ @
+ /_/ \_\@
+ @
+ @@
+ __ __@
+ \ \ / /@
+ \ \_/ / @
+ \ / @
+ | | @
+ |_| @
+ @
+ @@
+ ______@
+ |___ /@
+ $/ / @
+ / / @
+ / /__ @
+ /_____|@
+ @
+ @@
+ ___ @
+ | _|@
+ | | @
+ | | @
+ | | @
+ | |_ @
+ |___|@
+ @@
+ __ @
+ \ \ @
+ \ \ @
+ \ \ @
+ \ \ @
+ \_\@
+ @
+ @@
+ ___ @
+ |_ |@
+ | |@
+ | |@
+ | |@
+ _| |@
+ |___|@
+ @@
+ /\ @
+ |/\|@
+ $ @
+ $ @
+ $ @
+ $ @
+ @
+ @@
+ @
+ @
+ @
+ @
+ @
+ $ @
+ ______ @
+ |______|@@
+ _ @
+ ( )@
+ \|@
+ $ @
+ $ @
+ $ @
+ @
+ @@
+ @
+ @
+ __ _ @
+ / _` |@
+ | (_| |@
+ \__,_|@
+ @
+ @@
+ _ @
+ | | @
+ | |__ @
+ | '_ \ @
+ | |_) |@
+ |_.__/ @
+ @
+ @@
+ @
+ @
+ ___ @
+ / __|@
+ | (__ @
+ \___|@
+ @
+ @@
+ _ @
+ | |@
+ __| |@
+ / _` |@
+ | (_| |@
+ \__,_|@
+ @
+ @@
+ @
+ @
+ ___ @
+ / _ \@
+ | __/@
+ \___|@
+ @
+ @@
+ __ @
+ / _|@
+ | |_ @
+ | _|@
+ | | @
+ |_| @
+ @
+ @@
+ @
+ @
+ __ _ @
+ / _` |@
+ | (_| |@
+ \__, |@
+ __/ |@
+ |___/ @@
+ _ @
+ | | @
+ | |__ @
+ | '_ \ @
+ | | | |@
+ |_| |_|@
+ @
+ @@
+ _ @
+ (_)@
+ _ @
+ | |@
+ | |@
+ |_|@
+ @
+ @@
+ _ @
+ (_)@
+ _ @
+ | |@
+ | |@
+ | |@
+ _/ |@
+ |__/ @@
+ _ @
+ | | @
+ | | __@
+ | |/ /@
+ | < @
+ |_|\_\@
+ @
+ @@
+ _ @
+ | |@
+ | |@
+ | |@
+ | |@
+ |_|@
+ @
+ @@
+ @
+ @
+ _ __ ___ @
+ | '_ ` _ \ @
+ | | | | | |@
+ |_| |_| |_|@
+ @
+ @@
+ @
+ @
+ _ __ @
+ | '_ \ @
+ | | | |@
+ |_| |_|@
+ @
+ @@
+ @
+ @
+ ___ @
+ / _ \ @
+ | (_) |@
+ \___/ @
+ @
+ @@
+ @
+ @
+ _ __ @
+ | '_ \ @
+ | |_) |@
+ | .__/ @
+ | | @
+ |_| @@
+ @
+ @
+ __ _ @
+ / _` |@
+ | (_| |@
+ \__, |@
+ | |@
+ |_|@@
+ @
+ @
+ _ __ @
+ | '__|@
+ | | @
+ |_| @
+ @
+ @@
+ @
+ @
+ ___ @
+ / __|@
+ \__ \@
+ |___/@
+ @
+ @@
+ _ @
+ | | @
+ | |_ @
+ | __|@
+ | |_ @
+ \__|@
+ @
+ @@
+ @
+ @
+ _ _ @
+ | | | |@
+ | |_| |@
+ \__,_|@
+ @
+ @@
+ @
+ @
+ __ __@
+ \ \ / /@
+ \ V / @
+ \_/ @
+ @
+ @@
+ @
+ @
+ __ __@
+ \ \ /\ / /@
+ \ V V / @
+ \_/\_/ @
+ @
+ @@
+ @
+ @
+ __ __@
+ \ \/ /@
+ > < @
+ /_/\_\@
+ @
+ @@
+ @
+ @
+ _ _ @
+ | | | |@
+ | |_| |@
+ \__, |@
+ __/ |@
+ |___/ @@
+ @
+ @
+ ____@
+ |_ /@
+ / / @
+ /___|@
+ @
+ @@
+ __@
+ / /@
+ | | @
+ / / @
+ \ \ @
+ | | @
+ \_\@
+ @@
+ _ @
+ | |@
+ | |@
+ | |@
+ | |@
+ | |@
+ | |@
+ |_|@@
+ __ @
+ \ \ @
+ | | @
+ \ \@
+ / /@
+ | | @
+ /_/ @
+ @@
+ /\/|@
+ |/\/ @
+ $ @
+ $ @
+ $ @
+ $ @
+ @
+ @@
+ _ _ @
+ (_)_(_) @
+ / \ @
+ / _ \ @
+ / ___ \ @
+ /_/ \_\@
+ @
+ @@
+ _ _ @
+ (_)_(_)@
+ / _ \ @
+ | | | |@
+ | |_| |@
+ \___/ @
+ @
+ @@
+ _ _ @
+ (_) (_)@
+ | | | |@
+ | | | |@
+ | |_| |@
+ \___/ @
+ @
+ @@
+ _ _ @
+ (_) (_)@
+ __ _ @
+ / _` |@
+ | (_| |@
+ \__,_|@
+ @
+ @@
+ _ _ @
+ (_) (_)@
+ ___ @
+ / _ \ @
+ | (_) |@
+ \___/ @
+ @
+ @@
+ _ _ @
+ (_) (_)@
+ _ _ @
+ | | | |@
+ | |_| |@
+ \__,_|@
+ @
+ @@
+ ___ @
+ / _ \ @
+ | | ) |@
+ | |< < @
+ | | ) |@
+ | ||_/ @
+ |_| @
+ @@
+160 NO-BREAK SPACE
+ $@
+ $@
+ $@
+ $@
+ $@
+ $@
+ $@
+ $@@
+161 INVERTED EXCLAMATION MARK
+ _ @
+ (_)@
+ | |@
+ | |@
+ | |@
+ |_|@
+ @
+ @@
+162 CENT SIGN
+ @
+ _ @
+ | | @
+ / __)@
+ | (__ @
+ \ )@
+ |_| @
+ @@
+163 POUND SIGN
+ ___ @
+ / ,_\ @
+ _| |_ @
+ |__ __| @
+ | |____ @
+ (_,_____|@
+ @
+ @@
+164 CURRENCY SIGN
+ @
+ /\___/\@
+ \ _ /@
+ | (_) |@
+ / ___ \@
+ \/ \/@
+ @
+ @@
+165 YEN SIGN
+ __ __ @
+ \ \ / / @
+ _\ V /_ @
+ |___ ___|@
+ |___ ___|@
+ |_| @
+ @
+ @@
+166 BROKEN BAR
+ _ @
+ | |@
+ | |@
+ |_|@
+ _ @
+ | |@
+ | |@
+ |_|@@
+167 SECTION SIGN
+ __ @
+ _/ _)@
+ / \ \ @
+ \ \\ \@
+ \ \_/@
+ (__/ @
+ @
+ @@
+168 DIAERESIS
+ _ _ @
+ (_) (_)@
+ $ $ @
+ $ $ @
+ $ $ @
+ $ $ @
+ @
+ @@
+169 COPYRIGHT SIGN
+ ________ @
+ / ____ \ @
+ / / ___| \ @
+ | | | |@
+ | | |___ |@
+ \ \____| / @
+ \________/ @
+ @@
+170 FEMININE ORDINAL INDICATOR
+ __ _ @
+ / _` |@
+ | (_| |@
+ \__,_|@
+ |_____|@
+ $ @
+ @
+ @@
+171 LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+ ____@
+ / / /@
+ / / / @
+ < < < @
+ \ \ \ @
+ \_\_\@
+ @
+ @@
+172 NOT SIGN
+ @
+ @
+ ______ @
+ |____ |@
+ |_|@
+ $ @
+ @
+ @@
+173 SOFT HYPHEN
+ @
+ @
+ _____ @
+ |_____|@
+ $ @
+ $ @
+ @
+ @@
+174 REGISTERED SIGN
+ ________ @
+ / ____ \ @
+ / | _ \ \ @
+ | | |_) | |@
+ | | _ < |@
+ \ |_| \_\ / @
+ \________/ @
+ @@
+175 MACRON
+ ______ @
+ |______|@
+ $ @
+ $ @
+ $ @
+ $ @
+ @
+ @@
+176 DEGREE SIGN
+ __ @
+ / \ @
+ | () |@
+ \__/ @
+ $ @
+ $ @
+ @
+ @@
+177 PLUS-MINUS SIGN
+ _ @
+ _| |_ @
+ |_ _|@
+ |_| @
+ _____ @
+ |_____|@
+ @
+ @@
+178 SUPERSCRIPT TWO
+ ___ @
+ |_ )@
+ / / @
+ /___|@
+ $ @
+ $ @
+ @
+ @@
+179 SUPERSCRIPT THREE
+ ____@
+ |__ /@
+ |_ \@
+ |___/@
+ $ @
+ $ @
+ @
+ @@
+180 ACUTE ACCENT
+ __@
+ /_/@
+ $ @
+ $ @
+ $ @
+ $ @
+ @
+ @@
+181 MICRO SIGN
+ @
+ @
+ _ _ @
+ | | | |@
+ | |_| |@
+ | ._,_|@
+ | | @
+ |_| @@
+182 PILCROW SIGN
+ ______ @
+ / |@
+ | (| || |@
+ \__ || |@
+ | || |@
+ |_||_|@
+ @
+ @@
+183 MIDDLE DOT
+ @
+ @
+ _ @
+ (_)@
+ $ @
+ $ @
+ @
+ @@
+184 CEDILLA
+ @
+ @
+ @
+ @
+ @
+ _ @
+ )_)@
+ @@
+185 SUPERSCRIPT ONE
+ _ @
+ / |@
+ | |@
+ |_|@
+ $ @
+ $ @
+ @
+ @@
+186 MASCULINE ORDINAL INDICATOR
+ ___ @
+ / _ \ @
+ | (_) |@
+ \___/ @
+ |_____|@
+ $ @
+ @
+ @@
+187 RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+ ____ @
+ \ \ \ @
+ \ \ \ @
+ > > >@
+ / / / @
+ /_/_/ @
+ @
+ @@
+188 VULGAR FRACTION ONE QUARTER
+ _ __ @
+ / | / / @
+ | |/ / _ @
+ |_/ / | | @
+ / /|_ _|@
+ /_/ |_| @
+ @
+ @@
+189 VULGAR FRACTION ONE HALF
+ _ __ @
+ / | / / @
+ | |/ /__ @
+ |_/ /_ )@
+ / / / / @
+ /_/ /___|@
+ @
+ @@
+190 VULGAR FRACTION THREE QUARTERS
+ ____ __ @
+ |__ / / / @
+ |_ \/ / _ @
+ |___/ / | | @
+ / /|_ _|@
+ /_/ |_| @
+ @
+ @@
+191 INVERTED QUESTION MARK
+ _ @
+ (_) @
+ | | @
+ / / @
+ | (__ @
+ \___|@
+ @
+ @@
+192 LATIN CAPITAL LETTER A WITH GRAVE
+ __ @
+ \_\ @
+ / \ @
+ / _ \ @
+ / ___ \ @
+ /_/ \_\@
+ @
+ @@
+193 LATIN CAPITAL LETTER A WITH ACUTE
+ __ @
+ /_/ @
+ / \ @
+ / _ \ @
+ / ___ \ @
+ /_/ \_\@
+ @
+ @@
+194 LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+ //\ @
+ |/_\| @
+ / \ @
+ / _ \ @
+ / ___ \ @
+ /_/ \_\@
+ @
+ @@
+195 LATIN CAPITAL LETTER A WITH TILDE
+ /\/| @
+ |/\/ @
+ / \ @
+ / _ \ @
+ / ___ \ @
+ /_/ \_\@
+ @
+ @@
+196 LATIN CAPITAL LETTER A WITH DIAERESIS
+ _ _ @
+ (_)_(_) @
+ / \ @
+ / _ \ @
+ / ___ \ @
+ /_/ \_\@
+ @
+ @@
+197 LATIN CAPITAL LETTER A WITH RING ABOVE
+ _ @
+ (o) @
+ / \ @
+ / _ \ @
+ / ___ \ @
+ /_/ \_\@
+ @
+ @@
+198 LATIN CAPITAL LETTER AE
+ _______ @
+ / ____|@
+ / |__ @
+ / /| __| @
+ / ___ |____ @
+ /_/ |______|@
+ @
+ @@
+199 LATIN CAPITAL LETTER C WITH CEDILLA
+ _____ @
+ / ____|@
+ | | $ @
+ | | $ @
+ | |____ @
+ \_____|@
+ )_) @
+ @@
+200 LATIN CAPITAL LETTER E WITH GRAVE
+ __ @
+ _\_\_ @
+ | ____|@
+ | _| @
+ | |___ @
+ |_____|@
+ @
+ @@
+201 LATIN CAPITAL LETTER E WITH ACUTE
+ __ @
+ _/_/_ @
+ | ____|@
+ | _| @
+ | |___ @
+ |_____|@
+ @
+ @@
+202 LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+ //\ @
+ |/ \| @
+ | ____|@
+ | _| @
+ | |___ @
+ |_____|@
+ @
+ @@
+203 LATIN CAPITAL LETTER E WITH DIAERESIS
+ _ _ @
+ (_) (_)@
+ | ____|@
+ | _| @
+ | |___ @
+ |_____|@
+ @
+ @@
+204 LATIN CAPITAL LETTER I WITH GRAVE
+ __ @
+ \_\ @
+ |_ _|@
+ | | @
+ | | @
+ |___|@
+ @
+ @@
+205 LATIN CAPITAL LETTER I WITH ACUTE
+ __ @
+ /_/ @
+ |_ _|@
+ | | @
+ | | @
+ |___|@
+ @
+ @@
+206 LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+ //\ @
+ |/_\|@
+ |_ _|@
+ | | @
+ | | @
+ |___|@
+ @
+ @@
+207 LATIN CAPITAL LETTER I WITH DIAERESIS
+ _ _ @
+ (_)_(_)@
+ |_ _| @
+ | | @
+ | | @
+ |___| @
+ @
+ @@
+208 LATIN CAPITAL LETTER ETH
+ _____ @
+ | __ \ @
+ _| |_ | |@
+ |__ __|| |@
+ | |__| |@
+ |_____/ @
+ @
+ @@
+209 LATIN CAPITAL LETTER N WITH TILDE
+ /\/| @
+ |/\/_ @
+ | \ | |@
+ | \| |@
+ | |\ |@
+ |_| \_|@
+ @
+ @@
+210 LATIN CAPITAL LETTER O WITH GRAVE
+ __ @
+ \_\ @
+ / _ \ @
+ | | | |@
+ | |_| |@
+ \___/ @
+ @
+ @@
+211 LATIN CAPITAL LETTER O WITH ACUTE
+ __ @
+ /_/ @
+ / _ \ @
+ | | | |@
+ | |_| |@
+ \___/ @
+ @
+ @@
+212 LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+ //\ @
+ |/_\| @
+ / _ \ @
+ | | | |@
+ | |_| |@
+ \___/ @
+ @
+ @@
+213 LATIN CAPITAL LETTER O WITH TILDE
+ /\/| @
+ |/\/ @
+ / _ \ @
+ | | | |@
+ | |_| |@
+ \___/ @
+ @
+ @@
+214 LATIN CAPITAL LETTER O WITH DIAERESIS
+ _ _ @
+ (_)_(_)@
+ / _ \ @
+ | | | |@
+ | |_| |@
+ \___/ @
+ @
+ @@
+215 MULTIPLICATION SIGN
+ @
+ @
+ /\/\@
+ > <@
+ \/\/@
+ $ @
+ @
+ @@
+216 LATIN CAPITAL LETTER O WITH STROKE
+ _____ @
+ / __// @
+ | | // |@
+ | |//| |@
+ | //_| |@
+ //___/ @
+ @
+ @@
+217 LATIN CAPITAL LETTER U WITH GRAVE
+ __ @
+ _\_\_ @
+ | | | |@
+ | | | |@
+ | |_| |@
+ \___/ @
+ @
+ @@
+218 LATIN CAPITAL LETTER U WITH ACUTE
+ __ @
+ _/_/_ @
+ | | | |@
+ | | | |@
+ | |_| |@
+ \___/ @
+ @
+ @@
+219 LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+ //\ @
+ |/ \| @
+ | | | |@
+ | | | |@
+ | |_| |@
+ \___/ @
+ @
+ @@
+220 LATIN CAPITAL LETTER U WITH DIAERESIS
+ _ _ @
+ (_) (_)@
+ | | | |@
+ | | | |@
+ | |_| |@
+ \___/ @
+ @
+ @@
+221 LATIN CAPITAL LETTER Y WITH ACUTE
+ __ @
+ __/_/__@
+ \ \ / /@
+ \ V / @
+ | | @
+ |_| @
+ @
+ @@
+222 LATIN CAPITAL LETTER THORN
+ _ @
+ | |___ @
+ | __ \ @
+ | |__) |@
+ | ___/ @
+ |_| @
+ @
+ @@
+223 LATIN SMALL LETTER SHARP S
+ ___ @
+ / _ \ @
+ | | ) |@
+ | |< < @
+ | | ) |@
+ | ||_/ @
+ |_| @
+ @@
+224 LATIN SMALL LETTER A WITH GRAVE
+ __ @
+ \_\ @
+ __ _ @
+ / _` |@
+ | (_| |@
+ \__,_|@
+ @
+ @@
+225 LATIN SMALL LETTER A WITH ACUTE
+ __ @
+ /_/ @
+ __ _ @
+ / _` |@
+ | (_| |@
+ \__,_|@
+ @
+ @@
+226 LATIN SMALL LETTER A WITH CIRCUMFLEX
+ //\ @
+ |/ \| @
+ __ _ @
+ / _` |@
+ | (_| |@
+ \__,_|@
+ @
+ @@
+227 LATIN SMALL LETTER A WITH TILDE
+ /\/| @
+ |/\/ @
+ __ _ @
+ / _` |@
+ | (_| |@
+ \__,_|@
+ @
+ @@
+228 LATIN SMALL LETTER A WITH DIAERESIS
+ _ _ @
+ (_) (_)@
+ __ _ @
+ / _` |@
+ | (_| |@
+ \__,_|@
+ @
+ @@
+229 LATIN SMALL LETTER A WITH RING ABOVE
+ __ @
+ (()) @
+ __ _ @
+ / _` |@
+ | (_| |@
+ \__,_|@
+ @
+ @@
+230 LATIN SMALL LETTER AE
+ @
+ @
+ __ ____ @
+ / _` _ \@
+ | (_| __/@
+ \__,____|@
+ @
+ @@
+231 LATIN SMALL LETTER C WITH CEDILLA
+ @
+ @
+ ___ @
+ / __|@
+ | (__ @
+ \___|@
+ )_) @
+ @@
+232 LATIN SMALL LETTER E WITH GRAVE
+ __ @
+ \_\ @
+ ___ @
+ / _ \@
+ | __/@
+ \___|@
+ @
+ @@
+233 LATIN SMALL LETTER E WITH ACUTE
+ __ @
+ /_/ @
+ ___ @
+ / _ \@
+ | __/@
+ \___|@
+ @
+ @@
+234 LATIN SMALL LETTER E WITH CIRCUMFLEX
+ //\ @
+ |/ \|@
+ ___ @
+ / _ \@
+ | __/@
+ \___|@
+ @
+ @@
+235 LATIN SMALL LETTER E WITH DIAERESIS
+ _ _ @
+ (_) (_)@
+ ___ @
+ / _ \ @
+ | __/ @
+ \___| @
+ @
+ @@
+236 LATIN SMALL LETTER I WITH GRAVE
+ __ @
+ \_\@
+ _ @
+ | |@
+ | |@
+ |_|@
+ @
+ @@
+237 LATIN SMALL LETTER I WITH ACUTE
+ __@
+ /_/@
+ _ @
+ | |@
+ | |@
+ |_|@
+ @
+ @@
+238 LATIN SMALL LETTER I WITH CIRCUMFLEX
+ //\ @
+ |/ \|@
+ _ @
+ | | @
+ | | @
+ |_| @
+ @
+ @@
+239 LATIN SMALL LETTER I WITH DIAERESIS
+ _ _ @
+ (_) (_)@
+ _ @
+ | | @
+ | | @
+ |_| @
+ @
+ @@
+240 LATIN SMALL LETTER ETH
+ /\/\ @
+ > < @
+ \/\ \ @
+ / _` |@
+ | (_) |@
+ \___/ @
+ @
+ @@
+241 LATIN SMALL LETTER N WITH TILDE
+ /\/| @
+ |/\/ @
+ _ __ @
+ | '_ \ @
+ | | | |@
+ |_| |_|@
+ @
+ @@
+242 LATIN SMALL LETTER O WITH GRAVE
+ __ @
+ \_\ @
+ ___ @
+ / _ \ @
+ | (_) |@
+ \___/ @
+ @
+ @@
+243 LATIN SMALL LETTER O WITH ACUTE
+ __ @
+ /_/ @
+ ___ @
+ / _ \ @
+ | (_) |@
+ \___/ @
+ @
+ @@
+244 LATIN SMALL LETTER O WITH CIRCUMFLEX
+ //\ @
+ |/ \| @
+ ___ @
+ / _ \ @
+ | (_) |@
+ \___/ @
+ @
+ @@
+245 LATIN SMALL LETTER O WITH TILDE
+ /\/| @
+ |/\/ @
+ ___ @
+ / _ \ @
+ | (_) |@
+ \___/ @
+ @
+ @@
+246 LATIN SMALL LETTER O WITH DIAERESIS
+ _ _ @
+ (_) (_)@
+ ___ @
+ / _ \ @
+ | (_) |@
+ \___/ @
+ @
+ @@
+247 DIVISION SIGN
+ _ @
+ (_) @
+ _______ @
+ |_______|@
+ _ @
+ (_) @
+ @
+ @@
+248 LATIN SMALL LETTER O WITH STROKE
+ @
+ @
+ ____ @
+ / _//\ @
+ | (//) |@
+ \//__/ @
+ @
+ @@
+249 LATIN SMALL LETTER U WITH GRAVE
+ __ @
+ \_\ @
+ _ _ @
+ | | | |@
+ | |_| |@
+ \__,_|@
+ @
+ @@
+250 LATIN SMALL LETTER U WITH ACUTE
+ __ @
+ /_/ @
+ _ _ @
+ | | | |@
+ | |_| |@
+ \__,_|@
+ @
+ @@
+251 LATIN SMALL LETTER U WITH CIRCUMFLEX
+ //\ @
+ |/ \| @
+ _ _ @
+ | | | |@
+ | |_| |@
+ \__,_|@
+ @
+ @@
+252 LATIN SMALL LETTER U WITH DIAERESIS
+ _ _ @
+ (_) (_)@
+ _ _ @
+ | | | |@
+ | |_| |@
+ \__,_|@
+ @
+ @@
+253 LATIN SMALL LETTER Y WITH ACUTE
+ __ @
+ /_/ @
+ _ _ @
+ | | | |@
+ | |_| |@
+ \__, |@
+ __/ |@
+ |___/ @@
+254 LATIN SMALL LETTER THORN
+ _ @
+ | | @
+ | |__ @
+ | '_ \ @
+ | |_) |@
+ | .__/ @
+ | | @
+ |_| @@
+255 LATIN SMALL LETTER Y WITH DIAERESIS
+ _ _ @
+ (_) (_)@
+ _ _ @
+ | | | |@
+ | |_| |@
+ \__, |@
+ __/ |@
+ |___/ @@
+0x02BC MODIFIER LETTER APOSTROPHE
+ @
+ @
+ ))@
+ @
+ @
+ @
+ @
+ @@
+0x02BD MODIFIER LETTER REVERSED COMMA
+ @
+ @
+ ((@
+ @
+ @
+ @
+ @
+ @@
+0x037A GREEK YPOGEGRAMMENI
+ @
+ @
+ @
+ @
+ @
+ @
+ @
+ ||@@
+0x0387 GREEK ANO TELEIA
+ @
+ $ @
+ _ @
+ (_)@
+ @
+ $ @
+ @
+ @@
+0x0391 GREEK CAPITAL LETTER ALPHA
+ ___ @
+ / _ \ @
+ | |_| |@
+ | _ |@
+ | | | |@
+ |_| |_|@
+ @
+ @@
+0x0392 GREEK CAPITAL LETTER BETA
+ ____ @
+ | _ \ @
+ | |_) )@
+ | _ ( @
+ | |_) )@
+ |____/ @
+ @
+ @@
+0x0393 GREEK CAPITAL LETTER GAMMA
+ _____ @
+ | ___)@
+ | |$ @
+ | |$ @
+ | | @
+ |_| @
+ @
+ @@
+0x0394 GREEK CAPITAL LETTER DELTA
+ @
+ /\ @
+ / \ @
+ / /\ \ @
+ / /__\ \ @
+ /________\@
+ @
+ @@
+0x0395 GREEK CAPITAL LETTER EPSILON
+ _____ @
+ | ___)@
+ | |_ @
+ | _) @
+ | |___ @
+ |_____)@
+ @
+ @@
+0x0396 GREEK CAPITAL LETTER ZETA
+ ______@
+ (___ /@
+ / / @
+ / / @
+ / /__ @
+ /_____)@
+ @
+ @@
+0x0397 GREEK CAPITAL LETTER ETA
+ _ _ @
+ | | | |@
+ | |_| |@
+ | _ |@
+ | | | |@
+ |_| |_|@
+ @
+ @@
+0x0398 GREEK CAPITAL LETTER THETA
+ ____ @
+ / __ \ @
+ | |__| |@
+ | __ |@
+ | |__| |@
+ \____/ @
+ @
+ @@
+0x0399 GREEK CAPITAL LETTER IOTA
+ ___ @
+ ( )@
+ | | @
+ | | @
+ | | @
+ (___)@
+ @
+ @@
+0x039A GREEK CAPITAL LETTER KAPPA
+ _ __@
+ | | / /@
+ | |/ / @
+ | < @
+ | |\ \ @
+ |_| \_\@
+ @
+ @@
+0x039B GREEK CAPITAL LETTER LAMDA
+ @
+ /\ @
+ / \ @
+ / /\ \ @
+ / / \ \ @
+ /_/ \_\@
+ @
+ @@
+0x039C GREEK CAPITAL LETTER MU
+ __ __ @
+ | \ / |@
+ | v |@
+ | |\_/| |@
+ | | | |@
+ |_| |_|@
+ @
+ @@
+0x039D GREEK CAPITAL LETTER NU
+ _ _ @
+ | \ | |@
+ | \| |@
+ | |@
+ | |\ |@
+ |_| \_|@
+ @
+ @@
+0x039E GREEK CAPITAL LETTER XI
+ _____ @
+ (_____)@
+ ___ @
+ (___) @
+ _____ @
+ (_____)@
+ @
+ @@
+0x039F GREEK CAPITAL LETTER OMICRON
+ ___ @
+ / _ \ @
+ | | | |@
+ | | | |@
+ | |_| |@
+ \___/ @
+ @
+ @@
+0x03A0 GREEK CAPITAL LETTER PI
+ _______ @
+ ( _ )@
+ | | | | @
+ | | | | @
+ | | | | @
+ |_| |_| @
+ @
+ @@
+0x03A1 GREEK CAPITAL LETTER RHO
+ ____ @
+ | _ \ @
+ | |_) )@
+ | __/ @
+ | | @
+ |_| @
+ @
+ @@
+0x03A3 GREEK CAPITAL LETTER SIGMA
+ ______ @
+ \ ___)@
+ \ \ @
+ > > @
+ / /__ @
+ /_____)@
+ @
+ @@
+0x03A4 GREEK CAPITAL LETTER TAU
+ _____ @
+ (_ _)@
+ | | @
+ | | @
+ | | @
+ |_| @
+ @
+ @@
+0x03A5 GREEK CAPITAL LETTER UPSILON
+ __ __ @
+ (_ \ / _)@
+ \ v / @
+ | | @
+ | | @
+ |_| @
+ @
+ @@
+0x03A6 GREEK CAPITAL LETTER PHI
+ _ @
+ _| |_ @
+ / \ @
+ ( (| |) )@
+ \_ _/ @
+ |_| @
+ @
+ @@
+0x03A7 GREEK CAPITAL LETTER CHI
+ __ __@
+ \ \ / /@
+ \ v / @
+ > < @
+ / ^ \ @
+ /_/ \_\@
+ @
+ @@
+0x03A8 GREEK CAPITAL LETTER PSI
+ _ _ _ @
+ | || || |@
+ | \| |/ |@
+ \_ _/ @
+ | | @
+ |_| @
+ @
+ @@
+0x03A9 GREEK CAPITAL LETTER OMEGA
+ ____ @
+ / __ \ @
+ | | | | @
+ | | | | @
+ _\ \/ /_ @
+ (___||___)@
+ @
+ @@
+0x03B1 GREEK SMALL LETTER ALPHA
+ @
+ @
+ __ __@
+ / \/ /@
+ ( () < @
+ \__/\_\@
+ @
+ @@
+0x03B2 GREEK SMALL LETTER BETA
+ ___ @
+ / _ \ @
+ | |_) )@
+ | _ < @
+ | |_) )@
+ | __/ @
+ | | @
+ |_| @@
+0x03B3 GREEK SMALL LETTER GAMMA
+ @
+ @
+ _ _ @
+ ( \ / )@
+ \ v / @
+ | | @
+ | | @
+ |_| @@
+0x03B4 GREEK SMALL LETTER DELTA
+ __ @
+ / _) @
+ \ \ @
+ / _ \ @
+ ( (_) )@
+ \___/ @
+ @
+ @@
+0x03B5 GREEK SMALL LETTER EPSILON
+ @
+ @
+ ___ @
+ / __)@
+ > _) @
+ \___)@
+ @
+ @@
+0x03B6 GREEK SMALL LETTER ZETA
+ _____ @
+ \__ ) @
+ / / @
+ / / @
+ | |__ @
+ \__ \ @
+ ) )@
+ (_/ @@
+0x03B7 GREEK SMALL LETTER ETA
+ @
+ @
+ _ __ @
+ | '_ \ @
+ | | | |@
+ |_| | |@
+ | |@
+ |_|@@
+0x03B8 GREEK SMALL LETTER THETA
+ ___ @
+ / _ \ @
+ | |_| |@
+ | _ |@
+ | |_| |@
+ \___/ @
+ @
+ @@
+0x03B9 GREEK SMALL LETTER IOTA
+ @
+ @
+ _ @
+ | | @
+ | | @
+ \_)@
+ @
+ @@
+0x03BA GREEK SMALL LETTER KAPPA
+ @
+ @
+ _ __@
+ | |/ /@
+ | < @
+ |_|\_\@
+ @
+ @@
+0x03BB GREEK SMALL LETTER LAMDA
+ __ @
+ \ \ @
+ \ \ @
+ > \ @
+ / ^ \ @
+ /_/ \_\@
+ @
+ @@
+0x03BC GREEK SMALL LETTER MU
+ @
+ @
+ _ _ @
+ | | | |@
+ | |_| |@
+ | ._,_|@
+ | | @
+ |_| @@
+0x03BD GREEK SMALL LETTER NU
+ @
+ @
+ _ __@
+ | |/ /@
+ | / / @
+ |__/ @
+ @
+ @@
+0x03BE GREEK SMALL LETTER XI
+ \=\__ @
+ > __) @
+ ( (_ @
+ > _) @
+ ( (__ @
+ \__ \ @
+ ) )@
+ (_/ @@
+0x03BF GREEK SMALL LETTER OMICRON
+ @
+ @
+ ___ @
+ / _ \ @
+ ( (_) )@
+ \___/ @
+ @
+ @@
+0x03C0 GREEK SMALL LETTER PI
+ @
+ @
+ ______ @
+ ( __ )@
+ | || | @
+ |_||_| @
+ @
+ @@
+0x03C1 GREEK SMALL LETTER RHO
+ @
+ @
+ ___ @
+ / _ \ @
+ | |_) )@
+ | __/ @
+ | | @
+ |_| @@
+0x03C2 GREEK SMALL LETTER FINAL SIGMA
+ @
+ @
+ ____ @
+ / ___)@
+ ( (__ @
+ \__ \ @
+ _) )@
+ (__/ @@
+0x03C3 GREEK SMALL LETTER SIGMA
+ @
+ @
+ ____ @
+ / ._)@
+ ( () ) @
+ \__/ @
+ @
+ @@
+0x03C4 GREEK SMALL LETTER TAU
+ @
+ @
+ ___ @
+ ( )@
+ | | @
+ \_)@
+ @
+ @@
+0x03C5 GREEK SMALL LETTER UPSILON
+ @
+ @
+ _ _ @
+ | | | |@
+ | |_| |@
+ \___/ @
+ @
+ @@
+0x03C6 GREEK SMALL LETTER PHI
+ _ @
+ | | @
+ _| |_ @
+ / \ @
+ ( (| |) )@
+ \_ _/ @
+ | | @
+ |_| @@
+0x03C7 GREEK SMALL LETTER CHI
+ @
+ @
+ __ __@
+ \ \ / /@
+ \ v / @
+ > < @
+ / ^ \ @
+ /_/ \_\@@
+0x03C8 GREEK SMALL LETTER PSI
+ @
+ @
+ _ _ _ @
+ | || || |@
+ | \| |/ |@
+ \_ _/ @
+ | | @
+ |_| @@
+0x03C9 GREEK SMALL LETTER OMEGA
+ @
+ @
+ __ __ @
+ / / _ \ \ @
+ | |_/ \_| |@
+ \___^___/ @
+ @
+ @@
+0x03D1 GREEK THETA SYMBOL
+ ___ @
+ / _ \ @
+ ( (_| |_ @
+ _ \ _ _)@
+ | |___| | @
+ \_____/ @
+ @
+ @@
+0x03D5 GREEK PHI SYMBOL
+ @
+ @
+ _ __ @
+ | | / \ @
+ | || || )@
+ \_ _/ @
+ | | @
+ |_| @@
+0x03D6 GREEK PI SYMBOL
+ @
+ @
+ _________ @
+ ( _____ )@
+ | |_/ \_| |@
+ \___^___/ @
+ @
+ @@
+-0x0005
+alpha = a, beta = b, gamma = g, delta = d, epsilon = e @
+zeta = z, eta = h, theta = q, iota = i, lamda = l, mu = m@
+nu = n, xi = x, omicron = o, pi = p, rho = r, sigma = s @
+phi = f, chi = c, psi = y, omega = w, final sigma = V @
+ pi symbol = v, theta symbol = J, phi symbol = j @
+ middle dot = :, ypogegrammeni = _ @
+ rough breathing = (, smooth breathing = ) @
+ acute accent = ', grave accent = `, dialytika = ^ @@
diff --git a/externals/figlet/fonts/block.flf b/externals/figlet/fonts/block.flf
new file mode 100644
index 000000000..b1172f049
--- /dev/null
+++ b/externals/figlet/fonts/block.flf
@@ -0,0 +1,1691 @@
+flf2a$ 8 6 27 0 10 0 576 96
+Block by Glenn Chappell 4/93 -- straight version of Lean
+Includes ISO Latin-1
+figlet release 2.1 -- 12 Aug 1994
+Permission is hereby given to modify this font, as long as the
+modifier's name is placed on a comment line.
+
+Modified by Paul Burton <solution@earthlink.net> 12/96 to include new parameter
+supported by FIGlet and FIGWin. May also be slightly modified for better use
+of new full-width/kern/smush alternatives, but default output is NOT changed.
+
+$ $@
+$ $@
+$ $@
+$ $@
+$ $@
+$ $@
+$ $@
+$ $@@
+ $$@
+ _| $@
+ _| $@
+ _| $@
+ $$@
+ _| $@
+ $$@
+ @@
+ _| _| $@
+ _| _| $@
+ $$@
+ $$ @
+ $$ @
+ $$ @
+ @
+ @@
+ $$ @
+ _| _| $@
+ _|_|_|_|_| $@
+ _| _| $@
+ _|_|_|_|_| $@
+ _| _| $@
+ $$ @
+ @@
+ $$ @
+ _| $@
+ _|_|_| $@
+ _|_| $@
+ _|_| $@
+ _|_|_| $@
+ _| $@
+ $$ @@
+ $$@
+ _|_| _| $@
+ _|_| _| $@
+ _| $@
+ _| _|_| $@
+ _| _|_| $@
+ $$@
+ @@
+ $$ @
+ _| $ @
+ _| _| $@
+ _|_| _| $@
+ _| _| $@
+ _|_| _| $@
+ $$@
+ @@
+ _| $@
+ _| $@
+ $$ @
+ $$ @
+ $$ @
+ $$ @
+ @
+ @@
+ _| $@
+ _| $@
+ _| $ @
+ _| $ @
+ _| $ @
+ _| $@
+ _| $@
+ $$@@
+ _| $@
+ _| $@
+ _| $@
+ _| $@
+ _| $@
+ _| $@
+ _| $@
+ $$ @@
+ $$@
+ _| _| _| $@
+ _|_|_| $@
+ _|_|_|_|_| $@
+ _|_|_| $@
+ _| _| _| $@
+ $$@
+ @@
+ $$ @
+ _| $ @
+ _| $@
+ _|_|_|_|_| $@
+ _| $@
+ _| $ @
+ $$ @
+ @@
+ @
+ @
+ @
+ @
+ $$@
+ _| $@
+ _| $@
+ $$ @@
+ @
+ @
+ $$@
+ _|_|_|_|_| $@
+ $$@
+ @
+ @
+ @@
+ @
+ @
+ @
+ @
+ $$@
+ _| $@
+ $$@
+ @@
+ $$@
+ _| $@
+ _| $@
+ _| $ @
+ _| $ @
+ _| $ @
+ $$ @
+ @@
+ $$ @
+ _| $@
+ _| _| $@
+ _| _| $@
+ _| _| $@
+ _| $@
+ $$ @
+ @@
+ $$@
+ _| $@
+ _|_| $@
+ _| $@
+ _| $@
+ _| $@
+ $$@
+ @@
+ $$ @
+ _|_| $@
+ _| _| $@
+ _| $@
+ _| $@
+ _|_|_|_| $@
+ $$@
+ @@
+ $$ @
+ _|_|_| $@
+ _| $@
+ _|_| $@
+ _| $@
+ _|_|_| $@
+ $$ @
+ @@
+ $$ @
+ _| _| $ @
+ _| _| $@
+ _|_|_|_| $@
+ _| $@
+ _| $ @
+ $$ @
+ @@
+ $$@
+ _|_|_|_| $@
+ _| $@
+ _|_|_| $@
+ _| $@
+ _|_|_| $@
+ $$ @
+ @@
+ $$@
+ _|_|_| $@
+ _| $@
+ _|_|_| $@
+ _| _| $@
+ _|_| $@
+ $$ @
+ @@
+ $$@
+ _|_|_|_|_| $@
+ _| $@
+ _| $@
+ _| $ @
+ _| $ @
+ $$ @
+ @@
+ $$ @
+ _|_| $@
+ _| _| $@
+ _|_| $@
+ _| _| $@
+ _|_| $@
+ $$ @
+ @@
+ $$ @
+ _|_| $@
+ _| _| $@
+ _|_|_| $@
+ _| $@
+ _|_|_| $@
+ $$ @
+ @@
+ @
+ $$@
+ _| $@
+ $$@
+ $$@
+ _| $@
+ $$@
+ @@
+ @
+ $$@
+ _| $@
+ $$@
+ $$@
+ _| $@
+ _| $@
+ $$ @@
+ $$@
+ _| $@
+ _| $@
+ _| $ @
+ _| $@
+ _| $@
+ $$@
+ @@
+ @
+ $$@
+ _|_|_|_|_| $@
+ $$@
+ _|_|_|_|_| $@
+ $$@
+ @
+ @@
+ $$ @
+ _| $ @
+ _| $@
+ _| $@
+ _| $@
+ _| $ @
+ $$ @
+ @@
+ $$ @
+ _|_| $@
+ _| $@
+ _|_| $@
+ $$ @
+ _| $ @
+ $$ @
+ @@
+ $$ @
+ _|_|_|_|_| $@
+ _| _| $@
+ _| _|_|_| _| $@
+ _| _| _| _| $@
+ _| _|_|_|_| $@
+ _| $@
+ _|_|_|_|_|_| $@@
+ $$ @
+ _|_| $@
+ _| _| $@
+ _|_|_|_| $@
+ _| _| $@
+ _| _| $@
+ $$@
+ @@
+ $$ @
+ _|_|_| $@
+ _| _| $@
+ _|_|_| $@
+ _| _| $@
+ _|_|_| $@
+ $$ @
+ @@
+ $$@
+ _|_|_| $@
+ _| $@
+ _| $ @
+ _| $@
+ _|_|_| $@
+ $$@
+ @@
+ $$ @
+ _|_|_| $@
+ _| _| $@
+ _| _| $@
+ _| _| $@
+ _|_|_| $@
+ $$ @
+ @@
+ $$@
+ _|_|_|_| $@
+ _| $@
+ _|_|_| $ @
+ _| $@
+ _|_|_|_| $@
+ $$@
+ @@
+ $$@
+ _|_|_|_| $@
+ _| $@
+ _|_|_| $ @
+ _| $ @
+ _| $ @
+ $$ @
+ @@
+ $$@
+ _|_|_| $@
+ _| $@
+ _| _|_| $@
+ _| _| $@
+ _|_|_| $@
+ $$@
+ @@
+ $$@
+ _| _| $@
+ _| _| $@
+ _|_|_|_| $@
+ _| _| $@
+ _| _| $@
+ $$@
+ @@
+ $$@
+ _|_|_| $@
+ _| $@
+ _| $ @
+ _| $@
+ _|_|_| $@
+ $$@
+ @@
+ $$@
+ _| $@
+ _| $@
+ _| $@
+ _| _| $@
+ _|_| $@
+ $$ @
+ @@
+ $$@
+ _| _| $@
+ _| _| $@
+ _|_| $ @
+ _| _| $@
+ _| _| $@
+ $$@
+ @@
+ $$ @
+ _| $ @
+ _| $ @
+ _| $ @
+ _| $@
+ _|_|_|_| $@
+ $$@
+ @@
+ $$@
+ _| _| $@
+ _|_| _|_| $@
+ _| _| _| $@
+ _| _| $@
+ _| _| $@
+ $$@
+ @@
+ $$@
+ _| _| $@
+ _|_| _| $@
+ _| _| _| $@
+ _| _|_| $@
+ _| _| $@
+ $$@
+ @@
+ $$ @
+ _|_| $@
+ _| _| $@
+ _| _| $@
+ _| _| $@
+ _|_| $@
+ $$ @
+ @@
+ $$ @
+ _|_|_| $@
+ _| _| $@
+ _|_|_| $@
+ _| $ @
+ _| $ @
+ $$ @
+ @@
+ $$ @
+ _|_| $ @
+ _| _| $ @
+ _| _|_| $ @
+ _| _| $@
+ _|_| _| $@
+ $$@
+ @@
+ $$ @
+ _|_|_| $@
+ _| _| $@
+ _|_|_| $@
+ _| _| $@
+ _| _| $@
+ $$@
+ @@
+ $$@
+ _|_|_| $@
+ _| $@
+ _|_| $@
+ _| $@
+ _|_|_| $@
+ $$ @
+ @@
+ $$@
+ _|_|_|_|_| $@
+ _| $@
+ _| $ @
+ _| $ @
+ _| $ @
+ $$ @
+ @@
+ $$@
+ _| _| $@
+ _| _| $@
+ _| _| $@
+ _| _| $@
+ _|_| $@
+ $$ @
+ @@
+ $$@
+ _| _| $@
+ _| _| $@
+ _| _| $@
+ _| _| $@
+ _| $ @
+ $$ @
+ @@
+ $$@
+ _| _| $@
+ _| _| $@
+ _| _| _| $@
+ _| _| _| $@
+ _| _| $ @
+ $$ @
+ @@
+ $$@
+ _| _| $@
+ _| _| $@
+ _| $ @
+ _| _| $@
+ _| _| $@
+ $$@
+ @@
+ $$@
+ _| _| $@
+ _| _| $@
+ _| $ @
+ _| $ @
+ _| $ @
+ $$ @
+ @@
+ $$@
+ _|_|_|_|_| $@
+ _| $@
+ _| $ @
+ _| $@
+ _|_|_|_|_| $@
+ $$@
+ @@
+ _|_| $@
+ _| $@
+ _| $ @
+ _| $ @
+ _| $ @
+ _| $@
+ _|_| $@
+ $$@@
+ $$ @
+ _| $ @
+ _| $ @
+ _| $ @
+ _| $@
+ _| $@
+ $$@
+ @@
+ _|_| $@
+ _| $@
+ _| $@
+ _| $@
+ _| $@
+ _| $@
+ _|_| $@
+ $$@@
+ _| $@
+ _| _| $@
+ $$@
+ $$ @
+ $$ @
+ $$ @
+ @
+ @@
+ @
+ @
+ $$ @
+ $$ @
+ $$ @
+ $$ @
+ $$@
+ _|_|_|_|_| $@@
+ _| $@
+ _| $@
+ $$@
+ $$ @
+ $$ @
+ $$ @
+ @
+ @@
+ @
+ $$@
+ _|_|_| $@
+ _| _| $@
+ _| _| $@
+ _|_|_| $@
+ $$@
+ @@
+ $$ @
+ _| $ @
+ _|_|_| $@
+ _| _| $@
+ _| _| $@
+ _|_|_| $@
+ $$ @
+ @@
+ @
+ $$@
+ _|_|_| $@
+ _| $@
+ _| $@
+ _|_|_| $@
+ $$@
+ @@
+ $$@
+ _| $@
+ _|_|_| $@
+ _| _| $@
+ _| _| $@
+ _|_|_| $@
+ $$@
+ @@
+ @
+ $$ @
+ _|_| $@
+ _|_|_|_| $@
+ _| $@
+ _|_|_| $@
+ $$@
+ @@
+ $$@
+ _|_| $@
+ _| $@
+ _|_|_|_| $@
+ _| $@
+ _| $ @
+ $$ @
+ @@
+ @
+ $$@
+ _|_|_| $@
+ _| _| $@
+ _| _| $@
+ _|_|_| $@
+ _| $@
+ _|_| $@@
+ $$ @
+ _| $ @
+ _|_|_| $@
+ _| _| $@
+ _| _| $@
+ _| _| $@
+ $$@
+ @@
+ $$@
+ _| $@
+ $$@
+ _| $@
+ _| $@
+ _| $@
+ $$@
+ @@
+ $$@
+ _| $@
+ $$@
+ _| $@
+ _| $@
+ _| $@
+ _| $@
+ _| $@@
+ $$ @
+ _| $ @
+ _| _| $ @
+ _|_| $ @
+ _| _| $@
+ _| _| $@
+ $$@
+ @@
+ $$@
+ _| $@
+ _| $@
+ _| $@
+ _| $@
+ _| $@
+ $$@
+ @@
+ @
+ $$ @
+ _|_|_| _|_| $@
+ _| _| _| $@
+ _| _| _| $@
+ _| _| _| $@
+ $$@
+ @@
+ @
+ $$ @
+ _|_|_| $@
+ _| _| $@
+ _| _| $@
+ _| _| $@
+ $$@
+ @@
+ @
+ $$ @
+ _|_| $@
+ _| _| $@
+ _| _| $@
+ _|_| $@
+ $$ @
+ @@
+ @
+ $$ @
+ _|_|_| $@
+ _| _| $@
+ _| _| $@
+ _|_|_| $@
+ _| $ @
+ _| $ @@
+ @
+ $$@
+ _|_|_| $@
+ _| _| $@
+ _| _| $@
+ _|_|_| $@
+ _| $@
+ _| $@@
+ @
+ $$@
+ _| _|_| $@
+ _|_| $@
+ _| $ @
+ _| $ @
+ $$ @
+ @@
+ @
+ $$@
+ _|_|_| $@
+ _|_| $@
+ _|_| $@
+ _|_|_| $@
+ $$ @
+ @@
+ $$ @
+ _| $@
+ _|_|_|_| @
+ _| $@
+ _| $@
+ _|_| $@
+ $$@
+ @@
+ @
+ $$@
+ _| _| $@
+ _| _| $@
+ _| _| $@
+ _|_|_| $@
+ $$@
+ @@
+ @
+ $$@
+ _| _| $@
+ _| _| $@
+ _| _| $@
+ _| $ @
+ $$ @
+ @@
+ @
+ $$@
+ _| _| _| $@
+ _| _| _| $@
+ _| _| _| _| $@
+ _| _| $ @
+ $$ @
+ @@
+ @
+ $$@
+ _| _| $@
+ _|_| $@
+ _| _| $@
+ _| _| $@
+ $$@
+ @@
+ @
+ $$@
+ _| _| $@
+ _| _| $@
+ _| _| $@
+ _|_|_| $@
+ _| $@
+ _|_| $@@
+ @
+ $$@
+ _|_|_|_| $@
+ _| $@
+ _| $@
+ _|_|_|_| $@
+ $$@
+ @@
+ _| $@
+ _| $@
+ _| $@
+ _| $ @
+ _| $@
+ _| $@
+ _| $@
+ $$@@
+ _| $@
+ _| $@
+ _| $@
+ _| $@
+ _| $@
+ _| $@
+ _| $@
+ _| $@@
+ _| $ @
+ _| $@
+ _| $@
+ _| $@
+ _| $@
+ _| $@
+ _| $ @
+ $$ @@
+ _| _| $@
+ _| _| $@
+ $$ @
+ $$ @
+ $$ @
+ $$ @
+ @
+ @@
+ _| _| $@
+ $$@
+ _|_| $@
+ _| _| $@
+ _|_|_|_| $@
+ _| _| $@
+ $$@
+ @@
+ _| _| $@
+ $$@
+ _|_| $@
+ _| _| $@
+ _| _| $@
+ _|_| $@
+ $$ @
+ @@
+ _| _| $@
+ $$@
+ _| _| $@
+ _| _| $@
+ _| _| $@
+ _|_| $@
+ $$ @
+ @@
+ _| _| $@
+ $$@
+ _|_|_| $@
+ _| _| $@
+ _| _| $@
+ _|_|_| $@
+ $$@
+ @@
+ _| _| $@
+ $$@
+ _|_| $@
+ _| _| $@
+ _| _| $@
+ _|_| $@
+ $$ @
+ @@
+ _| _| $@
+ $$@
+ _| _| $@
+ _| _| $@
+ _| _| $@
+ _|_|_| $@
+ $$@
+ @@
+ $$ @
+ _|_| $@
+ _| _| $@
+ _| _| $@
+ _| _| $@
+ _| _| $@
+ _| $ @
+ $$ @@
+160 NO-BREAK SPACE
+ $ $@
+ $ $@
+ $ $@
+ $ $@
+ $ $@
+ $ $@
+ $ $@
+ $ $@@
+161 INVERTED EXCLAMATION MARK
+ $$@
+ _| $@
+ $$@
+ _| $@
+ _| $@
+ _| $@
+ $$@
+ @@
+162 CENT SIGN
+ $$ @
+ _| $@
+ _|_|_| $@
+ _| _| $@
+ _| _| $@
+ _|_|_| $@
+ _| $@
+ $$ @@
+163 POUND SIGN
+ $$ @
+ _|_| $ @
+ _| _| $ @
+ _|_|_| $ @
+ _| $@
+ _|_|_| _| $@
+ _|_| _|_| $@
+ @@
+164 CURRENCY SIGN
+ $$@
+ _| _| $@
+ _|_|_|_| $@
+ _| _| $ @
+ _| _| $ @
+ _|_|_|_| $@
+ _| _| $@
+ $$@@
+165 YEN SIGN
+ $$@
+ _| _| $@
+ _| _| $@
+ _|_|_|_|_| $@
+ _| $@
+ _|_|_|_|_| $@
+ _| $@
+ $$ @@
+166 BROKEN BAR
+ _| $@
+ _| $@
+ _| $@
+ $$@
+ $$@
+ _| $@
+ _| $@
+ _| $@@
+167 SECTION SIGN
+ _|_| $@
+ _| $@
+ _| $@
+ _| _| $@
+ _| $@
+ _| $@
+ _|_| $@
+ $$ @@
+168 DIAERESIS
+ _| _| $@
+ $$@
+ $ $ @
+ $ $ @
+ $ $ @
+ $ $ @
+ @
+ @@
+169 COPYRIGHT SIGN
+ _|_|_|_| $ @
+ _| _| $@
+ _| _|_|_| _| $@
+ _| _| _| $@
+ _| _| _| $@
+ _| _|_|_| _| $@
+ _| _| $@
+ _|_|_|_| $ @@
+170 FEMININE ORDINAL INDICATOR
+ $$@
+ _|_|_| $@
+ _| _| $@
+ _|_|_| $@
+ $$@
+ _|_|_|_| $@
+ @
+ @@
+171 LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+ $$@
+ _| _| $@
+ _| _| $@
+ _| _| $ @
+ _| _| $@
+ _| _| $@
+ $$@
+ @@
+172 NOT SIGN
+ @
+ @
+ $$@
+ _|_|_|_|_| $@
+ _| $@
+ $$@
+ @
+ @@
+173 SOFT HYPHEN
+ @
+ @
+ $$@
+ _|_|_|_| $@
+ $$@
+ $$ @
+ @
+ @@
+174 REGISTERED SIGN
+ _|_|_|_| $ @
+ _| _| $@
+ _| _|_|_| _| $@
+ _| _| _| _| $@
+ _| _|_|_| _| $@
+ _| _| _| _| $@
+ _| _| $@
+ _|_|_|_| $ @@
+175 MACRON
+ _|_|_|_|_| $@
+ $$@
+ $$ @
+ $$ @
+ $$ @
+ $$ @
+ @
+ @@
+176 DEGREE SIGN
+ _| $@
+ _| _| $@
+ _| $@
+ $$ @
+ $$ @
+ $$ @
+ @
+ @@
+177 PLUS-MINUS SIGN
+ $$ @
+ _| $ @
+ _| $@
+ _|_|_|_|_| $@
+ _| $@
+ _|_|_|_|_| $@
+ $$@
+ @@
+178 SUPERSCRIPT TWO
+ $$ @
+ _|_| $@
+ _| $@
+ _| $@
+ _|_|_| $@
+ $$@
+ @
+ @@
+179 SUPERSCRIPT THREE
+ $$@
+ _|_|_| $@
+ _| $@
+ _| $@
+ _|_| $@
+ $$ @
+ @
+ @@
+180 ACUTE ACCENT
+ _| $@
+ _| $@
+ $$ @
+ $$ @
+ $$ @
+ $$ @
+ @
+ @@
+181 MICRO SIGN
+ @
+ $$@
+ _| _| $@
+ _| _| $@
+ _| _| $@
+ _|_|_|_| $@
+ _| $@
+ _| $ @@
+182 PILCROW SIGN
+ $$@
+ _|_|_|_| $@
+ _|_|_| _| $@
+ _|_| _| $@
+ _| _| $@
+ _| _| $@
+ $$@
+ @@
+183 MIDDLE DOT
+ @
+ @
+ $$@
+ _| $@
+ $$@
+ $$ @
+ @
+ @@
+184 CEDILLA
+ @
+ @
+ @
+ @
+ @
+ $$@
+ _| $@
+ _|_| $@@
+185 SUPERSCRIPT ONE
+ $$@
+ _| $@
+ _|_| $@
+ _| $@
+ _| $@
+ $$@
+ @
+ @@
+186 MASCULINE ORDINAL INDICATOR
+ $$ @
+ _|_| $@
+ _| _| $@
+ _|_| $@
+ $$@
+ _|_|_|_| $@
+ @
+ @@
+187 RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+ $$ @
+ _| _| $ @
+ _| _| $@
+ _| _| $@
+ _| _| $@
+ _| _| $ @
+ $$ @
+ @@
+188 VULGAR FRACTION ONE QUARTER
+ $$ @
+ _| _| $ @
+ _|_| _| _| _| $ @
+ _| _| _| _| $@
+ _| _| _|_|_|_| $@
+ _| _| $@
+ $$ @
+ @@
+189 VULGAR FRACTION ONE HALF
+ $$ @
+ _| _| $ @
+ _|_| _| _|_| $@
+ _| _| _| $@
+ _| _| _| $@
+ _| _|_|_| $@
+ $$@
+ @@
+190 VULGAR FRACTION THREE QUARTERS
+ $$ @
+ _|_|_| _| $ @
+ _| _| _| _| $ @
+ _| _| _| _| $@
+ _|_| _| _|_|_|_| $@
+ _| _| $@
+ $$ @
+ @@
+191 INVERTED QUESTION MARK
+ $$@
+ _| $@
+ $$@
+ _|_| $@
+ _| $@
+ _|_| $@
+ $$@
+ @@
+192 LATIN CAPITAL LETTER A WITH GRAVE
+ _| $ @
+ _| $ @
+ _|_| $@
+ _| _| $@
+ _|_|_|_| $@
+ _| _| $@
+ $$@
+ @@
+193 LATIN CAPITAL LETTER A WITH ACUTE
+ _| $ @
+ _| $ @
+ _|_| $@
+ _| _| $@
+ _|_|_|_| $@
+ _| _| $@
+ $$@
+ @@
+194 LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+ _|_| $@
+ _| _| $@
+ $$@
+ _|_| $@
+ _|_|_|_| $@
+ _| _| $@
+ $$@
+ @@
+195 LATIN CAPITAL LETTER A WITH TILDE
+ _| _| $@
+ _| _| $@
+ $$ @
+ _|_| $@
+ _|_|_|_| $@
+ _| _| $@
+ $$@
+ @@
+196 LATIN CAPITAL LETTER A WITH DIAERESIS
+ _| _| $@
+ $$@
+ _|_| $@
+ _| _| $@
+ _|_|_|_| $@
+ _| _| $@
+ $$@
+ @@
+197 LATIN CAPITAL LETTER A WITH RING ABOVE
+ _|_| $@
+ _| _| $@
+ _|_| $@
+ _| _| $@
+ _|_|_|_| $@
+ _| _| $@
+ $$@
+ @@
+198 LATIN CAPITAL LETTER AE
+ $$@
+ _|_|_|_|_|_| $@
+ _| _| $@
+ _|_|_|_|_|_| $ @
+ _| _| $@
+ _| _|_|_|_| $@
+ $$@
+ @@
+199 LATIN CAPITAL LETTER C WITH CEDILLA
+ $$@
+ _|_|_| $@
+ _| $@
+ _| $ @
+ _| $@
+ _|_|_| $@
+ _| $@
+ _|_| $ @@
+200 LATIN CAPITAL LETTER E WITH GRAVE
+ _| $ @
+ _| $@
+ _|_|_|_| $@
+ _|_|_| $ @
+ _| $@
+ _|_|_|_| $@
+ $$@
+ @@
+201 LATIN CAPITAL LETTER E WITH ACUTE
+ _| $ @
+ _| $@
+ _|_|_|_| $@
+ _|_|_| $ @
+ _| $@
+ _|_|_|_| $@
+ $$@
+ @@
+202 LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+ _|_| $@
+ _| _| $@
+ _|_|_|_| $@
+ _|_|_| $ @
+ _| $@
+ _|_|_|_| $@
+ $$@
+ @@
+203 LATIN CAPITAL LETTER E WITH DIAERESIS
+ _| _| $@
+ $$@
+ _|_|_|_| $@
+ _|_|_| $ @
+ _| $@
+ _|_|_|_| $@
+ $$@
+ @@
+204 LATIN CAPITAL LETTER I WITH GRAVE
+ _| $ @
+ _| $@
+ _|_|_| $@
+ _| $@
+ _| $@
+ _|_|_| $@
+ $$@
+ @@
+205 LATIN CAPITAL LETTER I WITH ACUTE
+ _| $@
+ _| $@
+ _|_|_| $@
+ _| $@
+ _| $@
+ _|_|_| $@
+ $$@
+ @@
+206 LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+ _| $@
+ _| _| $@
+ _|_|_| $@
+ _| $@
+ _| $@
+ _|_|_| $@
+ $$@
+ @@
+207 LATIN CAPITAL LETTER I WITH DIAERESIS
+ _| _| $@
+ $$@
+ _|_|_| $@
+ _| $@
+ _| $@
+ _|_|_| $@
+ $$@
+ @@
+208 LATIN CAPITAL LETTER ETH
+ $$ @
+ _|_|_| $@
+ _| _| $@
+ _|_|_| _| $@
+ _| _| $@
+ _|_|_| $@
+ $$ @
+ @@
+209 LATIN CAPITAL LETTER N WITH TILDE
+ _| _| $@
+ _| _| $@
+ _| _| $@
+ _|_| _| $@
+ _| _|_| $@
+ _| _| $@
+ $$@
+ @@
+210 LATIN CAPITAL LETTER O WITH GRAVE
+ _| $ @
+ _| $ @
+ _|_| $@
+ _| _| $@
+ _| _| $@
+ _|_| $@
+ $$ @
+ @@
+211 LATIN CAPITAL LETTER O WITH ACUTE
+ _| $ @
+ _| $ @
+ _|_| $@
+ _| _| $@
+ _| _| $@
+ _|_| $@
+ $$ @
+ @@
+212 LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+ _|_| $@
+ _| _| $@
+ _|_| $@
+ _| _| $@
+ _| _| $@
+ _|_| $@
+ $$ @
+ @@
+213 LATIN CAPITAL LETTER O WITH TILDE
+ _| _| $@
+ _| _| $@
+ _|_| $@
+ _| _| $@
+ _| _| $@
+ _|_| $@
+ $$ @
+ @@
+214 LATIN CAPITAL LETTER O WITH DIAERESIS
+ _| _| $@
+ $$@
+ _|_| $@
+ _| _| $@
+ _| _| $@
+ _|_| $@
+ $$ @
+ @@
+215 MULTIPLICATION SIGN
+ @
+ $$@
+ _| _| $@
+ _| $@
+ _| _| $@
+ $$@
+ @
+ @@
+216 LATIN CAPITAL LETTER O WITH STROKE
+ $$@
+ _|_|_|_| $@
+ _| _|_| $@
+ _| _| _| $@
+ _|_| _| $@
+ _|_|_|_| $@
+ $$ @
+ @@
+217 LATIN CAPITAL LETTER U WITH GRAVE
+ _| $ @
+ _| $ @
+ $$@
+ _| _| $@
+ _| _| $@
+ _|_| $@
+ $$ @
+ @@
+218 LATIN CAPITAL LETTER U WITH ACUTE
+ _| $ @
+ _| $ @
+ $$@
+ _| _| $@
+ _| _| $@
+ _|_| $@
+ $$ @
+ @@
+219 LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+ _|_| $@
+ _| _| $@
+ $$@
+ _| _| $@
+ _| _| $@
+ _|_| $@
+ $$ @
+ @@
+220 LATIN CAPITAL LETTER U WITH DIAERESIS
+ _| _| $@
+ $$@
+ _| _| $@
+ _| _| $@
+ _| _| $@
+ _|_| $@
+ $$ @
+ @@
+221 LATIN CAPITAL LETTER Y WITH ACUTE
+ _| $ @
+ _| $@
+ _| _| $@
+ _| _| $@
+ _| $ @
+ _| $ @
+ $$ @
+ @@
+222 LATIN CAPITAL LETTER THORN
+ $$ @
+ _| $ @
+ _|_|_| $@
+ _| _| $@
+ _|_|_| $@
+ _| $ @
+ $$ @
+ @@
+223 LATIN SMALL LETTER SHARP S
+ $$ @
+ _|_| $@
+ _| _| $@
+ _| _| $@
+ _| _| $@
+ _| _| $@
+ _| $ @
+ $$ @@
+224 LATIN SMALL LETTER A WITH GRAVE
+ _| $ @
+ _| $ @
+ $$@
+ _|_|_| $@
+ _| _| $@
+ _|_|_| $@
+ $$@
+ @@
+225 LATIN SMALL LETTER A WITH ACUTE
+ _| $@
+ _| $@
+ $$@
+ _|_|_| $@
+ _| _| $@
+ _|_|_| $@
+ $$@
+ @@
+226 LATIN SMALL LETTER A WITH CIRCUMFLEX
+ _| $@
+ _| _| $@
+ $$@
+ _|_|_| $@
+ _| _| $@
+ _|_|_| $@
+ $$@
+ @@
+227 LATIN SMALL LETTER A WITH TILDE
+ _| _| $@
+ _| _| $@
+ $$@
+ _|_|_| $@
+ _| _| $@
+ _|_|_| $@
+ $$@
+ @@
+228 LATIN SMALL LETTER A WITH DIAERESIS
+ _| _| $@
+ $$@
+ _|_|_| $@
+ _| _| $@
+ _| _| $@
+ _|_|_| $@
+ $$@
+ @@
+229 LATIN SMALL LETTER A WITH RING ABOVE
+ _| $@
+ _| _| $@
+ _| $@
+ _|_|_| $@
+ _| _| $@
+ _|_|_| $@
+ $$@
+ @@
+230 LATIN SMALL LETTER AE
+ @
+ $$ @
+ _|_|_| _|_| $@
+ _| _|_|_|_|_| $@
+ _| _|_| $@
+ _|_|_| _|_|_| $@
+ $$@
+ @@
+231 LATIN SMALL LETTER C WITH CEDILLA
+ @
+ $$@
+ _|_|_| $@
+ _| $@
+ _| $@
+ _|_|_| $@
+ _| $@
+ _|_| $ @@
+232 LATIN SMALL LETTER E WITH GRAVE
+ _| $@
+ _| $ @
+ _|_| $@
+ _|_|_|_| $@
+ _| $@
+ _|_|_| $@
+ $$@
+ @@
+233 LATIN SMALL LETTER E WITH ACUTE
+ _| $@
+ _| $@
+ _|_| $@
+ _|_|_|_| $@
+ _| $@
+ _|_|_| $@
+ $$@
+ @@
+234 LATIN SMALL LETTER E WITH CIRCUMFLEX
+ _|_| $@
+ _| _| $@
+ _|_| $@
+ _|_|_|_| $@
+ _| $@
+ _|_|_| $@
+ $$@
+ @@
+235 LATIN SMALL LETTER E WITH DIAERESIS
+ _| _| $@
+ $$@
+ _|_| $@
+ _|_|_|_| $@
+ _| $@
+ _|_|_| $@
+ $$@
+ @@
+236 LATIN SMALL LETTER I WITH GRAVE
+ _| $@
+ _| $@
+ $$@
+ _| $@
+ _| $@
+ _| $@
+ $$@
+ @@
+237 LATIN SMALL LETTER I WITH ACUTE
+ _| $@
+ _| $@
+ $$ @
+ _| $ @
+ _| $ @
+ _| $ @
+ $$ @
+ @@
+238 LATIN SMALL LETTER I WITH CIRCUMFLEX
+ _| $@
+ _| _| $@
+ $$@
+ _| $ @
+ _| $ @
+ _| $ @
+ $$ @
+ @@
+239 LATIN SMALL LETTER I WITH DIAERESIS
+ _| _| $@
+ $$@
+ _| $ @
+ _| $ @
+ _| $ @
+ _| $ @
+ $$ @
+ @@
+240 LATIN SMALL LETTER ETH
+ _| _| $ @
+ _| $ @
+ _| _| $@
+ _|_|_| $@
+ _| _| $@
+ _|_| $@
+ $$ @
+ @@
+241 LATIN SMALL LETTER N WITH TILDE
+ _| _| $@
+ _| _| $@
+ $$ @
+ _|_|_| $@
+ _| _| $@
+ _| _| $@
+ $$@
+ @@
+242 LATIN SMALL LETTER O WITH GRAVE
+ _| $ @
+ _| $ @
+ $$ @
+ _|_| $@
+ _| _| $@
+ _|_| $@
+ $$ @
+ @@
+243 LATIN SMALL LETTER O WITH ACUTE
+ _| $ @
+ _| $ @
+ $$ @
+ _|_| $@
+ _| _| $@
+ _|_| $@
+ $$ @
+ @@
+244 LATIN SMALL LETTER O WITH CIRCUMFLEX
+ _|_| $@
+ _| _| $@
+ $$@
+ _|_| $@
+ _| _| $@
+ _|_| $@
+ $$ @
+ @@
+245 LATIN SMALL LETTER O WITH TILDE
+ _|_|_| $@
+ _| _| $@
+ $$ @
+ _|_| $@
+ _| _| $@
+ _|_| $@
+ $$ @
+ @@
+246 LATIN SMALL LETTER O WITH DIAERESIS
+ _| _| $@
+ $$@
+ _|_| $@
+ _| _| $@
+ _| _| $@
+ _|_| $@
+ $$ @
+ @@
+247 DIVISION SIGN
+ $$ @
+ _| $ @
+ $$@
+ _|_|_|_|_| $@
+ $$@
+ _| $ @
+ $$ @
+ @@
+248 LATIN SMALL LETTER O WITH STROKE
+ @
+ $$@
+ _|_|_| $@
+ _| _|_| $@
+ _|_| _| $@
+ _|_|_| $@
+ $$ @
+ @@
+249 LATIN SMALL LETTER U WITH GRAVE
+ _| $ @
+ _| $ @
+ $$@
+ _| _| $@
+ _| _| $@
+ _|_|_| $@
+ $$@
+ @@
+250 LATIN SMALL LETTER U WITH ACUTE
+ _| $@
+ _| $@
+ $$@
+ _| _| $@
+ _| _| $@
+ _|_|_| $@
+ $$@
+ @@
+251 LATIN SMALL LETTER U WITH CIRCUMFLEX
+ _|_| $@
+ _| _| $@
+ $$@
+ _| _| $@
+ _| _| $@
+ _|_|_| $@
+ $$@
+ @@
+252 LATIN SMALL LETTER U WITH DIAERESIS
+ _| _| $@
+ $$@
+ _| _| $@
+ _| _| $@
+ _| _| $@
+ _|_|_| $@
+ $$@
+ @@
+253 LATIN SMALL LETTER Y WITH ACUTE
+ _| $ @
+ _| $ @
+ $$@
+ _| _| $@
+ _| _| $@
+ _|_|_| $@
+ _| $@
+ _|_| $@@
+254 LATIN SMALL LETTER THORN
+ $$ @
+ _| $ @
+ _|_|_| $@
+ _| _| $@
+ _| _| $@
+ _|_|_| $@
+ _| $ @
+ _| $ @@
+255 LATIN SMALL LETTER Y WITH DIAERESIS
+ _| _| $@
+ $$@
+ _| _| $@
+ _| _| $@
+ _| _| $@
+ _|_|_| $@
+ _| $@
+ _|_| $@@
diff --git a/externals/figlet/fonts/bubble.flf b/externals/figlet/fonts/bubble.flf
new file mode 100644
index 000000000..efd0a7196
--- /dev/null
+++ b/externals/figlet/fonts/bubble.flf
@@ -0,0 +1,1630 @@
+flf2a 4 3 8 15 11 0 10127 242
+Bubble by Glenn Chappell 4/93
+Includes characters 128-255
+Enhanced for Latin-2,3,4 by John Cowan <cowan@ccil.org>
+Latin character sets supported only if your screen font does
+figlet release 2.2 -- November 1996
+Permission is hereby given to modify this font, as long as the
+modifier's name is placed on a comment line.
+
+Modified by Paul Burton <solution@earthlink.net> 12/96 to include new parameter
+supported by FIGlet and FIGWin. May also be slightly modified for better use
+of new full-width/kern/smush alternatives, but default output is NOT changed.
+ @
+ @
+ @
+ @@
+ _ @
+ / \ @
+ ( ! )@
+ \_/ @@
+ _ @
+ / \ @
+ ( " )@
+ \_/ @@
+ _ @
+ / \ @
+ ( # )@
+ \_/ @@
+ _ @
+ / \ @
+ ( $ )@
+ \_/ @@
+ _ @
+ / \ @
+ ( % )@
+ \_/ @@
+ _ @
+ / \ @
+ ( & )@
+ \_/ @@
+ _ @
+ / \ @
+ ( ' )@
+ \_/ @@
+ _ @
+ / \ @
+ ( ( )@
+ \_/ @@
+ _ @
+ / \ @
+ ( ) )@
+ \_/ @@
+ _ @
+ / \ @
+ ( * )@
+ \_/ @@
+ _ @
+ / \ @
+ ( + )@
+ \_/ @@
+ _ @
+ / \ @
+ ( , )@
+ \_/ @@
+ _ @
+ / \ @
+ ( - )@
+ \_/ @@
+ _ @
+ / \ @
+ ( . )@
+ \_/ @@
+ _ @
+ / \ @
+ ( / )@
+ \_/ @@
+ _ @
+ / \ @
+ ( 0 )@
+ \_/ @@
+ _ @
+ / \ @
+ ( 1 )@
+ \_/ @@
+ _ @
+ / \ @
+ ( 2 )@
+ \_/ @@
+ _ @
+ / \ @
+ ( 3 )@
+ \_/ @@
+ _ @
+ / \ @
+ ( 4 )@
+ \_/ @@
+ _ @
+ / \ @
+ ( 5 )@
+ \_/ @@
+ _ @
+ / \ @
+ ( 6 )@
+ \_/ @@
+ _ @
+ / \ @
+ ( 7 )@
+ \_/ @@
+ _ @
+ / \ @
+ ( 8 )@
+ \_/ @@
+ _ @
+ / \ @
+ ( 9 )@
+ \_/ @@
+ _ @
+ / \ @
+ ( : )@
+ \_/ @@
+ _ @
+ / \ @
+ ( ; )@
+ \_/ @@
+ _ @
+ / \ @
+ ( < )@
+ \_/ @@
+ _ @
+ / \ @
+ ( = )@
+ \_/ @@
+ _ @
+ / \ @
+ ( > )@
+ \_/ @@
+ _ @
+ / \ @
+ ( ? )@
+ \_/ @@
+ _ @
+ / \ @
+ ( @ )@
+ \_/ @@
+ _ @
+ / \ @
+ ( A )@
+ \_/ @@
+ _ @
+ / \ @
+ ( B )@
+ \_/ @@
+ _ @
+ / \ @
+ ( C )@
+ \_/ @@
+ _ @
+ / \ @
+ ( D )@
+ \_/ @@
+ _ @
+ / \ @
+ ( E )@
+ \_/ @@
+ _ @
+ / \ @
+ ( F )@
+ \_/ @@
+ _ @
+ / \ @
+ ( G )@
+ \_/ @@
+ _ @
+ / \ @
+ ( H )@
+ \_/ @@
+ _ @
+ / \ @
+ ( I )@
+ \_/ @@
+ _ @
+ / \ @
+ ( J )@
+ \_/ @@
+ _ @
+ / \ @
+ ( K )@
+ \_/ @@
+ _ @
+ / \ @
+ ( L )@
+ \_/ @@
+ _ @
+ / \ @
+ ( M )@
+ \_/ @@
+ _ @
+ / \ @
+ ( N )@
+ \_/ @@
+ _ @
+ / \ @
+ ( O )@
+ \_/ @@
+ _ @
+ / \ @
+ ( P )@
+ \_/ @@
+ _ @
+ / \ @
+ ( Q )@
+ \_/ @@
+ _ @
+ / \ @
+ ( R )@
+ \_/ @@
+ _ @
+ / \ @
+ ( S )@
+ \_/ @@
+ _ @
+ / \ @
+ ( T )@
+ \_/ @@
+ _ @
+ / \ @
+ ( U )@
+ \_/ @@
+ _ @
+ / \ @
+ ( V )@
+ \_/ @@
+ _ @
+ / \ @
+ ( W )@
+ \_/ @@
+ _ @
+ / \ @
+ ( X )@
+ \_/ @@
+ _ @
+ / \ @
+ ( Y )@
+ \_/ @@
+ _ @
+ / \ @
+ ( Z )@
+ \_/ @@
+ _ @
+ / \ @
+ ( [ )@
+ \_/ @@
+ _ @
+ / \ @
+ ( \ )@
+ \_/ @@
+ _ @
+ / \ @
+ ( ] )@
+ \_/ @@
+ _ @
+ / \ @
+ ( ^ )@
+ \_/ @@
+ _ @
+ / \ @
+ ( _ )@
+ \_/ @@
+ _ @
+ / \ @
+ ( ` )@
+ \_/ @@
+ _ @
+ / \ @
+ ( a )@
+ \_/ @@
+ _ @
+ / \ @
+ ( b )@
+ \_/ @@
+ _ @
+ / \ @
+ ( c )@
+ \_/ @@
+ _ @
+ / \ @
+ ( d )@
+ \_/ @@
+ _ @
+ / \ @
+ ( e )@
+ \_/ @@
+ _ @
+ / \ @
+ ( f )@
+ \_/ @@
+ _ @
+ / \ @
+ ( g )@
+ \_/ @@
+ _ @
+ / \ @
+ ( h )@
+ \_/ @@
+ _ @
+ / \ @
+ ( i )@
+ \_/ @@
+ _ @
+ / \ @
+ ( j )@
+ \_/ @@
+ _ @
+ / \ @
+ ( k )@
+ \_/ @@
+ _ @
+ / \ @
+ ( l )@
+ \_/ @@
+ _ @
+ / \ @
+ ( m )@
+ \_/ @@
+ _ @
+ / \ @
+ ( n )@
+ \_/ @@
+ _ @
+ / \ @
+ ( o )@
+ \_/ @@
+ _ @
+ / \ @
+ ( p )@
+ \_/ @@
+ _ @
+ / \ @
+ ( q )@
+ \_/ @@
+ _ @
+ / \ @
+ ( r )@
+ \_/ @@
+ _ @
+ / \ @
+ ( s )@
+ \_/ @@
+ _ @
+ / \ @
+ ( t )@
+ \_/ @@
+ _ @
+ / \ @
+ ( u )@
+ \_/ @@
+ _ @
+ / \ @
+ ( v )@
+ \_/ @@
+ _ @
+ / \ @
+ ( w )@
+ \_/ @@
+ _ @
+ / \ @
+ ( x )@
+ \_/ @@
+ _ @
+ / \ @
+ ( y )@
+ \_/ @@
+ _ @
+ / \ @
+ ( z )@
+ \_/ @@
+ _ @
+ / \ @
+ ( { )@
+ \_/ @@
+ _ @
+ / \ @
+ ( | )@
+ \_/ @@
+ _ @
+ / \ @
+ ( } )@
+ \_/ @@
+ _ @
+ / \ @
+ ( ~ )@
+ \_/ @@
+ _ @
+ / \ @
+ ( Ä )@
+ \_/ @@
+ _ @
+ / \ @
+ ( Ö )@
+ \_/ @@
+ _ @
+ / \ @
+ ( Ü )@
+ \_/ @@
+ _ @
+ / \ @
+ ( ä )@
+ \_/ @@
+ _ @
+ / \ @
+ ( ö )@
+ \_/ @@
+ _ @
+ / \ @
+ ( ü )@
+ \_/ @@
+ _ @
+ / \ @
+ ( ß )@
+ \_/ @@
+128
+ _ @
+ / \ @
+ ( )@
+ \_/ @@
+129
+ _ @
+ / \ @
+ ( )@
+ \_/ @@
+130
+ _ @
+ / \ @
+ ( )@
+ \_/ @@
+131
+ _ @
+ / \ @
+ ( )@
+ \_/ @@
+132
+ _ @
+ / \ @
+ ( )@
+ \_/ @@
+133
+ _ @
+ / \ @
+ ( )@
+ \_/ @@
+134
+ _ @
+ / \ @
+ ( )@
+ \_/ @@
+135
+ _ @
+ / \ @
+ ( )@
+ \_/ @@
+136
+ _ @
+ / \ @
+ ( )@
+ \_/ @@
+137
+ _ @
+ / \ @
+ ( )@
+ \_/ @@
+138
+ _ @
+ / \ @
+ ( )@
+ \_/ @@
+139
+ _ @
+ / \ @
+ ( )@
+ \_/ @@
+140
+ _ @
+ / \ @
+ ( )@
+ \_/ @@
+141
+ _ @
+ / \ @
+ ( )@
+ \_/ @@
+142
+ _ @
+ / \ @
+ ( )@
+ \_/ @@
+143
+ _ @
+ / \ @
+ ( )@
+ \_/ @@
+144
+ _ @
+ / \ @
+ ( )@
+ \_/ @@
+145
+ _ @
+ / \ @
+ ( )@
+ \_/ @@
+146
+ _ @
+ / \ @
+ ( )@
+ \_/ @@
+147
+ _ @
+ / \ @
+ ( )@
+ \_/ @@
+148
+ _ @
+ / \ @
+ ( )@
+ \_/ @@
+149
+ _ @
+ / \ @
+ ( )@
+ \_/ @@
+150
+ _ @
+ / \ @
+ ( )@
+ \_/ @@
+151
+ _ @
+ / \ @
+ ( )@
+ \_/ @@
+152
+ _ @
+ / \ @
+ ( )@
+ \_/ @@
+153
+ _ @
+ / \ @
+ ( )@
+ \_/ @@
+154
+ _ @
+ / \ @
+ ( )@
+ \_/ @@
+155
+ _ @
+ / \ @
+ ( )@
+ \_/ @@
+156
+ _ @
+ / \ @
+ ( )@
+ \_/ @@
+157
+ _ @
+ / \ @
+ ( )@
+ \_/ @@
+158
+ _ @
+ / \ @
+ ( )@
+ \_/ @@
+159
+ _ @
+ / \ @
+ ( )@
+ \_/ @@
+160 NO-BREAK SPACE
+ _ @
+ / \ @
+ ( )@
+ \_/ @@
+161 INVERTED EXCLAMATION MARK
+ _ @
+ / \ @
+ ( ¡ )@
+ \_/ @@
+162 CENT SIGN
+ _ @
+ / \ @
+ ( ¢ )@
+ \_/ @@
+163 POUND SIGN
+ _ @
+ / \ @
+ ( £ )@
+ \_/ @@
+164 CURRENCY SIGN
+ _ @
+ / \ @
+ ( ¤ )@
+ \_/ @@
+165 YEN SIGN
+ _ @
+ / \ @
+ ( ¥ )@
+ \_/ @@
+166 BROKEN BAR
+ _ @
+ / \ @
+ ( ¦ )@
+ \_/ @@
+167 SECTION SIGN
+ _ @
+ / \ @
+ ( § )@
+ \_/ @@
+168 DIAERESIS
+ _ @
+ / \ @
+ ( ¨ )@
+ \_/ @@
+169 COPYRIGHT SIGN
+ _ @
+ / \ @
+ ( © )@
+ \_/ @@
+170 FEMININE ORDINAL INDICATOR
+ _ @
+ / \ @
+ ( ª )@
+ \_/ @@
+171 LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+ _ @
+ / \ @
+ ( « )@
+ \_/ @@
+172 NOT SIGN
+ _ @
+ / \ @
+ ( ¬ )@
+ \_/ @@
+173 SOFT HYPHEN
+ _ @
+ / \ @
+ ( )@
+ \_/ @@
+174 REGISTERED SIGN
+ _ @
+ / \ @
+ ( ® )@
+ \_/ @@
+175 MACRON
+ _ @
+ / \ @
+ ( ¯ )@
+ \_/ @@
+176 DEGREE SIGN
+ _ @
+ / \ @
+ ( ° )@
+ \_/ @@
+177 PLUS-MINUS SIGN
+ _ @
+ / \ @
+ ( ± )@
+ \_/ @@
+178 SUPERSCRIPT TWO
+ _ @
+ / \ @
+ ( ² )@
+ \_/ @@
+179 SUPERSCRIPT THREE
+ _ @
+ / \ @
+ ( ³ )@
+ \_/ @@
+180 ACUTE ACCENT
+ _ @
+ / \ @
+ ( ´ )@
+ \_/ @@
+181 MICRO SIGN
+ _ @
+ / \ @
+ ( µ )@
+ \_/ @@
+182 PILCROW SIGN
+ _ @
+ / \ @
+ ( ¶ )@
+ \_/ @@
+183 MIDDLE DOT
+ _ @
+ / \ @
+ ( · )@
+ \_/ @@
+184 CEDILLA
+ _ @
+ / \ @
+ ( ¸ )@
+ \_/ @@
+185 SUPERSCRIPT ONE
+ _ @
+ / \ @
+ ( ¹ )@
+ \_/ @@
+186 MASCULINE ORDINAL INDICATOR
+ _ @
+ / \ @
+ ( º )@
+ \_/ @@
+187 RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+ _ @
+ / \ @
+ ( » )@
+ \_/ @@
+188 VULGAR FRACTION ONE QUARTER
+ _ @
+ / \ @
+ ( ¼ )@
+ \_/ @@
+189 VULGAR FRACTION ONE HALF
+ _ @
+ / \ @
+ ( ½ )@
+ \_/ @@
+190 VULGAR FRACTION THREE QUARTERS
+ _ @
+ / \ @
+ ( ¾ )@
+ \_/ @@
+191 INVERTED QUESTION MARK
+ _ @
+ / \ @
+ ( ¿ )@
+ \_/ @@
+192 LATIN CAPITAL LETTER A WITH GRAVE
+ _ @
+ / \ @
+ ( À )@
+ \_/ @@
+193 LATIN CAPITAL LETTER A WITH ACUTE
+ _ @
+ / \ @
+ ( Á )@
+ \_/ @@
+194 LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+ _ @
+ / \ @
+ ( Â )@
+ \_/ @@
+195 LATIN CAPITAL LETTER A WITH TILDE
+ _ @
+ / \ @
+ ( Ã )@
+ \_/ @@
+196 LATIN CAPITAL LETTER A WITH DIAERESIS
+ _ @
+ / \ @
+ ( Ä )@
+ \_/ @@
+197 LATIN CAPITAL LETTER A WITH RING ABOVE
+ _ @
+ / \ @
+ ( Å )@
+ \_/ @@
+198 LATIN CAPITAL LETTER AE
+ _ @
+ / \ @
+ ( Æ )@
+ \_/ @@
+199 LATIN CAPITAL LETTER C WITH CEDILLA
+ _ @
+ / \ @
+ ( Ç )@
+ \_/ @@
+200 LATIN CAPITAL LETTER E WITH GRAVE
+ _ @
+ / \ @
+ ( È )@
+ \_/ @@
+201 LATIN CAPITAL LETTER E WITH ACUTE
+ _ @
+ / \ @
+ ( É )@
+ \_/ @@
+202 LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+ _ @
+ / \ @
+ ( Ê )@
+ \_/ @@
+203 LATIN CAPITAL LETTER E WITH DIAERESIS
+ _ @
+ / \ @
+ ( Ë )@
+ \_/ @@
+204 LATIN CAPITAL LETTER I WITH GRAVE
+ _ @
+ / \ @
+ ( Ì )@
+ \_/ @@
+205 LATIN CAPITAL LETTER I WITH ACUTE
+ _ @
+ / \ @
+ ( Í )@
+ \_/ @@
+206 LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+ _ @
+ / \ @
+ ( Î )@
+ \_/ @@
+207 LATIN CAPITAL LETTER I WITH DIAERESIS
+ _ @
+ / \ @
+ ( Ï )@
+ \_/ @@
+208 LATIN CAPITAL LETTER ETH
+ _ @
+ / \ @
+ ( Ð )@
+ \_/ @@
+209 LATIN CAPITAL LETTER N WITH TILDE
+ _ @
+ / \ @
+ ( Ñ )@
+ \_/ @@
+210 LATIN CAPITAL LETTER O WITH GRAVE
+ _ @
+ / \ @
+ ( Ò )@
+ \_/ @@
+211 LATIN CAPITAL LETTER O WITH ACUTE
+ _ @
+ / \ @
+ ( Ó )@
+ \_/ @@
+212 LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+ _ @
+ / \ @
+ ( Ô )@
+ \_/ @@
+213 LATIN CAPITAL LETTER O WITH TILDE
+ _ @
+ / \ @
+ ( Õ )@
+ \_/ @@
+214 LATIN CAPITAL LETTER O WITH DIAERESIS
+ _ @
+ / \ @
+ ( Ö )@
+ \_/ @@
+215 MULTIPLICATION SIGN
+ _ @
+ / \ @
+ ( × )@
+ \_/ @@
+216 LATIN CAPITAL LETTER O WITH STROKE
+ _ @
+ / \ @
+ ( Ø )@
+ \_/ @@
+217 LATIN CAPITAL LETTER U WITH GRAVE
+ _ @
+ / \ @
+ ( Ù )@
+ \_/ @@
+218 LATIN CAPITAL LETTER U WITH ACUTE
+ _ @
+ / \ @
+ ( Ú )@
+ \_/ @@
+219 LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+ _ @
+ / \ @
+ ( Û )@
+ \_/ @@
+220 LATIN CAPITAL LETTER U WITH DIAERESIS
+ _ @
+ / \ @
+ ( Ü )@
+ \_/ @@
+221 LATIN CAPITAL LETTER Y WITH ACUTE
+ _ @
+ / \ @
+ ( Ý )@
+ \_/ @@
+222 LATIN CAPITAL LETTER THORN
+ _ @
+ / \ @
+ ( Þ )@
+ \_/ @@
+223 LATIN SMALL LETTER SHARP S
+ _ @
+ / \ @
+ ( ß )@
+ \_/ @@
+224 LATIN SMALL LETTER A WITH GRAVE
+ _ @
+ / \ @
+ ( à )@
+ \_/ @@
+225 LATIN SMALL LETTER A WITH ACUTE
+ _ @
+ / \ @
+ ( á )@
+ \_/ @@
+226 LATIN SMALL LETTER A WITH CIRCUMFLEX
+ _ @
+ / \ @
+ ( â )@
+ \_/ @@
+227 LATIN SMALL LETTER A WITH TILDE
+ _ @
+ / \ @
+ ( ã )@
+ \_/ @@
+228 LATIN SMALL LETTER A WITH DIAERESIS
+ _ @
+ / \ @
+ ( ä )@
+ \_/ @@
+229 LATIN SMALL LETTER A WITH RING ABOVE
+ _ @
+ / \ @
+ ( å )@
+ \_/ @@
+230 LATIN SMALL LETTER AE
+ _ @
+ / \ @
+ ( æ )@
+ \_/ @@
+231 LATIN SMALL LETTER C WITH CEDILLA
+ _ @
+ / \ @
+ ( ç )@
+ \_/ @@
+232 LATIN SMALL LETTER E WITH GRAVE
+ _ @
+ / \ @
+ ( è )@
+ \_/ @@
+233 LATIN SMALL LETTER E WITH ACUTE
+ _ @
+ / \ @
+ ( é )@
+ \_/ @@
+234 LATIN SMALL LETTER E WITH CIRCUMFLEX
+ _ @
+ / \ @
+ ( ê )@
+ \_/ @@
+235 LATIN SMALL LETTER E WITH DIAERESIS
+ _ @
+ / \ @
+ ( ë )@
+ \_/ @@
+236 LATIN SMALL LETTER I WITH GRAVE
+ _ @
+ / \ @
+ ( ì )@
+ \_/ @@
+237 LATIN SMALL LETTER I WITH ACUTE
+ _ @
+ / \ @
+ ( í )@
+ \_/ @@
+238 LATIN SMALL LETTER I WITH CIRCUMFLEX
+ _ @
+ / \ @
+ ( î )@
+ \_/ @@
+239 LATIN SMALL LETTER I WITH DIAERESIS
+ _ @
+ / \ @
+ ( ï )@
+ \_/ @@
+240 LATIN SMALL LETTER ETH
+ _ @
+ / \ @
+ ( ð )@
+ \_/ @@
+241 LATIN SMALL LETTER N WITH TILDE
+ _ @
+ / \ @
+ ( ñ )@
+ \_/ @@
+242 LATIN SMALL LETTER O WITH GRAVE
+ _ @
+ / \ @
+ ( ò )@
+ \_/ @@
+243 LATIN SMALL LETTER O WITH ACUTE
+ _ @
+ / \ @
+ ( ó )@
+ \_/ @@
+244 LATIN SMALL LETTER O WITH CIRCUMFLEX
+ _ @
+ / \ @
+ ( ô )@
+ \_/ @@
+245 LATIN SMALL LETTER O WITH TILDE
+ _ @
+ / \ @
+ ( õ )@
+ \_/ @@
+246 LATIN SMALL LETTER O WITH DIAERESIS
+ _ @
+ / \ @
+ ( ö )@
+ \_/ @@
+247 DIVISION SIGN
+ _ @
+ / \ @
+ ( ÷ )@
+ \_/ @@
+248 LATIN SMALL LETTER O WITH STROKE
+ _ @
+ / \ @
+ ( ø )@
+ \_/ @@
+249 LATIN SMALL LETTER U WITH GRAVE
+ _ @
+ / \ @
+ ( ù )@
+ \_/ @@
+250 LATIN SMALL LETTER U WITH ACUTE
+ _ @
+ / \ @
+ ( ú )@
+ \_/ @@
+251 LATIN SMALL LETTER U WITH CIRCUMFLEX
+ _ @
+ / \ @
+ ( û )@
+ \_/ @@
+252 LATIN SMALL LETTER U WITH DIAERESIS
+ _ @
+ / \ @
+ ( ü )@
+ \_/ @@
+253 LATIN SMALL LETTER Y WITH ACUTE
+ _ @
+ / \ @
+ ( ý )@
+ \_/ @@
+254 LATIN SMALL LETTER THORN
+ _ @
+ / \ @
+ ( þ )@
+ \_/ @@
+255 LATIN SMALL LETTER Y WITH DIAERESIS
+ _ @
+ / \ @
+ ( ÿ )@
+ \_/ @@
+0x0100 LATIN CAPITAL LETTER A WITH MACRON
+ _ @
+ / \ @
+ ( À )@
+ \_/ @@
+0x0101 LATIN SMALL LETTER A WITH MACRON
+ _ @
+ / \ @
+ ( à )@
+ \_/ @@
+0x0102 LATIN CAPITAL LETTER A WITH BREVE
+ _ @
+ / \ @
+ ( Ã )@
+ \_/ @@
+0x0103 LATIN SMALL LETTER A WITH BREVE
+ _ @
+ / \ @
+ ( ã )@
+ \_/ @@
+0x0104 LATIN CAPITAL LETTER A WITH OGONEK
+ _ @
+ / \ @
+ ( ¡ )@
+ \_/ @@
+0x0105 LATIN SMALL LETTER A WITH OGONEK
+ _ @
+ / \ @
+ ( ± )@
+ \_/ @@
+0x0106 LATIN CAPITAL LETTER C WITH ACUTE
+ _ @
+ / \ @
+ ( Æ )@
+ \_/ @@
+0x0107 LATIN SMALL LETTER C WITH ACUTE
+ _ @
+ / \ @
+ ( æ )@
+ \_/ @@
+0x0108 LATIN CAPITAL LETTER C WITH CIRCUMFLEX
+ _ @
+ / \ @
+ ( Æ )@
+ \_/ @@
+0x0109 LATIN SMALL LETTER C WITH CIRCUMFLEX
+ _ @
+ / \ @
+ ( æ )@
+ \_/ @@
+0x010A LATIN CAPITAL LETTER C WITH DOT ABOVE
+ _ @
+ / \ @
+ ( Å )@
+ \_/ @@
+0x010B LATIN SMALL LETTER C WITH DOT ABOVE
+ _ @
+ / \ @
+ ( å )@
+ \_/ @@
+0x010C LATIN CAPITAL LETTER C WITH CARON
+ _ @
+ / \ @
+ ( È )@
+ \_/ @@
+0x010D LATIN SMALL LETTER C WITH CARON
+ _ @
+ / \ @
+ ( è )@
+ \_/ @@
+0x010E LATIN CAPITAL LETTER D WITH CARON
+ _ @
+ / \ @
+ ( Ï )@
+ \_/ @@
+0x010F LATIN SMALL LETTER D WITH CARON
+ _ @
+ / \ @
+ ( ï )@
+ \_/ @@
+0x0110 LATIN CAPITAL LETTER D WITH STROKE
+ _ @
+ / \ @
+ ( Ð )@
+ \_/ @@
+0x0111 LATIN SMALL LETTER D WITH STROKE
+ _ @
+ / \ @
+ ( ð )@
+ \_/ @@
+0x0112 LATIN CAPITAL LETTER E WITH MACRON
+ _ @
+ / \ @
+ ( ª )@
+ \_/ @@
+0x0113 LATIN SMALL LETTER E WITH MACRON
+ _ @
+ / \ @
+ ( º )@
+ \_/ @@
+0x0116 LATIN CAPITAL LETTER E WITH DOT ABOVE
+ _ @
+ / \ @
+ ( Ì )@
+ \_/ @@
+0x0117 LATIN SMALL LETTER E WITH DOT ABOVE
+ _ @
+ / \ @
+ ( ì )@
+ \_/ @@
+0x0118 LATIN CAPITAL LETTER E WITH OGONEK
+ _ @
+ / \ @
+ ( Ê )@
+ \_/ @@
+0x0119 LATIN SMALL LETTER E WITH OGONEK
+ _ @
+ / \ @
+ ( ê )@
+ \_/ @@
+0x011A LATIN CAPITAL LETTER E WITH CARON
+ _ @
+ / \ @
+ ( Ì )@
+ \_/ @@
+0x011B LATIN SMALL LETTER E WITH CARON
+ _ @
+ / \ @
+ ( ì )@
+ \_/ @@
+0x011C LATIN CAPITAL LETTER G WITH CIRCUMFLEX
+ _ @
+ / \ @
+ ( Ø )@
+ \_/ @@
+0x011D LATIN SMALL LETTER G WITH CIRCUMFLEX
+ _ @
+ / \ @
+ ( ø )@
+ \_/ @@
+0x011E LATIN CAPITAL LETTER G WITH BREVE
+ _ @
+ / \ @
+ ( « )@
+ \_/ @@
+0x011F LATIN SMALL LETTER G WITH BREVE
+ _ @
+ / \ @
+ ( » )@
+ \_/ @@
+0x0120 LATIN CAPITAL LETTER G WITH DOT ABOVE
+ _ @
+ / \ @
+ ( Õ )@
+ \_/ @@
+0x0121 LATIN SMALL LETTER G WITH DOT ABOVE
+ _ @
+ / \ @
+ ( õ )@
+ \_/ @@
+0x0122 LATIN CAPITAL LETTER G WITH CEDILLA
+ _ @
+ / \ @
+ ( « )@
+ \_/ @@
+0x0123 LATIN SMALL LETTER G WITH CEDILLA
+ _ @
+ / \ @
+ ( » )@
+ \_/ @@
+0x0124 LATIN CAPITAL LETTER H WITH CIRCUMFLEX
+ _ @
+ / \ @
+ ( ¦ )@
+ \_/ @@
+0x0125 LATIN SMALL LETTER H WITH CIRCUMFLEX
+ _ @
+ / \ @
+ ( ¶ )@
+ \_/ @@
+0x0126 LATIN CAPITAL LETTER H WITH STROKE
+ _ @
+ / \ @
+ ( ¡ )@
+ \_/ @@
+0x0127 LATIN SMALL LETTER H WITH STROKE
+ _ @
+ / \ @
+ ( ± )@
+ \_/ @@
+0x0128 LATIN CAPITAL LETTER I WITH TILDE
+ _ @
+ / \ @
+ ( ¥ )@
+ \_/ @@
+0x0129 LATIN SMALL LETTER I WITH TILDE
+ _ @
+ / \ @
+ ( µ )@
+ \_/ @@
+0x012A LATIN CAPITAL LETTER I WITH MACRON
+ _ @
+ / \ @
+ ( Ï )@
+ \_/ @@
+0x012B LATIN SMALL LETTER I WITH MACRON
+ _ @
+ / \ @
+ ( ï )@
+ \_/ @@
+0x012E LATIN CAPITAL LETTER I WITH OGONEK
+ _ @
+ / \ @
+ ( Ç )@
+ \_/ @@
+0x012F LATIN SMALL LETTER I WITH OGONEK
+ _ @
+ / \ @
+ ( ç )@
+ \_/ @@
+0x0130 LATIN CAPITAL LETTER I WITH DOT ABOVE
+ _ @
+ / \ @
+ ( © )@
+ \_/ @@
+0x0131 LATIN SMALL LETTER DOTLESS I
+ _ @
+ / \ @
+ ( ¹ )@
+ \_/ @@
+0x0134 LATIN CAPITAL LETTER J WITH CIRCUMFLEX
+ _ @
+ / \ @
+ ( ¬ )@
+ \_/ @@
+0x0135 LATIN SMALL LETTER J WITH CIRCUMFLEX
+ _ @
+ / \ @
+ ( ¼ )@
+ \_/ @@
+0x0136 LATIN CAPITAL LETTER K WITH CEDILLA
+ _ @
+ / \ @
+ ( Ó )@
+ \_/ @@
+0x0137 LATIN SMALL LETTER K WITH CEDILLA
+ _ @
+ / \ @
+ ( ó )@
+ \_/ @@
+0x0138 LATIN SMALL LETTER KRA
+ _ @
+ / \ @
+ ( ¢ )@
+ \_/ @@
+0x0139 LATIN CAPITAL LETTER L WITH ACUTE
+ _ @
+ / \ @
+ ( Å )@
+ \_/ @@
+0x013A LATIN SMALL LETTER L WITH ACUTE
+ _ @
+ / \ @
+ ( å )@
+ \_/ @@
+0x013B LATIN CAPITAL LETTER L WITH CEDILLA
+ _ @
+ / \ @
+ ( ¦ )@
+ \_/ @@
+0x013C LATIN SMALL LETTER L WITH CEDILLA
+ _ @
+ / \ @
+ ( ¶ )@
+ \_/ @@
+0x013D LATIN CAPITAL LETTER L WITH CARON
+ _ @
+ / \ @
+ ( ¥ )@
+ \_/ @@
+0x013E LATIN SMALL LETTER L WITH CARON
+ _ @
+ / \ @
+ ( µ )@
+ \_/ @@
+0x0141 LATIN CAPITAL LETTER L WITH STROKE
+ _ @
+ / \ @
+ ( £ )@
+ \_/ @@
+0x0142 LATIN SMALL LETTER L WITH STROKE
+ _ @
+ / \ @
+ ( ³ )@
+ \_/ @@
+0x0143 LATIN CAPITAL LETTER N WITH ACUTE
+ _ @
+ / \ @
+ ( Ñ )@
+ \_/ @@
+0x0144 LATIN SMALL LETTER N WITH ACUTE
+ _ @
+ / \ @
+ ( ñ )@
+ \_/ @@
+0x0145 LATIN CAPITAL LETTER N WITH CEDILLA
+ _ @
+ / \ @
+ ( Ñ )@
+ \_/ @@
+0x0146 LATIN SMALL LETTER N WITH CEDILLA
+ _ @
+ / \ @
+ ( ñ )@
+ \_/ @@
+0x0147 LATIN CAPITAL LETTER N WITH CARON
+ _ @
+ / \ @
+ ( Ò )@
+ \_/ @@
+0x0148 LATIN SMALL LETTER N WITH CARON
+ _ @
+ / \ @
+ ( ò )@
+ \_/ @@
+0x014A LATIN CAPITAL LETTER ENG
+ _ @
+ / \ @
+ ( ½ )@
+ \_/ @@
+0x014B LATIN SMALL LETTER ENG
+ _ @
+ / \ @
+ ( ¿ )@
+ \_/ @@
+0x014C LATIN CAPITAL LETTER O WITH MACRON
+ _ @
+ / \ @
+ ( Ò )@
+ \_/ @@
+0x014D LATIN SMALL LETTER O WITH MACRON
+ _ @
+ / \ @
+ ( ò )@
+ \_/ @@
+0x0150 LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
+ _ @
+ / \ @
+ ( Õ )@
+ \_/ @@
+0x0151 LATIN SMALL LETTER O WITH DOUBLE ACUTE
+ _ @
+ / \ @
+ ( õ )@
+ \_/ @@
+0x0154 LATIN CAPITAL LETTER R WITH ACUTE
+ _ @
+ / \ @
+ ( À )@
+ \_/ @@
+0x0155 LATIN SMALL LETTER R WITH ACUTE
+ _ @
+ / \ @
+ ( à )@
+ \_/ @@
+0x0156 LATIN CAPITAL LETTER R WITH CEDILLA
+ _ @
+ / \ @
+ ( £ )@
+ \_/ @@
+0x0157 LATIN SMALL LETTER R WITH CEDILLA
+ _ @
+ / \ @
+ ( ³ )@
+ \_/ @@
+0x0158 LATIN CAPITAL LETTER R WITH CARON
+ _ @
+ / \ @
+ ( Ø )@
+ \_/ @@
+0x0159 LATIN SMALL LETTER R WITH CARON
+ _ @
+ / \ @
+ ( ø )@
+ \_/ @@
+0x015A LATIN CAPITAL LETTER S WITH ACUTE
+ _ @
+ / \ @
+ ( ¦ )@
+ \_/ @@
+0x015B LATIN SMALL LETTER S WITH ACUTE
+ _ @
+ / \ @
+ ( ¶ )@
+ \_/ @@
+0x015C LATIN CAPITAL LETTER S WITH CIRCUMFLEX
+ _ @
+ / \ @
+ ( Þ )@
+ \_/ @@
+0x015D LATIN SMALL LETTER S WITH CIRCUMFLEX
+ _ @
+ / \ @
+ ( þ )@
+ \_/ @@
+0x015E LATIN CAPITAL LETTER S WITH CEDILLA
+ _ @
+ / \ @
+ ( ª )@
+ \_/ @@
+0x015F LATIN SMALL LETTER S WITH CEDILLA
+ _ @
+ / \ @
+ ( º )@
+ \_/ @@
+0x0160 LATIN CAPITAL LETTER S WITH CARON
+ _ @
+ / \ @
+ ( © )@
+ \_/ @@
+0x0161 LATIN SMALL LETTER S WITH CARON
+ _ @
+ / \ @
+ ( ¹ )@
+ \_/ @@
+0x0162 LATIN CAPITAL LETTER T WITH CEDILLA
+ _ @
+ / \ @
+ ( Þ )@
+ \_/ @@
+0x0163 LATIN SMALL LETTER T WITH CEDILLA
+ _ @
+ / \ @
+ ( þ )@
+ \_/ @@
+0x0164 LATIN CAPITAL LETTER T WITH CARON
+ _ @
+ / \ @
+ ( « )@
+ \_/ @@
+0x0165 LATIN SMALL LETTER T WITH CARON
+ _ @
+ / \ @
+ ( » )@
+ \_/ @@
+0x0166 LATIN CAPITAL LETTER T WITH STROKE
+ _ @
+ / \ @
+ ( ¬ )@
+ \_/ @@
+0x0167 LATIN SMALL LETTER T WITH STROKE
+ _ @
+ / \ @
+ ( ¼ )@
+ \_/ @@
+0x0168 LATIN CAPITAL LETTER U WITH TILDE
+ _ @
+ / \ @
+ ( Ý )@
+ \_/ @@
+0x0169 LATIN SMALL LETTER U WITH TILDE
+ _ @
+ / \ @
+ ( ý )@
+ \_/ @@
+0x016A LATIN CAPITAL LETTER U WITH MACRON
+ _ @
+ / \ @
+ ( Þ )@
+ \_/ @@
+0x016B LATIN SMALL LETTER U WITH MACRON
+ _ @
+ / \ @
+ ( þ )@
+ \_/ @@
+0x016C LATIN CAPITAL LETTER U WITH BREVE
+ _ @
+ / \ @
+ ( Ý )@
+ \_/ @@
+0x016D LATIN SMALL LETTER U WITH BREVE
+ _ @
+ / \ @
+ ( ý )@
+ \_/ @@
+0x016E LATIN CAPITAL LETTER U WITH RING ABOVE
+ _ @
+ / \ @
+ ( Ù )@
+ \_/ @@
+0x016F LATIN SMALL LETTER U WITH RING ABOVE
+ _ @
+ / \ @
+ ( ù )@
+ \_/ @@
+0x0170 LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
+ _ @
+ / \ @
+ ( Û )@
+ \_/ @@
+0x0171 LATIN SMALL LETTER U WITH DOUBLE ACUTE
+ _ @
+ / \ @
+ ( û )@
+ \_/ @@
+0x0172 LATIN CAPITAL LETTER U WITH OGONEK
+ _ @
+ / \ @
+ ( Ù )@
+ \_/ @@
+0x0173 LATIN SMALL LETTER U WITH OGONEK
+ _ @
+ / \ @
+ ( ù )@
+ \_/ @@
+0x0179 LATIN CAPITAL LETTER Z WITH ACUTE
+ _ @
+ / \ @
+ ( ¬ )@
+ \_/ @@
+0x017A LATIN SMALL LETTER Z WITH ACUTE
+ _ @
+ / \ @
+ ( ¼ )@
+ \_/ @@
+0x017B LATIN CAPITAL LETTER Z WITH DOT ABOVE
+ _ @
+ / \ @
+ ( ¯ )@
+ \_/ @@
+0x017C LATIN SMALL LETTER Z WITH DOT ABOVE
+ _ @
+ / \ @
+ ( ¿ )@
+ \_/ @@
+0x017D LATIN CAPITAL LETTER Z WITH CARON
+ _ @
+ / \ @
+ ( ® )@
+ \_/ @@
+0x017E LATIN SMALL LETTER Z WITH CARON
+ _ @
+ / \ @
+ ( ¾ )@
+ \_/ @@
+0x02C7 CARON
+ _ @
+ / \ @
+ ( · )@
+ \_/ @@
+0x02D8 BREVE
+ _ @
+ / \ @
+ ( ¢ )@
+ \_/ @@
+0x02D9 DOT ABOVE
+ _ @
+ / \ @
+ ( ÿ )@
+ \_/ @@
+0x02DB OGONEK
+ _ @
+ / \ @
+ ( ² )@
+ \_/ @@
+0x02DD DOUBLE ACUTE ACCENT
+ _ @
+ / \ @
+ ( ½ )@
+ \_/ @@
diff --git a/externals/figlet/fonts/digital.flf b/externals/figlet/fonts/digital.flf
new file mode 100644
index 000000000..6b7a1cabb
--- /dev/null
+++ b/externals/figlet/fonts/digital.flf
@@ -0,0 +1,1286 @@
+flf2a 3 2 6 1 11 0 16513 242
+Digital by Glenn Chappell 1/94 -- based on Bubble
+Includes characters 128-255
+Enhanced for Latin-2,3,4 by John Cowan <cowan@ccil.org>
+Latin character sets supported only if your screen font does
+figlet release 2.2 -- November 1996
+Permission is hereby given to modify this font, as long as the
+modifier's name is placed on a comment line.
+
+Modified by Paul Burton <solution@earthlink.net> 12/96 to include new parameter
+supported by FIGlet and FIGWin. May also be slightly modified for better use
+of new full-width/kern/smush alternatives, but default output is NOT changed.
+ @
+ @
+ @@
+ +-+@
+ |!|@
+ +-+@@
+ +-+@
+ |"|@
+ +-+@@
+ +-+@
+ |#|@
+ +-+@@
+ +-+@
+ |$|@
+ +-+@@
+ +-+@
+ |%|@
+ +-+@@
+ +-+@
+ |&|@
+ +-+@@
+ +-+@
+ |'|@
+ +-+@@
+ +-+@
+ |(|@
+ +-+@@
+ +-+@
+ |)|@
+ +-+@@
+ +-+@
+ |*|@
+ +-+@@
+ +-+@
+ |+|@
+ +-+@@
+ +-+@
+ |,|@
+ +-+@@
+ +-+@
+ |-|@
+ +-+@@
+ +-+@
+ |.|@
+ +-+@@
+ +-+@
+ |/|@
+ +-+@@
+ +-+@
+ |0|@
+ +-+@@
+ +-+@
+ |1|@
+ +-+@@
+ +-+@
+ |2|@
+ +-+@@
+ +-+@
+ |3|@
+ +-+@@
+ +-+@
+ |4|@
+ +-+@@
+ +-+@
+ |5|@
+ +-+@@
+ +-+@
+ |6|@
+ +-+@@
+ +-+@
+ |7|@
+ +-+@@
+ +-+@
+ |8|@
+ +-+@@
+ +-+@
+ |9|@
+ +-+@@
+ +-+@
+ |:|@
+ +-+@@
+ +-+@
+ |;|@
+ +-+@@
+ +-+@
+ |<|@
+ +-+@@
+ +-+@
+ |=|@
+ +-+@@
+ +-+@
+ |>|@
+ +-+@@
+ +-+@
+ |?|@
+ +-+@@
+ +-+@
+ |@|@
+ +-+@@
+ +-+@
+ |A|@
+ +-+@@
+ +-+@
+ |B|@
+ +-+@@
+ +-+@
+ |C|@
+ +-+@@
+ +-+@
+ |D|@
+ +-+@@
+ +-+@
+ |E|@
+ +-+@@
+ +-+@
+ |F|@
+ +-+@@
+ +-+@
+ |G|@
+ +-+@@
+ +-+@
+ |H|@
+ +-+@@
+ +-+@
+ |I|@
+ +-+@@
+ +-+@
+ |J|@
+ +-+@@
+ +-+@
+ |K|@
+ +-+@@
+ +-+@
+ |L|@
+ +-+@@
+ +-+@
+ |M|@
+ +-+@@
+ +-+@
+ |N|@
+ +-+@@
+ +-+@
+ |O|@
+ +-+@@
+ +-+@
+ |P|@
+ +-+@@
+ +-+@
+ |Q|@
+ +-+@@
+ +-+@
+ |R|@
+ +-+@@
+ +-+@
+ |S|@
+ +-+@@
+ +-+@
+ |T|@
+ +-+@@
+ +-+@
+ |U|@
+ +-+@@
+ +-+@
+ |V|@
+ +-+@@
+ +-+@
+ |W|@
+ +-+@@
+ +-+@
+ |X|@
+ +-+@@
+ +-+@
+ |Y|@
+ +-+@@
+ +-+@
+ |Z|@
+ +-+@@
+ +-+@
+ |[|@
+ +-+@@
+ +-+@
+ |\|@
+ +-+@@
+ +-+@
+ |]|@
+ +-+@@
+ +-+@
+ |^|@
+ +-+@@
+ +-+@
+ |_|@
+ +-+@@
+ +-+@
+ |`|@
+ +-+@@
+ +-+@
+ |a|@
+ +-+@@
+ +-+@
+ |b|@
+ +-+@@
+ +-+@
+ |c|@
+ +-+@@
+ +-+@
+ |d|@
+ +-+@@
+ +-+@
+ |e|@
+ +-+@@
+ +-+@
+ |f|@
+ +-+@@
+ +-+@
+ |g|@
+ +-+@@
+ +-+@
+ |h|@
+ +-+@@
+ +-+@
+ |i|@
+ +-+@@
+ +-+@
+ |j|@
+ +-+@@
+ +-+@
+ |k|@
+ +-+@@
+ +-+@
+ |l|@
+ +-+@@
+ +-+@
+ |m|@
+ +-+@@
+ +-+@
+ |n|@
+ +-+@@
+ +-+@
+ |o|@
+ +-+@@
+ +-+@
+ |p|@
+ +-+@@
+ +-+@
+ |q|@
+ +-+@@
+ +-+@
+ |r|@
+ +-+@@
+ +-+@
+ |s|@
+ +-+@@
+ +-+@
+ |t|@
+ +-+@@
+ +-+@
+ |u|@
+ +-+@@
+ +-+@
+ |v|@
+ +-+@@
+ +-+@
+ |w|@
+ +-+@@
+ +-+@
+ |x|@
+ +-+@@
+ +-+@
+ |y|@
+ +-+@@
+ +-+@
+ |z|@
+ +-+@@
+ +-+@
+ |{|@
+ +-+@@
+ +-+@
+ |||@
+ +-+@@
+ +-+@
+ |}|@
+ +-+@@
+ +-+@
+ |~|@
+ +-+@@
+ +-+@
+ |Ä|@
+ +-+@@
+ +-+@
+ |Ö|@
+ +-+@@
+ +-+@
+ |Ü|@
+ +-+@@
+ +-+@
+ |ä|@
+ +-+@@
+ +-+@
+ |ö|@
+ +-+@@
+ +-+@
+ |ü|@
+ +-+@@
+ +-+@
+ |ß|@
+ +-+@@
+128
+ +-+@
+ ||@
+ +-+@@
+129
+ +-+@
+ ||@
+ +-+@@
+130
+ +-+@
+ ||@
+ +-+@@
+131
+ +-+@
+ ||@
+ +-+@@
+132
+ +-+@
+ ||@
+ +-+@@
+133
+ +-+@
+ | |@
+ +-+@@
+134
+ +-+@
+ ||@
+ +-+@@
+135
+ +-+@
+ ||@
+ +-+@@
+136
+ +-+@
+ ||@
+ +-+@@
+137
+ +-+@
+ ||@
+ +-+@@
+138
+ +-+@
+ ||@
+ +-+@@
+139
+ +-+@
+ ||@
+ +-+@@
+140
+ +-+@
+ ||@
+ +-+@@
+141
+ +-+@
+ ||@
+ +-+@@
+142
+ +-+@
+ ||@
+ +-+@@
+143
+ +-+@
+ ||@
+ +-+@@
+144
+ +-+@
+ ||@
+ +-+@@
+145
+ +-+@
+ ||@
+ +-+@@
+146
+ +-+@
+ ||@
+ +-+@@
+147
+ +-+@
+ ||@
+ +-+@@
+148
+ +-+@
+ ||@
+ +-+@@
+149
+ +-+@
+ ||@
+ +-+@@
+150
+ +-+@
+ ||@
+ +-+@@
+151
+ +-+@
+ ||@
+ +-+@@
+152
+ +-+@
+ ||@
+ +-+@@
+153
+ +-+@
+ ||@
+ +-+@@
+154
+ +-+@
+ ||@
+ +-+@@
+155
+ +-+@
+ ||@
+ +-+@@
+156
+ +-+@
+ ||@
+ +-+@@
+157
+ +-+@
+ ||@
+ +-+@@
+158
+ +-+@
+ ||@
+ +-+@@
+159
+ +-+@
+ ||@
+ +-+@@
+160 NO-BREAK SPACE
+ +-+@
+ | |@
+ +-+@@
+161 INVERTED EXCLAMATION MARK
+ +-+@
+ |¡|@
+ +-+@@
+162 CENT SIGN
+ +-+@
+ |¢|@
+ +-+@@
+163 POUND SIGN
+ +-+@
+ |£|@
+ +-+@@
+164 CURRENCY SIGN
+ +-+@
+ |¤|@
+ +-+@@
+165 YEN SIGN
+ +-+@
+ |¥|@
+ +-+@@
+166 BROKEN BAR
+ +-+@
+ |¦|@
+ +-+@@
+167 SECTION SIGN
+ +-+@
+ |§|@
+ +-+@@
+168 DIAERESIS
+ +-+@
+ |¨|@
+ +-+@@
+169 COPYRIGHT SIGN
+ +-+@
+ |©|@
+ +-+@@
+170 FEMININE ORDINAL INDICATOR
+ +-+@
+ |ª|@
+ +-+@@
+171 LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+ +-+@
+ |«|@
+ +-+@@
+172 NOT SIGN
+ +-+@
+ |¬|@
+ +-+@@
+173 SOFT HYPHEN
+ +-+@
+ ||@
+ +-+@@
+174 REGISTERED SIGN
+ +-+@
+ |®|@
+ +-+@@
+175 MACRON
+ +-+@
+ |¯|@
+ +-+@@
+176 DEGREE SIGN
+ +-+@
+ |°|@
+ +-+@@
+177 PLUS-MINUS SIGN
+ +-+@
+ |±|@
+ +-+@@
+178 SUPERSCRIPT TWO
+ +-+@
+ |²|@
+ +-+@@
+179 SUPERSCRIPT THREE
+ +-+@
+ |³|@
+ +-+@@
+180 ACUTE ACCENT
+ +-+@
+ |´|@
+ +-+@@
+181 MICRO SIGN
+ +-+@
+ |µ|@
+ +-+@@
+182 PILCROW SIGN
+ +-+@
+ |¶|@
+ +-+@@
+183 MIDDLE DOT
+ +-+@
+ |·|@
+ +-+@@
+184 CEDILLA
+ +-+@
+ |¸|@
+ +-+@@
+185 SUPERSCRIPT ONE
+ +-+@
+ |¹|@
+ +-+@@
+186 MASCULINE ORDINAL INDICATOR
+ +-+@
+ |º|@
+ +-+@@
+187 RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+ +-+@
+ |»|@
+ +-+@@
+188 VULGAR FRACTION ONE QUARTER
+ +-+@
+ |¼|@
+ +-+@@
+189 VULGAR FRACTION ONE HALF
+ +-+@
+ |½|@
+ +-+@@
+190 VULGAR FRACTION THREE QUARTERS
+ +-+@
+ |¾|@
+ +-+@@
+191 INVERTED QUESTION MARK
+ +-+@
+ |¿|@
+ +-+@@
+192 LATIN CAPITAL LETTER A WITH GRAVE
+ +-+@
+ |À|@
+ +-+@@
+193 LATIN CAPITAL LETTER A WITH ACUTE
+ +-+@
+ |Á|@
+ +-+@@
+194 LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+ +-+@
+ |Â|@
+ +-+@@
+195 LATIN CAPITAL LETTER A WITH TILDE
+ +-+@
+ |Ã|@
+ +-+@@
+196 LATIN CAPITAL LETTER A WITH DIAERESIS
+ +-+@
+ |Ä|@
+ +-+@@
+197 LATIN CAPITAL LETTER A WITH RING ABOVE
+ +-+@
+ |Å|@
+ +-+@@
+198 LATIN CAPITAL LETTER AE
+ +-+@
+ |Æ|@
+ +-+@@
+199 LATIN CAPITAL LETTER C WITH CEDILLA
+ +-+@
+ |Ç|@
+ +-+@@
+200 LATIN CAPITAL LETTER E WITH GRAVE
+ +-+@
+ |È|@
+ +-+@@
+201 LATIN CAPITAL LETTER E WITH ACUTE
+ +-+@
+ |É|@
+ +-+@@
+202 LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+ +-+@
+ |Ê|@
+ +-+@@
+203 LATIN CAPITAL LETTER E WITH DIAERESIS
+ +-+@
+ |Ë|@
+ +-+@@
+204 LATIN CAPITAL LETTER I WITH GRAVE
+ +-+@
+ |Ì|@
+ +-+@@
+205 LATIN CAPITAL LETTER I WITH ACUTE
+ +-+@
+ |Í|@
+ +-+@@
+206 LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+ +-+@
+ |Î|@
+ +-+@@
+207 LATIN CAPITAL LETTER I WITH DIAERESIS
+ +-+@
+ |Ï|@
+ +-+@@
+208 LATIN CAPITAL LETTER ETH
+ +-+@
+ |Ð|@
+ +-+@@
+209 LATIN CAPITAL LETTER N WITH TILDE
+ +-+@
+ |Ñ|@
+ +-+@@
+210 LATIN CAPITAL LETTER O WITH GRAVE
+ +-+@
+ |Ò|@
+ +-+@@
+211 LATIN CAPITAL LETTER O WITH ACUTE
+ +-+@
+ |Ó|@
+ +-+@@
+212 LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+ +-+@
+ |Ô|@
+ +-+@@
+213 LATIN CAPITAL LETTER O WITH TILDE
+ +-+@
+ |Õ|@
+ +-+@@
+214 LATIN CAPITAL LETTER O WITH DIAERESIS
+ +-+@
+ |Ö|@
+ +-+@@
+215 MULTIPLICATION SIGN
+ +-+@
+ |×|@
+ +-+@@
+216 LATIN CAPITAL LETTER O WITH STROKE
+ +-+@
+ |Ø|@
+ +-+@@
+217 LATIN CAPITAL LETTER U WITH GRAVE
+ +-+@
+ |Ù|@
+ +-+@@
+218 LATIN CAPITAL LETTER U WITH ACUTE
+ +-+@
+ |Ú|@
+ +-+@@
+219 LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+ +-+@
+ |Û|@
+ +-+@@
+220 LATIN CAPITAL LETTER U WITH DIAERESIS
+ +-+@
+ |Ü|@
+ +-+@@
+221 LATIN CAPITAL LETTER Y WITH ACUTE
+ +-+@
+ |Ý|@
+ +-+@@
+222 LATIN CAPITAL LETTER THORN
+ +-+@
+ |Þ|@
+ +-+@@
+223 LATIN SMALL LETTER SHARP S
+ +-+@
+ |ß|@
+ +-+@@
+224 LATIN SMALL LETTER A WITH GRAVE
+ +-+@
+ |à|@
+ +-+@@
+225 LATIN SMALL LETTER A WITH ACUTE
+ +-+@
+ |á|@
+ +-+@@
+226 LATIN SMALL LETTER A WITH CIRCUMFLEX
+ +-+@
+ |â|@
+ +-+@@
+227 LATIN SMALL LETTER A WITH TILDE
+ +-+@
+ |ã|@
+ +-+@@
+228 LATIN SMALL LETTER A WITH DIAERESIS
+ +-+@
+ |ä|@
+ +-+@@
+229 LATIN SMALL LETTER A WITH RING ABOVE
+ +-+@
+ |å|@
+ +-+@@
+230 LATIN SMALL LETTER AE
+ +-+@
+ |æ|@
+ +-+@@
+231 LATIN SMALL LETTER C WITH CEDILLA
+ +-+@
+ |ç|@
+ +-+@@
+232 LATIN SMALL LETTER E WITH GRAVE
+ +-+@
+ |è|@
+ +-+@@
+233 LATIN SMALL LETTER E WITH ACUTE
+ +-+@
+ |é|@
+ +-+@@
+234 LATIN SMALL LETTER E WITH CIRCUMFLEX
+ +-+@
+ |ê|@
+ +-+@@
+235 LATIN SMALL LETTER E WITH DIAERESIS
+ +-+@
+ |ë|@
+ +-+@@
+236 LATIN SMALL LETTER I WITH GRAVE
+ +-+@
+ |ì|@
+ +-+@@
+237 LATIN SMALL LETTER I WITH ACUTE
+ +-+@
+ |í|@
+ +-+@@
+238 LATIN SMALL LETTER I WITH CIRCUMFLEX
+ +-+@
+ |î|@
+ +-+@@
+239 LATIN SMALL LETTER I WITH DIAERESIS
+ +-+@
+ |ï|@
+ +-+@@
+240 LATIN SMALL LETTER ETH
+ +-+@
+ |ð|@
+ +-+@@
+241 LATIN SMALL LETTER N WITH TILDE
+ +-+@
+ |ñ|@
+ +-+@@
+242 LATIN SMALL LETTER O WITH GRAVE
+ +-+@
+ |ò|@
+ +-+@@
+243 LATIN SMALL LETTER O WITH ACUTE
+ +-+@
+ |ó|@
+ +-+@@
+244 LATIN SMALL LETTER O WITH CIRCUMFLEX
+ +-+@
+ |ô|@
+ +-+@@
+245 LATIN SMALL LETTER O WITH TILDE
+ +-+@
+ |õ|@
+ +-+@@
+246 LATIN SMALL LETTER O WITH DIAERESIS
+ +-+@
+ |ö|@
+ +-+@@
+247 DIVISION SIGN
+ +-+@
+ |÷|@
+ +-+@@
+248 LATIN SMALL LETTER O WITH STROKE
+ +-+@
+ |ø|@
+ +-+@@
+249 LATIN SMALL LETTER U WITH GRAVE
+ +-+@
+ |ù|@
+ +-+@@
+250 LATIN SMALL LETTER U WITH ACUTE
+ +-+@
+ |ú|@
+ +-+@@
+251 LATIN SMALL LETTER U WITH CIRCUMFLEX
+ +-+@
+ |û|@
+ +-+@@
+252 LATIN SMALL LETTER U WITH DIAERESIS
+ +-+@
+ |ü|@
+ +-+@@
+253 LATIN SMALL LETTER Y WITH ACUTE
+ +-+@
+ |ý|@
+ +-+@@
+254 LATIN SMALL LETTER THORN
+ +-+@
+ |þ|@
+ +-+@@
+255 LATIN SMALL LETTER Y WITH DIAERESIS
+ +-+@
+ |ÿ|@
+ +-+@@
+0x0100 LATIN CAPITAL LETTER A WITH MACRON
+ +-+@
+ |À|@
+ +-+@@
+0x0101 LATIN SMALL LETTER A WITH MACRON
+ +-+@
+ |à|@
+ +-+@@
+0x0102 LATIN CAPITAL LETTER A WITH BREVE
+ +-+@
+ |Ã|@
+ +-+@@
+0x0103 LATIN SMALL LETTER A WITH BREVE
+ +-+@
+ |ã|@
+ +-+@@
+0x0104 LATIN CAPITAL LETTER A WITH OGONEK
+ +-+@
+ |¡|@
+ +-+@@
+0x0105 LATIN SMALL LETTER A WITH OGONEK
+ +-+@
+ |±|@
+ +-+@@
+0x0106 LATIN CAPITAL LETTER C WITH ACUTE
+ +-+@
+ |Æ|@
+ +-+@@
+0x0107 LATIN SMALL LETTER C WITH ACUTE
+ +-+@
+ |æ|@
+ +-+@@
+0x0108 LATIN CAPITAL LETTER C WITH CIRCUMFLEX
+ +-+@
+ |Æ|@
+ +-+@@
+0x0109 LATIN SMALL LETTER C WITH CIRCUMFLEX
+ +-+@
+ |æ|@
+ +-+@@
+0x010A LATIN CAPITAL LETTER C WITH DOT ABOVE
+ +-+@
+ |Å|@
+ +-+@@
+0x010B LATIN SMALL LETTER C WITH DOT ABOVE
+ +-+@
+ |å|@
+ +-+@@
+0x010C LATIN CAPITAL LETTER C WITH CARON
+ +-+@
+ |È|@
+ +-+@@
+0x010D LATIN SMALL LETTER C WITH CARON
+ +-+@
+ |è|@
+ +-+@@
+0x010E LATIN CAPITAL LETTER D WITH CARON
+ +-+@
+ |Ï|@
+ +-+@@
+0x010F LATIN SMALL LETTER D WITH CARON
+ +-+@
+ |ï|@
+ +-+@@
+0x0110 LATIN CAPITAL LETTER D WITH STROKE
+ +-+@
+ |Ð|@
+ +-+@@
+0x0111 LATIN SMALL LETTER D WITH STROKE
+ +-+@
+ |ð|@
+ +-+@@
+0x0112 LATIN CAPITAL LETTER E WITH MACRON
+ +-+@
+ |ª|@
+ +-+@@
+0x0113 LATIN SMALL LETTER E WITH MACRON
+ +-+@
+ |º|@
+ +-+@@
+0x0116 LATIN CAPITAL LETTER E WITH DOT ABOVE
+ +-+@
+ |Ì|@
+ +-+@@
+0x0117 LATIN SMALL LETTER E WITH DOT ABOVE
+ +-+@
+ |ì|@
+ +-+@@
+0x0118 LATIN CAPITAL LETTER E WITH OGONEK
+ +-+@
+ |Ê|@
+ +-+@@
+0x0119 LATIN SMALL LETTER E WITH OGONEK
+ +-+@
+ |ê|@
+ +-+@@
+0x011A LATIN CAPITAL LETTER E WITH CARON
+ +-+@
+ |Ì|@
+ +-+@@
+0x011B LATIN SMALL LETTER E WITH CARON
+ +-+@
+ |ì|@
+ +-+@@
+0x011C LATIN CAPITAL LETTER G WITH CIRCUMFLEX
+ +-+@
+ |Ø|@
+ +-+@@
+0x011D LATIN SMALL LETTER G WITH CIRCUMFLEX
+ +-+@
+ |ø|@
+ +-+@@
+0x011E LATIN CAPITAL LETTER G WITH BREVE
+ +-+@
+ |«|@
+ +-+@@
+0x011F LATIN SMALL LETTER G WITH BREVE
+ +-+@
+ |»|@
+ +-+@@
+0x0120 LATIN CAPITAL LETTER G WITH DOT ABOVE
+ +-+@
+ |Õ|@
+ +-+@@
+0x0121 LATIN SMALL LETTER G WITH DOT ABOVE
+ +-+@
+ |õ|@
+ +-+@@
+0x0122 LATIN CAPITAL LETTER G WITH CEDILLA
+ +-+@
+ |«|@
+ +-+@@
+0x0123 LATIN SMALL LETTER G WITH CEDILLA
+ +-+@
+ |»|@
+ +-+@@
+0x0124 LATIN CAPITAL LETTER H WITH CIRCUMFLEX
+ +-+@
+ |¦|@
+ +-+@@
+0x0125 LATIN SMALL LETTER H WITH CIRCUMFLEX
+ +-+@
+ |¶|@
+ +-+@@
+0x0126 LATIN CAPITAL LETTER H WITH STROKE
+ +-+@
+ |¡|@
+ +-+@@
+0x0127 LATIN SMALL LETTER H WITH STROKE
+ +-+@
+ |±|@
+ +-+@@
+0x0128 LATIN CAPITAL LETTER I WITH TILDE
+ +-+@
+ |¥|@
+ +-+@@
+0x0129 LATIN SMALL LETTER I WITH TILDE
+ +-+@
+ |µ|@
+ +-+@@
+0x012A LATIN CAPITAL LETTER I WITH MACRON
+ +-+@
+ |Ï|@
+ +-+@@
+0x012B LATIN SMALL LETTER I WITH MACRON
+ +-+@
+ |ï|@
+ +-+@@
+0x012E LATIN CAPITAL LETTER I WITH OGONEK
+ +-+@
+ |Ç|@
+ +-+@@
+0x012F LATIN SMALL LETTER I WITH OGONEK
+ +-+@
+ |ç|@
+ +-+@@
+0x0130 LATIN CAPITAL LETTER I WITH DOT ABOVE
+ +-+@
+ |©|@
+ +-+@@
+0x0131 LATIN SMALL LETTER DOTLESS I
+ +-+@
+ |¹|@
+ +-+@@
+0x0134 LATIN CAPITAL LETTER J WITH CIRCUMFLEX
+ +-+@
+ |¬|@
+ +-+@@
+0x0135 LATIN SMALL LETTER J WITH CIRCUMFLEX
+ +-+@
+ |¼|@
+ +-+@@
+0x0136 LATIN CAPITAL LETTER K WITH CEDILLA
+ +-+@
+ |Ó|@
+ +-+@@
+0x0137 LATIN SMALL LETTER K WITH CEDILLA
+ +-+@
+ |ó|@
+ +-+@@
+0x0138 LATIN SMALL LETTER KRA
+ +-+@
+ |¢|@
+ +-+@@
+0x0139 LATIN CAPITAL LETTER L WITH ACUTE
+ +-+@
+ |Å|@
+ +-+@@
+0x013A LATIN SMALL LETTER L WITH ACUTE
+ +-+@
+ |å|@
+ +-+@@
+0x013B LATIN CAPITAL LETTER L WITH CEDILLA
+ +-+@
+ |¦|@
+ +-+@@
+0x013C LATIN SMALL LETTER L WITH CEDILLA
+ +-+@
+ |¶|@
+ +-+@@
+0x013D LATIN CAPITAL LETTER L WITH CARON
+ +-+@
+ |¥|@
+ +-+@@
+0x013E LATIN SMALL LETTER L WITH CARON
+ +-+@
+ |µ|@
+ +-+@@
+0x0141 LATIN CAPITAL LETTER L WITH STROKE
+ +-+@
+ |£|@
+ +-+@@
+0x0142 LATIN SMALL LETTER L WITH STROKE
+ +-+@
+ |³|@
+ +-+@@
+0x0143 LATIN CAPITAL LETTER N WITH ACUTE
+ +-+@
+ |Ñ|@
+ +-+@@
+0x0144 LATIN SMALL LETTER N WITH ACUTE
+ +-+@
+ |ñ|@
+ +-+@@
+0x0145 LATIN CAPITAL LETTER N WITH CEDILLA
+ +-+@
+ |Ñ|@
+ +-+@@
+0x0146 LATIN SMALL LETTER N WITH CEDILLA
+ +-+@
+ |ñ|@
+ +-+@@
+0x0147 LATIN CAPITAL LETTER N WITH CARON
+ +-+@
+ |Ò|@
+ +-+@@
+0x0148 LATIN SMALL LETTER N WITH CARON
+ +-+@
+ |ò|@
+ +-+@@
+0x014A LATIN CAPITAL LETTER ENG
+ +-+@
+ |½|@
+ +-+@@
+0x014B LATIN SMALL LETTER ENG
+ +-+@
+ |¿|@
+ +-+@@
+0x014C LATIN CAPITAL LETTER O WITH MACRON
+ +-+@
+ |Ò|@
+ +-+@@
+0x014D LATIN SMALL LETTER O WITH MACRON
+ +-+@
+ |ò|@
+ +-+@@
+0x0150 LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
+ +-+@
+ |Õ|@
+ +-+@@
+0x0151 LATIN SMALL LETTER O WITH DOUBLE ACUTE
+ +-+@
+ |õ|@
+ +-+@@
+0x0154 LATIN CAPITAL LETTER R WITH ACUTE
+ +-+@
+ |À|@
+ +-+@@
+0x0155 LATIN SMALL LETTER R WITH ACUTE
+ +-+@
+ |à|@
+ +-+@@
+0x0156 LATIN CAPITAL LETTER R WITH CEDILLA
+ +-+@
+ |£|@
+ +-+@@
+0x0157 LATIN SMALL LETTER R WITH CEDILLA
+ +-+@
+ |³|@
+ +-+@@
+0x0158 LATIN CAPITAL LETTER R WITH CARON
+ +-+@
+ |Ø|@
+ +-+@@
+0x0159 LATIN SMALL LETTER R WITH CARON
+ +-+@
+ |ø|@
+ +-+@@
+0x015A LATIN CAPITAL LETTER S WITH ACUTE
+ +-+@
+ |¦|@
+ +-+@@
+0x015B LATIN SMALL LETTER S WITH ACUTE
+ +-+@
+ |¶|@
+ +-+@@
+0x015C LATIN CAPITAL LETTER S WITH CIRCUMFLEX
+ +-+@
+ |Þ|@
+ +-+@@
+0x015D LATIN SMALL LETTER S WITH CIRCUMFLEX
+ +-+@
+ |þ|@
+ +-+@@
+0x015E LATIN CAPITAL LETTER S WITH CEDILLA
+ +-+@
+ |ª|@
+ +-+@@
+0x015F LATIN SMALL LETTER S WITH CEDILLA
+ +-+@
+ |º|@
+ +-+@@
+0x0160 LATIN CAPITAL LETTER S WITH CARON
+ +-+@
+ |©|@
+ +-+@@
+0x0161 LATIN SMALL LETTER S WITH CARON
+ +-+@
+ |¹|@
+ +-+@@
+0x0162 LATIN CAPITAL LETTER T WITH CEDILLA
+ +-+@
+ |Þ|@
+ +-+@@
+0x0163 LATIN SMALL LETTER T WITH CEDILLA
+ +-+@
+ |þ|@
+ +-+@@
+0x0164 LATIN CAPITAL LETTER T WITH CARON
+ +-+@
+ |«|@
+ +-+@@
+0x0165 LATIN SMALL LETTER T WITH CARON
+ +-+@
+ |»|@
+ +-+@@
+0x0166 LATIN CAPITAL LETTER T WITH STROKE
+ +-+@
+ |¬|@
+ +-+@@
+0x0167 LATIN SMALL LETTER T WITH STROKE
+ +-+@
+ |¼|@
+ +-+@@
+0x0168 LATIN CAPITAL LETTER U WITH TILDE
+ +-+@
+ |Ý|@
+ +-+@@
+0x0169 LATIN SMALL LETTER U WITH TILDE
+ +-+@
+ |ý|@
+ +-+@@
+0x016A LATIN CAPITAL LETTER U WITH MACRON
+ +-+@
+ |Þ|@
+ +-+@@
+0x016B LATIN SMALL LETTER U WITH MACRON
+ +-+@
+ |þ|@
+ +-+@@
+0x016C LATIN CAPITAL LETTER U WITH BREVE
+ +-+@
+ |Ý|@
+ +-+@@
+0x016D LATIN SMALL LETTER U WITH BREVE
+ +-+@
+ |ý|@
+ +-+@@
+0x016E LATIN CAPITAL LETTER U WITH RING ABOVE
+ +-+@
+ |Ù|@
+ +-+@@
+0x016F LATIN SMALL LETTER U WITH RING ABOVE
+ +-+@
+ |ù|@
+ +-+@@
+0x0170 LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
+ +-+@
+ |Û|@
+ +-+@@
+0x0171 LATIN SMALL LETTER U WITH DOUBLE ACUTE
+ +-+@
+ |û|@
+ +-+@@
+0x0172 LATIN CAPITAL LETTER U WITH OGONEK
+ +-+@
+ |Ù|@
+ +-+@@
+0x0173 LATIN SMALL LETTER U WITH OGONEK
+ +-+@
+ |ù|@
+ +-+@@
+0x0179 LATIN CAPITAL LETTER Z WITH ACUTE
+ +-+@
+ |¬|@
+ +-+@@
+0x017A LATIN SMALL LETTER Z WITH ACUTE
+ +-+@
+ |¼|@
+ +-+@@
+0x017B LATIN CAPITAL LETTER Z WITH DOT ABOVE
+ +-+@
+ |¯|@
+ +-+@@
+0x017C LATIN SMALL LETTER Z WITH DOT ABOVE
+ +-+@
+ |¿|@
+ +-+@@
+0x017D LATIN CAPITAL LETTER Z WITH CARON
+ +-+@
+ |®|@
+ +-+@@
+0x017E LATIN SMALL LETTER Z WITH CARON
+ +-+@
+ |¾|@
+ +-+@@
+0x02C7 CARON
+ +-+@
+ |·|@
+ +-+@@
+0x02D8 BREVE
+ +-+@
+ |¢|@
+ +-+@@
+0x02D9 DOT ABOVE
+ +-+@
+ |ÿ|@
+ +-+@@
+0x02DB OGONEK
+ +-+@
+ |²|@
+ +-+@@
+0x02DD DOUBLE ACUTE ACCENT
+ +-+@
+ |½|@
+ +-+@@
diff --git a/externals/figlet/fonts/frango.flc b/externals/figlet/fonts/frango.flc
new file mode 100644
index 000000000..0196230a2
--- /dev/null
+++ b/externals/figlet/fonts/frango.flc
@@ -0,0 +1,65 @@
+flc2a
+# This file can be used with a Unicode-Greek FIGfont
+# to convert "frangovlakhika" (Greek written in Latin
+# letters) into real Greek.
+#
+# The mapping is the same as that used by the "ntgreek" FIGfont.
+
+t ( \0x02BD
+t ) \0x02BC
+t : \0x0387
+t A \0x0391
+t B \0x0392
+t C \0x03A7
+t D \0x0394
+t E \0x0395
+t F \0x03A6
+t G \0x0393
+t H \0x0397
+t I \0x0399
+t J \0x03D1
+t K \0x039A
+t L \0x039B
+t M \0x039C
+t N \0x039D
+t O \0x039F
+t P \0x03A0
+t Q \0x0398
+t R \0x03A1
+t S \0x03A3
+t T \0x03A4
+t U \0x03A5
+t V \0x03C2 sigma
+t W \0x03A9
+t X \0x039E
+t Y \0x03A8
+t Z \0x0396
+t _ \0x037A
+t a \0x03b1
+t b \0x03b2
+t c \0x03C7
+t d \0x03B4
+t e \0x03B5
+t f \0x03C6
+t g \0x03B3
+t h \0x03B7
+t i \0x03B9
+t j \0x03D5
+t k \0x03BA
+t l \0x03BB
+t m \0x03BC
+t n \0x03BD
+t o \0x03BF
+t p \0x03C0
+t q \0x03B8
+t r \0x03C1
+t s \0x03C3
+t t \0x03C4
+t u \0x03C5
+t v \0x03D6
+t w \0x03C9
+t x \0x03BE
+t y \0x03C8
+t z \0x03B6
+t ' \0x00A8
+t ~ \-5
diff --git a/externals/figlet/fonts/hz.flc b/externals/figlet/fonts/hz.flc
new file mode 100644
index 000000000..2d89e4bcf
--- /dev/null
+++ b/externals/figlet/fonts/hz.flc
@@ -0,0 +1,4 @@
+flc2a
+# Set HZ input mode (a 7-bit encoding of GB Chinese text)
+# Meaningful only to FIGlet 2.2 beta 4 or better
+h
diff --git a/externals/figlet/fonts/ilhebrew.flc b/externals/figlet/fonts/ilhebrew.flc
new file mode 100644
index 000000000..1b46d7956
--- /dev/null
+++ b/externals/figlet/fonts/ilhebrew.flc
@@ -0,0 +1,38 @@
+flc2a
+# implements a natural mapping from the Hebrew keyboard
+# to Hebrew letters in the Ivrit font.
+# Note that capital letters remain unchanged.
+
+t t \0x05d0
+t c \0x05d1
+t d \0x05d2
+t s \0x05d3
+t v \0x05d4
+t u \0x05d5
+t z \0x05d6
+t j \0x05d7
+t y \0x05d8
+t h \0x05d9
+t f \0x05db
+t l \0x05da
+t k \0x05dc
+t n \0x05de
+t o \0x05dd
+t b \0x05e0
+t i \0x05df
+t x \0x05e1
+t g \0x05e2
+t p \0x05e3
+t ; \0x05e4
+t m \0x05e6
+t . \0x05e5
+t e \0x05e7
+t r \0x05e8
+t a \0x05e9
+t , \0x05ea
+t ' ,
+t / .
+t ` ;
+t q /
+t w '
+t ~ \-2
diff --git a/externals/figlet/fonts/ivrit.flf b/externals/figlet/fonts/ivrit.flf
new file mode 100644
index 000000000..69f16d494
--- /dev/null
+++ b/externals/figlet/fonts/ivrit.flf
@@ -0,0 +1,900 @@
+flf2a$ 6 5 76 15 14 1 16271 39
+Ivrit (Hebrew) Unicode font assembled by John Cowan <cowan@ccil.org>
+Latin chars from Standard by G. Chappell & Ian Chai
+Hebrew chars from Jerusalem by Gedaliah Friedenberg <gfrieden@nyx.cs.du.edu>
+ Use "ilhebrew.flc" for Hebrew keyboard mapping
+ Use "ushebrew.flc" for U.S.-style keyboard mapping ("febrew" script)
+ Use "8859-8.flc" for ISO 8859-8 text
+ Or use UTF-8
+WARNING! FIGfonts aren't bidirectional; this is strictly right-to-left
+ (by default) even for the Latin characters.
+figlet release 2.2 -- November 1996
+
+Modified by Paul Burton <solution@earthlink.net> 12/96 to include new parameter
+supported by FIGlet and FIGWin. May also be slightly modified for better use
+of new full-width/kern/smush alternatives, but default output is NOT changed.
+ $@
+ $@
+ $@
+ $@
+ $@
+ $@@
+ _ @
+ | |@
+ | |@
+ |_|@
+ (_)@
+ @@
+ _ _ @
+ ( | )@
+ V V @
+ $ @
+ $ @
+ @@
+ _ _ @
+ _| || |_ @
+ |_ .. _|@
+ |_ _|@
+ |_||_| @
+ @@
+ _ @
+ | | @
+ / __)@
+ \__ \@
+ ( /@
+ |_| @@
+ _ __@
+ (_)/ /@
+ / / @
+ / /_ @
+ /_/(_)@
+ @@
+ ___ @
+ ( _ ) @
+ / _ \/\@
+ | (_> <@
+ \___/\/@
+ @@
+ _ @
+ ( )@
+ |/ @
+ $ @
+ $ @
+ @@
+ __@
+ / /@
+ | | @
+ | | @
+ | | @
+ \_\@@
+ __ @
+ \ \ @
+ | |@
+ | |@
+ | |@
+ /_/ @@
+ @
+ __/\__@
+ \ /@
+ /_ _\@
+ \/ @
+ @@
+ @
+ _ @
+ _| |_ @
+ |_ _|@
+ |_| @
+ @@
+ @
+ @
+ @
+ _ @
+ ( )@
+ |/ @@
+ @
+ @
+ _____ @
+ |_____|@
+ $ @
+ @@
+ @
+ @
+ @
+ _ @
+ (_)@
+ @@
+ __@
+ / /@
+ / / @
+ / / @
+ /_/ @
+ @@
+ ___ @
+ / _ \ @
+ | | | |@
+ | |_| |@
+ \___/ @
+ @@
+ _ @
+ / |@
+ | |@
+ | |@
+ |_|@
+ @@
+ ____ @
+ |___ \ @
+ __) |@
+ / __/ @
+ |_____|@
+ @@
+ _____ @
+ |___ / @
+ |_ \ @
+ ___) |@
+ |____/ @
+ @@
+ _ _ @
+ | || | @
+ | || |_ @
+ |__ _|@
+ |_| @
+ @@
+ ____ @
+ | ___| @
+ |___ \ @
+ ___) |@
+ |____/ @
+ @@
+ __ @
+ / /_ @
+ | '_ \ @
+ | (_) |@
+ \___/ @
+ @@
+ _____ @
+ |___ |@
+ / / @
+ / / @
+ /_/ @
+ @@
+ ___ @
+ ( _ ) @
+ / _ \ @
+ | (_) |@
+ \___/ @
+ @@
+ ___ @
+ / _ \ @
+ | (_) |@
+ \__, |@
+ /_/ @
+ @@
+ @
+ _ @
+ (_)@
+ _ @
+ (_)@
+ @@
+ @
+ _ @
+ (_)@
+ _ @
+ ( )@
+ |/ @@
+ __@
+ / /@
+ / / @
+ \ \ @
+ \_\@
+ @@
+ @
+ _____ @
+ |_____|@
+ |_____|@
+ $ @
+ @@
+ __ @
+ \ \ @
+ \ \@
+ / /@
+ /_/ @
+ @@
+ ___ @
+ |__ \@
+ / /@
+ |_| @
+ (_) @
+ @@
+ ____ @
+ / __ \ @
+ / / _` |@
+ | | (_| |@
+ \ \__,_|@
+ \____/ @@
+ _ @
+ / \ @
+ / _ \ @
+ / ___ \ @
+ /_/ \_\@
+ @@
+ ____ @
+ | __ ) @
+ | _ \ @
+ | |_) |@
+ |____/ @
+ @@
+ ____ @
+ / ___|@
+ | | @
+ | |___ @
+ \____|@
+ @@
+ ____ @
+ | _ \ @
+ | | | |@
+ | |_| |@
+ |____/ @
+ @@
+ _____ @
+ | ____|@
+ | _| @
+ | |___ @
+ |_____|@
+ @@
+ _____ @
+ | ___|@
+ | |_ @
+ | _| @
+ |_| @
+ @@
+ ____ @
+ / ___|@
+ | | _ @
+ | |_| |@
+ \____|@
+ @@
+ _ _ @
+ | | | |@
+ | |_| |@
+ | _ |@
+ |_| |_|@
+ @@
+ ___ @
+ |_ _|@
+ | | @
+ | | @
+ |___|@
+ @@
+ _ @
+ | |@
+ _ | |@
+ | |_| |@
+ \___/ @
+ @@
+ _ __@
+ | |/ /@
+ | ' / @
+ | . \ @
+ |_|\_\@
+ @@
+ _ @
+ | | @
+ | | @
+ | |___ @
+ |_____|@
+ @@
+ __ __ @
+ | \/ |@
+ | |\/| |@
+ | | | |@
+ |_| |_|@
+ @@
+ _ _ @
+ | \ | |@
+ | \| |@
+ | |\ |@
+ |_| \_|@
+ @@
+ ___ @
+ / _ \ @
+ | | | |@
+ | |_| |@
+ \___/ @
+ @@
+ ____ @
+ | _ \ @
+ | |_) |@
+ | __/ @
+ |_| @
+ @@
+ ___ @
+ / _ \ @
+ | | | |@
+ | |_| |@
+ \__\_\@
+ @@
+ ____ @
+ | _ \ @
+ | |_) |@
+ | _ < @
+ |_| \_\@
+ @@
+ ____ @
+ / ___| @
+ \___ \ @
+ ___) |@
+ |____/ @
+ @@
+ _____ @
+ |_ _|@
+ | | @
+ | | @
+ |_| @
+ @@
+ _ _ @
+ | | | |@
+ | | | |@
+ | |_| |@
+ \___/ @
+ @@
+ __ __@
+ \ \ / /@
+ \ \ / / @
+ \ V / @
+ \_/ @
+ @@
+ __ __@
+ \ \ / /@
+ \ \ /\ / / @
+ \ V V / @
+ \_/\_/ @
+ @@
+ __ __@
+ \ \/ /@
+ \ / @
+ / \ @
+ /_/\_\@
+ @@
+ __ __@
+ \ \ / /@
+ \ V / @
+ | | @
+ |_| @
+ @@
+ _____@
+ |__ /@
+ / / @
+ / /_ @
+ /____|@
+ @@
+ __ @
+ | _|@
+ | | @
+ | | @
+ | | @
+ |__|@@
+ __ @
+ \ \ @
+ \ \ @
+ \ \ @
+ \_\@
+ @@
+ __ @
+ |_ |@
+ | |@
+ | |@
+ | |@
+ |__|@@
+ /\ @
+ |/\|@
+ $ @
+ $ @
+ $ @
+ @@
+ @
+ @
+ @
+ @
+ _____ @
+ |_____|@@
+ _ @
+ ( )@
+ \|@
+ $ @
+ $ @
+ @@
+ @
+ __ _ @
+ / _` |@
+ | (_| |@
+ \__,_|@
+ @@
+ _ @
+ | |__ @
+ | '_ \ @
+ | |_) |@
+ |_.__/ @
+ @@
+ @
+ ___ @
+ / __|@
+ | (__ @
+ \___|@
+ @@
+ _ @
+ __| |@
+ / _` |@
+ | (_| |@
+ \__,_|@
+ @@
+ @
+ ___ @
+ / _ \@
+ | __/@
+ \___|@
+ @@
+ __ @
+ / _|@
+ | |_ @
+ | _|@
+ |_| @
+ @@
+ @
+ __ _ @
+ / _` |@
+ | (_| |@
+ \__, |@
+ |___/ @@
+ _ @
+ | |__ @
+ | '_ \ @
+ | | | |@
+ |_| |_|@
+ @@
+ _ @
+ (_)@
+ | |@
+ | |@
+ |_|@
+ @@
+ _ @
+ (_)@
+ | |@
+ | |@
+ _/ |@
+ |__/ @@
+ _ @
+ | | __@
+ | |/ /@
+ | < @
+ |_|\_\@
+ @@
+ _ @
+ | |@
+ | |@
+ | |@
+ |_|@
+ @@
+ @
+ _ __ ___ @
+ | '_ ` _ \ @
+ | | | | | |@
+ |_| |_| |_|@
+ @@
+ @
+ _ __ @
+ | '_ \ @
+ | | | |@
+ |_| |_|@
+ @@
+ @
+ ___ @
+ / _ \ @
+ | (_) |@
+ \___/ @
+ @@
+ @
+ _ __ @
+ | '_ \ @
+ | |_) |@
+ | .__/ @
+ |_| @@
+ @
+ __ _ @
+ / _` |@
+ | (_| |@
+ \__, |@
+ |_|@@
+ @
+ _ __ @
+ | '__|@
+ | | @
+ |_| @
+ @@
+ @
+ ___ @
+ / __|@
+ \__ \@
+ |___/@
+ @@
+ _ @
+ | |_ @
+ | __|@
+ | |_ @
+ \__|@
+ @@
+ @
+ _ _ @
+ | | | |@
+ | |_| |@
+ \__,_|@
+ @@
+ @
+ __ __@
+ \ \ / /@
+ \ V / @
+ \_/ @
+ @@
+ @
+ __ __@
+ \ \ /\ / /@
+ \ V V / @
+ \_/\_/ @
+ @@
+ @
+ __ __@
+ \ \/ /@
+ > < @
+ /_/\_\@
+ @@
+ @
+ _ _ @
+ | | | |@
+ | |_| |@
+ \__, |@
+ |___/ @@
+ @
+ ____@
+ |_ /@
+ / / @
+ /___|@
+ @@
+ __@
+ / /@
+ | | @
+ < < @
+ | | @
+ \_\@@
+ _ @
+ | |@
+ | |@
+ | |@
+ | |@
+ |_|@@
+ __ @
+ \ \ @
+ | | @
+ > >@
+ | | @
+ /_/ @@
+ /\/|@
+ |/\/ @
+ $ @
+ $ @
+ $ @
+ @@
+ _ _ @
+ (_)_(_)@
+ /_\ @
+ / _ \ @
+ /_/ \_\@
+ @@
+ _ _ @
+ (_)_(_)@
+ / _ \ @
+ | |_| |@
+ \___/ @
+ @@
+ _ _ @
+ (_) (_)@
+ | | | |@
+ | |_| |@
+ \___/ @
+ @@
+ _ _ @
+ (_)_(_)@
+ / _` |@
+ | (_| |@
+ \__,_|@
+ @@
+ _ _ @
+ (_)_(_)@
+ / _ \ @
+ | (_) |@
+ \___/ @
+ @@
+ _ _ @
+ (_) (_)@
+ | | | |@
+ | |_| |@
+ \__,_|@
+ @@
+ ___ @
+ / _ \@
+ | |/ /@
+ | |\ \@
+ | ||_/@
+ |_| @@
+160 NO-BREAK SPACE
+ $@
+ $@
+ $@
+ $@
+ $@
+ $@@
+173 SOFT HYPHEN
+ @
+ @
+ _____ @
+ |_____|@
+ $ @
+ @@
+196 LATIN CAPITAL LETTER A WITH DIAERESIS
+ _ _ @
+ (_)_(_)@
+ /_\ @
+ / _ \ @
+ /_/ \_\@
+ @@
+214 LATIN CAPITAL LETTER O WITH DIAERESIS
+ _ _ @
+ (_)_(_)@
+ / _ \ @
+ | |_| |@
+ \___/ @
+ @@
+220 LATIN CAPITAL LETTER U WITH DIAERESIS
+ _ _ @
+ (_) (_)@
+ | | | |@
+ | |_| |@
+ \___/ @
+ @@
+223 LATIN SMALL LETTER SHARP S
+ ___ @
+ / _ \@
+ | |/ /@
+ | |\ \@
+ | ||_/@
+ |_| @@
+228 LATIN SMALL LETTER A WITH DIAERESIS
+ _ _ @
+ (_)_(_)@
+ / _` |@
+ | (_| |@
+ \__,_|@
+ @@
+246 LATIN SMALL LETTER O WITH DIAERESIS
+ _ _ @
+ (_)_(_)@
+ / _ \ @
+ | (_) |@
+ \___/ @
+ @@
+252 LATIN SMALL LETTER U WITH DIAERESIS
+ _ _ @
+ (_) (_)@
+ | | | |@
+ | |_| |@
+ \__,_|@
+ @@
+0x05D0 HEBREW LETTER ALEF
+ __ __@
+ \ \ / /@
+ | V / @
+ | |\ \ @
+ |_| \_\@
+ @@
+0x05D1 HEBREW LETTER BET
+ ______ @
+ |____ | @
+ | | @
+ _____| |_@
+ /________/@
+ @@
+0x05D2 HEBREW LETTER GIMEL
+ ____ @
+ |__ | @
+ | | @
+ ____| | @
+ /____/\_\@
+ @@
+0x05D3 HEBREW LETTER DALET
+ _______ @
+ |____ |@
+ | | @
+ | | @
+ |_| @
+ @@
+0x05D4 HEBREW LETTER HE
+ _______ @
+ |_____ |@
+ _ | |@
+ | | | |@
+ |_| |_|@
+ @@
+0x05D5 HEBREW LETTER VAV
+ ___ @
+ |_ |@
+ | |@
+ | |@
+ |_|@
+ @@
+0x05D6 HEBREW LETTER ZAYIN
+ ________ @
+ \__ __\@
+ | | @
+ | | @
+ |_| @
+ @@
+0x05D7 HEBREW LETTER HET
+ _______ @
+ |. __ |@
+ | | | |@
+ | | | |@
+ |_| |_|@
+ @@
+0x05D8 HEBREW LETTER TET
+ __ ___ @
+ |. | /_ |@
+ | | | |@
+ | |___| |@
+ |_______|@
+ @@
+0x05D9 HEBREW LETTER YOD
+ ___ @
+ |_ |@
+ |_|@
+ $ @
+ $ @
+ @@
+0x05DA HEBREW LETTER FINAL KAF
+ _______ @
+ |____ .|@
+ | | @
+ | | @
+ | | @
+ |_| @@
+0x05DB HEBREW LETTER KAF
+ _____ @
+ |____ \ @
+ | |@
+ ____| |@
+ |_____/ @
+ @@
+0x05DC HEBREW LETTER LAMED
+ |=|____ @
+ |____ |@
+ / / @
+ / / @
+ /_/ @
+ @@
+0x05DD HEBREW LETTER FINAL MEM
+ ________ @
+ |. ___ |@
+ | | | |@
+ | |___| |@
+ |_______|@
+ @@
+0x05DE HEBREW LETTER MEM
+ _______ @
+ |. __ |@
+ | | | |@
+ | | _| |@
+ |_||___|@
+ @@
+0x05DF HEBREW LETTER FINAL NUN
+ ___ @
+ |_ |@
+ | |@
+ | |@
+ | |@
+ |_|@@
+0x05E0 HEBREW LETTER NUN
+ ___ @
+ |_ |@
+ | |@
+ __| |@
+ |____|@
+ @@
+0x05E1 HEBREW LETTER SAMEKH
+ _______ @
+ |. __ |@
+ | | | |@
+ | |__/ |@
+ |_____/ @
+ @@
+0x05E2 HEBREW LETTER AYIN
+ __ _ @
+ \ \ | |@
+ \ \| |@
+ __\ ` |@
+ |______|@
+ @@
+0x05E3 HEBREW LETTER FINAL PE
+ ______ @
+ | __ |@
+ | |_ | |@
+ |___|| |@
+ | |@
+ |_|@@
+0x05E4 HEBREW LETTER PE
+ _______ @
+ | ___ |@
+ \_\ | |@
+ _____| |@
+ |_______|@
+ @@
+0x05E5 HEBREW LETTER FINAL TSADI
+ __ _ @
+ |. | | |@
+ | | // @
+ | |// @
+ | | @
+ |_| @@
+0x05E6 HEBREW LETTER TSADI
+ __ __.@
+ \ \ / / @
+ \ V / @
+ ___\ \ @
+ |______| @
+ @@
+0x05E7 HEBREW LETTER QOF
+ ______ @
+ |____ |@
+ _ | |@
+ | | |_|@
+ | | @
+ |_| @@
+0x05E8 HEBREW LETTER RESH
+ ______ @
+ |____ |@
+ | |@
+ | |@
+ |_|@
+ @@
+0x05E9 HEBREW LETTER SHIN
+ _ _ _ @
+ | | | | | |@
+ | | | | | |@
+ | |/ /_/ / @
+ |_______/ @
+ @@
+0x05EA HEBREW LETTER TAV
+ ______ @
+ | __ |@
+ | | | |@
+ _| | | |@
+ |___| |_|@
+ @@
+0x2721 STAR OF DAVID
+ @
+ __/\__@
+ \ /@
+ /_ _\@
+ \/ @
+ @@
+-0x0002
+aleph = t, bet/vet = c, gimel = d, dalet = s, he = v, vav = u, zayin = z @
+het = j, tet = y, yod = h, kaf/chaf = f, final kaf = l, lamed = k, mem = n@
+final mem = o, nun = b, final nun = i, samekh = x, ayin = g, pe/fe = p, @
+final pe = ;, tsadi = m, final tsadi = ., qof = e, resh = r, shin/sin = a @
+tav = , comma = ', period = /, semicolon = `, slash = q, apostrophe = w @
+Star of David = * @@
+-0x0003
+aleph = a, bet/vet = b, gimel = g, dalet = d, he = h, vav = v, zayin = z @
+het = c, tet = t, yod = y, kaf/chaf = k, final kaf = f, lamed = l, mem = m@
+final mem = o, nun = n, final nun = i, samekh = e, ayin = _, pe/fe = p, @
+final pe = u, tsadi = j, final tsadi = w, qof = q, resh = r, shin/sin = s @
+tav = x @
+Star of David = * @@
diff --git a/externals/figlet/fonts/jis0201.flc b/externals/figlet/fonts/jis0201.flc
new file mode 100644
index 000000000..6a32e62ef
--- /dev/null
+++ b/externals/figlet/fonts/jis0201.flc
@@ -0,0 +1,249 @@
+# JIS X 0201 (1976) mappings for ISO 2022 usage.
+
+# Invoke JIS Roman in G0/GL, and JIS Katakana ("halfwidth" katakana, but
+# we map it to fullwidth for compatibility with existing fonts) in
+# G1/GR.
+#
+# This means that the Katakana is available in the high bytes, or you
+# can use SHIFT OUT (0x1E) to cause the low-value bytes (in the ASCII
+# code value range) to invoke Katakana characters (using SHIFT IN (0x1F)
+# to switch back). Of course, this being ISO 2022, you can also use the
+# escape sequences ESC ( I and ESC ( J to shift it in and out.
+
+g 0 94 J
+g 1 94 I
+g L 0
+g R 1
+
+# JIS Roman: ISO 646 variant just like ASCII, but with <Yen> for
+# <backslash>, and <overline> for <tilde>.
+
+0x4A0020 0x20
+0x4A0021 0x21
+0x4A0022 0x22
+0x4A0023 0x23
+0x4A0024 0x24
+0x4A0025 0x25
+0x4A0026 0x26
+0x4A0027 0x27
+0x4A0028 0x28
+0x4A0029 0x29
+0x4A002A 0x2A
+0x4A002B 0x2B
+0x4A002C 0x2C
+0x4A002D 0x2D
+0x4A002E 0x2E
+0x4A002F 0x2F
+0x4A0030 0x30
+0x4A0031 0x31
+0x4A0032 0x32
+0x4A0033 0x33
+0x4A0034 0x34
+0x4A0035 0x35
+0x4A0036 0x36
+0x4A0037 0x37
+0x4A0038 0x38
+0x4A0039 0x39
+0x4A003A 0x3A
+0x4A003B 0x3B
+0x4A003C 0x3C
+0x4A003D 0x3D
+0x4A003E 0x3E
+0x4A003F 0x3F
+0x4A0040 0x40
+0x4A0041 0x41
+0x4A0042 0x42
+0x4A0043 0x43
+0x4A0044 0x44
+0x4A0045 0x45
+0x4A0046 0x46
+0x4A0047 0x47
+0x4A0048 0x48
+0x4A0049 0x49
+0x4A004A 0x4A
+0x4A004B 0x4B
+0x4A004C 0x4C
+0x4A004D 0x4D
+0x4A004E 0x4E
+0x4A004F 0x4F
+0x4A0050 0x50
+0x4A0051 0x51
+0x4A0052 0x52
+0x4A0053 0x53
+0x4A0054 0x54
+0x4A0055 0x55
+0x4A0056 0x56
+0x4A0057 0x57
+0x4A0058 0x58
+0x4A0059 0x59
+0x4A005A 0x5A
+0x4A005B 0x5B
+0x4A005C 0xA5 # \ -> Yen
+0x4A005D 0x5D
+0x4A005E 0x5E
+0x4A005F 0x5F
+0x4A0060 0x60
+0x4A0061 0x61
+0x4A0062 0x62
+0x4A0063 0x63
+0x4A0064 0x64
+0x4A0065 0x65
+0x4A0066 0x66
+0x4A0067 0x67
+0x4A0068 0x68
+0x4A0069 0x69
+0x4A006A 0x6A
+0x4A006B 0x6B
+0x4A006C 0x6C
+0x4A006D 0x6D
+0x4A006E 0x6E
+0x4A006F 0x6F
+0x4A0070 0x70
+0x4A0071 0x71
+0x4A0072 0x72
+0x4A0073 0x73
+0x4A0074 0x74
+0x4A0075 0x75
+0x4A0076 0x76
+0x4A0077 0x77
+0x4A0078 0x78
+0x4A0079 0x79
+0x4A007A 0x7A
+0x4A007B 0x7B
+0x4A007C 0x7C
+0x4A007D 0x7D
+0x4A007E 0x203E
+
+
+# Mappings for JIS Katakana.
+
+0x490021 0x3002
+0x490022 0x300C
+0x490023 0x300D
+0x490024 0x3001
+0x490025 0x30FB
+0x490026 0x30F2
+0x490027 0x30A1
+0x490028 0x30A3
+0x490029 0x30A5
+0x49002A 0x30A7
+0x49002B 0x30A9
+0x49002C 0x30E3
+0x49002D 0x30E5
+0x49002E 0x30E7
+0x49002F 0x30C3
+0x490030 0x30FC
+0x490031 0x30A2
+0x490032 0x30A4
+0x490033 0x30A6
+0x490034 0x30A8
+0x490035 0x30AA
+0x490036 0x30AB
+0x490037 0x30AD
+0x490038 0x30AF
+0x490039 0x30B1
+0x49003A 0x30B3
+0x49003B 0x30B5
+0x49003C 0x30B7
+0x49003D 0x30B9
+0x49003E 0x30BB
+0x49003F 0x30BD
+0x490040 0x30BF
+0x490041 0x30C1
+0x490042 0x30C4
+0x490043 0x30C6
+0x490044 0x30C8
+0x490045 0x30CA
+0x490046 0x30CB
+0x490047 0x30CC
+0x490048 0x30CD
+0x490049 0x30CE
+0x49004A 0x30CF
+0x49004B 0x30D2
+0x49004C 0x30D5
+0x49004D 0x30D8
+0x49004E 0x30DB
+0x49004F 0x30DE
+0x490050 0x30DF
+0x490051 0x30E0
+0x490052 0x30E1
+0x490053 0x30E2
+0x490054 0x30E4
+0x490055 0x30E6
+0x490056 0x30E8
+0x490057 0x30E9
+0x490058 0x30EA
+0x490059 0x30EB
+0x49005A 0x30EC
+0x49005B 0x30ED
+0x49005C 0x30EF
+0x49005D 0x30F3
+0x49005E 0x309B
+0x49005F 0x309C
+
+# For reference, here's what they'd map to if we were mapping to
+# halfwidth Katakana.
+#
+# 0x490021 0xFF61
+# 0x490022 0xFF62
+# 0x490023 0xFF63
+# 0x490024 0xFF64
+# 0x490025 0xFF65
+# 0x490026 0xFF66
+# 0x490027 0xFF67
+# 0x490028 0xFF68
+# 0x490029 0xFF69
+# 0x49002A 0xFF6A
+# 0x49002B 0xFF6B
+# 0x49002C 0xFF6C
+# 0x49002D 0xFF6D
+# 0x49002E 0xFF6E
+# 0x49002F 0xFF6F
+# 0x490030 0xFF70
+# 0x490031 0xFF71
+# 0x490032 0xFF72
+# 0x490033 0xFF73
+# 0x490034 0xFF74
+# 0x490035 0xFF75
+# 0x490036 0xFF76
+# 0x490037 0xFF77
+# 0x490038 0xFF78
+# 0x490039 0xFF79
+# 0x49003A 0xFF7A
+# 0x49003B 0xFF7B
+# 0x49003C 0xFF7C
+# 0x49003D 0xFF7D
+# 0x49003E 0xFF7E
+# 0x49003F 0xFF7F
+# 0x490040 0xFF80
+# 0x490041 0xFF81
+# 0x490042 0xFF82
+# 0x490043 0xFF83
+# 0x490044 0xFF84
+# 0x490045 0xFF85
+# 0x490046 0xFF86
+# 0x490047 0xFF87
+# 0x490048 0xFF88
+# 0x490049 0xFF89
+# 0x49004A 0xFF8A
+# 0x49004B 0xFF8B
+# 0x49004C 0xFF8C
+# 0x49004D 0xFF8D
+# 0x49004E 0xFF8E
+# 0x49004F 0xFF8F
+# 0x490050 0xFF90
+# 0x490051 0xFF91
+# 0x490052 0xFF92
+# 0x490053 0xFF93
+# 0x490054 0xFF94
+# 0x490055 0xFF95
+# 0x490056 0xFF96
+# 0x490057 0xFF97
+# 0x490058 0xFF98
+# 0x490059 0xFF99
+# 0x49005A 0xFF9A
+# 0x49005B 0xFF9B
+# 0x49005C 0xFF9C
+# 0x49005D 0xFF9D
+# 0x49005E 0xFF9E
+# 0x49005F 0xFF9F
diff --git a/externals/figlet/fonts/koi8r.flc b/externals/figlet/fonts/koi8r.flc
new file mode 100644
index 000000000..e324d8b04
--- /dev/null
+++ b/externals/figlet/fonts/koi8r.flc
@@ -0,0 +1,128 @@
+t \0x80 \0x2500
+t \0x81 \0x2502
+t \0x82 \0x250c
+t \0x83 \0x2510
+t \0x84 \0x2514
+t \0x85 \0x2518
+t \0x86 \0x251c
+t \0x87 \0x2524
+t \0x88 \0x252c
+t \0x89 \0x2534
+t \0x8a \0x253c
+t \0x8b \0x2580
+t \0x8c \0x2584
+t \0x8d \0x2588
+t \0x8e \0x258c
+t \0x8f \0x2590
+t \0x90 \0x2591
+t \0x91 \0x2592
+t \0x92 \0x2593
+t \0x93 \0x2320
+t \0x94 \0x25a0
+t \0x95 \0x2219
+t \0x96 \0x221a
+t \0x97 \0x2248
+t \0x98 \0x2264
+t \0x99 \0x2265
+t \0x9a \0x00a0
+t \0x9b \0x2321
+t \0x9c \0x00b0
+t \0x9d \0x00b2
+t \0x9e \0x00b7
+t \0x9f \0x00f7
+t \0xa0 \0x2550
+t \0xa1 \0x2551
+t \0xa2 \0x2552
+t \0xa3 \0x0451
+t \0xa4 \0x2553
+t \0xa5 \0x2554
+t \0xa6 \0x2555
+t \0xa7 \0x2556
+t \0xa8 \0x2557
+t \0xa9 \0x2558
+t \0xaa \0x2559
+t \0xab \0x255a
+t \0xac \0x255b
+t \0xad \0x255c
+t \0xae \0x255d
+t \0xaf \0x255e
+t \0xb0 \0x255f
+t \0xb1 \0x2560
+t \0xb2 \0x2561
+t \0xb3 \0x0401
+t \0xb4 \0x2562
+t \0xb5 \0x2563
+t \0xb6 \0x2564
+t \0xb7 \0x2565
+t \0xb8 \0x2566
+t \0xb9 \0x2567
+t \0xba \0x2568
+t \0xbb \0x2569
+t \0xbc \0x256a
+t \0xbd \0x256b
+t \0xbe \0x256c
+t \0xbf \0x00a9
+t \0xc0 \0x044e
+t \0xc1 \0x0430
+t \0xc2 \0x0431
+t \0xc3 \0x0446
+t \0xc4 \0x0434
+t \0xc5 \0x0435
+t \0xc6 \0x0444
+t \0xc7 \0x0433
+t \0xc8 \0x0445
+t \0xc9 \0x0438
+t \0xca \0x0439
+t \0xcb \0x043a
+t \0xcc \0x043b
+t \0xcd \0x043c
+t \0xce \0x043d
+t \0xcf \0x043e
+t \0xd0 \0x043f
+t \0xd1 \0x044f
+t \0xd2 \0x0440
+t \0xd3 \0x0441
+t \0xd4 \0x0442
+t \0xd5 \0x0443
+t \0xd6 \0x0436
+t \0xd7 \0x0432
+t \0xd8 \0x044c
+t \0xd9 \0x044b
+t \0xda \0x0437
+t \0xdb \0x0448
+t \0xdc \0x044d
+t \0xdd \0x0449
+t \0xde \0x0447
+t \0xdf \0x044a
+t \0xe0 \0x042e
+t \0xe1 \0x0410
+t \0xe2 \0x0411
+t \0xe3 \0x0426
+t \0xe4 \0x0414
+t \0xe5 \0x0415
+t \0xe6 \0x0424
+t \0xe7 \0x0413
+t \0xe8 \0x0425
+t \0xe9 \0x0418
+t \0xea \0x0419
+t \0xeb \0x041a
+t \0xec \0x041b
+t \0xed \0x041c
+t \0xee \0x041d
+t \0xef \0x041e
+t \0xf0 \0x041f
+t \0xf1 \0x042f
+t \0xf2 \0x0420
+t \0xf3 \0x0421
+t \0xf4 \0x0422
+t \0xf5 \0x0423
+t \0xf6 \0x0416
+t \0xf7 \0x0412
+t \0xf8 \0x042c
+t \0xf9 \0x042b
+t \0xfa \0x0417
+t \0xfb \0x0428
+t \0xfc \0x042d
+t \0xfd \0x0429
+t \0xfe \0x0427
+t \0xff \0x042a
diff --git a/externals/figlet/fonts/lean.flf b/externals/figlet/fonts/lean.flf
new file mode 100644
index 000000000..7e53563c0
--- /dev/null
+++ b/externals/figlet/fonts/lean.flf
@@ -0,0 +1,1691 @@
+flf2a$ 8 6 27 0 10 0 576 96
+Lean by Glenn Chappell 4/93 -- based on various .sig's
+Includes ISO Latin-1
+figlet release 2.1 -- 12 Aug 1994
+Permission is hereby given to modify this font, as long as the
+modifier's name is placed on a comment line.
+
+Modified by Paul Burton <solution@earthlink.net> 12/96 to include new parameter
+supported by FIGlet and FIGWin. May also be slightly modified for better use
+of new full-width/kern/smush alternatives, but default output is NOT changed.
+
+ $ $@
+ $ $ @
+ $ $ @
+ $ $ @
+ $ $ @
+ $ $ @
+ $ $ @
+$ $ @@
+ $$@
+ _/ $ @
+ _/ $ @
+ _/ $ @
+ $$ @
+_/ $ @
+ $$ @
+ @@
+ _/ _/ $@
+ _/ _/ $ @
+ $$ @
+ $$ @
+ $$ @
+$$ @
+ @
+ @@
+ $$ @
+ _/ _/ $@
+ _/_/_/_/_/ $ @
+ _/ _/ $ @
+_/_/_/_/_/ $ @
+ _/ _/ $ @
+ $$ @
+ @@
+ $$ @
+ _/ $@
+ _/_/_/ $ @
+ _/_/ $ @
+ _/_/ $ @
+_/_/_/ $ @
+ _/ $ @
+ $$ @@
+ $$@
+ _/_/ _/ $ @
+ _/_/ _/ $ @
+ _/ $ @
+ _/ _/_/ $ @
+_/ _/_/ $ @
+ $$ @
+ @@
+ $$ @
+ _/ $ @
+ _/ _/ $@
+ _/_/ _/ $ @
+_/ _/ $ @
+ _/_/ _/ $ @
+ $$ @
+ @@
+ _/ $@
+ _/ $ @
+ $$ @
+ $$ @
+ $$ @
+$$ @
+ @
+ @@
+ _/ $@
+ _/ $ @
+ _/ $ @
+ _/ $ @
+ _/ $ @
+_/ $ @
+ _/ $ @
+ $$ @@
+ _/ $@
+ _/ $ @
+ _/ $ @
+ _/ $ @
+ _/ $ @
+ _/ $ @
+_/ $ @
+ $$ @@
+ $$@
+ _/ _/ _/ $ @
+ _/_/_/ $ @
+ _/_/_/_/_/ $ @
+ _/_/_/ $ @
+_/ _/ _/ $ @
+ $$ @
+ @@
+ $$ @
+ _/ $ @
+ _/ $@
+_/_/_/_/_/ $ @
+ _/ $ @
+ _/ $ @
+ $$ @
+ @@
+ @
+ @
+ @
+ @
+ $$@
+ _/ $ @
+_/ $ @
+ $$ @@
+ @
+ @
+ $$@
+_/_/_/_/_/ $ @
+ $$ @
+ @
+ @
+ @@
+ @
+ @
+ @
+ @
+ $$@
+_/ $ @
+ $$ @
+ @@
+ $$@
+ _/ $ @
+ _/ $ @
+ _/ $ @
+ _/ $ @
+_/ $ @
+ $$ @
+ @@
+ $$ @
+ _/ $@
+ _/ _/ $ @
+ _/ _/ $ @
+_/ _/ $ @
+ _/ $ @
+ $$ @
+ @@
+ $$@
+ _/ $ @
+ _/_/ $ @
+ _/ $ @
+ _/ $ @
+_/ $ @
+ $$ @
+ @@
+ $$ @
+ _/_/ $@
+ _/ _/ $ @
+ _/ $ @
+ _/ $ @
+_/_/_/_/ $ @
+ $$ @
+ @@
+ $$ @
+ _/_/_/ $@
+ _/ $ @
+ _/_/ $ @
+ _/ $ @
+_/_/_/ $ @
+ $$ @
+ @@
+ $$@
+ _/ _/ $ @
+ _/ _/ $@
+_/_/_/_/ $ @
+ _/ $ @
+ _/ $ @
+ $$ @
+ @@
+ $$@
+ _/_/_/_/ $ @
+ _/ $ @
+ _/_/_/ $ @
+ _/ $ @
+_/_/_/ $ @
+ $$ @
+ @@
+ $$@
+ _/_/_/ $ @
+ _/ $ @
+ _/_/_/ $ @
+_/ _/ $ @
+ _/_/ $ @
+ $$ @
+ @@
+ $$@
+ _/_/_/_/_/ $ @
+ _/ $ @
+ _/ $ @
+ _/ $ @
+_/ $ @
+ $$ @
+ @@
+ $$ @
+ _/_/ $@
+ _/ _/ $ @
+ _/_/ $ @
+_/ _/ $ @
+ _/_/ $ @
+ $$ @
+ @@
+ $$ @
+ _/_/ $@
+ _/ _/ $ @
+ _/_/_/ $ @
+ _/ $ @
+_/_/_/ $ @
+ $$ @
+ @@
+ @
+ $$@
+ _/ $ @
+ $$ @
+ $$ @
+_/ $ @
+ $$ @
+ @@
+ @
+ $$@
+ _/ $ @
+ $$ @
+ $$ @
+ _/ $ @
+_/ $ @
+ $$ @@
+ $$@
+ _/ $ @
+ _/ $ @
+_/ $ @
+ _/ $ @
+ _/ $ @
+ $$ @
+ @@
+ @
+ $$@
+ _/_/_/_/_/ $ @
+ $$ @
+_/_/_/_/_/ $ @
+ $$ @
+ @
+ @@
+ $$ @
+ _/ $ @
+ _/ $@
+ _/ $ @
+ _/ $ @
+_/ $ @
+ $$ @
+ @@
+ $$ @
+ _/_/ $@
+ _/ $ @
+ _/_/ $ @
+ $$ @
+_/ $ @
+ $$ @
+ @@
+ $$ @
+ _/_/_/_/_/ $@
+ _/ _/ $ @
+ _/ _/_/_/ _/ $ @
+ _/ _/ _/ _/ $ @
+_/ _/_/_/_/ $ @
+ _/ $ @
+ _/_/_/_/_/_/ $ @@
+ $$ @
+ _/_/ $@
+ _/ _/ $ @
+ _/_/_/_/ $ @
+ _/ _/ $ @
+_/ _/ $ @
+ $$ @
+ @@
+ $$ @
+ _/_/_/ $@
+ _/ _/ $ @
+ _/_/_/ $ @
+ _/ _/ $ @
+_/_/_/ $ @
+ $$ @
+ @@
+ $$@
+ _/_/_/ $ @
+ _/ $ @
+ _/ $ @
+_/ $ @
+ _/_/_/ $ @
+ $$ @
+ @@
+ $$ @
+ _/_/_/ $@
+ _/ _/ $ @
+ _/ _/ $ @
+ _/ _/ $ @
+_/_/_/ $ @
+ $$ @
+ @@
+ $$@
+ _/_/_/_/ $ @
+ _/ $ @
+ _/_/_/ $ @
+ _/ $ @
+_/_/_/_/ $ @
+ $$ @
+ @@
+ $$@
+ _/_/_/_/ $ @
+ _/ $ @
+ _/_/_/ $ @
+ _/ $ @
+_/ $ @
+ $$ @
+ @@
+ $$@
+ _/_/_/ $ @
+ _/ $ @
+ _/ _/_/ $ @
+_/ _/ $ @
+ _/_/_/ $ @
+ $$ @
+ @@
+ $$@
+ _/ _/ $ @
+ _/ _/ $ @
+ _/_/_/_/ $ @
+ _/ _/ $ @
+_/ _/ $ @
+ $$ @
+ @@
+ $$@
+ _/_/_/ $ @
+ _/ $ @
+ _/ $ @
+ _/ $ @
+_/_/_/ $ @
+ $$ @
+ @@
+ $$@
+ _/ $ @
+ _/ $ @
+ _/ $ @
+_/ _/ $ @
+ _/_/ $ @
+ $$ @
+ @@
+ $$@
+ _/ _/ $ @
+ _/ _/ $ @
+ _/_/ $ @
+ _/ _/ $ @
+_/ _/ $ @
+ $$ @
+ @@
+ $$ @
+ _/ $ @
+ _/ $ @
+ _/ $ @
+ _/ $@
+_/_/_/_/ $ @
+ $$ @
+ @@
+ $$@
+ _/ _/ $ @
+ _/_/ _/_/ $ @
+ _/ _/ _/ $ @
+ _/ _/ $ @
+_/ _/ $ @
+ $$ @
+ @@
+ $$@
+ _/ _/ $ @
+ _/_/ _/ $ @
+ _/ _/ _/ $ @
+ _/ _/_/ $ @
+_/ _/ $ @
+ $$ @
+ @@
+ $$ @
+ _/_/ $@
+ _/ _/ $ @
+ _/ _/ $ @
+_/ _/ $ @
+ _/_/ $ @
+ $$ @
+ @@
+ $$ @
+ _/_/_/ $@
+ _/ _/ $ @
+ _/_/_/ $ @
+ _/ $ @
+_/ $ @
+ $$ @
+ @@
+ $$ @
+ _/_/ $@
+ _/ _/ $ @
+ _/ _/_/ $ @
+_/ _/ $ @
+ _/_/ _/ $ @
+ $$ @
+ @@
+ $$ @
+ _/_/_/ $@
+ _/ _/ $ @
+ _/_/_/ $ @
+ _/ _/ $ @
+_/ _/ $ @
+ $$ @
+ @@
+ $$@
+ _/_/_/ $ @
+ _/ $ @
+ _/_/ $ @
+ _/ $ @
+_/_/_/ $ @
+ $$ @
+ @@
+ $$@
+_/_/_/_/_/ $ @
+ _/ $ @
+ _/ $ @
+ _/ $ @
+_/ $ @
+ $$ @
+ @@
+ $$@
+ _/ _/ $ @
+ _/ _/ $ @
+ _/ _/ $ @
+_/ _/ $ @
+ _/_/ $ @
+ $$ @
+ @@
+ $$@
+ _/ _/ $ @
+ _/ _/ $ @
+_/ _/ $ @
+ _/ _/ $ @
+ _/ $ @
+ $$ @
+ @@
+ $$@
+ _/ _/ $ @
+ _/ _/ $ @
+_/ _/ _/ $ @
+ _/ _/ _/ $ @
+ _/ _/ $ @
+ $$ @
+ @@
+ $$@
+ _/ _/ $ @
+ _/ _/ $ @
+ _/ $ @
+ _/ _/ $ @
+_/ _/ $ @
+ $$ @
+ @@
+ $$@
+_/ _/ $ @
+ _/ _/ $ @
+ _/ $ @
+ _/ $ @
+_/ $ @
+ $$ @
+ @@
+ $$@
+ _/_/_/_/_/ $ @
+ _/ $ @
+ _/ $ @
+ _/ $ @
+_/_/_/_/_/ $ @
+ $$ @
+ @@
+ _/_/ $@
+ _/ $ @
+ _/ $ @
+ _/ $ @
+ _/ $ @
+ _/ $ @
+_/_/ $ @
+ $$ @@
+ $$ @
+_/ $ @
+ _/ $ @
+ _/ $ @
+ _/ $@
+ _/ $ @
+ $$ @
+ @@
+ _/_/ $@
+ _/ $ @
+ _/ $ @
+ _/ $ @
+ _/ $ @
+ _/ $ @
+_/_/ $ @
+ $$ @@
+ _/ $@
+ _/ _/ $ @
+ $$ @
+ $$ @
+ $$ @
+$$ @
+ @
+ @@
+ @
+ @
+ @
+ @
+ @
+ $$ @
+ $$@
+_/_/_/_/_/ $ @@
+ _/ $@
+ _/ $ @
+ $$ @
+ $$ @
+ $$ @
+$$ @
+ @
+ @@
+ @
+ $$@
+ _/_/_/ $ @
+ _/ _/ $ @
+_/ _/ $ @
+ _/_/_/ $ @
+ $$ @
+ @@
+ $$ @
+ _/ $ @
+ _/_/_/ $@
+ _/ _/ $ @
+ _/ _/ $ @
+_/_/_/ $ @
+ $$ @
+ @@
+ @
+ $$@
+ _/_/_/ $ @
+ _/ $ @
+_/ $ @
+ _/_/_/ $ @
+ $$ @
+ @@
+ $$@
+ _/ $ @
+ _/_/_/ $ @
+ _/ _/ $ @
+_/ _/ $ @
+ _/_/_/ $ @
+ $$ @
+ @@
+ @
+ $$ @
+ _/_/ $@
+ _/_/_/_/ $ @
+_/ $ @
+ _/_/_/ $ @
+ $$ @
+ @@
+ $$@
+ _/_/ $ @
+ _/ $ @
+_/_/_/_/ @
+ _/ $ @
+_/ $ @
+ $$ @
+ @@
+ @
+ $$@
+ _/_/_/ $ @
+ _/ _/ $ @
+ _/ _/ $ @
+ _/_/_/ $ @
+ _/ $ @
+_/_/ $ @@
+ $$ @
+ _/ $ @
+ _/_/_/ $@
+ _/ _/ $ @
+ _/ _/ $ @
+_/ _/ $ @
+ $$ @
+ @@
+ $$@
+ _/ $ @
+ $$ @
+ _/ $ @
+ _/ $ @
+_/ $ @
+ $$ @
+ @@
+ $$@
+ _/ $ @
+ $$ @
+ _/ $ @
+ _/ $ @
+ _/ $ @
+ _/ $ @
+_/ $ @@
+ $$ @
+ _/ $@
+ _/ _/ $ @
+ _/_/ $ @
+ _/ _/ $ @
+_/ _/ $ @
+ $$ @
+ @@
+ $$@
+ _/ $ @
+ _/ $ @
+ _/ $ @
+ _/ $ @
+_/ $ @
+ $$ @
+ @@
+ @
+ $$ @
+ _/_/_/ _/_/ $@
+ _/ _/ _/ $ @
+ _/ _/ _/ $ @
+_/ _/ _/ $ @
+ $$ @
+ @@
+ @
+ $$ @
+ _/_/_/ $@
+ _/ _/ $ @
+ _/ _/ $ @
+_/ _/ $ @
+ $$ @
+ @@
+ @
+ $$ @
+ _/_/ $@
+ _/ _/ $ @
+_/ _/ $ @
+ _/_/ $ @
+ $$ @
+ @@
+ @
+ $$ @
+ _/_/_/ $@
+ _/ _/ $ @
+ _/ _/ $ @
+ _/_/_/ $ @
+ _/ $ @
+_/ $ @@
+ @
+ $$@
+ _/_/_/ $ @
+ _/ _/ $ @
+_/ _/ $ @
+ _/_/_/ $ @
+ _/ $ @
+ _/ $ @@
+ @
+ $$@
+ _/ _/_/ $ @
+ _/_/ $ @
+ _/ $ @
+_/ $ @
+ $$ @
+ @@
+ @
+ $$@
+ _/_/_/ $ @
+ _/_/ $ @
+ _/_/ $ @
+_/_/_/ $ @
+ $$ @
+ @@
+ $$ @
+ _/ $@
+_/_/_/_/ @
+ _/ $ @
+_/ $ @
+ _/_/ $ @
+ $$ @
+ @@
+ @
+ $$@
+ _/ _/ $ @
+ _/ _/ $ @
+_/ _/ $ @
+ _/_/_/ $ @
+ $$ @
+ @@
+ @
+ $$@
+ _/ _/ $ @
+_/ _/ $ @
+ _/ _/ $ @
+ _/ $ @
+ $$ @
+ @@
+ @
+ $$@
+ _/ _/ _/ $ @
+_/ _/ _/ $ @
+ _/ _/ _/ _/ $ @
+ _/ _/ $ @
+ $$ @
+ @@
+ @
+ $$@
+ _/ _/ $ @
+ _/_/ $ @
+ _/ _/ $ @
+_/ _/ $ @
+ $$ @
+ @@
+ @
+ $$@
+ _/ _/ $ @
+ _/ _/ $ @
+ _/ _/ $ @
+ _/_/_/ $ @
+ _/ $ @
+_/_/ $ @@
+ @
+ $$@
+ _/_/_/_/ $ @
+ _/ $ @
+ _/ $ @
+_/_/_/_/ $ @
+ $$ @
+ @@
+ _/ $@
+ _/ $ @
+ _/ $ @
+_/ $ @
+ _/ $ @
+_/ $ @
+ _/ $ @
+ $$ @@
+ _/ $@
+ _/ $ @
+ _/ $ @
+ _/ $ @
+ _/ $ @
+ _/ $ @
+ _/ $ @
+_/ $ @@
+ _/ $ @
+ _/ $@
+ _/ $ @
+ _/ $ @
+ _/ $ @
+ _/ $ @
+_/ $ @
+ $$ @@
+ _/ _/ $@
+_/ _/ $ @
+ $$ @
+ $$ @
+ $$ @
+$$ @
+ @
+ @@
+ _/ _/ $@
+ $$ @
+ _/_/ $ @
+ _/ _/ $ @
+ _/_/_/_/ $ @
+_/ _/ $ @
+ $$ @
+ @@
+ _/ _/ $@
+ $$ @
+ _/_/ $ @
+ _/ _/ $ @
+_/ _/ $ @
+ _/_/ $ @
+ $$ @
+ @@
+ _/ _/ $@
+ $$ @
+ _/ _/ $ @
+ _/ _/ $ @
+_/ _/ $ @
+ _/_/ $ @
+ $$ @
+ @@
+ _/ _/ $@
+ $$ @
+ _/_/_/ $ @
+ _/ _/ $ @
+_/ _/ $ @
+ _/_/_/ $ @
+ $$ @
+ @@
+ _/ _/ $@
+ $$ @
+ _/_/ $ @
+ _/ _/ $ @
+_/ _/ $ @
+ _/_/ $ @
+ $$ @
+ @@
+ _/ _/ $@
+ $$ @
+ _/ _/ $ @
+ _/ _/ $ @
+_/ _/ $ @
+ _/_/_/ $ @
+ $$ @
+ @@
+ $$ @
+ _/_/ $@
+ _/ _/ $ @
+ _/ _/ $ @
+ _/ _/ $ @
+ _/ _/ $ @
+_/ $ @
+ $$ @@
+160 NO-BREAK SPACE
+ $ $@
+ $ $ @
+ $ $ @
+ $ $ @
+ $ $ @
+ $ $ @
+ $ $ @
+$ $ @@
+161 INVERTED EXCLAMATION MARK
+ $$@
+ _/ $ @
+ $$ @
+ _/ $ @
+ _/ $ @
+_/ $ @
+ $$ @
+ @@
+162 CENT SIGN
+ $$ @
+ _/ $@
+ _/_/_/ $ @
+ _/ _/ $ @
+_/ _/ $ @
+ _/_/_/ $ @
+ _/ $ @
+ $$ @@
+163 POUND SIGN
+ $$ @
+ _/_/ $@
+ _/ _/ $ @
+ _/_/_/ $ @
+ _/ $ @
+ _/_/_/ _/ $ @
+_/_/ _/_/ $ @
+ @@
+164 CURRENCY SIGN
+ $$@
+ _/ _/ $ @
+ _/_/_/_/ $ @
+ _/ _/ $ @
+ _/ _/ $ @
+ _/_/_/_/ $ @
+_/ _/ $ @
+ $$ @@
+165 YEN SIGN
+ $$@
+ _/ _/ $ @
+ _/ _/ $ @
+ _/_/_/_/_/ $ @
+ _/ $ @
+_/_/_/_/_/ $ @
+ _/ $ @
+ $$ @@
+166 BROKEN BAR
+ _/ $@
+ _/ $ @
+ _/ $ @
+ $$ @
+ $$ @
+ _/ $ @
+ _/ $ @
+_/ $ @@
+167 SECTION SIGN
+ _/_/ $@
+ _/ $ @
+ _/ $ @
+ _/ _/ $ @
+ _/ $ @
+ _/ $ @
+_/_/ $ @
+ $$ @@
+168 DIAERESIS
+ _/ _/ $@
+ $$ @
+ $ $ @
+ $ $ @
+ $ $ @
+$ $ @
+ @
+ @@
+169 COPYRIGHT SIGN
+ _/_/_/_/ $ @
+ _/ _/ $@
+ _/ _/_/_/ _/ $ @
+ _/ _/ _/ $ @
+ _/ _/ _/ $ @
+_/ _/_/_/ _/ $ @
+ _/ _/ $ @
+ _/_/_/_/ $ @@
+170 FEMININE ORDINAL INDICATOR
+ $$@
+ _/_/_/ $ @
+ _/ _/ $ @
+ _/_/_/ $ @
+ $$ @
+_/_/_/_/ $ @
+ @
+ @@
+171 LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+ $$@
+ _/ _/ $ @
+ _/ _/ $ @
+_/ _/ $ @
+ _/ _/ $ @
+ _/ _/ $ @
+ $$ @
+ @@
+172 NOT SIGN
+ @
+ @
+ $$@
+_/_/_/_/_/ $ @
+ _/ $ @
+ $$ @
+ @
+ @@
+173 SOFT HYPHEN
+ @
+ @
+ $$@
+_/_/_/_/ $ @
+ $$ @
+ $$ @
+ @
+ @@
+174 REGISTERED SIGN
+ _/_/_/_/ $ @
+ _/ _/ $@
+ _/ _/_/_/ _/ $ @
+ _/ _/ _/ _/ $ @
+ _/ _/_/_/ _/ $ @
+_/ _/ _/ _/ $ @
+ _/ _/ $ @
+ _/_/_/_/ $ @@
+175 MACRON
+ _/_/_/_/_/ $@
+ $$ @
+ $$ @
+ $$ @
+ $$ @
+$$ @
+ @
+ @@
+176 DEGREE SIGN
+ _/ $@
+ _/ _/ $ @
+ _/ $ @
+ $$ @
+ $$ @
+$$ @
+ @
+ @@
+177 PLUS-MINUS SIGN
+ $$ @
+ _/ $ @
+ _/ $@
+ _/_/_/_/_/ $ @
+ _/ $ @
+_/_/_/_/_/ $ @
+ $$ @
+ @@
+178 SUPERSCRIPT TWO
+ $$ @
+ _/_/ $@
+ _/ $ @
+ _/ $ @
+_/_/_/ $ @
+ $$ @
+ @
+ @@
+179 SUPERSCRIPT THREE
+ $$@
+ _/_/_/ $ @
+ _/ $ @
+ _/ $ @
+_/_/ $ @
+ $$ @
+ @
+ @@
+180 ACUTE ACCENT
+ _/ $@
+ _/ $ @
+ $$ @
+ $$ @
+ $$ @
+$$ @
+ @
+ @@
+181 MICRO SIGN
+ @
+ $$@
+ _/ _/ $ @
+ _/ _/ $ @
+ _/ _/ $ @
+ _/_/_/_/ $ @
+ _/ $ @
+_/ $ @@
+182 PILCROW SIGN
+ $$@
+ _/_/_/_/ $ @
+_/_/_/ _/ $ @
+ _/_/ _/ $ @
+ _/ _/ $ @
+ _/ _/ $ @
+ $$ @
+ @@
+183 MIDDLE DOT
+ @
+ @
+ $$@
+ _/ $ @
+ $$ @
+$$ @
+ @
+ @@
+184 CEDILLA
+ @
+ @
+ @
+ @
+ @
+ $$@
+ _/ $ @
+_/_/ $ @@
+185 SUPERSCRIPT ONE
+ $$@
+ _/ $ @
+_/_/ $ @
+ _/ $ @
+_/ $ @
+ $$ @
+ @
+ @@
+186 MASCULINE ORDINAL INDICATOR
+ $$ @
+ _/_/ $@
+ _/ _/ $ @
+ _/_/ $ @
+ $$ @
+_/_/_/_/ $ @
+ @
+ @@
+187 RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+ $$ @
+ _/ _/ $ @
+ _/ _/ $@
+ _/ _/ $ @
+ _/ _/ $ @
+_/ _/ $ @
+ $$ @
+ @@
+188 VULGAR FRACTION ONE QUARTER
+ $$ @
+ _/ _/ $@
+_/_/ _/ _/ _/ $ @
+ _/ _/ _/ _/ $@
+_/ _/ _/_/_/_/ $ @
+ _/ _/ $ @
+ $$ @
+ @@
+189 VULGAR FRACTION ONE HALF
+ $$ @
+ _/ _/ $ @
+_/_/ _/ _/_/ $@
+ _/ _/ _/ $ @
+_/ _/ _/ $ @
+ _/ _/_/_/ $ @
+ $$ @
+ @@
+190 VULGAR FRACTION THREE QUARTERS
+ $$ @
+ _/_/_/ _/ $@
+ _/ _/ _/ _/ $ @
+ _/ _/ _/ _/ $@
+_/_/ _/ _/_/_/_/ $ @
+ _/ _/ $ @
+ $$ @
+ @@
+191 INVERTED QUESTION MARK
+ $$@
+ _/ $ @
+ $$ @
+ _/_/ $ @
+_/ $ @
+ _/_/ $ @
+ $$ @
+ @@
+192 LATIN CAPITAL LETTER A WITH GRAVE
+ _/ $@
+ _/ $ @
+ _/_/ $@
+ _/ _/ $ @
+ _/_/_/_/ $ @
+_/ _/ $ @
+ $$ @
+ @@
+193 LATIN CAPITAL LETTER A WITH ACUTE
+ _/ $@
+ _/ $ @
+ _/_/ $@
+ _/ _/ $ @
+ _/_/_/_/ $ @
+_/ _/ $ @
+ $$ @
+ @@
+194 LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+ _/_/ $@
+ _/ _/ $ @
+ $$ @
+ _/_/ $ @
+ _/_/_/_/ $ @
+_/ _/ $ @
+ $$ @
+ @@
+195 LATIN CAPITAL LETTER A WITH TILDE
+ _/ _/ $@
+ _/ _/ $ @
+ $$ @
+ _/_/ $ @
+ _/_/_/_/ $ @
+_/ _/ $ @
+ $$ @
+ @@
+196 LATIN CAPITAL LETTER A WITH DIAERESIS
+ _/ _/ $@
+ $$ @
+ _/_/ $ @
+ _/ _/ $ @
+ _/_/_/_/ $ @
+_/ _/ $ @
+ $$ @
+ @@
+197 LATIN CAPITAL LETTER A WITH RING ABOVE
+ _/_/ $@
+ _/ _/ $ @
+ _/_/ $ @
+ _/ _/ $ @
+ _/_/_/_/ $ @
+_/ _/ $ @
+ $$ @
+ @@
+198 LATIN CAPITAL LETTER AE
+ $$@
+ _/_/_/_/_/_/ $ @
+ _/ _/ $ @
+ _/_/_/_/_/_/ $ @
+ _/ _/ $ @
+_/ _/_/_/_/ $ @
+ $$ @
+ @@
+199 LATIN CAPITAL LETTER C WITH CEDILLA
+ $$@
+ _/_/_/ $ @
+ _/ $ @
+ _/ $ @
+ _/ $ @
+ _/_/_/ $ @
+ _/ $ @
+_/_/ $ @@
+200 LATIN CAPITAL LETTER E WITH GRAVE
+ _/ $ @
+ _/ $@
+ _/_/_/_/ $ @
+ _/_/_/ $ @
+ _/ $ @
+_/_/_/_/ $ @
+ $$ @
+ @@
+201 LATIN CAPITAL LETTER E WITH ACUTE
+ _/ $ @
+ _/ $@
+ _/_/_/_/ $ @
+ _/_/_/ $ @
+ _/ $ @
+_/_/_/_/ $ @
+ $$ @
+ @@
+202 LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+ _/_/ $@
+ _/ _/ $ @
+ _/_/_/_/ $ @
+ _/_/_/ $ @
+ _/ $ @
+_/_/_/_/ $ @
+ $$ @
+ @@
+203 LATIN CAPITAL LETTER E WITH DIAERESIS
+ _/ _/ $@
+ $$ @
+ _/_/_/_/ $ @
+ _/_/_/ $ @
+ _/ $ @
+_/_/_/_/ $ @
+ $$ @
+ @@
+204 LATIN CAPITAL LETTER I WITH GRAVE
+ _/ $ @
+ _/ $@
+ _/_/_/ $ @
+ _/ $ @
+ _/ $ @
+_/_/_/ $ @
+ $$ @
+ @@
+205 LATIN CAPITAL LETTER I WITH ACUTE
+ _/ $@
+ _/ $ @
+ _/_/_/ $ @
+ _/ $ @
+ _/ $ @
+_/_/_/ $ @
+ $$ @
+ @@
+206 LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+ _/ $@
+ _/ _/ $ @
+ _/_/_/ $ @
+ _/ $ @
+ _/ $ @
+_/_/_/ $ @
+ $$ @
+ @@
+207 LATIN CAPITAL LETTER I WITH DIAERESIS
+ _/ _/ $@
+ $$ @
+ _/_/_/ $ @
+ _/ $ @
+ _/ $ @
+_/_/_/ $ @
+ $$ @
+ @@
+208 LATIN CAPITAL LETTER ETH
+ $$ @
+ _/_/_/ $@
+ _/ _/ $ @
+_/_/_/ _/ $ @
+ _/ _/ $ @
+_/_/_/ $ @
+ $$ @
+ @@
+209 LATIN CAPITAL LETTER N WITH TILDE
+ _/ _/ $@
+ _/ _/ $ @
+ _/ _/ $ @
+ _/_/ _/ $ @
+ _/ _/_/ $ @
+_/ _/ $ @
+ $$ @
+ @@
+210 LATIN CAPITAL LETTER O WITH GRAVE
+ _/ $@
+ _/ $ @
+ _/_/ $@
+ _/ _/ $ @
+_/ _/ $ @
+ _/_/ $ @
+ $$ @
+ @@
+211 LATIN CAPITAL LETTER O WITH ACUTE
+ _/ $@
+ _/ $ @
+ _/_/ $@
+ _/ _/ $ @
+_/ _/ $ @
+ _/_/ $ @
+ $$ @
+ @@
+212 LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+ _/_/ $@
+ _/ _/ $ @
+ _/_/ $ @
+ _/ _/ $ @
+_/ _/ $ @
+ _/_/ $ @
+ $$ @
+ @@
+213 LATIN CAPITAL LETTER O WITH TILDE
+ _/ _/ $@
+ _/ _/ $ @
+ _/_/ $ @
+ _/ _/ $ @
+_/ _/ $ @
+ _/_/ $ @
+ $$ @
+ @@
+214 LATIN CAPITAL LETTER O WITH DIAERESIS
+ _/ _/ $@
+ $$ @
+ _/_/ $ @
+ _/ _/ $ @
+_/ _/ $ @
+ _/_/ $ @
+ $$ @
+ @@
+215 MULTIPLICATION SIGN
+ @
+ $$@
+ _/ _/ $ @
+ _/ $ @
+_/ _/ $ @
+ $$ @
+ @
+ @@
+216 LATIN CAPITAL LETTER O WITH STROKE
+ $$@
+ _/_/_/_/ $ @
+ _/ _/_/ $ @
+ _/ _/ _/ $ @
+ _/_/ _/ $ @
+_/_/_/_/ $ @
+ $$ @
+ @@
+217 LATIN CAPITAL LETTER U WITH GRAVE
+ _/ $@
+ _/ $ @
+ $$@
+ _/ _/ $ @
+_/ _/ $ @
+ _/_/ $ @
+ $$ @
+ @@
+218 LATIN CAPITAL LETTER U WITH ACUTE
+ _/ $@
+ _/ $ @
+ $$@
+ _/ _/ $ @
+_/ _/ $ @
+ _/_/ $ @
+ $$ @
+ @@
+219 LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+ _/_/ $@
+ _/ _/ $ @
+ $$ @
+ _/ _/ $ @
+_/ _/ $ @
+ _/_/ $ @
+ $$ @
+ @@
+220 LATIN CAPITAL LETTER U WITH DIAERESIS
+ _/ _/ $@
+ $$ @
+ _/ _/ $ @
+ _/ _/ $ @
+_/ _/ $ @
+ _/_/ $ @
+ $$ @
+ @@
+221 LATIN CAPITAL LETTER Y WITH ACUTE
+ _/ $ @
+ _/ $@
+_/ _/ $ @
+ _/ _/ $ @
+ _/ $ @
+ _/ $ @
+ $$ @
+ @@
+222 LATIN CAPITAL LETTER THORN
+ $$ @
+ _/ $ @
+ _/_/_/ $@
+ _/ _/ $ @
+ _/_/_/ $ @
+_/ $ @
+ $$ @
+ @@
+223 LATIN SMALL LETTER SHARP S
+ $$ @
+ _/_/ $@
+ _/ _/ $ @
+ _/ _/ $ @
+ _/ _/ $ @
+ _/ _/ $ @
+_/ $ @
+ $$ @@
+224 LATIN SMALL LETTER A WITH GRAVE
+ _/ $@
+ _/ $ @
+ $$@
+ _/_/_/ $ @
+_/ _/ $ @
+ _/_/_/ $ @
+ $$ @
+ @@
+225 LATIN SMALL LETTER A WITH ACUTE
+ _/ $@
+ _/ $ @
+ $$ @
+ _/_/_/ $ @
+_/ _/ $ @
+ _/_/_/ $ @
+ $$ @
+ @@
+226 LATIN SMALL LETTER A WITH CIRCUMFLEX
+ _/ $@
+ _/ _/ $ @
+ $$ @
+ _/_/_/ $ @
+_/ _/ $ @
+ _/_/_/ $ @
+ $$ @
+ @@
+227 LATIN SMALL LETTER A WITH TILDE
+ _/ _/ $@
+ _/ _/ $ @
+ $$ @
+ _/_/_/ $ @
+_/ _/ $ @
+ _/_/_/ $ @
+ $$ @
+ @@
+228 LATIN SMALL LETTER A WITH DIAERESIS
+ _/ _/ $@
+ $$ @
+ _/_/_/ $ @
+ _/ _/ $ @
+_/ _/ $ @
+ _/_/_/ $ @
+ $$ @
+ @@
+229 LATIN SMALL LETTER A WITH RING ABOVE
+ _/ $@
+ _/ _/ $ @
+ _/ $ @
+ _/_/_/ $ @
+_/ _/ $ @
+ _/_/_/ $ @
+ $$ @
+ @@
+230 LATIN SMALL LETTER AE
+ @
+ $$ @
+ _/_/_/ _/_/ $@
+ _/ _/_/_/_/_/ $ @
+_/ _/_/ $ @
+ _/_/_/ _/_/_/ $ @
+ $$ @
+ @@
+231 LATIN SMALL LETTER C WITH CEDILLA
+ @
+ $$@
+ _/_/_/ $ @
+ _/ $ @
+ _/ $ @
+ _/_/_/ $ @
+ _/ $ @
+_/_/ $ @@
+232 LATIN SMALL LETTER E WITH GRAVE
+ _/ $@
+ _/ $ @
+ _/_/ $ @
+ _/_/_/_/ $ @
+_/ $ @
+ _/_/_/ $ @
+ $$ @
+ @@
+233 LATIN SMALL LETTER E WITH ACUTE
+ _/ $@
+ _/ $ @
+ _/_/ $ @
+ _/_/_/_/ $ @
+_/ $ @
+ _/_/_/ $ @
+ $$ @
+ @@
+234 LATIN SMALL LETTER E WITH CIRCUMFLEX
+ _/_/ $@
+ _/ _/ $ @
+ _/_/ $ @
+ _/_/_/_/ $ @
+_/ $ @
+ _/_/_/ $ @
+ $$ @
+ @@
+235 LATIN SMALL LETTER E WITH DIAERESIS
+ _/ _/ $@
+ $$ @
+ _/_/ $ @
+ _/_/_/_/ $ @
+_/ $ @
+ _/_/_/ $ @
+ $$ @
+ @@
+236 LATIN SMALL LETTER I WITH GRAVE
+ _/ $@
+ _/ $ @
+ $$ @
+ _/ $ @
+ _/ $ @
+_/ $ @
+ $$ @
+ @@
+237 LATIN SMALL LETTER I WITH ACUTE
+ _/ $@
+ _/ $ @
+ $$ @
+ _/ $ @
+ _/ $ @
+_/ $ @
+ $$ @
+ @@
+238 LATIN SMALL LETTER I WITH CIRCUMFLEX
+ _/ $@
+ _/ _/ $ @
+ $$ @
+ _/ $ @
+ _/ $ @
+_/ $ @
+ $$ @
+ @@
+239 LATIN SMALL LETTER I WITH DIAERESIS
+ _/ _/ $@
+ $$ @
+ _/ $ @
+ _/ $ @
+ _/ $ @
+_/ $ @
+ $$ @
+ @@
+240 LATIN SMALL LETTER ETH
+ _/ _/ $@
+ _/ $ @
+ _/ _/ $@
+ _/_/_/ $ @
+_/ _/ $ @
+ _/_/ $ @
+ $$ @
+ @@
+241 LATIN SMALL LETTER N WITH TILDE
+ _/ _/ $@
+ _/ _/ $ @
+ $$ @
+ _/_/_/ $ @
+ _/ _/ $ @
+_/ _/ $ @
+ $$ @
+ @@
+242 LATIN SMALL LETTER O WITH GRAVE
+ _/ $@
+ _/ $ @
+ $$ @
+ _/_/ $ @
+_/ _/ $ @
+ _/_/ $ @
+ $$ @
+ @@
+243 LATIN SMALL LETTER O WITH ACUTE
+ _/ $@
+ _/ $ @
+ $$ @
+ _/_/ $ @
+_/ _/ $ @
+ _/_/ $ @
+ $$ @
+ @@
+244 LATIN SMALL LETTER O WITH CIRCUMFLEX
+ _/_/ $@
+ _/ _/ $ @
+ $$ @
+ _/_/ $ @
+_/ _/ $ @
+ _/_/ $ @
+ $$ @
+ @@
+245 LATIN SMALL LETTER O WITH TILDE
+ _/_/_/ $@
+ _/ _/ $ @
+ $$ @
+ _/_/ $ @
+_/ _/ $ @
+ _/_/ $ @
+ $$ @
+ @@
+246 LATIN SMALL LETTER O WITH DIAERESIS
+ _/ _/ $@
+ $$ @
+ _/_/ $ @
+ _/ _/ $ @
+_/ _/ $ @
+ _/_/ $ @
+ $$ @
+ @@
+247 DIVISION SIGN
+ $$ @
+ _/ $ @
+ $$@
+_/_/_/_/_/ $ @
+ $$ @
+ _/ $ @
+ $$ @
+ @@
+248 LATIN SMALL LETTER O WITH STROKE
+ @
+ $$@
+ _/_/_/ $ @
+ _/ _/_/ $ @
+ _/_/ _/ $ @
+_/_/_/ $ @
+ $$ @
+ @@
+249 LATIN SMALL LETTER U WITH GRAVE
+ _/ $ @
+ _/ $ @
+ $$@
+ _/ _/ $ @
+_/ _/ $ @
+ _/_/_/ $ @
+ $$ @
+ @@
+250 LATIN SMALL LETTER U WITH ACUTE
+ _/ $@
+ _/ $ @
+ $$ @
+ _/ _/ $ @
+_/ _/ $ @
+ _/_/_/ $ @
+ $$ @
+ @@
+251 LATIN SMALL LETTER U WITH CIRCUMFLEX
+ _/_/ $@
+ _/ _/ $ @
+ $$ @
+ _/ _/ $ @
+_/ _/ $ @
+ _/_/_/ $ @
+ $$ @
+ @@
+252 LATIN SMALL LETTER U WITH DIAERESIS
+ _/ _/ $@
+ $$ @
+ _/ _/ $ @
+ _/ _/ $ @
+_/ _/ $ @
+ _/_/_/ $ @
+ $$ @
+ @@
+253 LATIN SMALL LETTER Y WITH ACUTE
+ _/ $@
+ _/ $ @
+ $$@
+ _/ _/ $ @
+ _/ _/ $ @
+ _/_/_/ $ @
+ _/ $ @
+_/_/ $ @@
+254 LATIN SMALL LETTER THORN
+ $$ @
+ _/ $ @
+ _/_/_/ $@
+ _/ _/ $ @
+ _/ _/ $ @
+ _/_/_/ $ @
+ _/ $ @
+_/ $ @@
+255 LATIN SMALL LETTER Y WITH DIAERESIS
+ _/ _/ $@
+ $$ @
+ _/ _/ $ @
+ _/ _/ $ @
+ _/ _/ $ @
+ _/_/_/ $ @
+ _/ $ @
+_/_/ $ @@
diff --git a/externals/figlet/fonts/mini.flf b/externals/figlet/fonts/mini.flf
new file mode 100644
index 000000000..3b72606ca
--- /dev/null
+++ b/externals/figlet/fonts/mini.flf
@@ -0,0 +1,899 @@
+flf2a$ 4 3 10 0 10 0 1920 96
+Mini by Glenn Chappell 4/93
+Includes ISO Latin-1
+figlet release 2.1 -- 12 Aug 1994
+Permission is hereby given to modify this font, as long as the
+modifier's name is placed on a comment line.
+
+Modified by Paul Burton <solution@earthlink.net> 12/96 to include new parameter
+supported by FIGlet and FIGWin. May also be slightly modified for better use
+of new full-width/kern/smush alternatives, but default output is NOT changed.
+
+$$@
+$$@
+$$@
+$$@@
+ @
+ |$@
+ o$@
+ @@
+ @
+ ||$@
+ @
+ @@
+ @
+ -|-|-$@
+ -|-|-$@
+ @@
+ _$@
+ (|$ @
+ _|)$@
+ @@
+ @
+ O/$@
+ /O$@
+ @@
+ @
+ ()$ @
+ (_X$@
+ @@
+ @
+ /$@
+ @
+ @@
+ @
+ /$@
+ |$ @
+ \$@@
+ @
+ \$ @
+ |$@
+ /$ @@
+ @
+ \|/$@
+ /|\$@
+ @@
+ @
+ _|_$@
+ |$ @
+ @@
+ @
+ @
+ o$@
+ /$@@
+ @
+ __$@
+ @
+ @@
+ @
+ @
+ o$@
+ @@
+ @
+ /$@
+ /$ @
+ @@
+ _$ @
+ / \$@
+ \_/$@
+ @@
+ @
+ /|$@
+ |$@
+ @@
+ _$ @
+ )$@
+ /_$@
+ @@
+ _$ @
+ _)$@
+ _)$@
+ @@
+ @
+ |_|_$@
+ |$ @
+ @@
+ _$ @
+ |_$ @
+ _)$@
+ @@
+ _$ @
+ |_$ @
+ |_)$@
+ @@
+ __$@
+ /$@
+ /$ @
+ @@
+ _$ @
+ (_)$@
+ (_)$@
+ @@
+ _$ @
+ (_|$@
+ |$@
+ @@
+ @
+ o$@
+ o$@
+ @@
+ @
+ o$@
+ o$@
+ /$@@
+ @
+ /$@
+ \$@
+ @@
+ @
+ --$@
+ --$@
+ @@
+ @
+ \$@
+ /$@
+ @@
+ _$ @
+ )$@
+ o$ @
+ @@
+ __$ @
+ / \$@
+ | (|/$@
+ \__$ @@
+ @
+ /\$ @
+ /--\$@
+ @@
+ _$ @
+ |_)$@
+ |_)$@
+ @@
+ _$@
+ /$ @
+ \_$@
+ @@
+ _$ @
+ | \$@
+ |_/$@
+ @@
+ _$@
+ |_$@
+ |_$@
+ @@
+ _$@
+ |_$@
+ |$ @
+ @@
+ __$@
+ /__$@
+ \_|$@
+ @@
+ @
+ |_|$@
+ | |$@
+ @@
+ ___$@
+ |$ @
+ _|_$@
+ @@
+ @
+ |$@
+ \_|$@
+ @@
+ @
+ |/$@
+ |\$@
+ @@
+ @
+ |$ @
+ |_$@
+ @@
+ @
+ |\/|$@
+ | |$@
+ @@
+ @
+ |\ |$@
+ | \|$@
+ @@
+ _$ @
+ / \$@
+ \_/$@
+ @@
+ _$ @
+ |_)$@
+ |$ @
+ @@
+ _$ @
+ / \$@
+ \_X$@
+ @@
+ _$ @
+ |_)$@
+ | \$@
+ @@
+ __$@
+ (_$ @
+ __)$@
+ @@
+ ___$@
+ |$ @
+ |$ @
+ @@
+ @
+ | |$@
+ |_|$@
+ @@
+ @
+ \ /$@
+ \/$ @
+ @@
+ @
+ \ /$@
+ \/\/$ @
+ @@
+ @
+ \/$@
+ /\$@
+ @@
+ @
+ \_/$@
+ |$ @
+ @@
+ __$@
+ /$@
+ /_$@
+ @@
+ _$@
+ |$ @
+ |_$@
+ @@
+ @
+ \$ @
+ \$@
+ @@
+ _$ @
+ |$@
+ _|$@
+ @@
+ /\$@
+ @
+ @
+ @@
+ @
+ @
+ @
+ __$@@
+ @
+ \$@
+ @
+ @@
+ @
+ _.$@
+ (_|$@
+ @@
+ @
+ |_$ @
+ |_)$@
+ @@
+ @
+ _$@
+ (_$@
+ @@
+ @
+ _|$@
+ (_|$@
+ @@
+ @
+ _$ @
+ (/_$@
+ @@
+ _$@
+ _|_$@
+ |$ @
+ @@
+ @
+ _$ @
+ (_|$@
+ _|$@@
+ @
+ |_$ @
+ | |$@
+ @@
+ @
+ o$@
+ |$@
+ @@
+ @
+ o$@
+ |$@
+ _|$@@
+ @
+ |$ @
+ |<$@
+ @@
+ @
+ |$@
+ |$@
+ @@
+ @
+ ._ _$ @
+ | | |$@
+ @@
+ @
+ ._$ @
+ | |$@
+ @@
+ @
+ _$ @
+ (_)$@
+ @@
+ @
+ ._$ @
+ |_)$@
+ |$ @@
+ @
+ _.$@
+ (_|$@
+ |$@@
+ @
+ ._$@
+ |$ @
+ @@
+ @
+ _$@
+ _>$@
+ @@
+ @
+ _|_$@
+ |_$@
+ @@
+ @
+ @
+ |_|$@
+ @@
+ @
+ @
+ \/$@
+ @@
+ @
+ @
+ \/\/$@
+ @@
+ @
+ @
+ ><$@
+ @@
+ @
+ @
+ \/$@
+ /$ @@
+ @
+ _$ @
+ /_$@
+ @@
+ ,-$@
+ _|$ @
+ |$ @
+ `-$@@
+ |$@
+ |$@
+ |$@
+ |$@@
+ -.$ @
+ |_$@
+ |$ @
+ -'$ @@
+ /\/$@
+ @
+ @
+ @@
+ o o$@
+ /\$ @
+ /--\$@
+ @@
+ o_o$@
+ / \$@
+ \_/$@
+ @@
+ o o$@
+ | |$@
+ |_|$@
+ @@
+ o o$@
+ _.$@
+ (_|$@
+ @@
+ o o$@
+ _$ @
+ (_)$@
+ @@
+ o o$@
+ @
+ |_|$@
+ @@
+ _$ @
+ | )$@
+ | )$@
+ |$ @@
+160 NO-BREAK SPACE
+ $$@
+ $$@
+ $$@
+ $$@@
+161 INVERTED EXCLAMATION MARK
+ @
+ o$@
+ |$@
+ @@
+162 CENT SIGN
+ @
+ |_$@
+ (__$@
+ |$ @@
+163 POUND SIGN
+ _$ @
+ _/_`$ @
+ |___$@
+ @@
+164 CURRENCY SIGN
+ @
+ `o'$@
+ ' `$@
+ @@
+165 YEN SIGN
+ @
+ _\_/_$@
+ --|--$@
+ @@
+166 BROKEN BAR
+ |$@
+ |$@
+ |$@
+ |$@@
+167 SECTION SIGN
+ _$@
+ ($ @
+ ()$@
+ _)$@@
+168 DIAERESIS
+ o o$@
+ @
+ @
+ @@
+169 COPYRIGHT SIGN
+ _$ @
+ |C|$@
+ `-'$@
+ @@
+170 FEMININE ORDINAL INDICATOR
+ _.$@
+ (_|$@
+ ---$@
+ @@
+171 LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+ @
+ //$@
+ \\$@
+ @@
+172 NOT SIGN
+ @
+ __$ @
+ |$@
+ @@
+173 SOFT HYPHEN
+ @
+ _$@
+ @
+ @@
+174 REGISTERED SIGN
+ _$ @
+ |R|$@
+ `-'$@
+ @@
+175 MACRON
+ __$@
+ @
+ @
+ @@
+176 DEGREE SIGN
+ O$@
+ @
+ @
+ @@
+177 PLUS-MINUS SIGN
+ @
+ _|_$@
+ _|_$@
+ @@
+178 SUPERSCRIPT TWO
+ 2$@
+ @
+ @
+ @@
+179 SUPERSCRIPT THREE
+ 3$@
+ @
+ @
+ @@
+180 ACUTE ACCENT
+ /$@
+ @
+ @
+ @@
+181 MICRO SIGN
+ @
+ @
+ |_|$@
+ |$ @@
+182 PILCROW SIGN
+ __$ @
+ (| |$@
+ | |$@
+ @@
+183 MIDDLE DOT
+ @
+ o$@
+ @
+ @@
+184 CEDILLA
+ @
+ @
+ @
+ S$@@
+185 SUPERSCRIPT ONE
+ 1$@
+ @
+ @
+ @@
+186 MASCULINE ORDINAL INDICATOR
+ _$ @
+ (_)$@
+ ---$@
+ @@
+187 RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+ @
+ \\$@
+ //$@
+ @@
+188 VULGAR FRACTION ONE QUARTER
+ @
+ 1/$@
+ /4$@
+ @@
+189 VULGAR FRACTION ONE HALF
+ @
+ 1/$@
+ /2$@
+ @@
+190 VULGAR FRACTION THREE QUARTERS
+ @
+ 3/$@
+ /4$@
+ @@
+191 INVERTED QUESTION MARK
+ @
+ o$@
+ (_$@
+ @@
+192 LATIN CAPITAL LETTER A WITH GRAVE
+ \$ @
+ /\$ @
+ /--\$@
+ @@
+193 LATIN CAPITAL LETTER A WITH ACUTE
+ /$ @
+ /\$ @
+ /--\$@
+ @@
+194 LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+ /\$ @
+ /\$ @
+ /--\$@
+ @@
+195 LATIN CAPITAL LETTER A WITH TILDE
+ /\/$@
+ /\$ @
+ /--\$@
+ @@
+196 LATIN CAPITAL LETTER A WITH DIAERESIS
+ o o$@
+ /\$ @
+ /--\$@
+ @@
+197 LATIN CAPITAL LETTER A WITH RING ABOVE
+ O$ @
+ / \$ @
+ /---\$@
+ @@
+198 LATIN CAPITAL LETTER AE
+ _$@
+ /|_$@
+ /-|_$@
+ @@
+199 LATIN CAPITAL LETTER C WITH CEDILLA
+ _$@
+ /$ @
+ \_$@
+ S$@@
+200 LATIN CAPITAL LETTER E WITH GRAVE
+ \_$@
+ |_$@
+ |_$@
+ @@
+201 LATIN CAPITAL LETTER E WITH ACUTE
+ _/$@
+ |_$ @
+ |_$ @
+ @@
+202 LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+ /\$@
+ |_$ @
+ |_$ @
+ @@
+203 LATIN CAPITAL LETTER E WITH DIAERESIS
+ o_o$@
+ |_$ @
+ |_$ @
+ @@
+204 LATIN CAPITAL LETTER I WITH GRAVE
+ \__$@
+ |$ @
+ _|_$@
+ @@
+205 LATIN CAPITAL LETTER I WITH ACUTE
+ __/$@
+ |$ @
+ _|_$@
+ @@
+206 LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+ /\$@
+ ___$@
+ _|_$@
+ @@
+207 LATIN CAPITAL LETTER I WITH DIAERESIS
+ o_o$@
+ |$ @
+ _|_$@
+ @@
+208 LATIN CAPITAL LETTER ETH
+ _$ @
+ _|_\$@
+ |_/$@
+ @@
+209 LATIN CAPITAL LETTER N WITH TILDE
+ /\/$@
+ |\ |$@
+ | \|$@
+ @@
+210 LATIN CAPITAL LETTER O WITH GRAVE
+ \$ @
+ / \$@
+ \_/$@
+ @@
+211 LATIN CAPITAL LETTER O WITH ACUTE
+ /$ @
+ / \$@
+ \_/$@
+ @@
+212 LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+ /\$@
+ / \$@
+ \_/$@
+ @@
+213 LATIN CAPITAL LETTER O WITH TILDE
+ /\/$@
+ / \$@
+ \_/$@
+ @@
+214 LATIN CAPITAL LETTER O WITH DIAERESIS
+ o_o$@
+ / \$@
+ \_/$@
+ @@
+215 MULTIPLICATION SIGN
+ @
+ @
+ X$@
+ @@
+216 LATIN CAPITAL LETTER O WITH STROKE
+ __$ @
+ / /\$@
+ \/_/$@
+ @@
+217 LATIN CAPITAL LETTER U WITH GRAVE
+ \$ @
+ | |$@
+ |_|$@
+ @@
+218 LATIN CAPITAL LETTER U WITH ACUTE
+ /$ @
+ | |$@
+ |_|$@
+ @@
+219 LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+ /\$@
+ | |$@
+ |_|$@
+ @@
+220 LATIN CAPITAL LETTER U WITH DIAERESIS
+ o o$@
+ | |$@
+ |_|$@
+ @@
+221 LATIN CAPITAL LETTER Y WITH ACUTE
+ /$ @
+ \_/$@
+ |$ @
+ @@
+222 LATIN CAPITAL LETTER THORN
+ |_$ @
+ |_)$@
+ |$ @
+ @@
+223 LATIN SMALL LETTER SHARP S
+ _$ @
+ | )$@
+ | )$@
+ |$ @@
+224 LATIN SMALL LETTER A WITH GRAVE
+ \$ @
+ _.$@
+ (_|$@
+ @@
+225 LATIN SMALL LETTER A WITH ACUTE
+ /$ @
+ _.$@
+ (_|$@
+ @@
+226 LATIN SMALL LETTER A WITH CIRCUMFLEX
+ /\$@
+ _.$@
+ (_|$@
+ @@
+227 LATIN SMALL LETTER A WITH TILDE
+ /\/$@
+ _.$@
+ (_|$@
+ @@
+228 LATIN SMALL LETTER A WITH DIAERESIS
+ o o$@
+ _.$@
+ (_|$@
+ @@
+229 LATIN SMALL LETTER A WITH RING ABOVE
+ O$ @
+ _.$@
+ (_|$@
+ @@
+230 LATIN SMALL LETTER AE
+ @
+ ___$ @
+ (_|/_$@
+ @@
+231 LATIN SMALL LETTER C WITH CEDILLA
+ @
+ _$@
+ (_$@
+ S$@@
+232 LATIN SMALL LETTER E WITH GRAVE
+ \$ @
+ _$ @
+ (/_$@
+ @@
+233 LATIN SMALL LETTER E WITH ACUTE
+ /$ @
+ _$ @
+ (/_$@
+ @@
+234 LATIN SMALL LETTER E WITH CIRCUMFLEX
+ /\$@
+ _$ @
+ (/_$@
+ @@
+235 LATIN SMALL LETTER E WITH DIAERESIS
+ o o$@
+ _$ @
+ (/_$@
+ @@
+236 LATIN SMALL LETTER I WITH GRAVE
+ \$@
+ @
+ |$@
+ @@
+237 LATIN SMALL LETTER I WITH ACUTE
+ /$@
+ @
+ |$@
+ @@
+238 LATIN SMALL LETTER I WITH CIRCUMFLEX
+ /\$@
+ @
+ |$ @
+ @@
+239 LATIN SMALL LETTER I WITH DIAERESIS
+ o o$@
+ @
+ |$ @
+ @@
+240 LATIN SMALL LETTER ETH
+ X$ @
+ \$ @
+ (_|$@
+ @@
+241 LATIN SMALL LETTER N WITH TILDE
+ /\/$@
+ ._$ @
+ | |$@
+ @@
+242 LATIN SMALL LETTER O WITH GRAVE
+ \$ @
+ _$ @
+ (_)$@
+ @@
+243 LATIN SMALL LETTER O WITH ACUTE
+ /$ @
+ _$ @
+ (_)$@
+ @@
+244 LATIN SMALL LETTER O WITH CIRCUMFLEX
+ /\$@
+ _$ @
+ (_)$@
+ @@
+245 LATIN SMALL LETTER O WITH TILDE
+ /\/$@
+ _$ @
+ (_)$@
+ @@
+246 LATIN SMALL LETTER O WITH DIAERESIS
+ o o$@
+ _$ @
+ (_)$@
+ @@
+247 DIVISION SIGN
+ o$ @
+ ---$@
+ o$ @
+ @@
+248 LATIN SMALL LETTER O WITH STROKE
+ @
+ _$ @
+ (/)$@
+ @@
+249 LATIN SMALL LETTER U WITH GRAVE
+ \$ @
+ @
+ |_|$@
+ @@
+250 LATIN SMALL LETTER U WITH ACUTE
+ /$ @
+ @
+ |_|$@
+ @@
+251 LATIN SMALL LETTER U WITH CIRCUMFLEX
+ /\$@
+ @
+ |_|$@
+ @@
+252 LATIN SMALL LETTER U WITH DIAERESIS
+ o o$@
+ @
+ |_|$@
+ @@
+253 LATIN SMALL LETTER Y WITH ACUTE
+ /$@
+ @
+ \/$@
+ /$ @@
+254 LATIN SMALL LETTER THORN
+ @
+ |_$ @
+ |_)$@
+ |$ @@
+255 LATIN SMALL LETTER Y WITH DIAERESIS
+ oo$@
+ @
+ \/$@
+ /$ @@
diff --git a/externals/figlet/fonts/mnemonic.flf b/externals/figlet/fonts/mnemonic.flf
new file mode 100644
index 000000000..03e4baa78
--- /dev/null
+++ b/externals/figlet/fonts/mnemonic.flf
@@ -0,0 +1,3702 @@
+flf2a$ 1 1 12 -1 5 0 0 1797
+mnemonic - a FIGfont by John Cowan <cowan@@ccil.org>
+This font uses the mnemonics of RFC1345
+(http://ds.internic.net/rfc/rfc1345.txt) to implement a really large character
+set rather crudely, but reversibly. Two-letter mnemonics
+are prefixed by &; larger mnemonics are prefixed by &_ and followed by _.
+&SP@@
+!@@
+"@@
+&Nb@@
+&DO@@
+%@@
+&@@
+'@@
+(@@
+)@@
+*@@
++@@
+,@@
+-@@
+.@@
+/@@
+0@@
+1@@
+2@@
+3@@
+4@@
+5@@
+6@@
+7@@
+8@@
+9@@
+:@@
+;@@
+<@@
+=@@
+>@@
+?@@
+&At@@
+A@@
+B@@
+C@@
+D@@
+E@@
+F@@
+G@@
+H@@
+I@@
+J@@
+K@@
+L@@
+M@@
+N@@
+O@@
+P@@
+Q@@
+R@@
+S@@
+T@@
+U@@
+V@@
+W@@
+X@@
+Y@@
+Z@@
+&<(@@
+&//@@
+&)>@@
+&'>@@
+_@@
+&'!@@
+a@@
+b@@
+c@@
+d@@
+e@@
+f@@
+g@@
+h@@
+i@@
+j@@
+k@@
+l@@
+m@@
+n@@
+o@@
+p@@
+q@@
+r@@
+s@@
+t@@
+u@@
+v@@
+w@@
+x@@
+y@@
+z@@
+&(!@@
+&!!@@
+&!)@@
+&'?@@
+&A:@@
+&O:@@
+&U:@@
+&a:@@
+&o:@@
+&u:@@
+&ss@@
+0x0001 START OF HEADING (SOH)
+&SH@@
+0x0002 START OF TEXT (STX)
+&SX@@
+0x0003 END OF TEXT (ETX)
+&EX@@
+0x0004 END OF TRANSMISSION (EOT)
+&ET@@
+0x0005 ENQUIRY (ENQ)
+&EQ@@
+0x0006 ACKNOWLEDGE (ACK)
+&AK@@
+0x0007 BELL (BEL)
+&BL@@
+0x0008 BACKSPACE (BS)
+&BS@@
+0x0009 CHARACTER TABULATION (HT)
+&HT@@
+0x000a LINE FEED (LF)
+&LF@@
+0x000b LINE TABULATION (VT)
+&VT@@
+0x000c FORM FEED (FF)
+&FF@@
+0x000d CARRIAGE RETURN (CR)
+&CR@@
+0x000e SHIFT OUT (SO)
+&SO@@
+0x000f SHIFT IN (SI)
+&SI@@
+0x0010 DATALINK ESCAPE (DLE)
+&DL@@
+0x0011 DEVICE CONTROL ONE (DC1)
+&D1@@
+0x0012 DEVICE CONTROL TWO (DC2)
+&D2@@
+0x0013 DEVICE CONTROL THREE (DC3)
+&D3@@
+0x0014 DEVICE CONTROL FOUR (DC4)
+&D4@@
+0x0015 NEGATIVE ACKNOWLEDGE (NAK)
+&NK@@
+0x0016 SYNCRONOUS IDLE (SYN)
+&SY@@
+0x0017 END OF TRANSMISSION BLOCK (ETB)
+&EB@@
+0x0018 CANCEL (CAN)
+&CN@@
+0x0019 END OF MEDIUM (EM)
+&EM@@
+0x001a SUBSTITUTE (SUB)
+&SB@@
+0x001b ESCAPE (ESC)
+&EC@@
+0x001c FILE SEPARATOR (IS4)
+&FS@@
+0x001d GROUP SEPARATOR (IS3)
+&GS@@
+0x001e RECORD SEPARATOR (IS2)
+&RS@@
+0x001f UNIT SEPARATOR (IS1)
+&US@@
+0x007f DELETE (DEL)
+&DT@@
+0x0080 PADDING CHARACTER (PAD)
+&PA@@
+0x0081 HIGH OCTET PRESET (HOP)
+&HO@@
+0x0082 BREAK PERMITTED HERE (BPH)
+&BH@@
+0x0083 NO BREAK HERE (NBH)
+&NH@@
+0x0084 INDEX (IND)
+&IN@@
+0x0085 NEXT LINE (NEL)
+&NL@@
+0x0086 START OF SELECTED AREA (SSA)
+&SA@@
+0x0087 END OF SELECTED AREA (ESA)
+&ES@@
+0x0088 CHARACTER TABULATION SET (HTS)
+&HS@@
+0x0089 CHARACTER TABULATION WITH JUSTIFICATION (HTJ)
+&HJ@@
+0x008a LINE TABULATION SET (VTS)
+&VS@@
+0x008b PARTIAL LINE FORWARD (PLD)
+&PD@@
+0x008c PARTIAL LINE BACKWARD (PLU)
+&PU@@
+0x008d REVERSE LINE FEED (RI)
+&RI@@
+0x008e SINGLE-SHIFT TWO (SS2)
+&S2@@
+0x008f SINGLE-SHIFT THREE (SS3)
+&S3@@
+0x0090 DEVICE CONTROL STRING (DCS)
+&DC@@
+0x0091 PRIVATE USE ONE (PU1)
+&P1@@
+0x0092 PRIVATE USE TWO (PU2)
+&P2@@
+0x0093 SET TRANSMIT STATE (STS)
+&TS@@
+0x0094 CANCEL CHARACTER (CCH)
+&CC@@
+0x0095 MESSAGE WAITING (MW)
+&MW@@
+0x0096 START OF GUARDED AREA (SPA)
+&SG@@
+0x0097 END OF GUARDED AREA (EPA)
+&EG@@
+0x0098 START OF STRING (SOS)
+&SS@@
+0x0099 SINGLE GRAPHIC CHARACTER INTRODUCER (SGCI)
+&GC@@
+0x009a SINGLE CHARACTER INTRODUCER (SCI)
+&SC@@
+0x009b CONTROL SEQUENCE INTRODUCER (CSI)
+&CI@@
+0x009c STRING TERMINATOR (ST)
+&ST@@
+0x009d OPERATING SYSTEM COMMAND (OSC)
+&OC@@
+0x009e PRIVACY MESSAGE (PM)
+&PM@@
+0x009f APPLICATION PROGRAM COMMAND (APC)
+&AC@@
+0x00a0 NO-BREAK SPACE
+&NS@@
+0x00a1 INVERTED EXCLAMATION MARK
+&!I@@
+0x00a2 CENT SIGN
+&Ct@@
+0x00a3 POUND SIGN
+&Pd@@
+0x00a4 CURRENCY SIGN
+&Cu@@
+0x00a5 YEN SIGN
+&Ye@@
+0x00a6 BROKEN BAR
+&BB@@
+0x00a7 SECTION SIGN
+&SE@@
+0x00a8 DIAERESIS
+&':@@
+0x00a9 COPYRIGHT SIGN
+&Co@@
+0x00aa FEMININE ORDINAL INDICATOR
+&-a@@
+0x00ab LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+&<<@@
+0x00ac NOT SIGN
+&NO@@
+0x00ad SOFT HYPHEN
+&--@@
+0x00ae REGISTERED SIGN
+&Rg@@
+0x00af MACRON
+&'m@@
+0x00b0 DEGREE SIGN
+&DG@@
+0x00b1 PLUS-MINUS SIGN
+&+-@@
+0x00b2 SUPERSCRIPT TWO
+&2S@@
+0x00b3 SUPERSCRIPT THREE
+&3S@@
+0x00b4 ACUTE ACCENT
+&''@@
+0x00b5 MICRO SIGN
+&My@@
+0x00b6 PILCROW SIGN
+&PI@@
+0x00b7 MIDDLE DOT
+&.M@@
+0x00b8 CEDILLA
+&',@@
+0x00b9 SUPERSCRIPT ONE
+&1S@@
+0x00ba MASCULINE ORDINAL INDICATOR
+&-o@@
+0x00bb RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+&>>@@
+0x00bc VULGAR FRACTION ONE QUARTER
+&14@@
+0x00bd VULGAR FRACTION ONE HALF
+&12@@
+0x00be VULGAR FRACTION THREE QUARTERS
+&34@@
+0x00bf INVERTED QUESTION MARK
+&?I@@
+0x00c0 LATIN CAPITAL LETTER A WITH GRAVE
+&A!@@
+0x00c1 LATIN CAPITAL LETTER A WITH ACUTE
+&A'@@
+0x00c2 LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+&A>@@
+0x00c3 LATIN CAPITAL LETTER A WITH TILDE
+&A?@@
+0x00c4 LATIN CAPITAL LETTER A WITH DIAERESIS
+&A:@@
+0x00c5 LATIN CAPITAL LETTER A WITH RING ABOVE
+&AA@@
+0x00c6 LATIN CAPITAL LETTER AE
+&AE@@
+0x00c7 LATIN CAPITAL LETTER C WITH CEDILLA
+&C,@@
+0x00c8 LATIN CAPITAL LETTER E WITH GRAVE
+&E!@@
+0x00c9 LATIN CAPITAL LETTER E WITH ACUTE
+&E'@@
+0x00ca LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+&E>@@
+0x00cb LATIN CAPITAL LETTER E WITH DIAERESIS
+&E:@@
+0x00cc LATIN CAPITAL LETTER I WITH GRAVE
+&I!@@
+0x00cd LATIN CAPITAL LETTER I WITH ACUTE
+&I'@@
+0x00ce LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+&I>@@
+0x00cf LATIN CAPITAL LETTER I WITH DIAERESIS
+&I:@@
+0x00d0 LATIN CAPITAL LETTER ETH (Icelandic)
+&D-@@
+0x00d1 LATIN CAPITAL LETTER N WITH TILDE
+&N?@@
+0x00d2 LATIN CAPITAL LETTER O WITH GRAVE
+&O!@@
+0x00d3 LATIN CAPITAL LETTER O WITH ACUTE
+&O'@@
+0x00d4 LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+&O>@@
+0x00d5 LATIN CAPITAL LETTER O WITH TILDE
+&O?@@
+0x00d6 LATIN CAPITAL LETTER O WITH DIAERESIS
+&O:@@
+0x00d7 MULTIPLICATION SIGN
+&*X@@
+0x00d8 LATIN CAPITAL LETTER O WITH STROKE
+&O/@@
+0x00d9 LATIN CAPITAL LETTER U WITH GRAVE
+&U!@@
+0x00da LATIN CAPITAL LETTER U WITH ACUTE
+&U'@@
+0x00db LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+&U>@@
+0x00dc LATIN CAPITAL LETTER U WITH DIAERESIS
+&U:@@
+0x00dd LATIN CAPITAL LETTER Y WITH ACUTE
+&Y'@@
+0x00de LATIN CAPITAL LETTER THORN (Icelandic)
+&TH@@
+0x00df LATIN SMALL LETTER SHARP S (German)
+&ss@@
+0x00e0 LATIN SMALL LETTER A WITH GRAVE
+&a!@@
+0x00e1 LATIN SMALL LETTER A WITH ACUTE
+&a'@@
+0x00e2 LATIN SMALL LETTER A WITH CIRCUMFLEX
+&a>@@
+0x00e3 LATIN SMALL LETTER A WITH TILDE
+&a?@@
+0x00e4 LATIN SMALL LETTER A WITH DIAERESIS
+&a:@@
+0x00e5 LATIN SMALL LETTER A WITH RING ABOVE
+&aa@@
+0x00e6 LATIN SMALL LETTER AE
+&ae@@
+0x00e7 LATIN SMALL LETTER C WITH CEDILLA
+&c,@@
+0x00e8 LATIN SMALL LETTER E WITH GRAVE
+&e!@@
+0x00e9 LATIN SMALL LETTER E WITH ACUTE
+&e'@@
+0x00ea LATIN SMALL LETTER E WITH CIRCUMFLEX
+&e>@@
+0x00eb LATIN SMALL LETTER E WITH DIAERESIS
+&e:@@
+0x00ec LATIN SMALL LETTER I WITH GRAVE
+&i!@@
+0x00ed LATIN SMALL LETTER I WITH ACUTE
+&i'@@
+0x00ee LATIN SMALL LETTER I WITH CIRCUMFLEX
+&i>@@
+0x00ef LATIN SMALL LETTER I WITH DIAERESIS
+&i:@@
+0x00f0 LATIN SMALL LETTER ETH (Icelandic)
+&d-@@
+0x00f1 LATIN SMALL LETTER N WITH TILDE
+&n?@@
+0x00f2 LATIN SMALL LETTER O WITH GRAVE
+&o!@@
+0x00f3 LATIN SMALL LETTER O WITH ACUTE
+&o'@@
+0x00f4 LATIN SMALL LETTER O WITH CIRCUMFLEX
+&o>@@
+0x00f5 LATIN SMALL LETTER O WITH TILDE
+&o?@@
+0x00f6 LATIN SMALL LETTER O WITH DIAERESIS
+&o:@@
+0x00f7 DIVISION SIGN
+&-:@@
+0x00f8 LATIN SMALL LETTER O WITH STROKE
+&o/@@
+0x00f9 LATIN SMALL LETTER U WITH GRAVE
+&u!@@
+0x00fa LATIN SMALL LETTER U WITH ACUTE
+&u'@@
+0x00fb LATIN SMALL LETTER U WITH CIRCUMFLEX
+&u>@@
+0x00fc LATIN SMALL LETTER U WITH DIAERESIS
+&u:@@
+0x00fd LATIN SMALL LETTER Y WITH ACUTE
+&y'@@
+0x00fe LATIN SMALL LETTER THORN (Icelandic)
+&th@@
+0x00ff LATIN SMALL LETTER Y WITH DIAERESIS
+&y:@@
+0x0100 LATIN CAPITAL LETTER A WITH MACRON
+&A-@@
+0x0101 LATIN SMALL LETTER A WITH MACRON
+&a-@@
+0x0102 LATIN CAPITAL LETTER A WITH BREVE
+&A(@@
+0x0103 LATIN SMALL LETTER A WITH BREVE
+&a(@@
+0x0104 LATIN CAPITAL LETTER A WITH OGONEK
+&A;@@
+0x0105 LATIN SMALL LETTER A WITH OGONEK
+&a;@@
+0x0106 LATIN CAPITAL LETTER C WITH ACUTE
+&C'@@
+0x0107 LATIN SMALL LETTER C WITH ACUTE
+&c'@@
+0x0108 LATIN CAPITAL LETTER C WITH CIRCUMFLEX
+&C>@@
+0x0109 LATIN SMALL LETTER C WITH CIRCUMFLEX
+&c>@@
+0x010a LATIN CAPITAL LETTER C WITH DOT ABOVE
+&C.@@
+0x010b LATIN SMALL LETTER C WITH DOT ABOVE
+&c.@@
+0x010c LATIN CAPITAL LETTER C WITH CARON
+&C<@@
+0x010d LATIN SMALL LETTER C WITH CARON
+&c<@@
+0x010e LATIN CAPITAL LETTER D WITH CARON
+&D<@@
+0x010f LATIN SMALL LETTER D WITH CARON
+&d<@@
+0x0110 LATIN CAPITAL LETTER D WITH STROKE
+&D/@@
+0x0111 LATIN SMALL LETTER D WITH STROKE
+&d/@@
+0x0112 LATIN CAPITAL LETTER E WITH MACRON
+&E-@@
+0x0113 LATIN SMALL LETTER E WITH MACRON
+&e-@@
+0x0114 LATIN CAPITAL LETTER E WITH BREVE
+&E(@@
+0x0115 LATIN SMALL LETTER E WITH BREVE
+&e(@@
+0x0116 LATIN CAPITAL LETTER E WITH DOT ABOVE
+&E.@@
+0x0117 LATIN SMALL LETTER E WITH DOT ABOVE
+&e.@@
+0x0118 LATIN CAPITAL LETTER E WITH OGONEK
+&E;@@
+0x0119 LATIN SMALL LETTER E WITH OGONEK
+&e;@@
+0x011a LATIN CAPITAL LETTER E WITH CARON
+&E<@@
+0x011b LATIN SMALL LETTER E WITH CARON
+&e<@@
+0x011c LATIN CAPITAL LETTER G WITH CIRCUMFLEX
+&G>@@
+0x011d LATIN SMALL LETTER G WITH CIRCUMFLEX
+&g>@@
+0x011e LATIN CAPITAL LETTER G WITH BREVE
+&G(@@
+0x011f LATIN SMALL LETTER G WITH BREVE
+&g(@@
+0x0120 LATIN CAPITAL LETTER G WITH DOT ABOVE
+&G.@@
+0x0121 LATIN SMALL LETTER G WITH DOT ABOVE
+&g.@@
+0x0122 LATIN CAPITAL LETTER G WITH CEDILLA
+&G,@@
+0x0123 LATIN SMALL LETTER G WITH CEDILLA
+&g,@@
+0x0124 LATIN CAPITAL LETTER H WITH CIRCUMFLEX
+&H>@@
+0x0125 LATIN SMALL LETTER H WITH CIRCUMFLEX
+&h>@@
+0x0126 LATIN CAPITAL LETTER H WITH STROKE
+&H/@@
+0x0127 LATIN SMALL LETTER H WITH STROKE
+&h/@@
+0x0128 LATIN CAPITAL LETTER I WITH TILDE
+&I?@@
+0x0129 LATIN SMALL LETTER I WITH TILDE
+&i?@@
+0x012a LATIN CAPITAL LETTER I WITH MACRON
+&I-@@
+0x012b LATIN SMALL LETTER I WITH MACRON
+&i-@@
+0x012c LATIN CAPITAL LETTER I WITH BREVE
+&I(@@
+0x012d LATIN SMALL LETTER I WITH BREVE
+&i(@@
+0x012e LATIN CAPITAL LETTER I WITH OGONEK
+&I;@@
+0x012f LATIN SMALL LETTER I WITH OGONEK
+&i;@@
+0x0130 LATIN CAPITAL LETTER I WITH DOT ABOVE
+&I.@@
+0x0131 LATIN SMALL LETTER I DOTLESS
+&i.@@
+0x0132 LATIN CAPITAL LIGATURE IJ
+&IJ@@
+0x0133 LATIN SMALL LIGATURE IJ
+&ij@@
+0x0134 LATIN CAPITAL LETTER J WITH CIRCUMFLEX
+&J>@@
+0x0135 LATIN SMALL LETTER J WITH CIRCUMFLEX
+&j>@@
+0x0136 LATIN CAPITAL LETTER K WITH CEDILLA
+&K,@@
+0x0137 LATIN SMALL LETTER K WITH CEDILLA
+&k,@@
+0x0138 LATIN SMALL LETTER KRA (Greenlandic)
+&kk@@
+0x0139 LATIN CAPITAL LETTER L WITH ACUTE
+&L'@@
+0x013a LATIN SMALL LETTER L WITH ACUTE
+&l'@@
+0x013b LATIN CAPITAL LETTER L WITH CEDILLA
+&L,@@
+0x013c LATIN SMALL LETTER L WITH CEDILLA
+&l,@@
+0x013d LATIN CAPITAL LETTER L WITH CARON
+&L<@@
+0x013e LATIN SMALL LETTER L WITH CARON
+&l<@@
+0x013f LATIN CAPITAL LETTER L WITH MIDDLE DOT
+&L.@@
+0x0140 LATIN SMALL LETTER L WITH MIDDLE DOT
+&l.@@
+0x0141 LATIN CAPITAL LETTER L WITH STROKE
+&L/@@
+0x0142 LATIN SMALL LETTER L WITH STROKE
+&l/@@
+0x0143 LATIN CAPITAL LETTER N WITH ACUTE
+&N'@@
+0x0144 LATIN SMALL LETTER N WITH ACUTE
+&n'@@
+0x0145 LATIN CAPITAL LETTER N WITH CEDILLA
+&N,@@
+0x0146 LATIN SMALL LETTER N WITH CEDILLA
+&n,@@
+0x0147 LATIN CAPITAL LETTER N WITH CARON
+&N<@@
+0x0148 LATIN SMALL LETTER N WITH CARON
+&n<@@
+0x0149 LATIN SMALL LETTER N PRECEDED BY APOSTROPHE
+&'n@@
+0x014a LATIN CAPITAL LETTER ENG (Lappish)
+&NG@@
+0x014b LATIN SMALL LETTER ENG (Lappish)
+&ng@@
+0x014c LATIN CAPITAL LETTER O WITH MACRON
+&O-@@
+0x014d LATIN SMALL LETTER O WITH MACRON
+&o-@@
+0x014e LATIN CAPITAL LETTER O WITH BREVE
+&O(@@
+0x014f LATIN SMALL LETTER O WITH BREVE
+&o(@@
+0x0150 LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
+&O"@@
+0x0151 LATIN SMALL LETTER O WITH DOUBLE ACUTE
+&o"@@
+0x0152 LATIN CAPITAL LIGATURE OE
+&OE@@
+0x0153 LATIN SMALL LIGATURE OE
+&oe@@
+0x0154 LATIN CAPITAL LETTER R WITH ACUTE
+&R'@@
+0x0155 LATIN SMALL LETTER R WITH ACUTE
+&r'@@
+0x0156 LATIN CAPITAL LETTER R WITH CEDILLA
+&R,@@
+0x0157 LATIN SMALL LETTER R WITH CEDILLA
+&r,@@
+0x0158 LATIN CAPITAL LETTER R WITH CARON
+&R<@@
+0x0159 LATIN SMALL LETTER R WITH CARON
+&r<@@
+0x015a LATIN CAPITAL LETTER S WITH ACUTE
+&S'@@
+0x015b LATIN SMALL LETTER S WITH ACUTE
+&s'@@
+0x015c LATIN CAPITAL LETTER S WITH CIRCUMFLEX
+&S>@@
+0x015d LATIN SMALL LETTER S WITH CIRCUMFLEX
+&s>@@
+0x015e LATIN CAPITAL LETTER S WITH CEDILLA
+&S,@@
+0x015f LATIN SMALL LETTER S WITH CEDILLA
+&s,@@
+0x0160 LATIN CAPITAL LETTER S WITH CARON
+&S<@@
+0x0161 LATIN SMALL LETTER S WITH CARON
+&s<@@
+0x0162 LATIN CAPITAL LETTER T WITH CEDILLA
+&T,@@
+0x0163 LATIN SMALL LETTER T WITH CEDILLA
+&t,@@
+0x0164 LATIN CAPITAL LETTER T WITH CARON
+&T<@@
+0x0165 LATIN SMALL LETTER T WITH CARON
+&t<@@
+0x0166 LATIN CAPITAL LETTER T WITH STROKE
+&T/@@
+0x0167 LATIN SMALL LETTER T WITH STROKE
+&t/@@
+0x0168 LATIN CAPITAL LETTER U WITH TILDE
+&U?@@
+0x0169 LATIN SMALL LETTER U WITH TILDE
+&u?@@
+0x016a LATIN CAPITAL LETTER U WITH MACRON
+&U-@@
+0x016b LATIN SMALL LETTER U WITH MACRON
+&u-@@
+0x016c LATIN CAPITAL LETTER U WITH BREVE
+&U(@@
+0x016d LATIN SMALL LETTER U WITH BREVE
+&u(@@
+0x016e LATIN CAPITAL LETTER U WITH RING ABOVE
+&U0@@
+0x016f LATIN SMALL LETTER U WITH RING ABOVE
+&u0@@
+0x0170 LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
+&U"@@
+0x0171 LATIN SMALL LETTER U WITH DOUBLE ACUTE
+&u"@@
+0x0172 LATIN CAPITAL LETTER U WITH OGONEK
+&U;@@
+0x0173 LATIN SMALL LETTER U WITH OGONEK
+&u;@@
+0x0174 LATIN CAPITAL LETTER W WITH CIRCUMFLEX
+&W>@@
+0x0175 LATIN SMALL LETTER W WITH CIRCUMFLEX
+&w>@@
+0x0176 LATIN CAPITAL LETTER Y WITH CIRCUMFLEX
+&Y>@@
+0x0177 LATIN SMALL LETTER Y WITH CIRCUMFLEX
+&y>@@
+0x0178 LATIN CAPITAL LETTER Y WITH DIAERESIS
+&Y:@@
+0x0179 LATIN CAPITAL LETTER Z WITH ACUTE
+&Z'@@
+0x017a LATIN SMALL LETTER Z WITH ACUTE
+&z'@@
+0x017b LATIN CAPITAL LETTER Z WITH DOT ABOVE
+&Z.@@
+0x017c LATIN SMALL LETTER Z WITH DOT ABOVE
+&z.@@
+0x017d LATIN CAPITAL LETTER Z WITH CARON
+&Z<@@
+0x017e LATIN SMALL LETTER Z WITH CARON
+&z<@@
+0x01a0 LATIN CAPITAL LETTER O WITH HORN
+&O9@@
+0x01a1 LATIN SMALL LETTER O WITH HORN
+&o9@@
+0x01a2 LATIN CAPITAL LETTER OI
+&OI@@
+0x01a3 LATIN SMALL LETTER OI
+&oi@@
+0x01a6 LATIN LETTER YR
+&yr@@
+0x01af LATIN CAPITAL LETTER U WITH HORN
+&U9@@
+0x01b0 LATIN SMALL LETTER U WITH HORN
+&u9@@
+0x01b5 LATIN CAPITAL LETTER Z WITH STROKE
+&Z/@@
+0x01b6 LATIN SMALL LETTER Z WITH STROKE
+&z/@@
+0x01b7 LATIN CAPITAL LETTER EZH
+&ED@@
+0x01cd LATIN CAPITAL LETTER A WITH CARON
+&A<@@
+0x01ce LATIN SMALL LETTER A WITH CARON
+&a<@@
+0x01cf LATIN CAPITAL LETTER I WITH CARON
+&I<@@
+0x01d0 LATIN SMALL LETTER I WITH CARON
+&i<@@
+0x01d1 LATIN CAPITAL LETTER O WITH CARON
+&O<@@
+0x01d2 LATIN SMALL LETTER O WITH CARON
+&o<@@
+0x01d3 LATIN CAPITAL LETTER U WITH CARON
+&U<@@
+0x01d4 LATIN SMALL LETTER U WITH CARON
+&u<@@
+0x01d5 LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON
+&_U:-_@@
+0x01d6 LATIN SMALL LETTER U WITH DIAERESIS AND MACRON
+&_u:-_@@
+0x01d7 LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE
+&_U:'_@@
+0x01d8 LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE
+&_u:'_@@
+0x01d9 LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON
+&_U:<_@@
+0x01da LATIN SMALL LETTER U WITH DIAERESIS AND CARON
+&_u:<_@@
+0x01db LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE
+&_U:!_@@
+0x01dc LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE
+&_u:!_@@
+0x01de LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON
+&A1@@
+0x01df LATIN SMALL LETTER A WITH DIAERESIS AND MACRON
+&a1@@
+0x01e0 LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON
+&A7@@
+0x01e1 LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON
+&a7@@
+0x01e2 LATIN CAPITAL LETTER AE WITH MACRON
+&A3@@
+0x01e3 LATIN SMALL LETTER AE WITH MACRON
+&a3@@
+0x01e4 LATIN CAPITAL LETTER G WITH STROKE
+&G/@@
+0x01e5 LATIN SMALL LETTER G WITH STROKE
+&g/@@
+0x01e6 LATIN CAPITAL LETTER G WITH CARON
+&G<@@
+0x01e7 LATIN SMALL LETTER G WITH CARON
+&g<@@
+0x01e8 LATIN CAPITAL LETTER K WITH CARON
+&K<@@
+0x01e9 LATIN SMALL LETTER K WITH CARON
+&k<@@
+0x01ea LATIN CAPITAL LETTER O WITH OGONEK
+&O;@@
+0x01eb LATIN SMALL LETTER O WITH OGONEK
+&o;@@
+0x01ec LATIN CAPITAL LETTER O WITH OGONEK AND MACRON
+&O1@@
+0x01ed LATIN SMALL LETTER O WITH OGONEK AND MACRON
+&o1@@
+0x01ee LATIN CAPITAL LETTER EZH WITH CARON
+&EZ@@
+0x01ef LATIN SMALL LETTER EZH WITH CARON
+&ez@@
+0x01f0 LATIN SMALL LETTER J WITH CARON
+&j<@@
+0x01f4 LATIN CAPITAL LETTER G WITH ACUTE
+&G'@@
+0x01f5 LATIN SMALL LETTER G WITH ACUTE
+&g'@@
+0x01fa LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE
+&_AA'_@@
+0x01fb LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE
+&_aa'_@@
+0x01fc LATIN CAPITAL LETTER AE WITH ACUTE
+&_AE'_@@
+0x01fd LATIN SMALL LETTER AE WITH ACUTE
+&_ae'_@@
+0x01fe LATIN CAPITAL LETTER O WITH STROKE AND ACUTE
+&_O/'_@@
+0x01ff LATIN SMALL LETTER O WITH STROKE AND ACUTE
+&_o/'_@@
+0x02bf MODIFIER LETTER LEFT HALF RING
+&;S@@
+0x02c7 CARON
+&'<@@
+0x02d8 BREVE
+&'(@@
+0x02d9 DOT ABOVE
+&'.@@
+0x02da RING ABOVE
+&'0@@
+0x02db OGONEK
+&';@@
+0x02dd DOUBLE ACUTE ACCENT
+&'"@@
+0x0386 GREEK CAPITAL LETTER ALPHA WITH ACUTE
+&A%@@
+0x0388 GREEK CAPITAL LETTER EPSILON WITH ACUTE
+&E%@@
+0x0389 GREEK CAPITAL LETTER ETA WITH ACUTE
+&Y%@@
+0x038a GREEK CAPITAL LETTER IOTA WITH ACUTE
+&I%@@
+0x038c GREEK CAPITAL LETTER OMICRON WITH ACUTE
+&O%@@
+0x038e GREEK CAPITAL LETTER UPSILON WITH ACUTE
+&U%@@
+0x038f GREEK CAPITAL LETTER OMEGA WITH ACUTE
+&W%@@
+0x0390 GREEK SMALL LETTER IOTA WITH ACUTE AND DIAERESIS
+&i3@@
+0x0391 GREEK CAPITAL LETTER ALPHA
+&A*@@
+0x0392 GREEK CAPITAL LETTER BETA
+&B*@@
+0x0393 GREEK CAPITAL LETTER GAMMA
+&G*@@
+0x0394 GREEK CAPITAL LETTER DELTA
+&D*@@
+0x0395 GREEK CAPITAL LETTER EPSILON
+&E*@@
+0x0396 GREEK CAPITAL LETTER ZETA
+&Z*@@
+0x0397 GREEK CAPITAL LETTER ETA
+&Y*@@
+0x0398 GREEK CAPITAL LETTER THETA
+&H*@@
+0x0399 GREEK CAPITAL LETTER IOTA
+&I*@@
+0x039a GREEK CAPITAL LETTER KAPPA
+&K*@@
+0x039b GREEK CAPITAL LETTER LAMDA
+&L*@@
+0x039c GREEK CAPITAL LETTER MU
+&M*@@
+0x039d GREEK CAPITAL LETTER NU
+&N*@@
+0x039e GREEK CAPITAL LETTER XI
+&C*@@
+0x039f GREEK CAPITAL LETTER OMICRON
+&O*@@
+0x03a0 GREEK CAPITAL LETTER PI
+&P*@@
+0x03a1 GREEK CAPITAL LETTER RHO
+&R*@@
+0x03a3 GREEK CAPITAL LETTER SIGMA
+&S*@@
+0x03a4 GREEK CAPITAL LETTER TAU
+&T*@@
+0x03a5 GREEK CAPITAL LETTER UPSILON
+&U*@@
+0x03a6 GREEK CAPITAL LETTER PHI
+&F*@@
+0x03a7 GREEK CAPITAL LETTER CHI
+&X*@@
+0x03a8 GREEK CAPITAL LETTER PSI
+&Q*@@
+0x03a9 GREEK CAPITAL LETTER OMEGA
+&W*@@
+0x03aa GREEK CAPITAL LETTER IOTA WITH DIAERESIS
+&J*@@
+0x03ab GREEK CAPITAL LETTER UPSILON WITH DIAERESIS
+&V*@@
+0x03ac GREEK SMALL LETTER ALPHA WITH ACUTE
+&a%@@
+0x03ad GREEK SMALL LETTER EPSILON WITH ACUTE
+&e%@@
+0x03ae GREEK SMALL LETTER ETA WITH ACUTE
+&y%@@
+0x03af GREEK SMALL LETTER IOTA WITH ACUTE
+&i%@@
+0x03b0 GREEK SMALL LETTER UPSILON WITH ACUTE AND DIAERESIS
+&u3@@
+0x03b1 GREEK SMALL LETTER ALPHA
+&a*@@
+0x03b2 GREEK SMALL LETTER BETA
+&b*@@
+0x03b3 GREEK SMALL LETTER GAMMA
+&g*@@
+0x03b4 GREEK SMALL LETTER DELTA
+&d*@@
+0x03b5 GREEK SMALL LETTER EPSILON
+&e*@@
+0x03b6 GREEK SMALL LETTER ZETA
+&z*@@
+0x03b7 GREEK SMALL LETTER ETA
+&y*@@
+0x03b8 GREEK SMALL LETTER THETA
+&h*@@
+0x03b9 GREEK SMALL LETTER IOTA
+&i*@@
+0x03ba GREEK SMALL LETTER KAPPA
+&k*@@
+0x03bb GREEK SMALL LETTER LAMDA
+&l*@@
+0x03bc GREEK SMALL LETTER MU
+&m*@@
+0x03bd GREEK SMALL LETTER NU
+&n*@@
+0x03be GREEK SMALL LETTER XI
+&c*@@
+0x03bf GREEK SMALL LETTER OMICRON
+&o*@@
+0x03c0 GREEK SMALL LETTER PI
+&p*@@
+0x03c1 GREEK SMALL LETTER RHO
+&r*@@
+0x03c2 GREEK SMALL LETTER FINAL SIGMA
+&*s@@
+0x03c3 GREEK SMALL LETTER SIGMA
+&s*@@
+0x03c4 GREEK SMALL LETTER TAU
+&t*@@
+0x03c5 GREEK SMALL LETTER UPSILON
+&u*@@
+0x03c6 GREEK SMALL LETTER PHI
+&f*@@
+0x03c7 GREEK SMALL LETTER CHI
+&x*@@
+0x03c8 GREEK SMALL LETTER PSI
+&q*@@
+0x03c9 GREEK SMALL LETTER OMEGA
+&w*@@
+0x03ca GREEK SMALL LETTER IOTA WITH DIAERESIS
+&j*@@
+0x03cb GREEK SMALL LETTER UPSILON WITH DIAERESIS
+&v*@@
+0x03cc GREEK SMALL LETTER OMICRON WITH ACUTE
+&o%@@
+0x03cd GREEK SMALL LETTER UPSILON WITH ACUTE
+&u%@@
+0x03ce GREEK SMALL LETTER OMEGA WITH ACUTE
+&w%@@
+0x03d8 GREEK NUMERAL SIGN
+&'G@@
+0x03d9 GREEK LOWER NUMERAL SIGN
+&,G@@
+0x03da GREEK CAPITAL LETTER STIGMA
+&T3@@
+0x03db GREEK SMALL LETTER STIGMA
+&t3@@
+0x03dc GREEK CAPITAL LETTER DIGAMMA
+&M3@@
+0x03dd GREEK SMALL LETTER DIGAMMA
+&m3@@
+0x03de GREEK CAPITAL LETTER KOPPA
+&K3@@
+0x03df GREEK SMALL LETTER KOPPA
+&k3@@
+0x03e0 GREEK CAPITAL LETTER SAMPI
+&P3@@
+0x03e1 GREEK SMALL LETTER SAMPI
+&p3@@
+0x03f4 ACUTE ACCENT AND DIAERESIS (Tonos and Dialytika)
+&'%@@
+0x03f5 GREEK IOTA BELOW
+&j3@@
+0x0401 CYRILLIC CAPITAL LETTER IO
+&IO@@
+0x0402 CYRILLIC CAPITAL LETTER DJE (Serbocroatian)
+&D%@@
+0x0403 CYRILLIC CAPITAL LETTER GJE (Macedonian)
+&G%@@
+0x0404 CYRILLIC CAPITAL LETTER UKRAINIAN IE
+&IE@@
+0x0405 CYRILLIC CAPITAL LETTER DZE (Macedonian)
+&DS@@
+0x0406 CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I
+&II@@
+0x0407 CYRILLIC CAPITAL LETTER YI (Ukrainian)
+&YI@@
+0x0408 CYRILLIC CAPITAL LETTER JE
+&J%@@
+0x0409 CYRILLIC CAPITAL LETTER LJE
+&LJ@@
+0x040a CYRILLIC CAPITAL LETTER NJE
+&NJ@@
+0x040b CYRILLIC CAPITAL LETTER TSHE (Serbocroatian)
+&Ts@@
+0x040c CYRILLIC CAPITAL LETTER KJE (Macedonian)
+&KJ@@
+0x040e CYRILLIC CAPITAL LETTER SHORT U (Byelorussian)
+&V%@@
+0x040f CYRILLIC CAPITAL LETTER DZHE
+&DZ@@
+0x0410 CYRILLIC CAPITAL LETTER A
+&A=@@
+0x0411 CYRILLIC CAPITAL LETTER BE
+&B=@@
+0x0412 CYRILLIC CAPITAL LETTER VE
+&V=@@
+0x0413 CYRILLIC CAPITAL LETTER GHE
+&G=@@
+0x0414 CYRILLIC CAPITAL LETTER DE
+&D=@@
+0x0415 CYRILLIC CAPITAL LETTER IE
+&E=@@
+0x0416 CYRILLIC CAPITAL LETTER ZHE
+&Z%@@
+0x0417 CYRILLIC CAPITAL LETTER ZE
+&Z=@@
+0x0418 CYRILLIC CAPITAL LETTER I
+&I=@@
+0x0419 CYRILLIC CAPITAL LETTER SHORT I
+&J=@@
+0x041a CYRILLIC CAPITAL LETTER KA
+&K=@@
+0x041b CYRILLIC CAPITAL LETTER EL
+&L=@@
+0x041c CYRILLIC CAPITAL LETTER EM
+&M=@@
+0x041d CYRILLIC CAPITAL LETTER EN
+&N=@@
+0x041e CYRILLIC CAPITAL LETTER O
+&O=@@
+0x041f CYRILLIC CAPITAL LETTER PE
+&P=@@
+0x0420 CYRILLIC CAPITAL LETTER ER
+&R=@@
+0x0421 CYRILLIC CAPITAL LETTER ES
+&S=@@
+0x0422 CYRILLIC CAPITAL LETTER TE
+&T=@@
+0x0423 CYRILLIC CAPITAL LETTER U
+&U=@@
+0x0424 CYRILLIC CAPITAL LETTER EF
+&F=@@
+0x0425 CYRILLIC CAPITAL LETTER HA
+&H=@@
+0x0426 CYRILLIC CAPITAL LETTER TSE
+&C=@@
+0x0427 CYRILLIC CAPITAL LETTER CHE
+&C%@@
+0x0428 CYRILLIC CAPITAL LETTER SHA
+&S%@@
+0x0429 CYRILLIC CAPITAL LETTER SHCHA
+&Sc@@
+0x042a CYRILLIC CAPITAL LETTER HARD SIGN
+&="@@
+0x042b CYRILLIC CAPITAL LETTER YERU
+&Y=@@
+0x042c CYRILLIC CAPITAL LETTER SOFT SIGN
+&%"@@
+0x042d CYRILLIC CAPITAL LETTER E
+&JE@@
+0x042e CYRILLIC CAPITAL LETTER YU
+&JU@@
+0x042f CYRILLIC CAPITAL LETTER YA
+&JA@@
+0x0430 CYRILLIC SMALL LETTER A
+&a=@@
+0x0431 CYRILLIC SMALL LETTER BE
+&b=@@
+0x0432 CYRILLIC SMALL LETTER VE
+&v=@@
+0x0433 CYRILLIC SMALL LETTER GHE
+&g=@@
+0x0434 CYRILLIC SMALL LETTER DE
+&d=@@
+0x0435 CYRILLIC SMALL LETTER IE
+&e=@@
+0x0436 CYRILLIC SMALL LETTER ZHE
+&z%@@
+0x0437 CYRILLIC SMALL LETTER ZE
+&z=@@
+0x0438 CYRILLIC SMALL LETTER I
+&i=@@
+0x0439 CYRILLIC SMALL LETTER SHORT I
+&j=@@
+0x043a CYRILLIC SMALL LETTER KA
+&k=@@
+0x043b CYRILLIC SMALL LETTER EL
+&l=@@
+0x043c CYRILLIC SMALL LETTER EM
+&m=@@
+0x043d CYRILLIC SMALL LETTER EN
+&n=@@
+0x043e CYRILLIC SMALL LETTER O
+&o=@@
+0x043f CYRILLIC SMALL LETTER PE
+&p=@@
+0x0440 CYRILLIC SMALL LETTER ER
+&r=@@
+0x0441 CYRILLIC SMALL LETTER ES
+&s=@@
+0x0442 CYRILLIC SMALL LETTER TE
+&t=@@
+0x0443 CYRILLIC SMALL LETTER U
+&u=@@
+0x0444 CYRILLIC SMALL LETTER EF
+&f=@@
+0x0445 CYRILLIC SMALL LETTER HA
+&h=@@
+0x0446 CYRILLIC SMALL LETTER TSE
+&c=@@
+0x0447 CYRILLIC SMALL LETTER CHE
+&c%@@
+0x0448 CYRILLIC SMALL LETTER SHA
+&s%@@
+0x0449 CYRILLIC SMALL LETTER SHCHA
+&sc@@
+0x044a CYRILLIC SMALL LETTER HARD SIGN
+&='@@
+0x044b CYRILLIC SMALL LETTER YERU
+&y=@@
+0x044c CYRILLIC SMALL LETTER SOFT SIGN
+&%'@@
+0x044d CYRILLIC SMALL LETTER E
+&je@@
+0x044e CYRILLIC SMALL LETTER YU
+&ju@@
+0x044f CYRILLIC SMALL LETTER YA
+&ja@@
+0x0451 CYRILLIC SMALL LETTER IO
+&io@@
+0x0452 CYRILLIC SMALL LETTER DJE (Serbocroatian)
+&d%@@
+0x0453 CYRILLIC SMALL LETTER GJE (Macedonian)
+&g%@@
+0x0454 CYRILLIC SMALL LETTER UKRAINIAN IE
+&ie@@
+0x0455 CYRILLIC SMALL LETTER DZE (Macedonian)
+&ds@@
+0x0456 CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I
+&ii@@
+0x0457 CYRILLIC SMALL LETTER YI (Ukrainian)
+&yi@@
+0x0458 CYRILLIC SMALL LETTER JE
+&j%@@
+0x0459 CYRILLIC SMALL LETTER LJE
+&lj@@
+0x045a CYRILLIC SMALL LETTER NJE
+&nj@@
+0x045b CYRILLIC SMALL LETTER TSHE (Serbocroatian)
+&ts@@
+0x045c CYRILLIC SMALL LETTER KJE (Macedonian)
+&kj@@
+0x045e CYRILLIC SMALL LETTER SHORT U (Byelorussian)
+&v%@@
+0x045f CYRILLIC SMALL LETTER DZHE
+&dz@@
+0x0462 CYRILLIC CAPITAL LETTER YAT
+&Y3@@
+0x0463 CYRILLIC SMALL LETTER YAT
+&y3@@
+0x046a CYRILLIC CAPITAL LETTER BIG YUS
+&O3@@
+0x046b CYRILLIC SMALL LETTER BIG YUS
+&o3@@
+0x0472 CYRILLIC CAPITAL LETTER FITA
+&F3@@
+0x0473 CYRILLIC SMALL LETTER FITA
+&f3@@
+0x0474 CYRILLIC CAPITAL LETTER IZHITSA
+&V3@@
+0x0475 CYRILLIC SMALL LETTER IZHITSA
+&v3@@
+0x0480 CYRILLIC CAPITAL LETTER KOPPA
+&C3@@
+0x0481 CYRILLIC SMALL LETTER KOPPA
+&c3@@
+0x0490 CYRILLIC CAPITAL LETTER GHE WITH UPTURN
+&G3@@
+0x0491 CYRILLIC SMALL LETTER GHE WITH UPTURN
+&g3@@
+0x05d0 HEBREW LETTER ALEF
+&A+@@
+0x05d1 HEBREW LETTER BET
+&B+@@
+0x05d2 HEBREW LETTER GIMEL
+&G+@@
+0x05d3 HEBREW LETTER DALET
+&D+@@
+0x05d4 HEBREW LETTER HE
+&H+@@
+0x05d5 HEBREW LETTER VAV
+&W+@@
+0x05d6 HEBREW LETTER ZAYIN
+&Z+@@
+0x05d7 HEBREW LETTER HET
+&X+@@
+0x05d8 HEBREW LETTER TET
+&Tj@@
+0x05d9 HEBREW LETTER YOD
+&J+@@
+0x05da HEBREW LETTER FINAL KAF
+&K%@@
+0x05db HEBREW LETTER KAF
+&K+@@
+0x05dc HEBREW LETTER LAMED
+&L+@@
+0x05dd HEBREW LETTER FINAL MEM
+&M%@@
+0x05de HEBREW LETTER MEM
+&M+@@
+0x05df HEBREW LETTER FINAL NUN
+&N%@@
+0x05e0 HEBREW LETTER NUN
+&N+@@
+0x05e1 HEBREW LETTER SAMEKH
+&S+@@
+0x05e2 HEBREW LETTER AYIN
+&E+@@
+0x05e3 HEBREW LETTER FINAL PE
+&P%@@
+0x05e4 HEBREW LETTER PE
+&P+@@
+0x05e5 HEBREW LETTER FINAL TSADI
+&Zj@@
+0x05e6 HEBREW LETTER TSADI
+&ZJ@@
+0x05e7 HEBREW LETTER QOF
+&Q+@@
+0x05e8 HEBREW LETTER RESH
+&R+@@
+0x05e9 HEBREW LETTER SHIN
+&Sh@@
+0x05ea HEBREW LETTER TAV
+&T+@@
+0x060c ARABIC COMMA
+&,+@@
+0x061b ARABIC SEMICOLON
+&;+@@
+0x061f ARABIC QUESTION MARK
+&?+@@
+0x0621 ARABIC LETTER HAMZA
+&H'@@
+0x0622 ARABIC LETTER ALEF WITH MADDA ABOVE
+&aM@@
+0x0623 ARABIC LETTER ALEF WITH HAMZA ABOVE
+&aH@@
+0x0624 ARABIC LETTER WAW WITH HAMZA ABOVE
+&wH@@
+0x0625 ARABIC LETTER ALEF WITH HAMZA BELOW
+&ah@@
+0x0626 ARABIC LETTER YEH WITH HAMZA ABOVE
+&yH@@
+0x0627 ARABIC LETTER ALEF
+&a+@@
+0x0628 ARABIC LETTER BEH
+&b+@@
+0x0629 ARABIC LETTER TEH MARBUTA
+&tm@@
+0x062a ARABIC LETTER TEH
+&t+@@
+0x062b ARABIC LETTER THEH
+&tk@@
+0x062c ARABIC LETTER JEEM
+&g+@@
+0x062d ARABIC LETTER HAH
+&hk@@
+0x062e ARABIC LETTER KHAH
+&x+@@
+0x062f ARABIC LETTER DAL
+&d+@@
+0x0630 ARABIC LETTER THAL
+&dk@@
+0x0631 ARABIC LETTER REH
+&r+@@
+0x0632 ARABIC LETTER ZAIN
+&z+@@
+0x0633 ARABIC LETTER SEEN
+&s+@@
+0x0634 ARABIC LETTER SHEEN
+&sn@@
+0x0635 ARABIC LETTER SAD
+&c+@@
+0x0636 ARABIC LETTER DAD
+&dd@@
+0x0637 ARABIC LETTER TAH
+&tj@@
+0x0638 ARABIC LETTER ZAH
+&zH@@
+0x0639 ARABIC LETTER AIN
+&e+@@
+0x063a ARABIC LETTER GHAIN
+&i+@@
+0x0640 ARABIC TATWEEL
+&++@@
+0x0641 ARABIC LETTER FEH
+&f+@@
+0x0642 ARABIC LETTER QAF
+&q+@@
+0x0643 ARABIC LETTER KAF
+&k+@@
+0x0644 ARABIC LETTER LAM
+&l+@@
+0x0645 ARABIC LETTER MEEM
+&m+@@
+0x0646 ARABIC LETTER NOON
+&n+@@
+0x0647 ARABIC LETTER HEH
+&h+@@
+0x0648 ARABIC LETTER WAW
+&w+@@
+0x0649 ARABIC LETTER ALEF MAKSURA
+&j+@@
+0x064a ARABIC LETTER YEH
+&y+@@
+0x064b ARABIC FATHATAN
+&:+@@
+0x064c ARABIC DAMMATAN
+&"+@@
+0x064d ARABIC KASRATAN
+&=+@@
+0x064e ARABIC FATHA
+&/+@@
+0x064f ARABIC DAMMA
+&'+@@
+0x0650 ARABIC KASRA
+&1+@@
+0x0651 ARABIC SHADDA
+&3+@@
+0x0652 ARABIC SUKUN
+&0+@@
+0x0670 SUPERSCRIPT ARABIC LETTER ALEF
+&aS@@
+0x067e ARABIC LETTER PEH
+&p+@@
+0x06a4 ARABIC LETTER VEH
+&v+@@
+0x06af ARABIC LETTER GAF
+&gf@@
+0x06f0 EASTERN ARABIC-INDIC DIGIT ZERO
+&0a@@
+0x06f1 EASTERN ARABIC-INDIC DIGIT ONE
+&1a@@
+0x06f2 EASTERN ARABIC-INDIC DIGIT TWO
+&2a@@
+0x06f3 EASTERN ARABIC-INDIC DIGIT THREE
+&3a@@
+0x06f4 EASTERN ARABIC-INDIC DIGIT FOUR
+&4a@@
+0x06f5 EASTERN ARABIC-INDIC DIGIT FIVE
+&5a@@
+0x06f6 EASTERN ARABIC-INDIC DIGIT SIX
+&6a@@
+0x06f7 EASTERN ARABIC-INDIC DIGIT SEVEN
+&7a@@
+0x06f8 EASTERN ARABIC-INDIC DIGIT EIGHT
+&8a@@
+0x06f9 EASTERN ARABIC-INDIC DIGIT NINE
+&9a@@
+0x1e00 LATIN CAPITAL LETTER A WITH RING BELOW
+&_A-0_@@
+0x1e01 LATIN SMALL LETTER A WITH RING BELOW
+&_a-0_@@
+0x1e02 LATIN CAPITAL LETTER B WITH DOT ABOVE
+&B.@@
+0x1e03 LATIN SMALL LETTER B WITH DOT ABOVE
+&b.@@
+0x1e04 LATIN CAPITAL LETTER B WITH DOT BELOW
+&_B-._@@
+0x1e05 LATIN SMALL LETTER B WITH DOT BELOW
+&_b-._@@
+0x1e06 LATIN CAPITAL LETTER B WITH LINE BELOW
+&B_@@
+0x1e07 LATIN SMALL LETTER B WITH LINE BELOW
+&b_@@
+0x1e08 LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE
+&_C,'_@@
+0x1e09 LATIN SMALL LETTER C WITH CEDILLA AND ACUTE
+&_c,'_@@
+0x1e0a LATIN CAPITAL LETTER D WITH DOT ABOVE
+&D.@@
+0x1e0b LATIN SMALL LETTER D WITH DOT ABOVE
+&d.@@
+0x1e0c LATIN CAPITAL LETTER D WITH DOT BELOW
+&_D-._@@
+0x1e0d LATIN SMALL LETTER D WITH DOT BELOW
+&_d-._@@
+0x1e0e LATIN CAPITAL LETTER D WITH LINE BELOW
+&D_@@
+0x1e0f LATIN SMALL LETTER D WITH LINE BELOW
+&d_@@
+0x1e10 LATIN CAPITAL LETTER D WITH CEDILLA
+&D,@@
+0x1e11 LATIN SMALL LETTER D WITH CEDILLA
+&d,@@
+0x1e12 LATIN CAPITAL LETTER D WITH CIRCUMFLEX BELOW
+&_D->_@@
+0x1e13 LATIN SMALL LETTER D WITH CIRCUMFLEX BELOW
+&_d->_@@
+0x1e14 LATIN CAPITAL LETTER E WITH MACRON AND GRAVE
+&_E-!_@@
+0x1e15 LATIN SMALL LETTER E WITH MACRON AND GRAVE
+&_e-!_@@
+0x1e16 LATIN CAPITAL LETTER E WITH MACRON AND ACUTE
+&_E-'_@@
+0x1e17 LATIN SMALL LETTER E WITH MACRON AND ACUTE
+&_e-'_@@
+0x1e18 LATIN CAPITAL LETTER E WITH CIRCUMFLEX BELOW
+&_E->_@@
+0x1e19 LATIN SMALL LETTER E WITH CIRCUMFLEX BELOW
+&_e->_@@
+0x1e1a LATIN CAPITAL LETTER E WITH TILDE BELOW
+&_E-?_@@
+0x1e1b LATIN SMALL LETTER E WITH TILDE BELOW
+&_e-?_@@
+0x1e1c LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE
+&_E,(_@@
+0x1e1d LATIN SMALL LETTER E WITH CEDILLA AND BREVE
+&_e,(_@@
+0x1e1e LATIN CAPITAL LETTER F WITH DOT ABOVE
+&F.@@
+0x1e1f LATIN SMALL LETTER F WITH DOT ABOVE
+&f.@@
+0x1e20 LATIN CAPITAL LETTER G WITH MACRON
+&G-@@
+0x1e21 LATIN SMALL LETTER G WITH MACRON
+&g-@@
+0x1e22 LATIN CAPITAL LETTER H WITH DOT ABOVE
+&H.@@
+0x1e23 LATIN SMALL LETTER H WITH DOT ABOVE
+&h.@@
+0x1e24 LATIN CAPITAL LETTER H WITH DOT BELOW
+&_H-._@@
+0x1e25 LATIN SMALL LETTER H WITH DOT BELOW
+&_h-._@@
+0x1e26 LATIN CAPITAL LETTER H WITH DIAERESIS
+&H:@@
+0x1e27 LATIN SMALL LETTER H WITH DIAERESIS
+&h:@@
+0x1e28 LATIN CAPITAL LETTER H WITH CEDILLA
+&H,@@
+0x1e29 LATIN SMALL LETTER H WITH CEDILLA
+&h,@@
+0x1e2a LATIN CAPITAL LETTER H WITH BREVE BELOW
+&_H-(_@@
+0x1e2b LATIN SMALL LETTER H WITH BREVE BELOW
+&_h-(_@@
+0x1e2c LATIN CAPITAL LETTER I WITH TILDE BELOW
+&_I-?_@@
+0x1e2d LATIN SMALL LETTER I WITH TILDE BELOW
+&_i-?_@@
+0x1e2e LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE
+&_I:'_@@
+0x1e2f LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE
+&_i:'_@@
+0x1e30 LATIN CAPITAL LETTER K WITH ACUTE
+&K'@@
+0x1e31 LATIN SMALL LETTER K WITH ACUTE
+&k'@@
+0x1e32 LATIN CAPITAL LETTER K WITH DOT BELOW
+&_K-._@@
+0x1e33 LATIN SMALL LETTER K WITH DOT BELOW
+&_k-._@@
+0x1e34 LATIN CAPITAL LETTER K WITH LINE BELOW
+&K_@@
+0x1e35 LATIN SMALL LETTER K WITH LINE BELOW
+&k_@@
+0x1e36 LATIN CAPITAL LETTER L WITH DOT BELOW
+&_L-._@@
+0x1e37 LATIN SMALL LETTER L WITH DOT BELOW
+&_l-._@@
+0x1e38 LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON
+&_L--._@@
+0x1e39 LATIN SMALL LETTER L WITH DOT BELOW AND MACRON
+&_l--._@@
+0x1e3a LATIN CAPITAL LETTER L WITH LINE BELOW
+&L_@@
+0x1e3b LATIN SMALL LETTER L WITH LINE BELOW
+&l_@@
+0x1e3c LATIN CAPITAL LETTER L WITH CIRCUMFLEX BELOW
+&_L->_@@
+0x1e3d LATIN SMALL LETTER L WITH CIRCUMFLEX BELOW
+&_l->_@@
+0x1e3e LATIN CAPITAL LETTER M WITH ACUTE
+&M'@@
+0x1e3f LATIN SMALL LETTER M WITH ACUTE
+&m'@@
+0x1e40 LATIN CAPITAL LETTER M WITH DOT ABOVE
+&M.@@
+0x1e41 LATIN SMALL LETTER M WITH DOT ABOVE
+&m.@@
+0x1e42 LATIN CAPITAL LETTER M WITH DOT BELOW
+&_M-._@@
+0x1e43 LATIN SMALL LETTER M WITH DOT BELOW
+&_m-._@@
+0x1e44 LATIN CAPITAL LETTER N WITH DOT ABOVE
+&N.@@
+0x1e45 LATIN SMALL LETTER N WITH DOT ABOVE
+&n.@@
+0x1e46 LATIN CAPITAL LETTER N WITH DOT BELOW
+&_N-._@@
+0x1e47 LATIN SMALL LETTER N WITH DOT BELOW
+&_n-._@@
+0x1e48 LATIN CAPITAL LETTER N WITH LINE BELOW
+&N_@@
+0x1e49 LATIN SMALL LETTER N WITH LINE BELOW
+&n_@@
+0x1e4a LATIN CAPITAL LETTER N WITH CIRCUMFLEX BELOW
+&_N->_@@
+0x1e4b LATIN SMALL LETTER N WITH CIRCUMFLEX BELOW
+&_N->_@@
+0x1e4c LATIN CAPITAL LETTER O WITH TILDE AND ACUTE
+&_O?'_@@
+0x1e4d LATIN SMALL LETTER O WITH TILDE AND ACUTE
+&_o?'_@@
+0x1e4e LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS
+&_O?:_@@
+0x1e4f LATIN SMALL LETTER O WITH TILDE AND DIAERESIS
+&_o?:_@@
+0x1e50 LATIN CAPITAL LETTER O WITH MACRON AND GRAVE
+&_O-!_@@
+0x1e51 LATIN SMALL LETTER O WITH MACRON AND GRAVE
+&_o-!_@@
+0x1e52 LATIN CAPITAL LETTER O WITH MACRON AND ACUTE
+&_O-'_@@
+0x1e53 LATIN SMALL LETTER O WITH MACRON AND ACUTE
+&_o-'_@@
+0x1e54 LATIN CAPITAL LETTER P WITH ACUTE
+&P'@@
+0x1e55 LATIN SMALL LETTER P WITH ACUTE
+&p'@@
+0x1e56 LATIN CAPITAL LETTER P WITH DOT ABOVE
+&P.@@
+0x1e57 LATIN SMALL LETTER P WITH DOT ABOVE
+&p.@@
+0x1e58 LATIN CAPITAL LETTER R WITH DOT ABOVE
+&R.@@
+0x1e59 LATIN SMALL LETTER R WITH DOT ABOVE
+&r.@@
+0x1e5a LATIN CAPITAL LETTER R WITH DOT BELOW
+&_R-._@@
+0x1e5b LATIN SMALL LETTER R WITH DOT BELOW
+&_r-._@@
+0x1e5c LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON
+&_R--._@@
+0x1e5d LATIN SMALL LETTER R WITH DOT BELOW AND MACRON
+&_r--._@@
+0x1e5e LATIN CAPITAL LETTER R WITH LINE BELOW
+&R_@@
+0x1e5f LATIN SMALL LETTER R WITH LINE BELOW
+&r_@@
+0x1e60 LATIN CAPITAL LETTER S WITH DOT ABOVE
+&S.@@
+0x1e61 LATIN SMALL LETTER S WITH DOT ABOVE
+&s.@@
+0x1e62 LATIN CAPITAL LETTER S WITH DOT BELOW
+&_S-._@@
+0x1e63 LATIN SMALL LETTER S WITH DOT BELOW
+&_s-._@@
+0x1e64 LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE
+&_S'._@@
+0x1e65 LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE
+&_s'._@@
+0x1e66 LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE
+&_S<._@@
+0x1e67 LATIN SMALL LETTER S WITH CARON AND DOT ABOVE
+&_s<._@@
+0x1e68 LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE
+&_S.-._@@
+0x1e69 LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE
+&_S.-._@@
+0x1e6a LATIN CAPITAL LETTER T WITH DOT ABOVE
+&T.@@
+0x1e6b LATIN SMALL LETTER T WITH DOT ABOVE
+&t.@@
+0x1e6c LATIN CAPITAL LETTER T WITH DOT BELOW
+&_T-._@@
+0x1e6d LATIN SMALL LETTER T WITH DOT BELOW
+&_t-._@@
+0x1e6e LATIN CAPITAL LETTER T WITH LINE BELOW
+&T_@@
+0x1e6f LATIN SMALL LETTER T WITH LINE BELOW
+&t_@@
+0x1e70 LATIN CAPITAL LETTER T WITH CIRCUMFLEX BELOW
+&_T->_@@
+0x1e71 LATIN SMALL LETTER T WITH CIRCUMFLEX BELOW
+&_t->_@@
+0x1e72 LATIN CAPITAL LETTER U WITH DIAERESIS BELOW
+&_U--:_@@
+0x1e73 LATIN SMALL LETTER U WITH DIAERESIS BELOW
+&_u--:_@@
+0x1e74 LATIN CAPITAL LETTER U WITH TILDE BELOW
+&_U-?_@@
+0x1e75 LATIN SMALL LETTER U WITH TILDE BELOW
+&_u-?_@@
+0x1e76 LATIN CAPITAL LETTER U WITH CIRCUMFLEX BELOW
+&_U->_@@
+0x1e77 LATIN SMALL LETTER U WITH CIRCUMFLEX BELOW
+&_u->_@@
+0x1e78 LATIN CAPITAL LETTER U WITH TILDE AND ACUTE
+&_U?'_@@
+0x1e79 LATIN SMALL LETTER U WITH TILDE AND ACUTE
+&_u?'_@@
+0x1e7a LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS
+&_U-:_@@
+0x1e7b LATIN SMALL LETTER U WITH MACRON AND DIAERESIS
+&_u-:_@@
+0x1e7c LATIN CAPITAL LETTER V WITH TILDE
+&V?@@
+0x1e7d LATIN SMALL LETTER V WITH TILDE
+&v?@@
+0x1e7e LATIN CAPITAL LETTER V WITH DOT BELOW
+&_V-._@@
+0x1e7f LATIN SMALL LETTER V WITH DOT BELOW
+&_v-._@@
+0x1e80 LATIN CAPITAL LETTER W WITH GRAVE
+&W!@@
+0x1e81 LATIN SMALL LETTER W WITH GRAVE
+&w!@@
+0x1e82 LATIN CAPITAL LETTER W WITH ACUTE
+&W'@@
+0x1e83 LATIN SMALL LETTER W WITH ACUTE
+&w'@@
+0x1e84 LATIN CAPITAL LETTER W WITH DIAERESIS
+&W:@@
+0x1e85 LATIN SMALL LETTER W WITH DIAERESIS
+&w:@@
+0x1e86 LATIN CAPITAL LETTER W WITH DOT ABOVE
+&W.@@
+0x1e87 LATIN SMALL LETTER W WITH DOT ABOVE
+&w.@@
+0x1e88 LATIN CAPITAL LETTER W WITH DOT BELOW
+&_W-._@@
+0x1e89 LATIN SMALL LETTER W WITH DOT BELOW
+&_w-._@@
+0x1e8a LATIN CAPITAL LETTER X WITH DOT ABOVE
+&X.@@
+0x1e8b LATIN SMALL LETTER X WITH DOT ABOVE
+&x.@@
+0x1e8c LATIN CAPITAL LETTER X WITH DIAERESIS
+&X:@@
+0x1e8d LATIN SMALL LETTER X WITH DIAERESIS
+&x:@@
+0x1e8e LATIN CAPITAL LETTER Y WITH DOT ABOVE
+&Y.@@
+0x1e8f LATIN SMALL LETTER Y WITH DOT ABOVE
+&y.@@
+0x1e90 LATIN CAPITAL LETTER Z WITH CIRCUMFLEX
+&Z>@@
+0x1e91 LATIN SMALL LETTER Z WITH CIRCUMFLEX
+&z>@@
+0x1e92 LATIN CAPITAL LETTER Z WITH DOT BELOW
+&_Z-._@@
+0x1e93 LATIN SMALL LETTER Z WITH DOT BELOW
+&_z-._@@
+0x1e94 LATIN CAPITAL LETTER Z WITH LINE BELOW
+&Z_@@
+0x1e95 LATIN SMALL LETTER Z WITH LINE BELOW
+&z_@@
+0x1e96 LATIN SMALL LETTER H WITH LINE BELOW
+&h_@@
+0x1e97 LATIN SMALL LETTER T WITH DIAERESIS
+&t:@@
+0x1e98 LATIN SMALL LETTER W WITH RING ABOVE
+&w0@@
+0x1e99 LATIN SMALL LETTER Y WITH RING ABOVE
+&y0@@
+0x1ea0 LATIN CAPITAL LETTER A WITH DOT BELOW
+&_A-._@@
+0x1ea1 LATIN SMALL LETTER A WITH DOT BELOW
+&_a-._@@
+0x1ea2 LATIN CAPITAL LETTER A WITH HOOK ABOVE
+&A2@@
+0x1ea3 LATIN SMALL LETTER A WITH HOOK ABOVE
+&a2@@
+0x1ea4 LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE
+&_A>'_@@
+0x1ea5 LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE
+&_a>'_@@
+0x1ea6 LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE
+&_A>!_@@
+0x1ea7 LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE
+&_a>!_@@
+0x1ea8 LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE
+&_A>2_@@
+0x1ea9 LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE
+&_a>2_@@
+0x1eaa LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE
+&_A>?_@@
+0x1eab LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE
+&_a>?_@@
+0x1eac LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW
+&_A>-._@@
+0x1ead LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW
+&_a>-._@@
+0x1eae LATIN CAPITAL LETTER A WITH BREVE AND ACUTE
+&_A('_@@
+0x1eaf LATIN SMALL LETTER A WITH BREVE AND ACUTE
+&_a('_@@
+0x1eb0 LATIN CAPITAL LETTER A WITH BREVE AND GRAVE
+&_A(!_@@
+0x1eb1 LATIN SMALL LETTER A WITH BREVE AND GRAVE
+&_a(!_@@
+0x1eb2 LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE
+&_A(2_@@
+0x1eb3 LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE
+&_a(2_@@
+0x1eb4 LATIN CAPITAL LETTER A WITH BREVE AND TILDE
+&_A(?_@@
+0x1eb5 LATIN SMALL LETTER A WITH BREVE AND TILDE
+&_a(?_@@
+0x1eb6 LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW
+&_A(-._@@
+0x1eb7 LATIN SMALL LETTER A WITH BREVE AND DOT BELOW
+&_a(-._@@
+0x1eb8 LATIN CAPITAL LETTER E WITH DOT BELOW
+&_E-._@@
+0x1eb9 LATIN SMALL LETTER E WITH DOT BELOW
+&_e-._@@
+0x1eba LATIN CAPITAL LETTER E WITH HOOK ABOVE
+&E2@@
+0x1ebb LATIN SMALL LETTER E WITH HOOK ABOVE
+&e2@@
+0x1ebc LATIN CAPITAL LETTER E WITH TILDE
+&E?@@
+0x1ebd LATIN SMALL LETTER E WITH TILDE
+&e?@@
+0x1ebe LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE
+&_E>'_@@
+0x1ebf LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE
+&_e>'_@@
+0x1ec0 LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE
+&_E>!_@@
+0x1ec1 LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE
+&_e>!_@@
+0x1ec2 LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
+&_E>2_@@
+0x1ec3 LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
+&_e>2_@@
+0x1ec4 LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE
+&_E>?_@@
+0x1ec5 LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE
+&_e>?_@@
+0x1ec6 LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW
+&_E>-._@@
+0x1ec7 LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW
+&_e>-._@@
+0x1ec8 LATIN CAPITAL LETTER I WITH HOOK ABOVE
+&I2@@
+0x1ec9 LATIN SMALL LETTER I WITH HOOK ABOVE
+&i2@@
+0x1eca LATIN CAPITAL LETTER I WITH DOT BELOW
+&_I-._@@
+0x1ecb LATIN SMALL LETTER I WITH DOT BELOW
+&_i-._@@
+0x1ecc LATIN CAPITAL LETTER O WITH DOT BELOW
+&_O-._@@
+0x1ecd LATIN SMALL LETTER O WITH DOT BELOW
+&_o-._@@
+0x1ece LATIN CAPITAL LETTER O WITH HOOK ABOVE
+&O2@@
+0x1ecf LATIN SMALL LETTER O WITH HOOK ABOVE
+&o2@@
+0x1ed0 LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE
+&_O>'_@@
+0x1ed1 LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE
+&_o>'_@@
+0x1ed2 LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE
+&_O>!_@@
+0x1ed3 LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE
+&_o>!_@@
+0x1ed4 LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
+&_O>2_@@
+0x1ed5 LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
+&_o>2_@@
+0x1ed6 LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE
+&_O>?_@@
+0x1ed7 LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE
+&_o>?_@@
+0x1ed8 LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW
+&_O>-._@@
+0x1ed9 LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW
+&_o>-._@@
+0x1eda LATIN CAPITAL LETTER O WITH HORN AND ACUTE
+&_O9'_@@
+0x1edb LATIN SMALL LETTER O WITH HORN AND ACUTE
+&_o9'_@@
+0x1edc LATIN CAPITAL LETTER O WITH HORN AND GRAVE
+&_O9!_@@
+0x1edd LATIN SMALL LETTER O WITH HORN AND GRAVE
+&_o9!_@@
+0x1ede LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE
+&_O92_@@
+0x1edf LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE
+&_o92_@@
+0x1ee0 LATIN CAPITAL LETTER O WITH HORN AND TILDE
+&_O9?_@@
+0x1ee1 LATIN SMALL LETTER O WITH HORN AND TILDE
+&_o9?_@@
+0x1ee2 LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW
+&_O9-._@@
+0x1ee3 LATIN SMALL LETTER O WITH HORN AND DOT BELOW
+&_o9-._@@
+0x1ee4 LATIN CAPITAL LETTER U WITH DOT BELOW
+&_U-._@@
+0x1ee5 LATIN SMALL LETTER U WITH DOT BELOW
+&_u-._@@
+0x1ee6 LATIN CAPITAL LETTER U WITH HOOK ABOVE
+&U2@@
+0x1ee7 LATIN SMALL LETTER U WITH HOOK ABOVE
+&u2@@
+0x1ee8 LATIN CAPITAL LETTER U WITH HORN AND ACUTE
+&_U9'_@@
+0x1ee9 LATIN SMALL LETTER U WITH HORN AND ACUTE
+&_u9'_@@
+0x1eea LATIN CAPITAL LETTER U WITH HORN AND GRAVE
+&_U9!_@@
+0x1eeb LATIN SMALL LETTER U WITH HORN AND GRAVE
+&_u9!_@@
+0x1eec LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE
+&_U92_@@
+0x1eed LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE
+&_u92_@@
+0x1eee LATIN CAPITAL LETTER U WITH HORN AND TILDE
+&_U9?_@@
+0x1eef LATIN SMALL LETTER U WITH HORN AND TILDE
+&_u9?_@@
+0x1ef0 LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW
+&_U9-._@@
+0x1ef1 LATIN SMALL LETTER U WITH HORN AND DOT BELOW
+&_u9-._@@
+0x1ef2 LATIN CAPITAL LETTER Y WITH GRAVE
+&Y!@@
+0x1ef3 LATIN SMALL LETTER Y WITH GRAVE
+&y!@@
+0x1ef4 LATIN CAPITAL LETTER Y WITH DOT BELOW
+&_Y-._@@
+0x1ef5 LATIN SMALL LETTER Y WITH DOT BELOW
+&_y-._@@
+0x1ef6 LATIN CAPITAL LETTER Y WITH HOOK ABOVE
+&Y2@@
+0x1ef7 LATIN SMALL LETTER Y WITH HOOK ABOVE
+&y2@@
+0x1ef8 LATIN CAPITAL LETTER Y WITH TILDE
+&Y?@@
+0x1ef9 LATIN SMALL LETTER Y WITH TILDE
+&y?@@
+0x1f00 GREEK DASIA AND ACUTE ACCENT
+&;'@@
+0x1f01 GREEK PSILI AND ACUTE ACCENT
+&,'@@
+0x1f02 GREEK DASIA AND VARIA
+&;!@@
+0x1f03 GREEK PSILI AND VARIA
+&,!@@
+0x1f04 GREEK DASIA AND PERISPOMENI
+&?;@@
+0x1f05 GREEK PSILI AND PERISPOMENI
+&?,@@
+0x1f06 GREEK DIAERESIS AND VARIA
+&!:@@
+0x1f07 GREEK DIAERESIS AND PERISPOMENI
+&?:@@
+0x2002 EN SPACE
+&1N@@
+0x2003 EM SPACE
+&1M@@
+0x2004 THREE-PER-EM SPACE
+&3M@@
+0x2005 FOUR-PER-EM SPACE
+&4M@@
+0x2006 SIX-PER-EM SPACE
+&6M@@
+0x2009 THIN SPACE
+&1T@@
+0x200a HAIR SPACE
+&1H@@
+0x2010 HYPHEN
+&-1@@
+0x2013 EN DASH
+&-N@@
+0x2014 EM DASH
+&-M@@
+0x2015 HORIZONTAL BAR
+&-3@@
+0x2016 DOUBLE VERTICAL LINE
+&!2@@
+0x2017 DOUBLE LOW LINE
+&=2@@
+0x2018 LEFT SINGLE QUOTATION MARK
+&'6@@
+0x2019 RIGHT SINGLE QUOTATION MARK
+&'9@@
+0x201a SINGLE LOW-9 QUOTATION MARK
+&.9@@
+0x201b SINGLE HIGH-REVERSED-9 QUOTATION MARK
+&9'@@
+0x201c LEFT DOUBLE QUOTATION MARK
+&"6@@
+0x201d RIGHT DOUBLE QUOTATION MARK
+&"9@@
+0x201e DOUBLE LOW-9 QUOTATION MARK
+&:9@@
+0x201f DOUBLE HIGH-REVERSED-9 QUOTATION MARK
+&9"@@
+0x2020 DAGGER
+&/-@@
+0x2021 DOUBLE DAGGER
+&/=@@
+0x2025 TWO DOT LEADER
+&..@@
+0x2030 PER MILLE SIGN
+&%0@@
+0x2032 PRIME
+&1'@@
+0x2033 DOUBLE PRIME
+&2'@@
+0x2034 TRIPLE PRIME
+&3'@@
+0x2035 REVERSED PRIME
+&1"@@
+0x2036 REVERSED DOUBLE PRIME
+&2"@@
+0x2037 REVERSED TRIPLE PRIME
+&3"@@
+0x2038 CARET
+&Ca@@
+0x2039 SINGLE LEFT-POINTING ANGLE QUOTATION MARK
+&<1@@
+0x203a SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
+&>1@@
+0x203b REFERENCE MARK
+&:X@@
+0x203c DOUBLE EXCLAMATION MARK
+&_!*2_@@
+0x203e OVERLINE
+&'-@@
+0x2044 FRACTION SLASH
+&/f@@
+0x2070 SUPERSCRIPT DIGIT ZERO
+&0S@@
+0x2074 SUPERSCRIPT DIGIT FOUR
+&4S@@
+0x2075 SUPERSCRIPT DIGIT FIVE
+&5S@@
+0x2076 SUPERSCRIPT DIGIT SIX
+&6S@@
+0x2077 SUPERSCRIPT DIGIT SEVEN
+&7S@@
+0x2078 SUPERSCRIPT DIGIT EIGHT
+&8S@@
+0x2079 SUPERSCRIPT DIGIT NINE
+&9S@@
+0x207a SUPERSCRIPT PLUS SIGN
+&+S@@
+0x207b SUPERSCRIPT MINUS
+&-S@@
+0x207c SUPERSCRIPT EQUALS SIGN
+&=S@@
+0x207d SUPERSCRIPT LEFT PARENTHESIS
+&(S@@
+0x207e SUPERSCRIPT RIGHT PARENTHESIS
+&)S@@
+0x207f SUPERSCRIPT LATIN SMALL LETTER N
+&nS@@
+0x2080 SUBSCRIPT DIGIT ZERO
+&0s@@
+0x2081 SUBSCRIPT DIGIT ONE
+&1s@@
+0x2082 SUBSCRIPT DIGIT TWO
+&2s@@
+0x2083 SUBSCRIPT DIGIT THREE
+&3s@@
+0x2084 SUBSCRIPT DIGIT FOUR
+&4s@@
+0x2085 SUBSCRIPT DIGIT FIVE
+&5s@@
+0x2086 SUBSCRIPT DIGIT SIX
+&6s@@
+0x2087 SUBSCRIPT DIGIT SEVEN
+&7s@@
+0x2088 SUBSCRIPT DIGIT EIGHT
+&8s@@
+0x2089 SUBSCRIPT DIGIT NINE
+&9s@@
+0x208a SUBSCRIPT PLUS SIGN
+&+s@@
+0x208b SUBSCRIPT MINUS
+&-s@@
+0x208c SUBSCRIPT EQUALS SIGN
+&=s@@
+0x208d SUBSCRIPT LEFT PARENTHESIS
+&(s@@
+0x208e SUBSCRIPT RIGHT PARENTHESIS
+&)s@@
+0x20a4 LIRA SIGN
+&Li@@
+0x20a7 PESETA SIGN
+&Pt@@
+0x20a9 WON SIGN
+&W=@@
+0x2103 DEGREE CENTIGRADE
+&oC@@
+0x2105 CARE OF
+&co@@
+0x2109 DEGREE FAHRENHEIT
+&oF@@
+0x2116 NUMERO SIGN
+&N0@@
+0x2117 SOUND RECORDING COPYRIGHT
+&PO@@
+0x211e PRESCRIPTION TAKE
+&Rx@@
+0x2120 SERVICE MARK
+&SM@@
+0x2122 TRADE MARK SIGN
+&TM@@
+0x2126 OHM SIGN
+&Om@@
+0x212b ANGSTROEM SIGN
+&AO@@
+0x2153 VULGAR FRACTION ONE THIRD
+&13@@
+0x2154 VULGAR FRACTION TWO THIRDS
+&23@@
+0x2155 VULGAR FRACTION ONE FIFTH
+&15@@
+0x2156 VULGAR FRACTION TWO FIFTHS
+&25@@
+0x2157 VULGAR FRACTION THREE FIFTHS
+&35@@
+0x2158 VULGAR FRACTION FOUR FIFTHS
+&45@@
+0x2159 VULGAR FRACTION ONE SIXTH
+&16@@
+0x215a VULGAR FRACTION FIVE SIXTHS
+&56@@
+0x215b VULGAR FRACTION ONE EIGHTH
+&18@@
+0x215c VULGAR FRACTION THREE EIGHTHS
+&38@@
+0x215d VULGAR FRACTION FIVE EIGHTHS
+&58@@
+0x215e VULGAR FRACTION SEVEN EIGHTHS
+&78@@
+0x2160 ROMAN NUMERAL ONE
+&1R@@
+0x2161 ROMAN NUMERAL TWO
+&2R@@
+0x2162 ROMAN NUMERAL THREE
+&3R@@
+0x2163 ROMAN NUMERAL FOUR
+&4R@@
+0x2164 ROMAN NUMERAL FIVE
+&5R@@
+0x2165 ROMAN NUMERAL SIX
+&6R@@
+0x2166 ROMAN NUMERAL SEVEN
+&7R@@
+0x2167 ROMAN NUMERAL EIGHT
+&8R@@
+0x2168 ROMAN NUMERAL NINE
+&9R@@
+0x2169 ROMAN NUMERAL TEN
+&aR@@
+0x216a ROMAN NUMERAL ELEVEN
+&bR@@
+0x216b ROMAN NUMERAL TWELVE
+&cR@@
+0x216c ROMAN NUMERAL FIFTY
+&_50R_@@
+0x216d ROMAN NUMERAL ONE HUNDRED
+&_100R_@@
+0x216e ROMAN NUMERAL FIVE HUNDRED
+&_500R_@@
+0x216f ROMAN NUMERAL ONE THOUSAND
+&_1000R_@@
+0x2170 SMALL ROMAN NUMERAL ONE
+&1r@@
+0x2171 SMALL ROMAN NUMERAL TWO
+&2r@@
+0x2172 SMALL ROMAN NUMERAL THREE
+&3r@@
+0x2173 SMALL ROMAN NUMERAL FOUR
+&4r@@
+0x2174 SMALL ROMAN NUMERAL FIVE
+&5r@@
+0x2175 SMALL ROMAN NUMERAL SIX
+&6r@@
+0x2176 SMALL ROMAN NUMERAL SEVEN
+&7r@@
+0x2177 SMALL ROMAN NUMERAL EIGHT
+&8r@@
+0x2178 SMALL ROMAN NUMERAL NINE
+&9r@@
+0x2179 SMALL ROMAN NUMERAL TEN
+&ar@@
+0x217a SMALL ROMAN NUMERAL ELEVEN
+&br@@
+0x217b SMALL ROMAN NUMERAL TWELVE
+&cr@@
+0x217c SMALL ROMAN NUMERAL FIFTY
+&_50r_@@
+0x217d SMALL ROMAN NUMERAL ONE HUNDRED
+&_100r_@@
+0x217e SMALL ROMAN NUMERAL FIVE HUNDRED
+&_500r_@@
+0x217f SMALL ROMAN NUMERAL ONE THOUSAND
+&_1000r_@@
+0x2180 ROMAN NUMERAL ONE THOUSAND C D
+&_1000RCD_@@
+0x2181 ROMAN NUMERAL FIVE THOUSAND
+&_5000R_@@
+0x2182 ROMAN NUMERAL TEN THOUSAND
+&_10000R_@@
+0x2190 LEFTWARDS ARROW
+&<-@@
+0x2191 UPWARDS ARROW
+&-!@@
+0x2192 RIGHTWARDS ARROW
+&->@@
+0x2193 DOWNWARDS ARROW
+&-v@@
+0x2194 LEFT RIGHT ARROW
+&<>@@
+0x2195 UP DOWN ARROW
+&UD@@
+0x2196 NORTH WEST ARROW
+&_<!!_@@
+0x2197 NORTH EAST ARROW
+&_//>_@@
+0x2198 SOUTH EAST ARROW
+&_!!>_@@
+0x2199 SOUTH WEST ARROW
+&_<//_@@
+0x21d0 LEFTWARDS DOUBLE ARROW
+&<=@@
+0x21d2 RIGHTWARDS DOUBLE ARROW
+&=>@@
+0x21d4 LEFT RIGHT DOUBLE ARROW
+&==@@
+0x2200 FOR ALL
+&FA@@
+0x2202 PARTIAL DIFFERENTIAL
+&dP@@
+0x2203 THERE EXISTS
+&TE@@
+0x2205 EMPTY SET
+&/0@@
+0x2206 INCREMENT
+&DE@@
+0x2207 NABLA
+&NB@@
+0x2208 ELEMENT OF
+&(-@@
+0x220b CONTAINS AS MEMBER
+&-)@@
+0x220f N-ARY PRODUCT
+&*P@@
+0x2211 N-ARY SUMMATION
+&+Z@@
+0x2212 MINUS SIGN
+&-2@@
+0x2213 MINUS-OR-PLUS SIGN
+&-+@@
+0x2217 ASTERISK OPERATOR
+&*-@@
+0x2218 RING OPERATOR
+&Ob@@
+0x2219 BULLET OPERATOR
+&Sb@@
+0x221a SQUARE ROOT
+&RT@@
+0x221d PROPORTIONAL TO
+&0(@@
+0x221e INFINITY
+&00@@
+0x221f RIGHT ANGLE
+&-L@@
+0x2220 ANGLE
+&-V@@
+0x2225 PARALLEL TO
+&PP@@
+0x2227 LOGICAL AND
+&AN@@
+0x2228 LOGICAL OR
+&OR@@
+0x2229 INTERSECTION
+&(U@@
+0x222a UNION
+&)U@@
+0x222b INTEGRAL
+&In@@
+0x222c DOUBLE INTEGRAL
+&DI@@
+0x222e CONTOUR INTEGRAL
+&Io@@
+0x2234 THEREFORE
+&.:@@
+0x2235 BECAUSE
+&:.@@
+0x2236 RATIO
+&:R@@
+0x2237 PROPORTION
+&::@@
+0x223c TILDE OPERATOR
+&?1@@
+0x223e INVERTED LAZY S
+&CG@@
+0x2243 ASYMPTOTICALLY EQUAL TO
+&?-@@
+0x2245 APPROXIMATELY EQUAL TO
+&?=@@
+0x2248 ALMOST EQUAL TO
+&?2@@
+0x224c ALL EQUAL TO
+&=?@@
+0x2253 IMAGE OF OR APPROXIMATELY EQUAL TO
+&HI@@
+0x2260 NOT EQUAL TO
+&!=@@
+0x2261 IDENTICAL TO
+&=3@@
+0x2264 LESS-THAN OR EQUAL TO
+&=<@@
+0x2265 GREATER-THAN OR EQUAL TO
+&>=@@
+0x226a MUCH LESS-THAN
+&<*@@
+0x226b MUCH GREATER-THAN
+&*>@@
+0x226e NOT LESS-THAN
+&!<@@
+0x226f NOT GREATER-THAN
+&!>@@
+0x2282 SUBSET OF
+&(C@@
+0x2283 SUPERSET OF
+&)C@@
+0x2286 SUBSET OF OR EQUAL TO
+&(_@@
+0x2287 SUPERSET OF OR EQUAL TO
+&)_@@
+0x2299 CIRCLED DOT OPERATOR
+&0.@@
+0x229a CIRCLED RING OPERATOR
+&02@@
+0x22a5 UP TACK
+&-T@@
+0x22c5 DOT OPERATOR
+&.P@@
+0x22ee VERTICAL ELLIPSIS
+&:3@@
+0x22ef MIDLINE HORIZONTAL ELLIPSIS
+&.3@@
+0x2302 HOUSE
+&Eh@@
+0x2308 LEFT CEILING
+&<7@@
+0x2309 RIGHT CEILING
+&>7@@
+0x230a LEFT FLOOR
+&7<@@
+0x230b RIGHT FLOOR
+&7>@@
+0x2310 REVERSED NOT SIGN
+&NI@@
+0x2312 ARC
+&(A@@
+0x2315 TELEPHONE RECORDER
+&TR@@
+0x2320 TOP HALF INTEGRAL
+&Iu@@
+0x2321 BOTTOM HALF INTEGRAL
+&Il@@
+0x2329 LEFT-POINTING ANGLE BRACKET
+&</@@
+0x232a RIGHT-POINTING ANGLE BRACKET
+&/>@@
+0x2423 OPEN BOX
+&Vs@@
+0x2440 OCR HOOK
+&1h@@
+0x2441 OCR CHAIR
+&3h@@
+0x2442 OCR FORK
+&2h@@
+0x2443 OCR INVERTED FORK
+&4h@@
+0x2446 OCR BRANCH BANK IDENTIFICATION
+&1j@@
+0x2447 OCR AMOUNT OF CHECK
+&2j@@
+0x2448 OCR DASH
+&3j@@
+0x2449 OCR CUSTOMER ACCOUNT NUMBER
+&4j@@
+0x2460 CIRCLED DIGIT ONE
+&_1-o_@@
+0x2461 CIRCLED DIGIT TWO
+&_2-o_@@
+0x2462 CIRCLED DIGIT THREE
+&_3-o_@@
+0x2463 CIRCLED DIGIT FOUR
+&_4-o_@@
+0x2464 CIRCLED DIGIT FIVE
+&_5-o_@@
+0x2465 CIRCLED DIGIT SIX
+&_6-o_@@
+0x2466 CIRCLED DIGIT SEVEN
+&_7-o_@@
+0x2467 CIRCLED DIGIT EIGHT
+&_8-o_@@
+0x2468 CIRCLED DIGIT NINE
+&_9-o_@@
+0x2469 CIRCLED NUMBER TEN
+&_10-o_@@
+0x246a CIRCLED NUMBER ELEVEN
+&_11-o_@@
+0x246b CIRCLED NUMBER TWELVE
+&_12-o_@@
+0x246c CIRCLED NUMBER THIRTEEN
+&_13-o_@@
+0x246d CIRCLED NUMBER FOURTEEN
+&_14-o_@@
+0x246e CIRCLED NUMBER FIFTEEN
+&_15-o_@@
+0x246f CIRCLED NUMBER SIXTEEN
+&_16-o_@@
+0x2470 CIRCLED NUMBER SEVENTEEN
+&_17-o_@@
+0x2471 CIRCLED NUMBER EIGHTEEN
+&_18-o_@@
+0x2472 CIRCLED NUMBER NINETEEN
+&_19-o_@@
+0x2473 CIRCLED NUMBER TWENTY
+&_20-o_@@
+0x2474 PARENTHESIZED DIGIT ONE
+&_(1)_@@
+0x2475 PARENTHESIZED DIGIT TWO
+&_(2)_@@
+0x2476 PARENTHESIZED DIGIT THREE
+&_(3)_@@
+0x2477 PARENTHESIZED DIGIT FOUR
+&_(4)_@@
+0x2478 PARENTHESIZED DIGIT FIVE
+&_(5)_@@
+0x2479 PARENTHESIZED DIGIT SIX
+&_(6)_@@
+0x247a PARENTHESIZED DIGIT SEVEN
+&_(7)_@@
+0x247b PARENTHESIZED DIGIT EIGHT
+&_(8)_@@
+0x247c PARENTHESIZED DIGIT NINE
+&_(9)_@@
+0x247d PARENTHESIZED NUMBER TEN
+&_(10)_@@
+0x247e PARENTHESIZED NUMBER ELEVEN
+&_(11)_@@
+0x247f PARENTHESIZED NUMBER TWELVE
+&_(12)_@@
+0x2480 PARENTHESIZED NUMBER THIRTEEN
+&_(13)_@@
+0x2481 PARENTHESIZED NUMBER FOURTEEN
+&_(14)_@@
+0x2482 PARENTHESIZED NUMBER FIFTEEN
+&_(15)_@@
+0x2483 PARENTHESIZED NUMBER SIXTEEN
+&_(16)_@@
+0x2484 PARENTHESIZED NUMBER SEVENTEEN
+&_(17)_@@
+0x2485 PARENTHESIZED NUMBER EIGHTEEN
+&_(18)_@@
+0x2486 PARENTHESIZED NUMBER NINETEEN
+&_(19)_@@
+0x2487 PARENTHESIZED NUMBER TWENTY
+&_(20)_@@
+0x2488 DIGIT ONE FULL STOP
+&1.@@
+0x2489 DIGIT TWO FULL STOP
+&2.@@
+0x248a DIGIT THREE FULL STOP
+&3.@@
+0x248b DIGIT FOUR FULL STOP
+&4.@@
+0x248c DIGIT FIVE FULL STOP
+&5.@@
+0x248d DIGIT SIX FULL STOP
+&6.@@
+0x248e DIGIT SEVEN FULL STOP
+&7.@@
+0x248f DIGIT EIGHT FULL STOP
+&8.@@
+0x2490 DIGIT NINE FULL STOP
+&9.@@
+0x2491 NUMBER TEN FULL STOP
+&_10._@@
+0x2492 NUMBER ELEVEN FULL STOP
+&_11._@@
+0x2493 NUMBER TWELVE FULL STOP
+&_12._@@
+0x2494 NUMBER THIRTEEN FULL STOP
+&_13._@@
+0x2495 NUMBER FOURTEEN FULL STOP
+&_14._@@
+0x2496 NUMBER FIFTEEN FULL STOP
+&_15._@@
+0x2497 NUMBER SIXTEEN FULL STOP
+&_16._@@
+0x2498 NUMBER SEVENTEEN FULL STOP
+&_17._@@
+0x2499 NUMBER EIGHTEEN FULL STOP
+&_18._@@
+0x249a NUMBER NINETEEN FULL STOP
+&_19._@@
+0x249b NUMBER TWENTY FULL STOP
+&_20._@@
+0x249c PARENTHESIZED LATIN SMALL LETTER A
+&_(a)_@@
+0x249d PARENTHESIZED LATIN SMALL LETTER B
+&_(b)_@@
+0x249e PARENTHESIZED LATIN SMALL LETTER C
+&_(c)_@@
+0x249f PARENTHESIZED LATIN SMALL LETTER D
+&_(d)_@@
+0x24a0 PARENTHESIZED LATIN SMALL LETTER E
+&_(e)_@@
+0x24a1 PARENTHESIZED LATIN SMALL LETTER F
+&_(f)_@@
+0x24a2 PARENTHESIZED LATIN SMALL LETTER G
+&_(g)_@@
+0x24a3 PARENTHESIZED LATIN SMALL LETTER H
+&_(h)_@@
+0x24a4 PARENTHESIZED LATIN SMALL LETTER I
+&_(i)_@@
+0x24a5 PARENTHESIZED LATIN SMALL LETTER J
+&_(j)_@@
+0x24a6 PARENTHESIZED LATIN SMALL LETTER K
+&_(k)_@@
+0x24a7 PARENTHESIZED LATIN SMALL LETTER L
+&_(l)_@@
+0x24a8 PARENTHESIZED LATIN SMALL LETTER M
+&_(m)_@@
+0x24a9 PARENTHESIZED LATIN SMALL LETTER N
+&_(n)_@@
+0x24aa PARENTHESIZED LATIN SMALL LETTER O
+&_(o)_@@
+0x24ab PARENTHESIZED LATIN SMALL LETTER P
+&_(p)_@@
+0x24ac PARENTHESIZED LATIN SMALL LETTER Q
+&_(q)_@@
+0x24ad PARENTHESIZED LATIN SMALL LETTER R
+&_(r)_@@
+0x24ae PARENTHESIZED LATIN SMALL LETTER S
+&_(s)_@@
+0x24af PARENTHESIZED LATIN SMALL LETTER T
+&_(t)_@@
+0x24b0 PARENTHESIZED LATIN SMALL LETTER U
+&_(u)_@@
+0x24b1 PARENTHESIZED LATIN SMALL LETTER V
+&_(v)_@@
+0x24b2 PARENTHESIZED LATIN SMALL LETTER W
+&_(w)_@@
+0x24b3 PARENTHESIZED LATIN SMALL LETTER X
+&_(x)_@@
+0x24b4 PARENTHESIZED LATIN SMALL LETTER Y
+&_(y)_@@
+0x24b5 PARENTHESIZED LATIN SMALL LETTER Z
+&_(z)_@@
+0x24b6 CIRCLED LATIN CAPITAL LETTER A
+&_A-o_@@
+0x24b7 CIRCLED LATIN CAPITAL LETTER B
+&_B-o_@@
+0x24b8 CIRCLED LATIN CAPITAL LETTER C
+&_C-o_@@
+0x24b9 CIRCLED LATIN CAPITAL LETTER D
+&_D-o_@@
+0x24ba CIRCLED LATIN CAPITAL LETTER E
+&_E-o_@@
+0x24bb CIRCLED LATIN CAPITAL LETTER F
+&_F-o_@@
+0x24bc CIRCLED LATIN CAPITAL LETTER G
+&_G-o_@@
+0x24bd CIRCLED LATIN CAPITAL LETTER H
+&_H-o_@@
+0x24be CIRCLED LATIN CAPITAL LETTER I
+&_I-o_@@
+0x24bf CIRCLED LATIN CAPITAL LETTER J
+&_J-o_@@
+0x24c0 CIRCLED LATIN CAPITAL LETTER K
+&_K-o_@@
+0x24c1 CIRCLED LATIN CAPITAL LETTER L
+&_L-o_@@
+0x24c2 CIRCLED LATIN CAPITAL LETTER M
+&_M-o_@@
+0x24c3 CIRCLED LATIN CAPITAL LETTER N
+&_N-o_@@
+0x24c4 CIRCLED LATIN CAPITAL LETTER O
+&_O-o_@@
+0x24c5 CIRCLED LATIN CAPITAL LETTER P
+&_P-o_@@
+0x24c6 CIRCLED LATIN CAPITAL LETTER Q
+&_Q-o_@@
+0x24c7 CIRCLED LATIN CAPITAL LETTER R
+&_R-o_@@
+0x24c8 CIRCLED LATIN CAPITAL LETTER S
+&_S-o_@@
+0x24c9 CIRCLED LATIN CAPITAL LETTER T
+&_T-o_@@
+0x24ca CIRCLED LATIN CAPITAL LETTER U
+&_U-o_@@
+0x24cb CIRCLED LATIN CAPITAL LETTER V
+&_V-o_@@
+0x24cc CIRCLED LATIN CAPITAL LETTER W
+&_W-o_@@
+0x24cd CIRCLED LATIN CAPITAL LETTER X
+&_X-o_@@
+0x24ce CIRCLED LATIN CAPITAL LETTER Y
+&_Y-o_@@
+0x24cf CIRCLED LATIN CAPITAL LETTER Z
+&_Z-o_@@
+0x24d0 CIRCLED LATIN SMALL LETTER A
+&_a-o_@@
+0x24d1 CIRCLED LATIN SMALL LETTER B
+&_b-o_@@
+0x24d2 CIRCLED LATIN SMALL LETTER C
+&_c-o_@@
+0x24d3 CIRCLED LATIN SMALL LETTER D
+&_d-o_@@
+0x24d4 CIRCLED LATIN SMALL LETTER E
+&_e-o_@@
+0x24d5 CIRCLED LATIN SMALL LETTER F
+&_f-o_@@
+0x24d6 CIRCLED LATIN SMALL LETTER G
+&_g-o_@@
+0x24d7 CIRCLED LATIN SMALL LETTER H
+&_h-o_@@
+0x24d8 CIRCLED LATIN SMALL LETTER I
+&_i-o_@@
+0x24d9 CIRCLED LATIN SMALL LETTER J
+&_j-o_@@
+0x24da CIRCLED LATIN SMALL LETTER K
+&_k-o_@@
+0x24db CIRCLED LATIN SMALL LETTER L
+&_l-o_@@
+0x24dc CIRCLED LATIN SMALL LETTER M
+&_m-o_@@
+0x24dd CIRCLED LATIN SMALL LETTER N
+&_n-o_@@
+0x24de CIRCLED LATIN SMALL LETTER O
+&_o-o_@@
+0x24df CIRCLED LATIN SMALL LETTER P
+&_p-o_@@
+0x24e0 CIRCLED LATIN SMALL LETTER Q
+&_q-o_@@
+0x24e1 CIRCLED LATIN SMALL LETTER R
+&_r-o_@@
+0x24e2 CIRCLED LATIN SMALL LETTER S
+&_s-o_@@
+0x24e3 CIRCLED LATIN SMALL LETTER T
+&_t-o_@@
+0x24e4 CIRCLED LATIN SMALL LETTER U
+&_u-o_@@
+0x24e5 CIRCLED LATIN SMALL LETTER V
+&_v-o_@@
+0x24e6 CIRCLED LATIN SMALL LETTER W
+&_w-o_@@
+0x24e7 CIRCLED LATIN SMALL LETTER X
+&_x-o_@@
+0x24e8 CIRCLED LATIN SMALL LETTER Y
+&_y-o_@@
+0x24e9 CIRCLED LATIN SMALL LETTER Z
+&_z-o_@@
+0x24ea CIRCLED DIGIT ZERO
+&_0-o_@@
+0x2500 BOX DRAWINGS LIGHT HORIZONTAL
+&hh@@
+0x2501 BOX DRAWINGS HEAVY HORIZONTAL
+&HH@@
+0x2502 BOX DRAWINGS LIGHT VERTICAL
+&vv@@
+0x2503 BOX DRAWINGS HEAVY VERTICAL
+&VV@@
+0x2504 BOX DRAWINGS LIGHT TRIPLE DASH HORIZONTAL
+&3-@@
+0x2505 BOX DRAWINGS HEAVY TRIPLE DASH HORIZONTAL
+&3_@@
+0x2506 BOX DRAWINGS LIGHT TRIPLE DASH VERTICAL
+&3!@@
+0x2507 BOX DRAWINGS HEAVY TRIPLE DASH VERTICAL
+&3/@@
+0x2508 BOX DRAWINGS LIGHT QUADRUPLE DASH HORIZONTAL
+&4-@@
+0x2509 BOX DRAWINGS HEAVY QUADRUPLE DASH HORIZONTAL
+&4_@@
+0x250a BOX DRAWINGS LIGHT QUADRUPLE DASH VERTICAL
+&4!@@
+0x250b BOX DRAWINGS HEAVY QUADRUPLE DASH VERTICAL
+&4/@@
+0x250c BOX DRAWINGS LIGHT DOWN AND RIGHT
+&dr@@
+0x250d BOX DRAWINGS DOWN LIGHT AND RIGHT HEAVY
+&dR@@
+0x250e BOX DRAWINGS DOWN HEAVY AND RIGHT LIGHT
+&Dr@@
+0x250f BOX DRAWINGS HEAVY DOWN AND RIGHT
+&DR@@
+0x2510 BOX DRAWINGS LIGHT DOWN AND LEFT
+&dl@@
+0x2511 BOX DRAWINGS DOWN LIGHT AND LEFT HEAVY
+&dL@@
+0x2512 BOX DRAWINGS DOWN HEAVY AND LEFT LIGHT
+&Dl@@
+0x2513 BOX DRAWINGS HEAVY DOWN AND LEFT
+&LD@@
+0x2514 BOX DRAWINGS LIGHT UP AND RIGHT
+&ur@@
+0x2515 BOX DRAWINGS UP LIGHT AND RIGHT HEAVY
+&uR@@
+0x2516 BOX DRAWINGS UP HEAVY AND RIGHT LIGHT
+&Ur@@
+0x2517 BOX DRAWINGS HEAVY UP AND RIGHT
+&UR@@
+0x2518 BOX DRAWINGS LIGHT UP AND LEFT
+&ul@@
+0x2519 BOX DRAWINGS UP LIGHT AND LEFT HEAVY
+&uL@@
+0x251a BOX DRAWINGS UP HEAVY AND LEFT LIGHT
+&Ul@@
+0x251b BOX DRAWINGS HEAVY UP AND LEFT
+&UL@@
+0x251c BOX DRAWINGS LIGHT VERTICAL AND RIGHT
+&vr@@
+0x251d BOX DRAWINGS VERTICAL LIGHT AND RIGHT HEAVY
+&vR@@
+0x251e BOX DRAWINGS UP HEAVY AND RIGHT DOWN LIGHT
+&_Udr_@@
+0x251f BOX DRAWINGS DOWN HEAVY AND RIGHT UP LIGHT
+&_uDr_@@
+0x2520 BOX DRAWINGS VERTICAL HEAVY AND RIGHT LIGHT
+&Vr@@
+0x2521 BOX DRAWINGS DOWN LIGHT AND RIGHT UP HEAVY
+&_UdR_@@
+0x2522 BOX DRAWINGS UP LIGHT AND RIGHT DOWN HEAVY
+&_uDR_@@
+0x2523 BOX DRAWINGS HEAVY VERTICAL AND RIGHT
+&VR@@
+0x2524 BOX DRAWINGS LIGHT VERTICAL AND LEFT
+&vl@@
+0x2525 BOX DRAWINGS VERTICAL LIGHT AND LEFT HEAVY
+&vL@@
+0x2526 BOX DRAWINGS UP HEAVY AND LEFT DOWN LIGHT
+&_Udl_@@
+0x2527 BOX DRAWINGS DOWN HEAVY AND LEFT UP LIGHT
+&_uDl_@@
+0x2528 BOX DRAWINGS VERTICAL HEAVY AND LEFT LIGHT
+&Vl@@
+0x2529 BOX DRAWINGS DOWN LIGHT AND LEFT UP HEAVY
+&_UdL_@@
+0x252a BOX DRAWINGS UP LIGHT AND LEFT DOWN HEAVY
+&_uDL_@@
+0x252b BOX DRAWINGS HEAVY VERTICAL AND LEFT
+&VL@@
+0x252c BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
+&dh@@
+0x252d BOX DRAWINGS LEFT HEAVY AND RIGHT DOWN LIGHT
+&_dLr_@@
+0x252e BOX DRAWINGS RIGHT HEAVY AND LEFT DOWN LIGHT
+&_dlR_@@
+0x252f BOX DRAWINGS DOWN LIGHT AND HORIZONTAL HEAVY
+&dH@@
+0x2530 BOX DRAWINGS DOWN HEAVY AND HORIZONTAL LIGHT
+&Dh@@
+0x2531 BOX DRAWINGS RIGHT LIGHT AND LEFT DOWN HEAVY
+&_DLr_@@
+0x2532 BOX DRAWINGS LEFT LIGHT AND RIGHT DOWN HEAVY
+&_DlR_@@
+0x2533 BOX DRAWINGS HEAVY DOWN AND HORIZONTAL
+&DH@@
+0x2534 BOX DRAWINGS LIGHT UP AND HORIZONTAL
+&uh@@
+0x2535 BOX DRAWINGS LEFT HEAVY AND RIGHT UP LIGHT
+&_uLr_@@
+0x2536 BOX DRAWINGS RIGHT HEAVY AND LEFT UP LIGHT
+&_ulR_@@
+0x2537 BOX DRAWINGS UP LIGHT AND HORIZONTAL HEAVY
+&uH@@
+0x2538 BOX DRAWINGS UP HEAVY AND HORIZONTAL LIGHT
+&Uh@@
+0x2539 BOX DRAWINGS RIGHT LIGHT AND LEFT UP HEAVY
+&_ULr_@@
+0x253a BOX DRAWINGS LEFT LIGHT AND RIGHT UP HEAVY
+&_UlR_@@
+0x253b BOX DRAWINGS HEAVY UP AND HORIZONTAL
+&UH@@
+0x253c BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
+&vh@@
+0x253d BOX DRAWINGS LEFT HEAVY AND RIGHT VERTICAL LIGHT
+&_vLr_@@
+0x253e BOX DRAWINGS RIGHT HEAVY AND LEFT VERTICAL LIGHT
+&_vlR_@@
+0x253f BOX DRAWINGS VERTICAL LIGHT AND HORIZONTAL HEAVY
+&vH@@
+0x2540 BOX DRAWINGS UP HEAVY AND DOWN HORIZONTAL LIGHT
+&_Udh_@@
+0x2541 BOX DRAWINGS DOWN HEAVY AND UP HORIZONTAL LIGHT
+&_uDh_@@
+0x2542 BOX DRAWINGS VERTICAL HEAVY AND HORIZONTAL LIGHT
+&Vh@@
+0x2543 BOX DRAWINGS LEFT UP HEAVY AND RIGHT DOWN LIGHT
+&_UdLr_@@
+0x2544 BOX DRAWINGS RIGHT UP HEAVY AND LEFT DOWN LIGHT
+&_UdlR_@@
+0x2545 BOX DRAWINGS LEFT DOWN HEAVY AND RIGHT UP LIGHT
+&_uDLr_@@
+0x2546 BOX DRAWINGS RIGHT DOWN HEAVY AND LEFT UP LIGHT
+&_uDlR_@@
+0x2547 BOX DRAWINGS DOWN LIGHT AND UP HORIZONTAL HEAVY
+&_UdH_@@
+0x2548 BOX DRAWINGS UP LIGHT AND DOWN HORIZONTAL HEAVY
+&_uDH_@@
+0x2549 BOX DRAWINGS RIGHT LIGHT AND LEFT VERTICAL HEAVY
+&_VLr_@@
+0x254a BOX DRAWINGS LEFT LIGHT AND RIGHT VERTICAL HEAVY
+&_VlR_@@
+0x254b BOX DRAWINGS HEAVY VERTICAL AND HORIZONTAL
+&VH@@
+0x2571 BOX DRAWINGS LIGHT DIAGONAL UPPER RIGHT TO LOWER LEFT
+&FD@@
+0x2572 BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO LOWER RIGHT
+&BD@@
+0x2580 UPPER HALF BLOCK
+&TB@@
+0x2584 LOWER HALF BLOCK
+&LB@@
+0x2588 FULL BLOCK
+&FB@@
+0x258c LEFT HALF BLOCK
+&lB@@
+0x2590 RIGHT HALF BLOCK
+&RB@@
+0x2591 LIGHT SHADE
+&.S@@
+0x2592 MEDIUM SHADE
+&:S@@
+0x2593 DARK SHADE
+&?S@@
+0x25a0 BLACK SQUARE
+&fS@@
+0x25a1 WHITE SQUARE
+&OS@@
+0x25a2 WHITE SQUARE WITH ROUNDED CORNERS
+&RO@@
+0x25a3 WHITE SQUARE CONTAINING BLACK SMALL SQUARE
+&Rr@@
+0x25a4 SQUARE WITH HORIZONTAL FILL
+&RF@@
+0x25a5 SQUARE WITH VERTICAL FILL
+&RY@@
+0x25a6 SQUARE WITH ORTHOGONAL CROSSHATCH FILL
+&RH@@
+0x25a7 SQUARE WITH UPPER LEFT TO LOWER RIGHT FILL
+&RZ@@
+0x25a8 SQUARE WITH UPPER RIGHT TO LOWER LEFT FILL
+&RK@@
+0x25a9 SQUARE WITH DIAGONAL CROSSHATCH FILL
+&RX@@
+0x25aa BLACK SMALL SQUARE
+&sB@@
+0x25ac BLACK RECTANGLE
+&SR@@
+0x25ad WHITE RECTANGLE
+&Or@@
+0x25b2 BLACK UP-POINTING TRIANGLE
+&UT@@
+0x25b3 WHITE UP-POINTING TRIANGLE
+&uT@@
+0x25b6 BLACK RIGHT-POINTING TRIANGLE
+&PR@@
+0x25b7 WHITE RIGHT-POINTING TRIANGLE
+&Tr@@
+0x25bc BLACK DOWN-POINTING TRIANGLE
+&Dt@@
+0x25bd WHITE DOWN-POINTING TRIANGLE
+&dT@@
+0x25c0 BLACK LEFT-POINTING TRIANGLE
+&PL@@
+0x25c1 WHITE LEFT-POINTING TRIANGLE
+&Tl@@
+0x25c6 BLACK DIAMOND
+&Db@@
+0x25c7 WHITE DIAMOND
+&Dw@@
+0x25ca LOZENGE
+&LZ@@
+0x25cb WHITE CIRCLE
+&0m@@
+0x25ce BULLSEYE
+&0o@@
+0x25cf BLACK CIRCLE
+&0M@@
+0x25d0 CIRCLE WITH LEFT HALF BLACK
+&0L@@
+0x25d1 CIRCLE WITH RIGHT HALF BLACK
+&0R@@
+0x25d8 INVERSE BULLET
+&Sn@@
+0x25d9 INVERSE WHITE CIRCLE
+&Ic@@
+0x25e2 BLACK LOWER RIGHT TRIANGLE
+&Fd@@
+0x25e3 BLACK LOWER LEFT TRIANGLE
+&Bd@@
+0x2605 BLACK STAR
+&*2@@
+0x2606 WHITE STAR
+&*1@@
+0x260e BLACK TELEPHONE
+&_TEL_@@
+0x260f WHITE TELEPHONE
+&_tel_@@
+0x261c WHITE LEFT POINTING INDEX
+&<H@@
+0x261e WHITE RIGHT POINTING INDEX
+&>H@@
+0x263a WHITE SMILING FACE
+&0u@@
+0x263b BLACK SMILING FACE
+&0U@@
+0x263c WHITE SUN WITH RAYS
+&SU@@
+0x2640 FEMALE SIGN
+&Fm@@
+0x2642 MALE SIGN
+&Ml@@
+0x2660 BLACK SPADE SUIT
+&cS@@
+0x2661 WHITE HEART SUIT
+&cH@@
+0x2662 WHITE DIAMOND SUIT
+&cD@@
+0x2663 BLACK CLUB SUIT
+&cC@@
+0x2664 WHITE SPADE SUIT
+&_cS-_@@
+0x2665 BLACK HEART SUIT
+&_cH-_@@
+0x2666 BLACK DIAMOND SUIT
+&_cD-_@@
+0x2667 WHITE CLUB SUIT
+&_cC-_@@
+0x2669 QUARTER NOTE
+&Md@@
+0x266a EIGHTH NOTE
+&M8@@
+0x266b BARRED EIGHTH NOTES
+&M2@@
+0x266c BARRED SIXTEENTH NOTES
+&_M16_@@
+0x266d MUSIC FLAT SIGN
+&Mb@@
+0x266e MUSIC NATURAL SIGN
+&Mx@@
+0x266f MUSIC SHARP SIGN
+&MX@@
+0x2713 CHECK MARK
+&OK@@
+0x2717 BALLOT X
+&XX@@
+0x2720 MALTESE CROSS
+&-X@@
+0x3000 IDEOGRAPHIC SPACE
+&IS@@
+0x3001 IDEOGRAPHIC COMMA
+&,_@@
+0x3002 IDEOGRAPHIC PERIOD
+&._@@
+0x3003 DITTO MARK
+&+"@@
+0x3004 IDEOGRAPHIC DITTO MARK
+&+_@@
+0x3005 IDEOGRAPHIC ITERATION MARK
+&*_@@
+0x3006 IDEOGRAPHIC CLOSING MARK
+&;_@@
+0x3007 IDEOGRAPHIC NUMBER ZERO
+&0_@@
+0x300a LEFT DOUBLE ANGLE BRACKET
+&<+@@
+0x300b RIGHT DOUBLE ANGLE BRACKET
+&>+@@
+0x300c LEFT CORNER BRACKET
+&<'@@
+0x300d RIGHT CORNER BRACKET
+&>'@@
+0x300e LEFT WHITE CORNER BRACKET
+&<"@@
+0x300f RIGHT WHITE CORNER BRACKET
+&>"@@
+0x3010 LEFT BLACK LENTICULAR BRACKET
+&("@@
+0x3011 RIGHT BLACK LENTICULAR BRACKET
+&)"@@
+0x3012 POSTAL MARK
+&=T@@
+0x3013 GETA MARK
+&=_@@
+0x3014 LEFT TORTOISE SHELL BRACKET
+&('@@
+0x3015 RIGHT TORTOISE SHELL BRACKET
+&)'@@
+0x3016 LEFT WHITE LENTICULAR BRACKET
+&(I@@
+0x3017 RIGHT WHITE LENTICULAR BRACKET
+&)I@@
+0x301c WAVE DASH
+&-?@@
+0x3020 POSTAL MARK FACE
+&_=T:)_@@
+0x3041 HIRAGANA LETTER SMALL A
+&A5@@
+0x3042 HIRAGANA LETTER A
+&a5@@
+0x3043 HIRAGANA LETTER SMALL I
+&I5@@
+0x3044 HIRAGANA LETTER I
+&i5@@
+0x3045 HIRAGANA LETTER SMALL U
+&U5@@
+0x3046 HIRAGANA LETTER U
+&u5@@
+0x3047 HIRAGANA LETTER SMALL E
+&E5@@
+0x3048 HIRAGANA LETTER E
+&e5@@
+0x3049 HIRAGANA LETTER SMALL O
+&O5@@
+0x304a HIRAGANA LETTER O
+&o5@@
+0x304b HIRAGANA LETTER KA
+&ka@@
+0x304c HIRAGANA LETTER GA
+&ga@@
+0x304d HIRAGANA LETTER KI
+&ki@@
+0x304e HIRAGANA LETTER GI
+&gi@@
+0x304f HIRAGANA LETTER KU
+&ku@@
+0x3050 HIRAGANA LETTER GU
+&gu@@
+0x3051 HIRAGANA LETTER KE
+&ke@@
+0x3052 HIRAGANA LETTER GE
+&ge@@
+0x3053 HIRAGANA LETTER KO
+&ko@@
+0x3054 HIRAGANA LETTER GO
+&go@@
+0x3055 HIRAGANA LETTER SA
+&sa@@
+0x3056 HIRAGANA LETTER ZA
+&za@@
+0x3057 HIRAGANA LETTER SI
+&si@@
+0x3058 HIRAGANA LETTER ZI
+&zi@@
+0x3059 HIRAGANA LETTER SU
+&su@@
+0x305a HIRAGANA LETTER ZU
+&zu@@
+0x305b HIRAGANA LETTER SE
+&se@@
+0x305c HIRAGANA LETTER ZE
+&ze@@
+0x305d HIRAGANA LETTER SO
+&so@@
+0x305e HIRAGANA LETTER ZO
+&zo@@
+0x305f HIRAGANA LETTER TA
+&ta@@
+0x3060 HIRAGANA LETTER DA
+&da@@
+0x3061 HIRAGANA LETTER TI
+&ti@@
+0x3062 HIRAGANA LETTER DI
+&di@@
+0x3063 HIRAGANA LETTER SMALL TU
+&tU@@
+0x3064 HIRAGANA LETTER TU
+&tu@@
+0x3065 HIRAGANA LETTER DU
+&du@@
+0x3066 HIRAGANA LETTER TE
+&te@@
+0x3067 HIRAGANA LETTER DE
+&de@@
+0x3068 HIRAGANA LETTER TO
+&to@@
+0x3069 HIRAGANA LETTER DO
+&do@@
+0x306a HIRAGANA LETTER NA
+&na@@
+0x306b HIRAGANA LETTER NI
+&ni@@
+0x306c HIRAGANA LETTER NU
+&nu@@
+0x306d HIRAGANA LETTER NE
+&ne@@
+0x306e HIRAGANA LETTER NO
+&no@@
+0x306f HIRAGANA LETTER HA
+&ha@@
+0x3070 HIRAGANA LETTER BA
+&ba@@
+0x3071 HIRAGANA LETTER PA
+&pa@@
+0x3072 HIRAGANA LETTER HI
+&hi@@
+0x3073 HIRAGANA LETTER BI
+&bi@@
+0x3074 HIRAGANA LETTER PI
+&pi@@
+0x3075 HIRAGANA LETTER HU
+&hu@@
+0x3076 HIRAGANA LETTER BU
+&bu@@
+0x3077 HIRAGANA LETTER PU
+&pu@@
+0x3078 HIRAGANA LETTER HE
+&he@@
+0x3079 HIRAGANA LETTER BE
+&be@@
+0x307a HIRAGANA LETTER PE
+&pe@@
+0x307b HIRAGANA LETTER HO
+&ho@@
+0x307c HIRAGANA LETTER BO
+&bo@@
+0x307d HIRAGANA LETTER PO
+&po@@
+0x307e HIRAGANA LETTER MA
+&ma@@
+0x307f HIRAGANA LETTER MI
+&mi@@
+0x3080 HIRAGANA LETTER MU
+&mu@@
+0x3081 HIRAGANA LETTER ME
+&me@@
+0x3082 HIRAGANA LETTER MO
+&mo@@
+0x3083 HIRAGANA LETTER SMALL YA
+&yA@@
+0x3084 HIRAGANA LETTER YA
+&ya@@
+0x3085 HIRAGANA LETTER SMALL YU
+&yU@@
+0x3086 HIRAGANA LETTER YU
+&yu@@
+0x3087 HIRAGANA LETTER SMALL YO
+&yO@@
+0x3088 HIRAGANA LETTER YO
+&yo@@
+0x3089 HIRAGANA LETTER RA
+&ra@@
+0x308a HIRAGANA LETTER RI
+&ri@@
+0x308b HIRAGANA LETTER RU
+&ru@@
+0x308c HIRAGANA LETTER RE
+&re@@
+0x308d HIRAGANA LETTER RO
+&ro@@
+0x308e HIRAGANA LETTER SMALL WA
+&wA@@
+0x308f HIRAGANA LETTER WA
+&wa@@
+0x3090 HIRAGANA LETTER WI
+&wi@@
+0x3091 HIRAGANA LETTER WE
+&we@@
+0x3092 HIRAGANA LETTER WO
+&wo@@
+0x3093 HIRAGANA LETTER N
+&n5@@
+0x3094 HIRAGANA LETTER VU
+&vu@@
+0x309b KATAKANA-HIRAGANA VOICED SOUND MARK
+&"5@@
+0x309c KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
+&05@@
+0x309d HIRAGANA ITERATION MARK
+&*5@@
+0x309e HIRAGANA VOICED ITERATION MARK
+&+5@@
+0x30a1 KATAKANA LETTER SMALL A
+&a6@@
+0x30a2 KATAKANA LETTER A
+&A6@@
+0x30a3 KATAKANA LETTER SMALL I
+&i6@@
+0x30a4 KATAKANA LETTER I
+&I6@@
+0x30a5 KATAKANA LETTER SMALL U
+&u6@@
+0x30a6 KATAKANA LETTER U
+&U6@@
+0x30a7 KATAKANA LETTER SMALL E
+&e6@@
+0x30a8 KATAKANA LETTER E
+&E6@@
+0x30a9 KATAKANA LETTER SMALL O
+&o6@@
+0x30aa KATAKANA LETTER O
+&O6@@
+0x30ab KATAKANA LETTER KA
+&Ka@@
+0x30ac KATAKANA LETTER GA
+&Ga@@
+0x30ad KATAKANA LETTER KI
+&Ki@@
+0x30ae KATAKANA LETTER GI
+&Gi@@
+0x30af KATAKANA LETTER KU
+&Ku@@
+0x30b0 KATAKANA LETTER GU
+&Gu@@
+0x30b1 KATAKANA LETTER KE
+&Ke@@
+0x30b2 KATAKANA LETTER GE
+&Ge@@
+0x30b3 KATAKANA LETTER KO
+&Ko@@
+0x30b4 KATAKANA LETTER GO
+&Go@@
+0x30b5 KATAKANA LETTER SA
+&Sa@@
+0x30b6 KATAKANA LETTER ZA
+&Za@@
+0x30b7 KATAKANA LETTER SI
+&Si@@
+0x30b8 KATAKANA LETTER ZI
+&Zi@@
+0x30b9 KATAKANA LETTER SU
+&Su@@
+0x30ba KATAKANA LETTER ZU
+&Zu@@
+0x30bb KATAKANA LETTER SE
+&Se@@
+0x30bc KATAKANA LETTER ZE
+&Ze@@
+0x30bd KATAKANA LETTER SO
+&So@@
+0x30be KATAKANA LETTER ZO
+&Zo@@
+0x30bf KATAKANA LETTER TA
+&Ta@@
+0x30c0 KATAKANA LETTER DA
+&Da@@
+0x30c1 KATAKANA LETTER TI
+&Ti@@
+0x30c2 KATAKANA LETTER DI
+&Di@@
+0x30c3 KATAKANA LETTER SMALL TU
+&TU@@
+0x30c4 KATAKANA LETTER TU
+&Tu@@
+0x30c5 KATAKANA LETTER DU
+&Du@@
+0x30c6 KATAKANA LETTER TE
+&Te@@
+0x30c7 KATAKANA LETTER DE
+&De@@
+0x30c8 KATAKANA LETTER TO
+&To@@
+0x30c9 KATAKANA LETTER DO
+&Do@@
+0x30ca KATAKANA LETTER NA
+&Na@@
+0x30cb KATAKANA LETTER NI
+&Ni@@
+0x30cc KATAKANA LETTER NU
+&Nu@@
+0x30cd KATAKANA LETTER NE
+&Ne@@
+0x30ce KATAKANA LETTER NO
+&No@@
+0x30cf KATAKANA LETTER HA
+&Ha@@
+0x30d0 KATAKANA LETTER BA
+&Ba@@
+0x30d1 KATAKANA LETTER PA
+&Pa@@
+0x30d2 KATAKANA LETTER HI
+&Hi@@
+0x30d3 KATAKANA LETTER BI
+&Bi@@
+0x30d4 KATAKANA LETTER PI
+&Pi@@
+0x30d5 KATAKANA LETTER HU
+&Hu@@
+0x30d6 KATAKANA LETTER BU
+&Bu@@
+0x30d7 KATAKANA LETTER PU
+&Pu@@
+0x30d8 KATAKANA LETTER HE
+&He@@
+0x30d9 KATAKANA LETTER BE
+&Be@@
+0x30da KATAKANA LETTER PE
+&Pe@@
+0x30db KATAKANA LETTER HO
+&Ho@@
+0x30dc KATAKANA LETTER BO
+&Bo@@
+0x30dd KATAKANA LETTER PO
+&Po@@
+0x30de KATAKANA LETTER MA
+&Ma@@
+0x30df KATAKANA LETTER MI
+&Mi@@
+0x30e0 KATAKANA LETTER MU
+&Mu@@
+0x30e1 KATAKANA LETTER ME
+&Me@@
+0x30e2 KATAKANA LETTER MO
+&Mo@@
+0x30e3 KATAKANA LETTER SMALL YA
+&YA@@
+0x30e4 KATAKANA LETTER YA
+&Ya@@
+0x30e5 KATAKANA LETTER SMALL YU
+&YU@@
+0x30e6 KATAKANA LETTER YU
+&Yu@@
+0x30e7 KATAKANA LETTER SMALL YO
+&YO@@
+0x30e8 KATAKANA LETTER YO
+&Yo@@
+0x30e9 KATAKANA LETTER RA
+&Ra@@
+0x30ea KATAKANA LETTER RI
+&Ri@@
+0x30eb KATAKANA LETTER RU
+&Ru@@
+0x30ec KATAKANA LETTER RE
+&Re@@
+0x30ed KATAKANA LETTER RO
+&Ro@@
+0x30ee KATAKANA LETTER SMALL WA
+&WA@@
+0x30ef KATAKANA LETTER WA
+&Wa@@
+0x30f0 KATAKANA LETTER WI
+&Wi@@
+0x30f1 KATAKANA LETTER WE
+&We@@
+0x30f2 KATAKANA LETTER WO
+&Wo@@
+0x30f3 KATAKANA LETTER N
+&N6@@
+0x30f4 KATAKANA LETTER VU
+&Vu@@
+0x30f5 KATAKANA LETTER SMALL KA
+&KA@@
+0x30f6 KATAKANA LETTER SMALL KE
+&KE@@
+0x30f7 KATAKANA LETTER VA
+&Va@@
+0x30f8 KATAKANA LETTER VI
+&Vi@@
+0x30f9 KATAKANA LETTER VE
+&Ve@@
+0x30fa KATAKANA LETTER VO
+&Vo@@
+0x30fb KATAKANA MIDDLE DOT
+&.6@@
+0x30fc KATAKANA-HIRAGANA PROLONGED SOUND MARK
+&-6@@
+0x30fd KATAKANA ITERATION MARK
+&*6@@
+0x30fe KATAKANA VOICED ITERATION MARK
+&+6@@
+0x3105 BOPOMOFO LETTER B
+&b4@@
+0x3106 BOPOMOFO LETTER P
+&p4@@
+0x3107 BOPOMOFO LETTER M
+&m4@@
+0x3108 BOPOMOFO LETTER F
+&f4@@
+0x3109 BOPOMOFO LETTER D
+&d4@@
+0x310a BOPOMOFO LETTER T
+&t4@@
+0x310b BOPOMOFO LETTER N
+&n4@@
+0x310c BOPOMOFO LETTER L
+&l4@@
+0x310d BOPOMOFO LETTER G
+&g4@@
+0x310e BOPOMOFO LETTER K
+&k4@@
+0x310f BOPOMOFO LETTER H
+&h4@@
+0x3110 BOPOMOFO LETTER J
+&j4@@
+0x3111 BOPOMOFO LETTER Q
+&q4@@
+0x3112 BOPOMOFO LETTER X
+&x4@@
+0x3113 BOPOMOFO LETTER ZH
+&zh@@
+0x3114 BOPOMOFO LETTER CH
+&ch@@
+0x3115 BOPOMOFO LETTER SH
+&sh@@
+0x3116 BOPOMOFO LETTER R
+&r4@@
+0x3117 BOPOMOFO LETTER Z
+&z4@@
+0x3118 BOPOMOFO LETTER C
+&c4@@
+0x3119 BOPOMOFO LETTER S
+&s4@@
+0x311a BOPOMOFO LETTER A
+&a4@@
+0x311b BOPOMOFO LETTER O
+&o4@@
+0x311c BOPOMOFO LETTER E
+&e4@@
+0x311d BOPOMOFO LETTER EH
+&_eh4_@@
+0x311e BOPOMOFO LETTER AI
+&ai@@
+0x311f BOPOMOFO LETTER EI
+&ei@@
+0x3120 BOPOMOFO LETTER AU
+&au@@
+0x3121 BOPOMOFO LETTER OU
+&ou@@
+0x3122 BOPOMOFO LETTER AN
+&an@@
+0x3123 BOPOMOFO LETTER EN
+&en@@
+0x3124 BOPOMOFO LETTER ANG
+&aN@@
+0x3125 BOPOMOFO LETTER ENG
+&eN@@
+0x3126 BOPOMOFO LETTER ER
+&er@@
+0x3127 BOPOMOFO LETTER I
+&i4@@
+0x3128 BOPOMOFO LETTER U
+&u4@@
+0x3129 BOPOMOFO LETTER IU
+&iu@@
+0x312a BOPOMOFO LETTER V
+&v4@@
+0x312b BOPOMOFO LETTER NG
+&nG@@
+0x312c BOPOMOFO LETTER GN
+&gn@@
+0x321c PARENTHESIZED HANGUL JU
+&_(JU)_@@
+0x3220 PARENTHESIZED IDEOGRAPH ONE
+&1c@@
+0x3221 PARENTHESIZED IDEOGRAPH TWO
+&2c@@
+0x3222 PARENTHESIZED IDEOGRAPH THREE
+&3c@@
+0x3223 PARENTHESIZED IDEOGRAPH FOUR
+&4c@@
+0x3224 PARENTHESIZED IDEOGRAPH FIVE
+&5c@@
+0x3225 PARENTHESIZED IDEOGRAPH SIX
+&6c@@
+0x3226 PARENTHESIZED IDEOGRAPH SEVEN
+&7c@@
+0x3227 PARENTHESIZED IDEOGRAPH EIGHT
+&8c@@
+0x3228 PARENTHESIZED IDEOGRAPH NINE
+&9c@@
+0x3229 PARENTHESIZED IDEOGRAPH TEN
+&_10c_@@
+0x327f KOREAN STANDARD SYMBOL
+&_KSC_@@
+0xe001 JOIN THIS LINE WITH NEXT LINE (Mnemonic)
+&/c@@
+0xe002 Unit space A (ISO-IR-8-1 064)
+&UA@@
+0xe003 Unit space B (ISO-IR-8-1 096)
+&UB@@
+0xe004 NON-SPACING UMLAUT (ISO-IR-38 201) (character part)
+&"3@@
+0xe005 NON-SPACING DIAERESIS WITH ACCENT (ISO-IR-70 192) (character part)
+&"1@@
+0xe006 NON-SPACING GRAVE ACCENT (ISO-IR-103 193) (character part)
+&"!@@
+0xe007 NON-SPACING ACUTE ACCENT (ISO-IR-103 194) (character part)
+&"'@@
+0xe008 NON-SPACING CIRCUMFLEX ACCENT (ISO-IR-103 195) (character part)
+&">@@
+0xe009 NON-SPACING TILDE (ISO-IR-103 196) (character part)
+&"?@@
+0xe00a NON-SPACING MACRON (ISO-IR-103 197) (character part)
+&"-@@
+0xe00b NON-SPACING BREVE (ISO-IR-103 198) (character part)
+&"(@@
+0xe00c NON-SPACING DOT ABOVE (ISO-IR-103 199) (character part)
+&".@@
+0xe00d NON-SPACING DIAERESIS (ISO-IR-103 200) (character part)
+&":@@
+0xe00e NON-SPACING RING ABOVE (ISO-IR-103 202) (character part)
+&"0@@
+0xe00f NON-SPACING DOUBLE ACCUTE (ISO-IR-103 204) (character part)
+&""@@
+0xe010 NON-SPACING CARON (ISO-IR-103 206) (character part)
+&"<@@
+0xe011 NON-SPACING CEDILLA (ISO-IR-103 203) (character part)
+&",@@
+0xe012 NON-SPACING OGONEK (ISO-IR-103 206) (character part)
+&";@@
+0xe013 NON-SPACING LOW LINE (ISO-IR-103 204) (character part)
+&"_@@
+0xe014 NON-SPACING DOUBLE LOW LINE (ISO-IR-38 217) (character part)
+&"=@@
+0xe015 NON-SPACING LONG SOLIDUS (ISO-IR-128 201) (character part)
+&"/@@
+0xe016 GREEK NON-SPACING IOTA BELOW (ISO-IR-55 39) (character part)
+&"i@@
+0xe017 GREEK NON-SPACING DASIA PNEUMATA (ISO-IR-55 38) (character part)
+&"d@@
+0xe018 GREEK NON-SPACING PSILI PNEUMATA (ISO-IR-55 37) (character part)
+&"p@@
+0xe019 GREEK DASIA PNEUMATA (ISO-IR-18 92)
+&;;@@
+0xe01a GREEK PSILI PNEUMATA (ISO-IR-18 124)
+&,,@@
+0xe01b GREEK SMALL LETTER MIDDLE BETA (ISO-IR-18 99)
+&b3@@
+0xe01c CIRCLE (ISO-IR-83 0294)
+&Ci@@
+0xe01d FUNCTION SIGN (ISO-IR-143 221)
+&f(@@
+0xe01e LATIN SMALL LETTER EZH (ISO-IR-158 142)
+&ed@@
+0xe01f ANTE MERIDIAM SIGN (ISO-IR-149 0267)
+&am@@
+0xe020 POST MERIDIAM SIGN (ISO-IR-149 0268)
+&pm@@
+0xe021 TEL COMPATIBILITY SIGN (ISO-IR-149 0269)
+&_Tel_@@
+0xe022 ARABIC LETTER ALEF FINAL FORM COMPATIBILITY (IBM868 144)
+&_a+:_@@
+0xe023 DUTCH GUILDER SIGN (IBM437 159)
+&Fl@@
+0xe024 GAMMA FUNCTION SIGN (ISO-10646-1DIS 032/032/037/122)
+&GF@@
+0xe025 RIGHTWARDS VECTOR ABOVE (ISO-10646-1DIS 032/032/038/046)
+&>V@@
+0xe026 GREEK VARIA (ISO-10646-1DIS 032/032/042/164)
+&!*@@
+0xe027 GREEK PERISPOMENI (ISO-10646-1DIS 032/032/042/165)
+&?*@@
+0xe028 LATIN CAPITAL LETTER J WITH CARON (lowercase: 000/000/001/240)
+&J<@@
+0xfb00 LATIN SMALL LIGATURE FF
+&ff@@
+0xfb01 LATIN SMALL LIGATURE FI
+&fi@@
+0xfb02 LATIN SMALL LIGATURE FL
+&fl@@
+0xfb03 LATIN SMALL LIGATURE FFI
+&_ffi_@@
+0xfb04 LATIN SMALL LIGATURE FFL
+&_ffl_@@
+0xfb05 LATIN SMALL LIGATURE FT
+&ft@@
+0xfb06 LATIN SMALL LIGATURE ST
+&st@@
+0xfe7d ARABIC SHADDA MEDIAL FORM
+&_3+;_@@
+0xfe82 ARABIC LETTER ALEF WITH MADDA ABOVE FINAL FORM
+&_aM._@@
+0xfe84 ARABIC LETTER ALEF WITH HAMZA ABOVE FINAL FORM
+&_aH._@@
+0xfe8d ARABIC LETTER ALEF ISOLATED FORM
+&_a+-_@@
+0xfe8e ARABIC LETTER ALEF FINAL FORM
+&_a+._@@
+0xfe8f ARABIC LETTER BEH ISOLATED FORM
+&_b+-_@@
+0xfe90 ARABIC LETTER BEH INITIAL FORM
+&_b+,_@@
+0xfe91 ARABIC LETTER BEH MEDIAL FORM
+&_b+;_@@
+0xfe92 ARABIC LETTER BEH FINAL FORM
+&_b+._@@
+0xfe93 ARABIC LETTER TEH MARBUTA ISOLATED FORM
+&_tm-_@@
+0xfe94 ARABIC LETTER TEH MARBUTA FINAL FORM
+&_tm._@@
+0xfe95 ARABIC LETTER TEH ISOLATED FORM
+&_t+-_@@
+0xfe96 ARABIC LETTER TEH INITIAL FORM
+&_t+,_@@
+0xfe97 ARABIC LETTER TEH MEDIAL FORM
+&_t+;_@@
+0xfe98 ARABIC LETTER TEH FINAL FORM
+&_t+._@@
+0xfe99 ARABIC LETTER THEH ISOLATED FORM
+&_tk-_@@
+0xfe9a ARABIC LETTER THEH INITIAL FORM
+&_tk,_@@
+0xfe9b ARABIC LETTER THEH MEDIAL FORM
+&_tk;_@@
+0xfe9c ARABIC LETTER THEH FINAL FORM
+&_tk._@@
+0xfe9d ARABIC LETTER JEEM ISOLATED FORM
+&_g+-_@@
+0xfe9e ARABIC LETTER JEEM INITIAL FORM
+&_g+,_@@
+0xfe9f ARABIC LETTER JEEM MEDIAL FORM
+&_g+;_@@
+0xfea0 ARABIC LETTER JEEM FINAL FORM
+&_g+._@@
+0xfea1 ARABIC LETTER HAH ISOLATED FORM
+&_hk-_@@
+0xfea2 ARABIC LETTER HAH INITIAL FORM
+&_hk,_@@
+0xfea3 ARABIC LETTER HAH MEDIAL FORM
+&_hk;_@@
+0xfea4 ARABIC LETTER HAH FINAL FORM
+&_hk._@@
+0xfea5 ARABIC LETTER KHAH ISOLATED FORM
+&_x+-_@@
+0xfea6 ARABIC LETTER KHAH INITIAL FORM
+&_x+,_@@
+0xfea7 ARABIC LETTER KHAH MEDIAL FORM
+&_x+;_@@
+0xfea8 ARABIC LETTER KHAH FINAL FORM
+&_x+._@@
+0xfea9 ARABIC LETTER DAL ISOLATED FORM
+&_d+-_@@
+0xfeaa ARABIC LETTER DAL FINAL FORM
+&_d+._@@
+0xfeab ARABIC LETTER THAL ISOLATED FORM
+&_dk-_@@
+0xfeac ARABIC LETTER THAL FINAL FORM
+&_dk._@@
+0xfead ARABIC LETTER REH ISOLATED FORM
+&_r+-_@@
+0xfeae ARABIC LETTER REH FINAL FORM
+&_r+._@@
+0xfeaf ARABIC LETTER ZAIN ISOLATED FORM
+&_z+-_@@
+0xfeb0 ARABIC LETTER ZAIN FINAL FORM
+&_z+._@@
+0xfeb1 ARABIC LETTER SEEN ISOLATED FORM
+&_s+-_@@
+0xfeb2 ARABIC LETTER SEEN INITIAL FORM
+&_s+,_@@
+0xfeb3 ARABIC LETTER SEEN MEDIAL FORM
+&_s+;_@@
+0xfeb4 ARABIC LETTER SEEN FINAL FORM
+&_s+._@@
+0xfeb5 ARABIC LETTER SHEEN ISOLATED FORM
+&_sn-_@@
+0xfeb6 ARABIC LETTER SHEEN INITIAL FORM
+&_sn,_@@
+0xfeb7 ARABIC LETTER SHEEN MEDIAL FORM
+&_sn;_@@
+0xfeb8 ARABIC LETTER SHEEN FINAL FORM
+&_sn._@@
+0xfeb9 ARABIC LETTER SAD ISOLATED FORM
+&_c+-_@@
+0xfeba ARABIC LETTER SAD INITIAL FORM
+&_c+,_@@
+0xfebb ARABIC LETTER SAD MEDIAL FORM
+&_c+;_@@
+0xfebc ARABIC LETTER SAD FINAL FORM
+&_c+._@@
+0xfebd ARABIC LETTER DAD ISOLATED FORM
+&_dd-_@@
+0xfebe ARABIC LETTER DAD INITIAL FORM
+&_dd,_@@
+0xfebf ARABIC LETTER DAD MEDIAL FORM
+&_dd;_@@
+0xfec0 ARABIC LETTER DAD FINAL FORM
+&_dd._@@
+0xfec1 ARABIC LETTER TAH ISOLATED FORM
+&_tj-_@@
+0xfec2 ARABIC LETTER TAH INITIAL FORM
+&_tj,_@@
+0xfec3 ARABIC LETTER TAH MEDIAL FORM
+&_tj;_@@
+0xfec4 ARABIC LETTER TAH FINAL FORM
+&_tj._@@
+0xfec5 ARABIC LETTER ZAH ISOLATED FORM
+&_zH-_@@
+0xfec6 ARABIC LETTER ZAH INITIAL FORM
+&_zH,_@@
+0xfec7 ARABIC LETTER ZAH MEDIAL FORM
+&_zH;_@@
+0xfec8 ARABIC LETTER ZAH FINAL FORM
+&_zH._@@
+0xfec9 ARABIC LETTER AIN ISOLATED FORM
+&_e+-_@@
+0xfeca ARABIC LETTER AIN INITIAL FORM
+&_e+,_@@
+0xfecb ARABIC LETTER AIN MEDIAL FORM
+&_e+;_@@
+0xfecc ARABIC LETTER AIN FINAL FORM
+&_e+._@@
+0xfecd ARABIC LETTER GHAIN ISOLATED FORM
+&_i+-_@@
+0xfece ARABIC LETTER GHAIN INITIAL FORM
+&_i+,_@@
+0xfecf ARABIC LETTER GHAIN MEDIAL FORM
+&_i+;_@@
+0xfed0 ARABIC LETTER GHAIN FINAL FORM
+&_i+._@@
+0xfed1 ARABIC LETTER FEH ISOLATED FORM
+&_f+-_@@
+0xfed2 ARABIC LETTER FEH INITIAL FORM
+&_f+,_@@
+0xfed3 ARABIC LETTER FEH MEDIAL FORM
+&_f+;_@@
+0xfed4 ARABIC LETTER FEH FINAL FORM
+&_f+._@@
+0xfed5 ARABIC LETTER QAF ISOLATED FORM
+&_q+-_@@
+0xfed6 ARABIC LETTER QAF INITIAL FORM
+&_q+,_@@
+0xfed7 ARABIC LETTER QAF MEDIAL FORM
+&_q+;_@@
+0xfed8 ARABIC LETTER QAF FINAL FORM
+&_q+._@@
+0xfed9 ARABIC LETTER KAF ISOLATED FORM
+&_k+-_@@
+0xfeda ARABIC LETTER KAF INITIAL FORM
+&_k+,_@@
+0xfedb ARABIC LETTER KAF MEDIAL FORM
+&_k+;_@@
+0xfedc ARABIC LETTER KAF FINAL FORM
+&_k+._@@
+0xfedd ARABIC LETTER LAM ISOLATED FORM
+&_l+-_@@
+0xfede ARABIC LETTER LAM INITIAL FORM
+&_l+,_@@
+0xfedf ARABIC LETTER LAM MEDIAL FORM
+&_l+;_@@
+0xfee0 ARABIC LETTER LAM FINAL FORM
+&_l+._@@
+0xfee1 ARABIC LETTER MEEM ISOLATED FORM
+&_m+-_@@
+0xfee2 ARABIC LETTER MEEM INITIAL FORM
+&_m+,_@@
+0xfee3 ARABIC LETTER MEEM MEDIAL FORM
+&_m+;_@@
+0xfee4 ARABIC LETTER MEEM FINAL FORM
+&_m+._@@
+0xfee5 ARABIC LETTER NOON ISOLATED FORM
+&_n+-_@@
+0xfee6 ARABIC LETTER NOON INITIAL FORM
+&_n+,_@@
+0xfee7 ARABIC LETTER NOON MEDIAL FORM
+&_n+;_@@
+0xfee8 ARABIC LETTER NOON FINAL FORM
+&_n+._@@
+0xfee9 ARABIC LETTER HEH ISOLATED FORM
+&_h+-_@@
+0xfeea ARABIC LETTER HEH INITIAL FORM
+&_h+,_@@
+0xfeeb ARABIC LETTER HEH MEDIAL FORM
+&_h+;_@@
+0xfeec ARABIC LETTER HEH FINAL FORM
+&_h+._@@
+0xfeed ARABIC LETTER WAW ISOLATED FORM
+&_w+-_@@
+0xfeee ARABIC LETTER WAW FINAL FORM
+&_w+._@@
+0xfeef ARABIC LETTER ALEF MAKSURA ISOLATED FORM
+&_j+-_@@
+0xfef0 ARABIC LETTER ALEF MAKSURA FINAL FORM
+&_j+._@@
+0xfef1 ARABIC LETTER YEH ISOLATED FORM
+&_y+-_@@
+0xfef2 ARABIC LETTER YEH INITIAL FORM
+&_y+,_@@
+0xfef3 ARABIC LETTER YEH MEDIAL FORM
+&_y+;_@@
+0xfef4 ARABIC LETTER YEH FINAL FORM
+&_y+._@@
+0xfef5 ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE ISOLATED FORM
+&_lM-_@@
+0xfef6 ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE FINAL FORM
+&_lM._@@
+0xfef7 ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE ISOLATED FORM
+&_lH-_@@
+0xfef8 ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE FINAL FORM
+&_lH._@@
+0xfef9 ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW ISOLATED FORM
+&_lh-_@@
+0xfefa ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW FINAL FORM
+&_lh._@@
+0xfefb ARABIC LIGATURE LAM WITH ALEF ISOLATED FORM
+&_la-_@@
+0xfefc ARABIC LIGATURE LAM WITH ALEF FINAL FORM
+&_la._@@
diff --git a/externals/figlet/fonts/moscow.flc b/externals/figlet/fonts/moscow.flc
new file mode 100644
index 000000000..86454f175
--- /dev/null
+++ b/externals/figlet/fonts/moscow.flc
@@ -0,0 +1,68 @@
+flc2a
+# This controlfile maps the U.S. keyboard to Cyrillic
+# in the style of the "moscow" font, but is meant for use
+# with a FIGlet Unicode font with Cyrillic codes, such as "banner"
+#
+# "moscow" is an upper-case-only font, so for full compatibility
+# use the "upper" controlfile as well and avoid "@" and "<".
+t / \0x044c
+t \0x5c \0x044a
+t | \0x044b
+t ~ \0x044d
+t < \0x042d
+t ` \0x0443
+t @ \0x042e
+t > \0x0439
+t A \0x0410
+t a \0x0430
+t B \0x0411
+t b \0x0431
+t C \0x0427
+t c \0x0447
+t D \0x0414
+t d \0x0434
+t E \0x0415
+t e \0x0435
+t F \0x0424
+t f \0x0444
+t G \0x0413
+t g \0x0433
+t H \0x0425
+t h \0x0445
+t I \0x0418
+t i \0x0438
+t J \0x0416
+t j \0x0436
+t K \0x041a
+t k \0x043a
+t L \0x041b
+t l \0x043b
+t M \0x041c
+t m \0x043c
+t N \0x041d
+t n \0x043d
+t O \0x041e
+t o \0x043e
+t P \0x041f
+t p \0x043f
+t Q \0x0426
+t q \0x0446
+t R \0x0420
+t r \0x0440
+t S \0x0421
+t s \0x0441
+t T \0x0422
+t t \0x0442
+t U \0x0423
+t u \0x0443
+t V \0x0412
+t v \0x0432
+t W \0x0428
+t w \0x0448
+t X \0x0429
+t x \0x0449
+t Y \0x042f
+t y \0x044f
+t Z \0x0417
+t z \0x0437
+t = \-6
diff --git a/externals/figlet/fonts/script.flf b/externals/figlet/fonts/script.flf
new file mode 100644
index 000000000..8f2f048fa
--- /dev/null
+++ b/externals/figlet/fonts/script.flf
@@ -0,0 +1,1493 @@
+flf2a$ 7 5 16 0 10 0 3904 96
+Script by Glenn Chappell 4/93
+Includes ISO Latin-1
+figlet release 2.1 -- 12 Aug 1994
+Permission is hereby given to modify this font, as long as the
+modifier's name is placed on a comment line.
+
+Modified by Paul Burton <solution@earthlink.net> 12/96 to include new parameter
+supported by FIGlet and FIGWin. May also be slightly modified for better use
+of new full-width/kern/smush alternatives, but default output is NOT changed.
+
+$$@
+$$@
+$$@
+$$@
+$$@
+$$@
+$$@@
+ @
+ |@
+ |@
+ |@
+ o@
+ @
+ @@
+ oo@
+ ||@
+ $$@
+ $$@
+ $$@
+ @
+ @@
+ @
+ | | @
+ --+--+--@
+ --+--+--@
+ | | @
+ @
+ @@
+ @
+ |_|_@
+ (|_| @
+ _|_|)@
+ | | @
+ @
+ @@
+ @
+ () /@
+ / @
+ / @
+ / ()@
+ @
+ @@
+ @
+ () @
+ /\ @
+ / \/@
+ \__/\@
+ @
+ @@
+ o@
+ /@
+ $@
+ $@
+ $@
+ @
+ @@
+ @
+ /@
+ | @
+ | @
+ | @
+ \@
+ @@
+ @
+ \ @
+ |@
+ |@
+ |@
+ / @
+ @@
+ @
+ @
+ \|/ @
+ --*--@
+ /|\ @
+ @
+ @@
+ @
+ @
+ | @
+ --+--@
+ | @
+ @
+ @@
+ @
+ @
+ @
+ @
+ o@
+ /@
+ @@
+ @
+ @
+ @
+ -----@
+ $ @
+ @
+ @@
+ @
+ @
+ @
+ @
+ o@
+ @
+ @@
+ @
+ /@
+ / @
+ / @
+ / @
+ @
+ @@
+ __ @
+ / \ @
+ | |@
+ | |@
+ \__/ @
+ @
+ @@
+ ,@
+ /|@
+ |@
+ |@
+ |@
+ @
+ @@
+ __ @
+ / )@
+ $/ @
+ / @
+ /___@
+ @
+ @@
+ ___ @
+ / \@
+ $__/@
+ $ \@
+ \___/@
+ @
+ @@
+ @
+ | | @
+ |__|_@
+ | @
+ | @
+ @
+ @@
+ ____@
+ | @
+ |___ @
+ $ \@
+ \___/@
+ @
+ @@
+ __ @
+ /$ @
+ | __ @
+ |/ \@
+ \__/@
+ @
+ @@
+ _____@
+ $ /@
+ $ / @
+ $/ @
+ / @
+ @
+ @@
+ __ @
+ / \@
+ \__/@
+ / \@
+ \__/@
+ @
+ @@
+ __ @
+ / |@
+ \_/|@
+ |@
+ |@
+ @
+ @@
+ @
+ o@
+ $@
+ $@
+ o@
+ @
+ @@
+ @
+ o@
+ $@
+ $@
+ o@
+ /@
+ @@
+ @
+ /@
+ / @
+ \ @
+ \@
+ @
+ @@
+ @
+ @
+ -----@
+ -----@
+ @
+ @
+ @@
+ @
+ \ @
+ \@
+ /@
+ / @
+ @
+ @@
+ __ @
+ / \@
+ $_/@
+ | @
+ o @
+ @
+ @@
+ @
+ ____ @
+ / __,\ @
+ | / | |@
+ | \_/|/ @
+ \____/ @
+ @@
+ ___, @
+ / | @
+ | | @
+ | | @
+ \__/\_/@
+ @
+ @@
+ , __ @
+ /|/ \@
+ | __/@
+ | \@
+ |(__/@
+ @
+ @@
+ ___$@
+ / (_)@
+ | $ @
+ | $ @
+ \___/@
+ @
+ @@
+ $____ @
+ (| \ @
+ | |@
+ $_| |@
+ (/\___/ @
+ @
+ @@
+ ___$@
+ / (_)@
+ \__$ @
+ / $ @
+ \___/@
+ @
+ @@
+ $______@
+ (_) |$ @
+ _|_$@
+ / | |@
+ (_/ @
+ @
+ @@
+ @
+ () |@
+ /\/|@
+ / |@
+ /(__/ @
+ @
+ @@
+ , @
+ /| | @
+ |___| @
+ | |\@
+ | |/@
+ @
+ @@
+ _ @
+ | |@
+ | |@
+ _ |/ @
+ \_/\/@
+ @
+ @@
+ @
+ /\ @
+ | | @
+ | | @
+ \_|/@
+ /| @
+ \| @@
+ , @
+ /| / @
+ |__/ @
+ | \$ @
+ | \_/@
+ @
+ @@
+ $_$ @
+ \_|_) @
+ |$ @
+ $_|$ @
+ (/\___/@
+ @
+ @@
+ ,__ __ @
+ /| | | @
+ | | | @
+ | | | @
+ | | |_/@
+ @
+ @@
+ , _ @
+ /|/ \ @
+ | | @
+ | | @
+ | |_/@
+ @
+ @@
+ __ @
+ /\_\/@
+ | |@
+ | |@
+ \__/ @
+ @
+ @@
+ , __ @
+ /|/ \@
+ |___/@
+ | $@
+ | $@
+ @
+ @@
+ __ @
+ / \ @
+ | __ | @
+ |/ \| @
+ \__/\_/@
+ @
+ @@
+ , __ @
+ /|/ \ @
+ |___/ @
+ | \$ @
+ | \_/@
+ @
+ @@
+ @
+ () @
+ /\ @
+ / \@
+ /(__/@
+ @
+ @@
+ $______@
+ (_) | @
+ $ | @
+ $_ | @
+ (_/ @
+ @
+ @@
+ $_ @
+ (_| | @
+ | | @
+ | | @
+ \__/\_/@
+ @
+ @@
+ $_ @
+ (_| |_/@
+ | | @
+ | | @
+ \_/ @
+ @
+ @@
+ $_ @
+ (_| | |_/@
+ | | | @
+ | | | @
+ \_/ \_/ @
+ @
+ @@
+ $_ @
+ (_\ / @
+ $\/ @
+ $/\ @
+ _/ \_/@
+ @
+ @@
+ $_ @
+ (_| | @
+ | | @
+ | | @
+ \_/|/@
+ /| @
+ \| @@
+ $__ @
+ (_ \ @
+ $/ @
+ / @
+ /__/@
+ /| @
+ \| @@
+ _@
+ | @
+ | @
+ | @
+ | @
+ |_@
+ @@
+ @
+ \ @
+ \ @
+ \ @
+ \@
+ @
+ @@
+ _ @
+ |@
+ |@
+ |@
+ |@
+ _|@
+ @@
+ /\@
+ $@
+ $@
+ $@
+ $@
+ @
+ @@
+ @
+ @
+ @
+ @
+ $ @
+ $ @
+ _____@@
+ o@
+ \@
+ $@
+ $@
+ $@
+ @
+ @@
+ @
+ @
+ __, @
+ / | @
+ \_/|_/@
+ @
+ @@
+ $_$ @
+ | | @
+ | | @
+ |/ \_@
+ \_/ @
+ @
+ @@
+ @
+ @
+ __ @
+ /$ @
+ \___/@
+ @
+ @@
+ @
+ | @
+ __| @
+ / | @
+ \_/|_/@
+ @
+ @@
+ @
+ @
+ _ @
+ |/ @
+ |__/@
+ @
+ @@
+ $_$ @
+ | | @
+ | | @
+ |/ @
+ |__/@
+ |\ @
+ |/ @@
+ @
+ @
+ __, @
+ / | @
+ \_/|/@
+ /| @
+ \| @@
+ $_$ @
+ | | @
+ | | @
+ |/ \ @
+ | |_/@
+ @
+ @@
+ @
+ o @
+ @
+ | @
+ |_/@
+ @
+ @@
+ @
+ o @
+ @
+ | @
+ |/@
+ /| @
+ \| @@
+ $_$ @
+ | | @
+ | | @
+ |/_) @
+ | \_/@
+ @
+ @@
+ $_$ @
+ | | @
+ | | @
+ |/ @
+ |__/@
+ @
+ @@
+ @
+ @
+ _ _ _ @
+ / |/ |/ | @
+ $ | | |_/@
+ @
+ @@
+ @
+ @
+ _ _ @
+ / |/ | @
+ $ | |_/@
+ @
+ @@
+ @
+ @
+ __ @
+ / \_@
+ \__/ @
+ @
+ @@
+ @
+ @
+ _ @
+ |/ \_@
+ |__/ @
+ /| @
+ \| @@
+ @
+ @
+ __, @
+ / | @
+ \_/|_/@
+ |\ @
+ |/ @@
+ @
+ @
+ ,_ @
+ / | @
+ $ |_/@
+ @
+ @@
+ @
+ @
+ , @
+ / \_@
+ $\/ @
+ @
+ @@
+ @
+ @
+ _|_ @
+ | @
+ |_/@
+ @
+ @@
+ @
+ @
+ @
+ | | @
+ $\_/|_/@
+ @
+ @@
+ @
+ @
+ @
+ | |_@
+ $\/ @
+ @
+ @@
+ @
+ @
+ @
+ | | |_@
+ $\/ \/ @
+ @
+ @@
+ @
+ @
+ @
+ /\/ @
+ $/\_/@
+ @
+ @@
+ @
+ @
+ @
+ | | @
+ $\_/|/@
+ /| @
+ \| @@
+ @
+ @
+ __ @
+ / / _@
+ $/_/ @
+ /| @
+ \| @@
+ @
+ /@
+ | @
+ < @
+ | @
+ \@
+ @@
+ |@
+ |@
+ |@
+ |@
+ |@
+ |@
+ |@@
+ @
+ \ @
+ | @
+ >@
+ | @
+ / @
+ @@
+ /\/@
+ $ @
+ $ @
+ $ @
+ $ @
+ @
+ @@
+ o o @
+ ___, @
+ / | @
+ | | @
+ \__/\_/@
+ @
+ @@
+ o o @
+ __ @
+ /\_\/@
+ | |@
+ \__/ @
+ @
+ @@
+ o o @
+ $_ @
+ (_| | @
+ | | @
+ \__/\_/@
+ @
+ @@
+ o o @
+ @
+ __, @
+ / | @
+ \_/|_/@
+ @
+ @@
+ o o @
+ @
+ __ @
+ / \_@
+ \__/ @
+ @
+ @@
+ o o @
+ @
+ @
+ | | @
+ $\_/|_/@
+ @
+ @@
+ _ @
+ / \@
+ | /@
+ | \@
+ | _/@
+ | @
+ @@
+160 NO-BREAK SPACE
+ $$@
+ $$@
+ $$@
+ $$@
+ $$@
+ $$@
+ $$@@
+161 INVERTED EXCLAMATION MARK
+ @
+ o@
+ |@
+ |@
+ |@
+ @
+ @@
+162 CENT SIGN
+ @
+ @
+ _|_ @
+ / | @
+ \_|_/@
+ | @
+ @@
+163 POUND SIGN
+ _ @
+ / \ @
+ __|__ @
+ _| $ @
+ (/ \__/@
+ @
+ @@
+164 CURRENCY SIGN
+ @
+ \ _ /@
+ / \ @
+ \_/ @
+ / \@
+ @
+ @@
+165 YEN SIGN
+ @
+ \ /@
+ _\_/_@
+ __|__@
+ | @
+ @
+ @@
+166 BROKEN BAR
+ |@
+ |@
+ |@
+ @
+ |@
+ |@
+ |@@
+167 SECTION SIGN
+ _@
+ ( @
+ /\@
+ \/@
+ _)@
+ @
+ @@
+168 DIAERESIS
+ o o@
+ $ $@
+ $ $@
+ $ $@
+ $ $@
+ @
+ @@
+169 COPYRIGHT SIGN
+ ____ @
+ / __ \ @
+ / / () \ @
+ | | |@
+ \ \__/ / @
+ \____/ @
+ @@
+170 FEMININE ORDINAL INDICATOR
+ __, @
+ / | @
+ \_/|_@
+ ---- @
+ $ @
+ @
+ @@
+171 LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+ @
+ //@
+ // @
+ \\ @
+ \\@
+ @
+ @@
+172 NOT SIGN
+ @
+ ___ @
+ |@
+ $ @
+ $ @
+ @
+ @@
+173 SOFT HYPHEN
+ @
+ @
+ @
+ ----@
+ $ @
+ @
+ @@
+174 REGISTERED SIGN
+ ____ @
+ /, _ \ @
+ //|/ \ \ @
+ | |__/ |@
+ \ | \_// @
+ \____/ @
+ @@
+175 MACRON
+ _____@
+ $ @
+ $ @
+ $ @
+ $ @
+ @
+ @@
+176 DEGREE SIGN
+ _ @
+ / \@
+ \_/@
+ @
+ $ @
+ @
+ @@
+177 PLUS-MINUS SIGN
+ @
+ @
+ | @
+ --+--@
+ __|__@
+ @
+ @@
+178 SUPERSCRIPT TWO
+ _ @
+ )@
+ /_@
+ @
+ $@
+ @
+ @@
+179 SUPERSCRIPT THREE
+ ___@
+ _/@
+ __)@
+ @
+ $ @
+ @
+ @@
+180 ACUTE ACCENT
+ /@
+ $@
+ $@
+ $@
+ $@
+ @
+ @@
+181 MICRO SIGN
+ @
+ @
+ @
+ | | @
+ |\_/|_/@
+ | @
+ | @@
+182 PILCROW SIGN
+ ____ @
+ / | |@
+ \_| |@
+ | |@
+ | |@
+ @
+ @@
+183 MIDDLE DOT
+ @
+ @
+ $O$@
+ $ @
+ $ @
+ @
+ @@
+184 CEDILLA
+ @
+ @
+ @
+ @
+ $ @
+ _)@
+ @@
+185 SUPERSCRIPT ONE
+ ,@
+ /|@
+ |@
+ @
+ $@
+ @
+ @@
+186 MASCULINE ORDINAL INDICATOR
+ __ @
+ / \_@
+ \__/ @
+ ---- @
+ $ @
+ @
+ @@
+187 RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+ @
+ \\ @
+ \\@
+ //@
+ // @
+ @
+ @@
+188 VULGAR FRACTION ONE QUARTER
+ , @
+ /| / @
+ |/ @
+ /|_|_@
+ / | @
+ @
+ @@
+189 VULGAR FRACTION ONE HALF
+ , @
+ /| / @
+ |/_ @
+ / )@
+ / /_@
+ @
+ @@
+190 VULGAR FRACTION THREE QUARTERS
+ ___ @
+ _/ / @
+ __)/ @
+ /|_|_@
+ / | @
+ @
+ @@
+191 INVERTED QUESTION MARK
+ @
+ o @
+ _| @
+ /$ @
+ \__/@
+ @
+ @@
+192 LATIN CAPITAL LETTER A WITH GRAVE
+ \ @
+ ___, @
+ / | @
+ | | @
+ \__/\_/@
+ @
+ @@
+193 LATIN CAPITAL LETTER A WITH ACUTE
+ / @
+ ___, @
+ / | @
+ | | @
+ \__/\_/@
+ @
+ @@
+194 LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+ /\ @
+ ___, @
+ / | @
+ | | @
+ \__/\_/@
+ @
+ @@
+195 LATIN CAPITAL LETTER A WITH TILDE
+ /\/ @
+ ___, @
+ / | @
+ | | @
+ \__/\_/@
+ @
+ @@
+196 LATIN CAPITAL LETTER A WITH DIAERESIS
+ o o @
+ ___, @
+ / | @
+ | | @
+ \__/\_/@
+ @
+ @@
+197 LATIN CAPITAL LETTER A WITH RING ABOVE
+ _ @
+ (_), @
+ / | @
+ | | @
+ \__/\_/@
+ @
+ @@
+198 LATIN CAPITAL LETTER AE
+ ___,___$@
+ / | (_)@
+ | |__ @
+ | | @
+ \__/\___/@
+ @
+ @@
+199 LATIN CAPITAL LETTER C WITH CEDILLA
+ ___$@
+ / (_)@
+ | $ @
+ | $ @
+ \___/@
+ _) @
+ @@
+200 LATIN CAPITAL LETTER E WITH GRAVE
+ \ @
+ ___$ @
+ / (_) @
+ >--$ @
+ \____/@
+ @
+ @@
+201 LATIN CAPITAL LETTER E WITH ACUTE
+ / @
+ ___$ @
+ / (_) @
+ >--$ @
+ \____/@
+ @
+ @@
+202 LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+ /\ @
+ ___$ @
+ / (_) @
+ >--$ @
+ \____/@
+ @
+ @@
+203 LATIN CAPITAL LETTER E WITH DIAERESIS
+ o o @
+ ___$ @
+ / (_) @
+ >--$ @
+ \____/@
+ @
+ @@
+204 LATIN CAPITAL LETTER I WITH GRAVE
+ \ @
+ $_$ @
+ | | @
+ _ |/ @
+ \_/\_/@
+ @
+ @@
+205 LATIN CAPITAL LETTER I WITH ACUTE
+ / @
+ $_$ @
+ | | @
+ _ |/ @
+ \_/\_/@
+ @
+ @@
+206 LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+ /\ @
+ $_$ @
+ | | @
+ _ |/ @
+ \_/\_/@
+ @
+ @@
+207 LATIN CAPITAL LETTER I WITH DIAERESIS
+ o o @
+ $_$ @
+ | | @
+ _ |/ @
+ \_/\_/@
+ @
+ @@
+208 LATIN CAPITAL LETTER ETH
+ $____ @
+ (| \ @
+ __|__ |@
+ $_| |@
+ (/\___/ @
+ @
+ @@
+209 LATIN CAPITAL LETTER N WITH TILDE
+ /\/ @
+ , _ @
+ /|/ \ @
+ | | @
+ | |_/@
+ @
+ @@
+210 LATIN CAPITAL LETTER O WITH GRAVE
+ \ @
+ __ @
+ /\_\/@
+ | |@
+ \__/ @
+ @
+ @@
+211 LATIN CAPITAL LETTER O WITH ACUTE
+ / @
+ __ @
+ /\_\/@
+ | |@
+ \__/ @
+ @
+ @@
+212 LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+ /\ @
+ __ @
+ /\_\/@
+ | |@
+ \__/ @
+ @
+ @@
+213 LATIN CAPITAL LETTER O WITH TILDE
+ /\/ @
+ __ @
+ /\_\/@
+ | |@
+ \__/ @
+ @
+ @@
+214 LATIN CAPITAL LETTER O WITH DIAERESIS
+ o o @
+ __ @
+ /\_\/@
+ | |@
+ \__/ @
+ @
+ @@
+215 MULTIPLICATION SIGN
+ @
+ @
+ $\/$@
+ $/\$@
+ $ $@
+ @
+ @@
+216 LATIN CAPITAL LETTER O WITH STROKE
+ __ /@
+ /\_//@
+ | / |@
+ | / |@
+ /__/ @
+ / @
+ @@
+217 LATIN CAPITAL LETTER U WITH GRAVE
+ \ @
+ $_ @
+ (_| | @
+ | | @
+ \__/\_/@
+ @
+ @@
+218 LATIN CAPITAL LETTER U WITH ACUTE
+ / @
+ $_ @
+ (_| | @
+ | | @
+ \__/\_/@
+ @
+ @@
+219 LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+ /\ @
+ $_ @
+ (_| | @
+ | | @
+ \__/\_/@
+ @
+ @@
+220 LATIN CAPITAL LETTER U WITH DIAERESIS
+ o o @
+ $_ @
+ (_| | @
+ | | @
+ \__/\_/@
+ @
+ @@
+221 LATIN CAPITAL LETTER Y WITH ACUTE
+ / @
+ $_ @
+ (_| | @
+ | | @
+ \_/|/@
+ /| @
+ \| @@
+222 LATIN CAPITAL LETTER THORN
+ , @
+ | __ @
+ /|/ \@
+ |___/@
+ | $@
+ @
+ @@
+223 LATIN SMALL LETTER SHARP S
+ _ @
+ / \@
+ | /@
+ | \@
+ | _/@
+ | @
+ @@
+224 LATIN SMALL LETTER A WITH GRAVE
+ \ @
+ @
+ __, @
+ / | @
+ \_/|_/@
+ @
+ @@
+225 LATIN SMALL LETTER A WITH ACUTE
+ / @
+ @
+ __, @
+ / | @
+ \_/|_/@
+ @
+ @@
+226 LATIN SMALL LETTER A WITH CIRCUMFLEX
+ /\ @
+ @
+ __, @
+ / | @
+ \_/|_/@
+ @
+ @@
+227 LATIN SMALL LETTER A WITH TILDE
+ /\/ @
+ @
+ __, @
+ / | @
+ \_/|_/@
+ @
+ @@
+228 LATIN SMALL LETTER A WITH DIAERESIS
+ o o @
+ @
+ __, @
+ / | @
+ \_/|_/@
+ @
+ @@
+229 LATIN SMALL LETTER A WITH RING ABOVE
+ @
+ () @
+ __, @
+ / | @
+ \_/|_/@
+ @
+ @@
+230 LATIN SMALL LETTER AE
+ @
+ @
+ __,_ @
+ / |/ @
+ \_/|__/@
+ @
+ @@
+231 LATIN SMALL LETTER C WITH CEDILLA
+ @
+ @
+ __ @
+ / @
+ \___/@
+ _) @
+ @@
+232 LATIN SMALL LETTER E WITH GRAVE
+ \ @
+ @
+ _ @
+ |/ @
+ |__/@
+ @
+ @@
+233 LATIN SMALL LETTER E WITH ACUTE
+ / @
+ @
+ _ @
+ |/ @
+ |__/@
+ @
+ @@
+234 LATIN SMALL LETTER E WITH CIRCUMFLEX
+ /\ @
+ @
+ _ @
+ |/ @
+ |__/@
+ @
+ @@
+235 LATIN SMALL LETTER E WITH DIAERESIS
+ o o @
+ @
+ _ @
+ |/ @
+ |__/@
+ @
+ @@
+236 LATIN SMALL LETTER I WITH GRAVE
+ \ @
+ @
+ @
+ | @
+ |_/@
+ @
+ @@
+237 LATIN SMALL LETTER I WITH ACUTE
+ / @
+ @
+ @
+ | @
+ |_/@
+ @
+ @@
+238 LATIN SMALL LETTER I WITH CIRCUMFLEX
+ /\ @
+ @
+ @
+ | @
+ |_/@
+ @
+ @@
+239 LATIN SMALL LETTER I WITH DIAERESIS
+ o o @
+ @
+ @
+ | @
+ |__/@
+ @
+ @@
+240 LATIN SMALL LETTER ETH
+ @
+ \/@
+ _'|@
+ / |@
+ \_/ @
+ @
+ @@
+241 LATIN SMALL LETTER N WITH TILDE
+ /\/ @
+ @
+ _ _ @
+ / |/ | @
+ $ | |_/@
+ @
+ @@
+242 LATIN SMALL LETTER O WITH GRAVE
+ \ @
+ @
+ __ @
+ / \_@
+ \__/ @
+ @
+ @@
+243 LATIN SMALL LETTER O WITH ACUTE
+ / @
+ @
+ __ @
+ / \_@
+ \__/ @
+ @
+ @@
+244 LATIN SMALL LETTER O WITH CIRCUMFLEX
+ /\ @
+ @
+ __ @
+ / \_@
+ \__/ @
+ @
+ @@
+245 LATIN SMALL LETTER O WITH TILDE
+ /\/ @
+ @
+ __ @
+ / \_@
+ \__/ @
+ @
+ @@
+246 LATIN SMALL LETTER O WITH DIAERESIS
+ o o @
+ @
+ __ @
+ / \_@
+ \__/ @
+ @
+ @@
+247 DIVISION SIGN
+ @
+ @
+ O @
+ -----@
+ O @
+ @
+ @@
+248 LATIN SMALL LETTER O WITH STROKE
+ @
+ @
+ __/ @
+ / /\_@
+ \/_/ @
+ / @
+ @@
+249 LATIN SMALL LETTER U WITH GRAVE
+ \ @
+ @
+ @
+ | | @
+ $\_/|_/@
+ @
+ @@
+250 LATIN SMALL LETTER U WITH ACUTE
+ / @
+ @
+ @
+ | | @
+ $\_/|_/@
+ @
+ @@
+251 LATIN SMALL LETTER U WITH CIRCUMFLEX
+ /\ @
+ @
+ @
+ | | @
+ $\_/|_/@
+ @
+ @@
+252 LATIN SMALL LETTER U WITH DIAERESIS
+ o o @
+ @
+ @
+ | | @
+ $\_/|_/@
+ @
+ @@
+253 LATIN SMALL LETTER Y WITH ACUTE
+ / @
+ @
+ @
+ | | @
+ $\_/|/@
+ /| @
+ \| @@
+254 LATIN SMALL LETTER THORN
+ _ @
+ | | @
+ | | @
+ |/ \_@
+ |__/ @
+ /| @
+ \| @@
+255 LATIN SMALL LETTER Y WITH DIAERESIS
+ o o @
+ @
+ @
+ | | @
+ $\_/|/@
+ /| @
+ \| @@
diff --git a/externals/figlet/fonts/shadow.flf b/externals/figlet/fonts/shadow.flf
new file mode 100644
index 000000000..2ec918211
--- /dev/null
+++ b/externals/figlet/fonts/shadow.flf
@@ -0,0 +1,1097 @@
+flf2a$ 5 4 16 0 10 0 4992 96
+Shadow by Glenn Chappell 6/93 -- based on Standard & SmShadow
+Includes ISO Latin-1
+figlet release 2.1 -- 12 Aug 1994
+Permission is hereby given to modify this font, as long as the
+modifier's name is placed on a comment line.
+
+Modified by Paul Burton <solution@earthlink.net> 12/96 to include new parameter
+supported by FIGlet and FIGWin. May also be slightly modified for better use
+of new full-width/kern/smush alternatives, but default output is NOT changed.
+
+ $$@
+ $$@
+ $$@
+ $$@
+ $$@@
+ $|$@
+ $|$@
+ _|$@
+ _)$@
+ @@
+ $| )$@
+ V V$ @
+ $$ @
+ $$ @
+ @@
+ $| |$ @
+ _ |_ |_|$@
+ _ |_ |_|$@
+ _| _|$ @
+ @@
+ $|$ @
+ $ __)$@
+ \__ \$@
+ ( /$@
+ _|$ @@
+ _) /$@
+ $/$ @
+ $/$ @
+ _/ _)$@
+ @@
+ $ _ )$ @
+ $_ \ \$@
+ $( ` <$@
+ \___/\/$@
+ @@
+ $)$@
+ /$ @
+ $$ @
+ $$ @
+ @@
+ $/$@
+ $|$ @
+ $|$ @
+ $|$ @
+ \_\$@@
+ \ \$ @
+ $|$@
+ $|$@
+ $|$@
+ _/$ @@
+ $\$ @
+ \ /$@
+ $_ _\$@
+ \/$ @
+ @@
+ @
+ $|$ @
+ _ _|$@
+ _|$ @
+ @@
+ @
+ @
+ @
+ $)$@
+ /$ @@
+ @
+ @
+ _____|$@
+ $$ @
+ @@
+ @
+ @
+ @
+ _)$@
+ @@
+ $/$@
+ $/$ @
+ $/$ @
+ _/$ @
+ @@
+ $_ \$ @
+ $| |$@
+ $| |$@
+ \___/$ @
+ @@
+ _ |$@
+ $|$@
+ $|$@
+ _|$@
+ @@
+ ___ \$ @
+ ) |$@
+ $__/$ @
+ _____|$@
+ @@
+ ___ /$ @
+ _ \$ @
+ ) |$@
+ ____/$ @
+ @@
+ $| |$ @
+ $| |$ @
+ ___ __|$@
+ _|$ @
+ @@
+ $___|$ @
+ $__ \$ @
+ ) |$@
+ ____/$ @
+ @@
+ $/$ @
+ $ _ \$ @
+ $( |$@
+ \___/$ @
+ @@
+ ___ |$@
+ $/$ @
+ $/$ @
+ _/$ @
+ @@
+ $ _ )$ @
+ $_ \$ @
+ $( |$@
+ \___/$ @
+ @@
+ $_ \$ @
+ $( |$@
+ \__ |$@
+ __/$ @
+ @@
+ @
+ _)$@
+ $$ @
+ _)$@
+ @@
+ @
+ _)$@
+ $$ @
+ $)$@
+ /$ @@
+ $/$@
+ $/$ @
+ \ \$ @
+ \_\$@
+ @@
+ @
+ _____|$@
+ _____|$@
+ @
+ @@
+ \ \$ @
+ \ \$@
+ $/$@
+ _/$ @
+ @@
+ __ \$@
+ $/$@
+ _|$ @
+ _)$ @
+ @@
+ $__ \$ @
+ $/ _` |$@
+ $| ( |$@
+ \ \__,_|$@
+ \____/$ @@
+ $\$ @
+ $_ \$ @
+ $___ \$ @
+ _/ _\$@
+ @@
+ $__ )$ @
+ $__ \$ @
+ $| |$@
+ ____/$ @
+ @@
+ $___|$@
+ $|$ @
+ $|$ @
+ \____|$@
+ @@
+ $__ \$ @
+ $| |$@
+ $| |$@
+ ____/$ @
+ @@
+ $____|$@
+ $__|$ @
+ $|$ @
+ _____|$@
+ @@
+ $____|$@
+ $|$ @
+ $__|$ @
+ _|$ @
+ @@
+ $___|$@
+ $|$ @
+ $| |$@
+ \____|$@
+ @@
+ $| |$@
+ $| |$@
+ $___ |$@
+ _| _|$@
+ @@
+ _ _|$@
+ $|$ @
+ $|$ @
+ ___|$@
+ @@
+ $|$@
+ $|$@
+ $\ |$@
+ \___/$ @
+ @@
+ $| /$@
+ $' /$ @
+ $. \$ @
+ _|\_\$@
+ @@
+ $|$ @
+ $|$ @
+ $|$ @
+ _____|$@
+ @@
+ $ \ |$@
+ $|\/ |$@
+ $| |$@
+ _| _|$@
+ @@
+ $ \ |$@
+ $ \ |$@
+ $|\ |$@
+ _| \_|$@
+ @@
+ $_ \$ @
+ $| |$@
+ $| |$@
+ \___/$ @
+ @@
+ $ _ \$ @
+ $| |$@
+ $___/$ @
+ _|$ @
+ @@
+ $_ \$ @
+ $| |$@
+ $| |$@
+ \__\_\$@
+ @@
+ $ _ \$ @
+ $| |$@
+ $__ <$ @
+ _| \_\$@
+ @@
+ $___|$ @
+ \___ \$ @
+ $|$@
+ _____/$ @
+ @@
+ __ __|$@
+ $|$ @
+ $|$ @
+ _|$ @
+ @@
+ $| |$@
+ $| |$@
+ $| |$@
+ \___/$ @
+ @@
+ \ \ /$@
+ \ \ /$ @
+ \ \ /$ @
+ \_/$ @
+ @@
+ \ \ /$@
+ \ \ \ /$ @
+ \ \ \ /$ @
+ \_/\_/$ @
+ @@
+ \ \ /$@
+ \ /$ @
+ $ \$ @
+ _/\_\$@
+ @@
+ \ \ /$@
+ \ /$ @
+ $|$ @
+ _|$ @
+ @@
+ __ /$@
+ $/$ @
+ $/$ @
+ ____|$@
+ @@
+ $_|$@
+ $|$ @
+ $|$ @
+ $|$ @
+ __|$@@
+ \ \$ @
+ \ \$ @
+ \ \$ @
+ \_\$@
+ @@
+ _ |$@
+ $|$@
+ $|$@
+ $|$@
+ __|$@@
+ /\\$@
+ $$ @
+ $$ @
+ $$ @
+ @@
+ @
+ @
+ @
+ $$ @
+ _____|$@@
+ $)$@
+ \|$@
+ $$ @
+ $$ @
+ @@
+ @
+ $_` |$@
+ $( |$@
+ \__,_|$@
+ @@
+ $|$ @
+ $__ \$ @
+ $| |$@
+ _.__/$ @
+ @@
+ @
+ $__|$@
+ $($ @
+ \___|$@
+ @@
+ $|$@
+ $_` |$@
+ $( |$@
+ \__,_|$@
+ @@
+ @
+ $_ \$@
+ $ __/$@
+ \___|$@
+ @@
+ $_|$@
+ $|$ @
+ $__|$@
+ _|$ @
+ @@
+ @
+ $_` |$@
+ $( |$@
+ \__, |$@
+ |___/$ @@
+ $|$ @
+ $__ \$ @
+ $| | |$@
+ _| |_|$@
+ @@
+ _)$@
+ $|$@
+ $|$@
+ _|$@
+ @@
+ _)$@
+ $|$@
+ $|$@
+ $|$@
+ ___/$ @@
+ $|$ @
+ $| /$@
+ $ <$ @
+ _|\_\$@
+ @@
+ $|$@
+ $|$@
+ $|$@
+ _|$@
+ @@
+ @
+ $__ `__ \$ @
+ $| | |$@
+ _| _| _|$@
+ @@
+ @
+ $__ \$ @
+ $| |$@
+ _| _|$@
+ @@
+ @
+ $_ \$ @
+ $( |$@
+ \___/$ @
+ @@
+ @
+ $__ \$ @
+ $| |$@
+ $.__/$ @
+ _|$ @@
+ @
+ $_` |$@
+ $( |$@
+ \__, |$@
+ _|$@@
+ @
+ $ __|$@
+ $|$ @
+ _|$ @
+ @@
+ @
+ $__|$@
+ \__ \$@
+ ____/$@
+ @@
+ $|$ @
+ $__|$@
+ $|$ @
+ \__|$@
+ @@
+ @
+ $| |$@
+ $| |$@
+ \__,_|$@
+ @@
+ @
+ \ \ /$@
+ \ \ /$ @
+ \_/$ @
+ @@
+ @
+ \ \ \ /$@
+ \ \ \ /$ @
+ \_/\_/$ @
+ @@
+ @
+ \ \ /$@
+ ` <$ @
+ _/\_\$@
+ @@
+ @
+ $| |$@
+ $| |$@
+ \__, |$@
+ ____/$ @@
+ @
+ _ /$@
+ $/$ @
+ ___|$@
+ @@
+ $/$@
+ $|$ @
+ < <$ @
+ $|$ @
+ \_\$@@
+ $|$@
+ $|$@
+ $|$@
+ $|$@
+ _|$@@
+ \ \$ @
+ $|$ @
+ ` >$@
+ $|$ @
+ _/$ @@
+ / _/$@
+ $$ @
+ $$ @
+ $$ @
+ @@
+ _) \ _)$@
+ $_ \$ @
+ $___ \$ @
+ _/ _\$@
+ @@
+ _) _)$@
+ $_ \$ @
+ $| |$@
+ \___/$ @
+ @@
+ _) _)$@
+ $| |$@
+ $| |$@
+ \___/$ @
+ @@
+ _) _)$@
+ $_` |$@
+ $( |$@
+ \__,_|$@
+ @@
+ _) _)$@
+ $_ \$ @
+ $( |$@
+ \___/$ @
+ @@
+ _) _)$@
+ $| |$@
+ $| |$@
+ \__,_|$@
+ @@
+ $_ \$@
+ $| /$@
+ $|\ \$@
+ $|__/$@
+ _|$ @@
+160 NO-BREAK SPACE
+ $ $@
+ $ $@
+ $ $@
+ $ $@
+ $ $@@
+161 INVERTED EXCLAMATION MARK
+ _)$@
+ $|$@
+ $|$@
+ _|$@
+ @@
+162 CENT SIGN
+ $|$ @
+ $__)$@
+ $($ @
+ \ )$@
+ _|$ @@
+163 POUND SIGN
+ $,_\$ @
+ _ |_$ @
+ $|$ @
+ _,____|$@
+ @@
+164 CURRENCY SIGN
+ \ _ /$@
+ $( |$@
+ $___ \$@
+ \/ /$@
+ @@
+165 YEN SIGN
+ \ \ /$ @
+ __ __|$@
+ __ __|$@
+ _|$ @
+ @@
+166 BROKEN BAR
+ $|$@
+ _|$@
+ @
+ $|$@
+ _|$@@
+167 SECTION SIGN
+ $_)$@
+ $\ \$ @
+ \ \\ \$@
+ \ \_/$@
+ (__/$ @@
+168 DIAERESIS
+ _) _)$@
+ $ $ @
+ $ $ @
+ $ $ @
+ @@
+169 COPYRIGHT SIGN
+ $ \$ @
+ $ __| \$ @
+ $ ( |$@
+ \ \___| /$ @
+ \_____/$ @@
+170 FEMININE ORDINAL INDICATOR
+ $_` |$@
+ \__,_|$@
+ _____|$@
+ $$ @
+ @@
+171 LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+ $/ /$@
+ $/ /$ @
+ \ \ \$ @
+ \_\_\$@
+ @@
+172 NOT SIGN
+ @
+ _____ |$@
+ _|$@
+ $$ @
+ @@
+173 SOFT HYPHEN
+ @
+ @
+ _____|$@
+ $$ @
+ @@
+174 REGISTERED SIGN
+ $ \$ @
+ $ _ \ \$ @
+ $ / |$@
+ \ _|_\ /$ @
+ \_____/$ @@
+175 MACRON
+ _____|$@
+ $$ @
+ $$ @
+ $$ @
+ @@
+176 DEGREE SIGN
+ $ \$ @
+ $( |$@
+ \__/$ @
+ $$ @
+ @@
+177 PLUS-MINUS SIGN
+ $|$ @
+ _ _|$@
+ _|$ @
+ _____|$@
+ @@
+178 SUPERSCRIPT TWO
+ _ )$@
+ $/$ @
+ ___|$@
+ $$ @
+ @@
+179 SUPERSCRIPT THREE
+ __ /$@
+ _ \$@
+ ___/$@
+ $$ @
+ @@
+180 ACUTE ACCENT
+ _/$@
+ $$ @
+ $$ @
+ $$ @
+ @@
+181 MICRO SIGN
+ @
+ $| |$@
+ $| |$@
+ $._,_|$@
+ _|$ @@
+182 PILCROW SIGN
+ $ |$@
+ $( | |$@
+ \__ | |$@
+ _|_|$@
+ @@
+183 MIDDLE DOT
+ @
+ _)$@
+ $$ @
+ $$ @
+ @@
+184 CEDILLA
+ @
+ @
+ @
+ $$ @
+ _)$@@
+185 SUPERSCRIPT ONE
+ _ |$@
+ $|$@
+ _|$@
+ $$ @
+ @@
+186 MASCULINE ORDINAL INDICATOR
+ $_ \$@
+ \___/$@
+ ____|$@
+ $$ @
+ @@
+187 RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+ \ \ \$ @
+ \ \ \$@
+ $/ /$@
+ _/_/$ @
+ @@
+188 VULGAR FRACTION ONE QUARTER
+ _ | /$ @
+ $| / | |$ @
+ _| / __ _|$@
+ _/ _|$ @
+ @@
+189 VULGAR FRACTION ONE HALF
+ _ | /$ @
+ $| /_ )$@
+ _| / /$ @
+ _/ ___|$@
+ @@
+190 VULGAR FRACTION THREE QUARTERS
+ __ / /$ @
+ _ \ / | |$ @
+ ___/ / __ _|$@
+ _/ _|$ @
+ @@
+191 INVERTED QUESTION MARK
+ _)$ @
+ $|$ @
+ $/$ @
+ \___|$@
+ @@
+192 LATIN CAPITAL LETTER A WITH GRAVE
+ \_\$ @
+ $\$ @
+ $_ \$ @
+ _/ _\$@
+ @@
+193 LATIN CAPITAL LETTER A WITH ACUTE
+ _/$ @
+ $\$ @
+ $_ \$ @
+ _/ _\$@
+ @@
+194 LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+ /\\$ @
+ $\$ @
+ $_ \$ @
+ _/ _\$@
+ @@
+195 LATIN CAPITAL LETTER A WITH TILDE
+ / _/$ @
+ $\$ @
+ $_ \$ @
+ _/ _\$@
+ @@
+196 LATIN CAPITAL LETTER A WITH DIAERESIS
+ _) \ _)$@
+ $_ \$ @
+ $___ \$ @
+ _/ _\$@
+ @@
+197 LATIN CAPITAL LETTER A WITH RING ABOVE
+ ( )$ @
+ $_ \$ @
+ $___ \$ @
+ _/ _\$@
+ @@
+198 LATIN CAPITAL LETTER AE
+ $ ____|$@
+ $/ __|$ @
+ $__ |$ @
+ _/ _____|$@
+ @@
+199 LATIN CAPITAL LETTER C WITH CEDILLA
+ $___|$@
+ $|$ @
+ $|$ @
+ \____|$@
+ _)$ @@
+200 LATIN CAPITAL LETTER E WITH GRAVE
+ \_\$ @
+ $____|$@
+ $ _|$ @
+ _____|$@
+ @@
+201 LATIN CAPITAL LETTER E WITH ACUTE
+ _/$ @
+ $____|$@
+ $ _|$ @
+ _____|$@
+ @@
+202 LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+ /\\$ @
+ $____|$@
+ $ _|_$ @
+ _____|$@
+ @@
+203 LATIN CAPITAL LETTER E WITH DIAERESIS
+ _) _)$@
+ $____|$@
+ $ _|$ @
+ _____|$@
+ @@
+204 LATIN CAPITAL LETTER I WITH GRAVE
+ \_\$ @
+ _ _|$@
+ | |$ @
+ ___|$@
+ @@
+205 LATIN CAPITAL LETTER I WITH ACUTE
+ _/$ @
+ _ _|$@
+ $|$ @
+ ___|$@
+ @@
+206 LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+ /\\$ @
+ _ _|$@
+ $|$ @
+ ___|$@
+ @@
+207 LATIN CAPITAL LETTER I WITH DIAERESIS
+ _) _)$@
+ _ _|$ @
+ $|$ @
+ ___|$ @
+ @@
+208 LATIN CAPITAL LETTER ETH
+ __ \$ @
+ | |$@
+ __ __| |$@
+ ____/$ @
+ @@
+209 LATIN CAPITAL LETTER N WITH TILDE
+ / _/$@
+ $ \ |$@
+ $. |$@
+ _|\_|$@
+ @@
+210 LATIN CAPITAL LETTER O WITH GRAVE
+ \_\$ @
+ $_ \$ @
+ $| |$@
+ \___/$ @
+ @@
+211 LATIN CAPITAL LETTER O WITH ACUTE
+ _/$ @
+ $_ \$ @
+ $| |$@
+ \___/$ @
+ @@
+212 LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+ /\\$ @
+ $_ \$ @
+ $| |$@
+ \___/$ @
+ @@
+213 LATIN CAPITAL LETTER O WITH TILDE
+ / _/$ @
+ $_ \$ @
+ $| |$@
+ \___/$ @
+ @@
+214 LATIN CAPITAL LETTER O WITH DIAERESIS
+ _) _)$@
+ $_ \$ @
+ $| |$@
+ \___/$ @
+ @@
+215 MULTIPLICATION SIGN
+ @
+ \ \$@
+ , '$@
+ \/\/$@
+ @@
+216 LATIN CAPITAL LETTER O WITH STROKE
+ $_ /$ @
+ $| / |$@
+ $ / |$@
+ _/__/$ @
+ @@
+217 LATIN CAPITAL LETTER U WITH GRAVE
+ \_\$ @
+ $| |$@
+ $| |$@
+ \___/$ @
+ @@
+218 LATIN CAPITAL LETTER U WITH ACUTE
+ _/$ @
+ $| |$@
+ $| |$@
+ \___/$ @
+ @@
+219 LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+ /\\$ @
+ $| |$@
+ $| |$@
+ \___/$ @
+ @@
+220 LATIN CAPITAL LETTER U WITH DIAERESIS
+ _) _)$@
+ $| |$@
+ $| |$@
+ \___/$ @
+ @@
+221 LATIN CAPITAL LETTER Y WITH ACUTE
+ _/$ @
+ \ \ /$@
+ \ /$ @
+ _|$ @
+ @@
+222 LATIN CAPITAL LETTER THORN
+ $|$ @
+ $ __ \$@
+ $ ___/$@
+ _|$ @
+ @@
+223 LATIN SMALL LETTER SHARP S
+ $_ \$@
+ $| /$@
+ $|\ \$@
+ $|__/$@
+ _|$ @@
+224 LATIN SMALL LETTER A WITH GRAVE
+ \_\$ @
+ $_` |$@
+ $( |$@
+ \__,_|$@
+ @@
+225 LATIN SMALL LETTER A WITH ACUTE
+ _/_$ @
+ $_` |$@
+ $( |$@
+ \__,_|$@
+ @@
+226 LATIN SMALL LETTER A WITH CIRCUMFLEX
+ /\\$ @
+ $_` |$@
+ $( |$@
+ \__,_|$@
+ @@
+227 LATIN SMALL LETTER A WITH TILDE
+ / _/$ @
+ $_` |$@
+ $( |$@
+ \__,_|$@
+ @@
+228 LATIN SMALL LETTER A WITH DIAERESIS
+ _) _)$@
+ $_` |$@
+ $( |$@
+ \__,_|$@
+ @@
+229 LATIN SMALL LETTER A WITH RING ABOVE
+ ( )$ @
+ $_ '|$@
+ $( |$@
+ \__,_|$@
+ @@
+230 LATIN SMALL LETTER AE
+ @
+ $_` _ \$@
+ $( __/$@
+ \__,____|$@
+ @@
+231 LATIN SMALL LETTER C WITH CEDILLA
+ @
+ $__|$@
+ $($ @
+ \___|$@
+ _)$ @@
+232 LATIN SMALL LETTER E WITH GRAVE
+ \_\$ @
+ $_ \$@
+ $ __/$@
+ \___|$@
+ @@
+233 LATIN SMALL LETTER E WITH ACUTE
+ _/$ @
+ $_ \$@
+ $ __/$@
+ \___|$@
+ @@
+234 LATIN SMALL LETTER E WITH CIRCUMFLEX
+ /\\$ @
+ $_ \$@
+ $ __/$@
+ \___|$@
+ @@
+235 LATIN SMALL LETTER E WITH DIAERESIS
+ _) _)$@
+ $_ \$ @
+ $ __/$ @
+ \___|$ @
+ @@
+236 LATIN SMALL LETTER I WITH GRAVE
+ \_\$@
+ $|$@
+ $|$@
+ _|$@
+ @@
+237 LATIN SMALL LETTER I WITH ACUTE
+ _/$@
+ $|$@
+ $|$@
+ _|$@
+ @@
+238 LATIN SMALL LETTER I WITH CIRCUMFLEX
+ /\\$@
+ $|$ @
+ $|$ @
+ _|$ @
+ @@
+239 LATIN SMALL LETTER I WITH DIAERESIS
+ _) _)$@
+ $|$ @
+ $|$ @
+ _|$ @
+ @@
+240 LATIN SMALL LETTER ETH
+ ` <$ @
+ \/\ |$@
+ $__` |$@
+ \____/$ @
+ @@
+241 LATIN SMALL LETTER N WITH TILDE
+ / _/$ @
+ $'_ \$ @
+ $| |$@
+ _| _|$@
+ @@
+242 LATIN SMALL LETTER O WITH GRAVE
+ \_\$ @
+ $_ \$ @
+ $( |$@
+ \___/$ @
+ @@
+243 LATIN SMALL LETTER O WITH ACUTE
+ _/$ @
+ $_ \$ @
+ $( |$@
+ \___/$ @
+ @@
+244 LATIN SMALL LETTER O WITH CIRCUMFLEX
+ /\\$ @
+ $_ \$ @
+ $( |$@
+ \___/$ @
+ @@
+245 LATIN SMALL LETTER O WITH TILDE
+ / _/$ @
+ $_ \$ @
+ $( |$@
+ \___/$ @
+ @@
+246 LATIN SMALL LETTER O WITH DIAERESIS
+ _) _)$@
+ $_ \$ @
+ $( |$@
+ \___/$ @
+ @@
+247 DIVISION SIGN
+ @
+ _)$ @
+ _____|$@
+ _)$ @
+ @@
+248 LATIN SMALL LETTER O WITH STROKE
+ @
+ $_ /\$ @
+ $( / |$@
+ \_/__/$ @
+ @@
+249 LATIN SMALL LETTER U WITH GRAVE
+ \_\$ @
+ $| |$@
+ $| |$@
+ \__,_|$@
+ @@
+250 LATIN SMALL LETTER U WITH ACUTE
+ _/$ @
+ $| |$@
+ $| |$@
+ \__,_|$@
+ @@
+251 LATIN SMALL LETTER U WITH CIRCUMFLEX
+ /\\$ @
+ $| |$@
+ $| |$@
+ \__,_|$@
+ @@
+252 LATIN SMALL LETTER U WITH DIAERESIS
+ _) _)$@
+ $| |$@
+ $| |$@
+ \__,_|$@
+ @@
+253 LATIN SMALL LETTER Y WITH ACUTE
+ _/$ @
+ $| |$@
+ $| |$@
+ \__, |$@
+ ____/$ @@
+254 LATIN SMALL LETTER THORN
+ $|$ @
+ $__ \$ @
+ $| |$@
+ $.__/$ @
+ _|$ @@
+255 LATIN SMALL LETTER Y WITH DIAERESIS
+ _) _)$@
+ $| |$@
+ $| |$@
+ \__, |$@
+ ____/$ @@
diff --git a/externals/figlet/fonts/slant.flf b/externals/figlet/fonts/slant.flf
new file mode 100644
index 000000000..43fe3986e
--- /dev/null
+++ b/externals/figlet/fonts/slant.flf
@@ -0,0 +1,1295 @@
+flf2a$ 6 5 16 15 10 0 18319 96
+Slant by Glenn Chappell 3/93 -- based on Standard
+Includes ISO Latin-1
+figlet release 2.1 -- 12 Aug 1994
+Permission is hereby given to modify this font, as long as the
+modifier's name is placed on a comment line.
+
+Modified by Paul Burton <solution@earthlink.net> 12/96 to include new parameter
+supported by FIGlet and FIGWin. May also be slightly modified for better use
+of new full-width/kern/smush alternatives, but default output is NOT changed.
+
+ $$@
+ $$ @
+ $$ @
+ $$ @
+ $$ @
+$$ @@
+ __@
+ / /@
+ / / @
+ /_/ @
+(_) @
+ @@
+ _ _ @
+( | )@
+|/|/ @
+ $ @
+$ @
+ @@
+ __ __ @
+ __/ // /_@
+ /_ _ __/@
+/_ _ __/ @
+ /_//_/ @
+ @@
+ __@
+ _/ /@
+ / __/@
+ (_ ) @
+/ _/ @
+/_/ @@
+ _ __@
+ (_)_/_/@
+ _/_/ @
+ _/_/_ @
+/_/ (_) @
+ @@
+ ___ @
+ ( _ ) @
+ / __ \/|@
+/ /_/ < @
+\____/\/ @
+ @@
+ _ @
+ ( )@
+ |/ @
+ $ @
+$ @
+ @@
+ __@
+ _/_/@
+ / / @
+ / / @
+/ / @
+|_| @@
+ _ @
+ | |@
+ / /@
+ / / @
+ _/_/ @
+/_/ @@
+ @
+ __/|_@
+ | /@
+/_ __| @
+ |/ @
+ @@
+ @
+ __ @
+ __/ /_@
+/_ __/@
+ /_/ @
+ @@
+ @
+ @
+ @
+ _ @
+( )@
+|/ @@
+ @
+ @
+ ______@
+/_____/@
+ $ @
+ @@
+ @
+ @
+ @
+ _ @
+(_)@
+ @@
+ __@
+ _/_/@
+ _/_/ @
+ _/_/ @
+/_/ @
+ @@
+ ____ @
+ / __ \@
+ / / / /@
+/ /_/ / @
+\____/ @
+ @@
+ ___@
+ < /@
+ / / @
+ / / @
+/_/ @
+ @@
+ ___ @
+ |__ \@
+ __/ /@
+ / __/ @
+/____/ @
+ @@
+ _____@
+ |__ /@
+ /_ < @
+ ___/ / @
+/____/ @
+ @@
+ __ __@
+ / // /@
+ / // /_@
+/__ __/@
+ /_/ @
+ @@
+ ______@
+ / ____/@
+ /___ \ @
+ ____/ / @
+/_____/ @
+ @@
+ _____@
+ / ___/@
+ / __ \ @
+/ /_/ / @
+\____/ @
+ @@
+ _____@
+/__ /@
+ / / @
+ / / @
+/_/ @
+ @@
+ ____ @
+ ( __ )@
+ / __ |@
+/ /_/ / @
+\____/ @
+ @@
+ ____ @
+ / __ \@
+ / /_/ /@
+ \__, / @
+/____/ @
+ @@
+ @
+ _ @
+ (_)@
+ _ @
+(_) @
+ @@
+ @
+ _ @
+ (_)@
+ _ @
+( ) @
+|/ @@
+ __@
+ / /@
+/ / @
+\ \ @
+ \_\@
+ @@
+ @
+ _____@
+ /____/@
+/____/ @
+ $ @
+ @@
+__ @
+\ \ @
+ \ \@
+ / /@
+/_/ @
+ @@
+ ___ @
+ /__ \@
+ / _/@
+ /_/ @
+(_) @
+ @@
+ ______ @
+ / ____ \@
+ / / __ `/@
+/ / /_/ / @
+\ \__,_/ @
+ \____/ @@
+ ___ @
+ / |@
+ / /| |@
+ / ___ |@
+/_/ |_|@
+ @@
+ ____ @
+ / __ )@
+ / __ |@
+ / /_/ / @
+/_____/ @
+ @@
+ ______@
+ / ____/@
+ / / @
+/ /___ @
+\____/ @
+ @@
+ ____ @
+ / __ \@
+ / / / /@
+ / /_/ / @
+/_____/ @
+ @@
+ ______@
+ / ____/@
+ / __/ @
+ / /___ @
+/_____/ @
+ @@
+ ______@
+ / ____/@
+ / /_ @
+ / __/ @
+/_/ @
+ @@
+ ______@
+ / ____/@
+ / / __ @
+/ /_/ / @
+\____/ @
+ @@
+ __ __@
+ / / / /@
+ / /_/ / @
+ / __ / @
+/_/ /_/ @
+ @@
+ ____@
+ / _/@
+ / / @
+ _/ / @
+/___/ @
+ @@
+ __@
+ / /@
+ __ / / @
+/ /_/ / @
+\____/ @
+ @@
+ __ __@
+ / //_/@
+ / ,< @
+ / /| | @
+/_/ |_| @
+ @@
+ __ @
+ / / @
+ / / @
+ / /___@
+/_____/@
+ @@
+ __ ___@
+ / |/ /@
+ / /|_/ / @
+ / / / / @
+/_/ /_/ @
+ @@
+ _ __@
+ / | / /@
+ / |/ / @
+ / /| / @
+/_/ |_/ @
+ @@
+ ____ @
+ / __ \@
+ / / / /@
+/ /_/ / @
+\____/ @
+ @@
+ ____ @
+ / __ \@
+ / /_/ /@
+ / ____/ @
+/_/ @
+ @@
+ ____ @
+ / __ \@
+ / / / /@
+/ /_/ / @
+\___\_\ @
+ @@
+ ____ @
+ / __ \@
+ / /_/ /@
+ / _, _/ @
+/_/ |_| @
+ @@
+ _____@
+ / ___/@
+ \__ \ @
+ ___/ / @
+/____/ @
+ @@
+ ______@
+ /_ __/@
+ / / @
+ / / @
+/_/ @
+ @@
+ __ __@
+ / / / /@
+ / / / / @
+/ /_/ / @
+\____/ @
+ @@
+ _ __@
+| | / /@
+| | / / @
+| |/ / @
+|___/ @
+ @@
+ _ __@
+| | / /@
+| | /| / / @
+| |/ |/ / @
+|__/|__/ @
+ @@
+ _ __@
+ | |/ /@
+ | / @
+ / | @
+/_/|_| @
+ @@
+__ __@
+\ \/ /@
+ \ / @
+ / / @
+/_/ @
+ @@
+ _____@
+/__ /@
+ / / @
+ / /__@
+/____/@
+ @@
+ ___@
+ / _/@
+ / / @
+ / / @
+ / / @
+/__/ @@
+__ @
+\ \ @
+ \ \ @
+ \ \ @
+ \_\@
+ @@
+ ___@
+ / /@
+ / / @
+ / / @
+ _/ / @
+/__/ @@
+ //|@
+ |/||@
+ $ @
+ $ @
+$ @
+ @@
+ @
+ @
+ @
+ @
+ ______@
+/_____/@@
+ _ @
+ ( )@
+ V @
+ $ @
+$ @
+ @@
+ @
+ ____ _@
+ / __ `/@
+/ /_/ / @
+\__,_/ @
+ @@
+ __ @
+ / /_ @
+ / __ \@
+ / /_/ /@
+/_.___/ @
+ @@
+ @
+ _____@
+ / ___/@
+/ /__ @
+\___/ @
+ @@
+ __@
+ ____/ /@
+ / __ / @
+/ /_/ / @
+\__,_/ @
+ @@
+ @
+ ___ @
+ / _ \@
+/ __/@
+\___/ @
+ @@
+ ____@
+ / __/@
+ / /_ @
+ / __/ @
+/_/ @
+ @@
+ @
+ ____ _@
+ / __ `/@
+ / /_/ / @
+ \__, / @
+/____/ @@
+ __ @
+ / /_ @
+ / __ \@
+ / / / /@
+/_/ /_/ @
+ @@
+ _ @
+ (_)@
+ / / @
+ / / @
+/_/ @
+ @@
+ _ @
+ (_)@
+ / / @
+ / / @
+ __/ / @
+/___/ @@
+ __ @
+ / /__@
+ / //_/@
+ / ,< @
+/_/|_| @
+ @@
+ __@
+ / /@
+ / / @
+ / / @
+/_/ @
+ @@
+ @
+ ____ ___ @
+ / __ `__ \@
+ / / / / / /@
+/_/ /_/ /_/ @
+ @@
+ @
+ ____ @
+ / __ \@
+ / / / /@
+/_/ /_/ @
+ @@
+ @
+ ____ @
+ / __ \@
+/ /_/ /@
+\____/ @
+ @@
+ @
+ ____ @
+ / __ \@
+ / /_/ /@
+ / .___/ @
+/_/ @@
+ @
+ ____ _@
+ / __ `/@
+/ /_/ / @
+\__, / @
+ /_/ @@
+ @
+ _____@
+ / ___/@
+ / / @
+/_/ @
+ @@
+ @
+ _____@
+ / ___/@
+ (__ ) @
+/____/ @
+ @@
+ __ @
+ / /_@
+ / __/@
+/ /_ @
+\__/ @
+ @@
+ @
+ __ __@
+ / / / /@
+/ /_/ / @
+\__,_/ @
+ @@
+ @
+ _ __@
+| | / /@
+| |/ / @
+|___/ @
+ @@
+ @
+ _ __@
+| | /| / /@
+| |/ |/ / @
+|__/|__/ @
+ @@
+ @
+ _ __@
+ | |/_/@
+ _> < @
+/_/|_| @
+ @@
+ @
+ __ __@
+ / / / /@
+ / /_/ / @
+ \__, / @
+/____/ @@
+ @
+ ____@
+/_ /@
+ / /_@
+/___/@
+ @@
+ __@
+ _/_/@
+ _/_/ @
+< < @
+/ / @
+\_\ @@
+ __@
+ / /@
+ / / @
+ / / @
+ / / @
+/_/ @@
+ _ @
+ | |@
+ / /@
+ _>_>@
+ _/_/ @
+/_/ @@
+ /\//@
+ //\/ @
+ $ @
+ $ @
+$ @
+ @@
+ _ _ @
+ (_)(_)@
+ / _ | @
+ / __ | @
+/_/ |_| @
+ @@
+ _ _ @
+ (_)_(_)@
+ / __ \ @
+/ /_/ / @
+\____/ @
+ @@
+ _ _ @
+ (_) (_)@
+ / / / / @
+/ /_/ / @
+\____/ @
+ @@
+ _ _ @
+ (_)_(_)@
+ / __ `/ @
+/ /_/ / @
+\__,_/ @
+ @@
+ _ _ @
+ (_)_(_)@
+ / __ \ @
+/ /_/ / @
+\____/ @
+ @@
+ _ _ @
+ (_) (_)@
+ / / / / @
+/ /_/ / @
+\__,_/ @
+ @@
+ ____ @
+ / __ \@
+ / / / /@
+ / /_| | @
+ / //__/ @
+/_/ @@
+160 NO-BREAK SPACE
+ $$@
+ $$ @
+ $$ @
+ $$ @
+ $$ @
+$$ @@
+161 INVERTED EXCLAMATION MARK
+ _ @
+ (_)@
+ / / @
+ / / @
+/_/ @
+ @@
+162 CENT SIGN
+ __@
+ __/ /@
+ / ___/@
+/ /__ @
+\ _/ @
+/_/ @@
+163 POUND SIGN
+ ____ @
+ / ,__\@
+ __/ /_ @
+ _/ /___ @
+(_,____/ @
+ @@
+164 CURRENCY SIGN
+ /|___/|@
+ | __ / @
+ / /_/ / @
+ /___ | @
+|/ |/ @
+ @@
+165 YEN SIGN
+ ____@
+ _| / /@
+ /_ __/@
+/_ __/ @
+ /_/ @
+ @@
+166 BROKEN BAR
+ __@
+ / /@
+ /_/ @
+ __ @
+ / / @
+/_/ @@
+167 SECTION SIGN
+ __ @
+ _/ _)@
+ / | | @
+ | || | @
+ | |_/ @
+(__/ @@
+168 DIAERESIS
+ _ _ @
+ (_) (_)@
+ $ $ @
+ $ $ @
+$ $ @
+ @@
+169 COPYRIGHT SIGN
+ ______ @
+ / _____\ @
+ / / ___/ |@
+ / / /__ / @
+| \___/ / @
+ \______/ @@
+170 FEMININE ORDINAL INDICATOR
+ ___ _@
+ / _ `/@
+ _\_,_/ @
+/____/ @
+ $ @
+ @@
+171 LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+ ____@
+ / / /@
+/ / / @
+\ \ \ @
+ \_\_\@
+ @@
+172 NOT SIGN
+ @
+ ______@
+/___ /@
+ /_/ @
+ $ @
+ @@
+173 SOFT HYPHEN
+ @
+ @
+ _____@
+/____/@
+ $ @
+ @@
+174 REGISTERED SIGN
+ ______ @
+ / ___ \ @
+ / / _ \ |@
+ / / , _/ / @
+| /_/|_| / @
+ \______/ @@
+175 MACRON
+ ______@
+/_____/@
+ $ @
+ $ @
+$ @
+ @@
+176 DEGREE SIGN
+ ___ @
+ / _ \@
+/ // /@
+\___/ @
+ $ @
+ @@
+177 PLUS-MINUS SIGN
+ __ @
+ __/ /_@
+ /_ __/@
+ __/_/_ @
+/_____/ @
+ @@
+178 SUPERSCRIPT TWO
+ ___ @
+ |_ |@
+ / __/ @
+/____/ @
+ $ @
+ @@
+179 SUPERSCRIPT THREE
+ ____@
+ |_ /@
+ _/_ < @
+/____/ @
+ $ @
+ @@
+180 ACUTE ACCENT
+ __@
+ /_/@
+ $ @
+ $ @
+$ @
+ @@
+181 MICRO SIGN
+ @
+ __ __@
+ / / / /@
+ / /_/ / @
+ / ._,_/ @
+/_/ @@
+182 PILCROW SIGN
+ _______@
+ / _ /@
+/ (/ / / @
+\_ / / @
+ /_/_/ @
+ @@
+183 MIDDLE DOT
+ @
+ _ @
+(_)@
+ $ @
+$ @
+ @@
+184 CEDILLA
+ @
+ @
+ @
+ @
+ _ @
+/_)@@
+185 SUPERSCRIPT ONE
+ ___@
+ < /@
+ / / @
+/_/ @
+$ @
+ @@
+186 MASCULINE ORDINAL INDICATOR
+ ___ @
+ / _ \@
+ _\___/@
+/____/ @
+ $ @
+ @@
+187 RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+____ @
+\ \ \ @
+ \ \ \@
+ / / /@
+/_/_/ @
+ @@
+188 VULGAR FRACTION ONE QUARTER
+ ___ __ @
+ < / _/_/ @
+ / /_/_/___@
+/_//_// / /@
+ /_/ /_ _/@
+ /_/ @@
+189 VULGAR FRACTION ONE HALF
+ ___ __ @
+ < / _/_/__ @
+ / /_/_/|_ |@
+/_//_/ / __/ @
+ /_/ /____/ @
+ @@
+190 VULGAR FRACTION THREE QUARTERS
+ ____ __ @
+ |_ / _/_/ @
+ _/_ < _/_/___@
+/____//_// / /@
+ /_/ /_ _/@
+ /_/ @@
+191 INVERTED QUESTION MARK
+ _ @
+ (_)@
+ _/ / @
+/ _/_ @
+\___/ @
+ @@
+192 LATIN CAPITAL LETTER A WITH GRAVE
+ __ @
+ _\_\@
+ / _ |@
+ / __ |@
+/_/ |_|@
+ @@
+193 LATIN CAPITAL LETTER A WITH ACUTE
+ __@
+ _/_/@
+ / _ |@
+ / __ |@
+/_/ |_|@
+ @@
+194 LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+ //|@
+ _|/||@
+ / _ | @
+ / __ | @
+/_/ |_| @
+ @@
+195 LATIN CAPITAL LETTER A WITH TILDE
+ /\//@
+ _//\/ @
+ / _ | @
+ / __ | @
+/_/ |_| @
+ @@
+196 LATIN CAPITAL LETTER A WITH DIAERESIS
+ _ _ @
+ (_)(_)@
+ / _ | @
+ / __ | @
+/_/ |_| @
+ @@
+197 LATIN CAPITAL LETTER A WITH RING ABOVE
+ (())@
+ / |@
+ / /| |@
+ / ___ |@
+/_/ |_|@
+ @@
+198 LATIN CAPITAL LETTER AE
+ __________@
+ / ____/@
+ / /| __/ @
+ / __ /___ @
+/_/ /_____/ @
+ @@
+199 LATIN CAPITAL LETTER C WITH CEDILLA
+ ______@
+ / ____/@
+ / / @
+/ /___ @
+\____/ @
+ /_) @@
+200 LATIN CAPITAL LETTER E WITH GRAVE
+ __ @
+ _\_\@
+ / __/@
+ / _/ @
+/___/ @
+ @@
+201 LATIN CAPITAL LETTER E WITH ACUTE
+ __@
+ _/_/@
+ / __/@
+ / _/ @
+/___/ @
+ @@
+202 LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+ //|@
+ _|/||@
+ / __/ @
+ / _/ @
+/___/ @
+ @@
+203 LATIN CAPITAL LETTER E WITH DIAERESIS
+ _ _ @
+ (_)(_)@
+ / __/ @
+ / _/ @
+/___/ @
+ @@
+204 LATIN CAPITAL LETTER I WITH GRAVE
+ __ @
+ _\_\@
+ / _/@
+ _/ / @
+/___/ @
+ @@
+205 LATIN CAPITAL LETTER I WITH ACUTE
+ __@
+ _/_/@
+ / _/@
+ _/ / @
+/___/ @
+ @@
+206 LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+ //|@
+ _|/||@
+ / _/ @
+ _/ / @
+/___/ @
+ @@
+207 LATIN CAPITAL LETTER I WITH DIAERESIS
+ _ _ @
+ (_)(_)@
+ / _/ @
+ _/ / @
+/___/ @
+ @@
+208 LATIN CAPITAL LETTER ETH
+ ____ @
+ / __ \@
+ __/ /_/ /@
+/_ __/ / @
+ /_____/ @
+ @@
+209 LATIN CAPITAL LETTER N WITH TILDE
+ /\//@
+ _//\/ @
+ / |/ / @
+ / / @
+/_/|_/ @
+ @@
+210 LATIN CAPITAL LETTER O WITH GRAVE
+ __ @
+ __\_\@
+ / __ \@
+/ /_/ /@
+\____/ @
+ @@
+211 LATIN CAPITAL LETTER O WITH ACUTE
+ __@
+ __/_/@
+ / __ \@
+/ /_/ /@
+\____/ @
+ @@
+212 LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+ //|@
+ _|/||@
+ / __ \@
+/ /_/ /@
+\____/ @
+ @@
+213 LATIN CAPITAL LETTER O WITH TILDE
+ /\//@
+ _//\/ @
+ / __ \ @
+/ /_/ / @
+\____/ @
+ @@
+214 LATIN CAPITAL LETTER O WITH DIAERESIS
+ _ _ @
+ (_)_(_)@
+ / __ \ @
+/ /_/ / @
+\____/ @
+ @@
+215 MULTIPLICATION SIGN
+ @
+ @
+ /|/|@
+ > < @
+|/|/ @
+ @@
+216 LATIN CAPITAL LETTER O WITH STROKE
+ _____ @
+ / _// \@
+ / //// /@
+/ //// / @
+\_//__/ @
+ @@
+217 LATIN CAPITAL LETTER U WITH GRAVE
+ __ @
+ __\_\_@
+ / / / /@
+/ /_/ / @
+\____/ @
+ @@
+218 LATIN CAPITAL LETTER U WITH ACUTE
+ __ @
+ __/_/_@
+ / / / /@
+/ /_/ / @
+\____/ @
+ @@
+219 LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+ //| @
+ _|/||_@
+ / / / /@
+/ /_/ / @
+\____/ @
+ @@
+220 LATIN CAPITAL LETTER U WITH DIAERESIS
+ _ _ @
+ (_) (_)@
+ / / / / @
+/ /_/ / @
+\____/ @
+ @@
+221 LATIN CAPITAL LETTER Y WITH ACUTE
+ __ @
+__/_/_@
+\ \/ /@
+ \ / @
+ /_/ @
+ @@
+222 LATIN CAPITAL LETTER THORN
+ __ @
+ / /_ @
+ / __ \@
+ / ____/@
+/_/ @
+ @@
+223 LATIN SMALL LETTER SHARP S
+ ____ @
+ / __ \@
+ / / / /@
+ / /_| | @
+ / //__/ @
+/_/ @@
+224 LATIN SMALL LETTER A WITH GRAVE
+ __ @
+ __\_\_@
+ / __ `/@
+/ /_/ / @
+\__,_/ @
+ @@
+225 LATIN SMALL LETTER A WITH ACUTE
+ __ @
+ __/_/_@
+ / __ `/@
+/ /_/ / @
+\__,_/ @
+ @@
+226 LATIN SMALL LETTER A WITH CIRCUMFLEX
+ //| @
+ _|/||_@
+ / __ `/@
+/ /_/ / @
+\__,_/ @
+ @@
+227 LATIN SMALL LETTER A WITH TILDE
+ /\//@
+ _//\/_@
+ / __ `/@
+/ /_/ / @
+\__,_/ @
+ @@
+228 LATIN SMALL LETTER A WITH DIAERESIS
+ _ _ @
+ (_)_(_)@
+ / __ `/ @
+/ /_/ / @
+\__,_/ @
+ @@
+229 LATIN SMALL LETTER A WITH RING ABOVE
+ __ @
+ __(())@
+ / __ `/@
+/ /_/ / @
+\__,_/ @
+ @@
+230 LATIN SMALL LETTER AE
+ @
+ ____ ___ @
+ / __ ` _ \@
+/ /_/ __/@
+\__,_____/ @
+ @@
+231 LATIN SMALL LETTER C WITH CEDILLA
+ @
+ _____@
+ / ___/@
+/ /__ @
+\___/ @
+/_) @@
+232 LATIN SMALL LETTER E WITH GRAVE
+ __ @
+ _\_\@
+ / _ \@
+/ __/@
+\___/ @
+ @@
+233 LATIN SMALL LETTER E WITH ACUTE
+ __@
+ _/_/@
+ / _ \@
+/ __/@
+\___/ @
+ @@
+234 LATIN SMALL LETTER E WITH CIRCUMFLEX
+ //|@
+ _|/||@
+ / _ \ @
+/ __/ @
+\___/ @
+ @@
+235 LATIN SMALL LETTER E WITH DIAERESIS
+ _ _ @
+ (_)(_)@
+ / _ \ @
+/ __/ @
+\___/ @
+ @@
+236 LATIN SMALL LETTER I WITH GRAVE
+ __ @
+ \_\@
+ / / @
+ / / @
+/_/ @
+ @@
+237 LATIN SMALL LETTER I WITH ACUTE
+ __@
+ /_/@
+ / / @
+ / / @
+/_/ @
+ @@
+238 LATIN SMALL LETTER I WITH CIRCUMFLEX
+ //|@
+ |/||@
+ / / @
+ / / @
+/_/ @
+ @@
+239 LATIN SMALL LETTER I WITH DIAERESIS
+ _ _ @
+ (_)_(_)@
+ / / @
+ / / @
+/_/ @
+ @@
+240 LATIN SMALL LETTER ETH
+ || @
+ =||=@
+ ___ || @
+/ __` | @
+\____/ @
+ @@
+241 LATIN SMALL LETTER N WITH TILDE
+ /\//@
+ _//\/ @
+ / __ \ @
+ / / / / @
+/_/ /_/ @
+ @@
+242 LATIN SMALL LETTER O WITH GRAVE
+ __ @
+ __\_\@
+ / __ \@
+/ /_/ /@
+\____/ @
+ @@
+243 LATIN SMALL LETTER O WITH ACUTE
+ __@
+ __/_/@
+ / __ \@
+/ /_/ /@
+\____/ @
+ @@
+244 LATIN SMALL LETTER O WITH CIRCUMFLEX
+ //|@
+ _|/||@
+ / __ \@
+/ /_/ /@
+\____/ @
+ @@
+245 LATIN SMALL LETTER O WITH TILDE
+ /\//@
+ _//\/ @
+ / __ \ @
+/ /_/ / @
+\____/ @
+ @@
+246 LATIN SMALL LETTER O WITH DIAERESIS
+ _ _ @
+ (_)_(_)@
+ / __ \ @
+/ /_/ / @
+\____/ @
+ @@
+247 DIVISION SIGN
+ @
+ _ @
+ __(_)_@
+/_____/@
+ (_) @
+ @@
+248 LATIN SMALL LETTER O WITH STROKE
+ @
+ _____ @
+ / _// \@
+/ //// /@
+\_//__/ @
+ @@
+249 LATIN SMALL LETTER U WITH GRAVE
+ __ @
+ __\_\_@
+ / / / /@
+/ /_/ / @
+\__,_/ @
+ @@
+250 LATIN SMALL LETTER U WITH ACUTE
+ __ @
+ __/_/_@
+ / / / /@
+/ /_/ / @
+\__,_/ @
+ @@
+251 LATIN SMALL LETTER U WITH CIRCUMFLEX
+ //| @
+ _|/||_@
+ / / / /@
+/ /_/ / @
+\__,_/ @
+ @@
+252 LATIN SMALL LETTER U WITH DIAERESIS
+ _ _ @
+ (_) (_)@
+ / / / / @
+/ /_/ / @
+\__,_/ @
+ @@
+253 LATIN SMALL LETTER Y WITH ACUTE
+ __ @
+ __/_/_@
+ / / / /@
+ / /_/ / @
+ \__, / @
+/____/ @@
+254 LATIN SMALL LETTER THORN
+ __ @
+ / /_ @
+ / __ \@
+ / /_/ /@
+ / .___/ @
+/_/ @@
+255 LATIN SMALL LETTER Y WITH DIAERESIS
+ _ _ @
+ (_) (_)@
+ / / / / @
+ / /_/ / @
+ \__, / @
+/____/ @@
diff --git a/externals/figlet/fonts/small.flf b/externals/figlet/fonts/small.flf
new file mode 100644
index 000000000..c6b5bfcde
--- /dev/null
+++ b/externals/figlet/fonts/small.flf
@@ -0,0 +1,1097 @@
+flf2a$ 5 4 13 15 10 0 22415 96
+Small by Glenn Chappell 4/93 -- based on Standard
+Includes ISO Latin-1
+figlet release 2.1 -- 12 Aug 1994
+Permission is hereby given to modify this font, as long as the
+modifier's name is placed on a comment line.
+
+Modified by Paul Burton <solution@earthlink.net> 12/96 to include new parameter
+supported by FIGlet and FIGWin. May also be slightly modified for better use
+of new full-width/kern/smush alternatives, but default output is NOT changed.
+
+ $@
+ $@
+ $@
+ $@
+ $@@
+ _ @
+ | |@
+ |_|@
+ (_)@
+ @@
+ _ _ @
+ ( | )@
+ V V @
+ $ @
+ @@
+ _ _ @
+ _| | |_ @
+ |_ . _|@
+ |_ _|@
+ |_|_| @@
+ @
+ ||_@
+ (_-<@
+ / _/@
+ || @@
+ _ __ @
+ (_)/ / @
+ / /_ @
+ /_/(_)@
+ @@
+ __ @
+ / _|___ @
+ > _|_ _|@
+ \_____| @
+ @@
+ _ @
+ ( )@
+ |/ @
+ $ @
+ @@
+ __@
+ / /@
+ | | @
+ | | @
+ \_\@@
+ __ @
+ \ \ @
+ | |@
+ | |@
+ /_/ @@
+ @
+ _/\_@
+ > <@
+ \/ @
+ @@
+ _ @
+ _| |_ @
+ |_ _|@
+ |_| @
+ @@
+ @
+ @
+ _ @
+ ( )@
+ |/ @@
+ @
+ ___ @
+ |___|@
+ $ @
+ @@
+ @
+ @
+ _ @
+ (_)@
+ @@
+ __@
+ / /@
+ / / @
+ /_/ @
+ @@
+ __ @
+ / \ @
+ | () |@
+ \__/ @
+ @@
+ _ @
+ / |@
+ | |@
+ |_|@
+ @@
+ ___ @
+ |_ )@
+ / / @
+ /___|@
+ @@
+ ____@
+ |__ /@
+ |_ \@
+ |___/@
+ @@
+ _ _ @
+ | | | @
+ |_ _|@
+ |_| @
+ @@
+ ___ @
+ | __|@
+ |__ \@
+ |___/@
+ @@
+ __ @
+ / / @
+ / _ \@
+ \___/@
+ @@
+ ____ @
+ |__ |@
+ / / @
+ /_/ @
+ @@
+ ___ @
+ ( _ )@
+ / _ \@
+ \___/@
+ @@
+ ___ @
+ / _ \@
+ \_, /@
+ /_/ @
+ @@
+ _ @
+ (_)@
+ _ @
+ (_)@
+ @@
+ _ @
+ (_)@
+ _ @
+ ( )@
+ |/ @@
+ __@
+ / /@
+ < < @
+ \_\@
+ @@
+ @
+ ___ @
+ |___|@
+ |___|@
+ @@
+ __ @
+ \ \ @
+ > >@
+ /_/ @
+ @@
+ ___ @
+ |__ \@
+ /_/@
+ (_) @
+ @@
+ ____ @
+ / __ \ @
+ / / _` |@
+ \ \__,_|@
+ \____/ @@
+ _ @
+ /_\ @
+ / _ \ @
+ /_/ \_\@
+ @@
+ ___ @
+ | _ )@
+ | _ \@
+ |___/@
+ @@
+ ___ @
+ / __|@
+ | (__ @
+ \___|@
+ @@
+ ___ @
+ | \ @
+ | |) |@
+ |___/ @
+ @@
+ ___ @
+ | __|@
+ | _| @
+ |___|@
+ @@
+ ___ @
+ | __|@
+ | _| @
+ |_| @
+ @@
+ ___ @
+ / __|@
+ | (_ |@
+ \___|@
+ @@
+ _ _ @
+ | || |@
+ | __ |@
+ |_||_|@
+ @@
+ ___ @
+ |_ _|@
+ | | @
+ |___|@
+ @@
+ _ @
+ _ | |@
+ | || |@
+ \__/ @
+ @@
+ _ __@
+ | |/ /@
+ | ' < @
+ |_|\_\@
+ @@
+ _ @
+ | | @
+ | |__ @
+ |____|@
+ @@
+ __ __ @
+ | \/ |@
+ | |\/| |@
+ |_| |_|@
+ @@
+ _ _ @
+ | \| |@
+ | .` |@
+ |_|\_|@
+ @@
+ ___ @
+ / _ \ @
+ | (_) |@
+ \___/ @
+ @@
+ ___ @
+ | _ \@
+ | _/@
+ |_| @
+ @@
+ ___ @
+ / _ \ @
+ | (_) |@
+ \__\_\@
+ @@
+ ___ @
+ | _ \@
+ | /@
+ |_|_\@
+ @@
+ ___ @
+ / __|@
+ \__ \@
+ |___/@
+ @@
+ _____ @
+ |_ _|@
+ | | @
+ |_| @
+ @@
+ _ _ @
+ | | | |@
+ | |_| |@
+ \___/ @
+ @@
+ __ __@
+ \ \ / /@
+ \ V / @
+ \_/ @
+ @@
+ __ __@
+ \ \ / /@
+ \ \/\/ / @
+ \_/\_/ @
+ @@
+ __ __@
+ \ \/ /@
+ > < @
+ /_/\_\@
+ @@
+ __ __@
+ \ \ / /@
+ \ V / @
+ |_| @
+ @@
+ ____@
+ |_ /@
+ / / @
+ /___|@
+ @@
+ __ @
+ | _|@
+ | | @
+ | | @
+ |__|@@
+ __ @
+ \ \ @
+ \ \ @
+ \_\@
+ @@
+ __ @
+ |_ |@
+ | |@
+ | |@
+ |__|@@
+ /\ @
+ |/\|@
+ $ @
+ $ @
+ @@
+ @
+ @
+ @
+ ___ @
+ |___|@@
+ _ @
+ ( )@
+ \|@
+ $ @
+ @@
+ @
+ __ _ @
+ / _` |@
+ \__,_|@
+ @@
+ _ @
+ | |__ @
+ | '_ \@
+ |_.__/@
+ @@
+ @
+ __ @
+ / _|@
+ \__|@
+ @@
+ _ @
+ __| |@
+ / _` |@
+ \__,_|@
+ @@
+ @
+ ___ @
+ / -_)@
+ \___|@
+ @@
+ __ @
+ / _|@
+ | _|@
+ |_| @
+ @@
+ @
+ __ _ @
+ / _` |@
+ \__, |@
+ |___/ @@
+ _ @
+ | |_ @
+ | ' \ @
+ |_||_|@
+ @@
+ _ @
+ (_)@
+ | |@
+ |_|@
+ @@
+ _ @
+ (_)@
+ | |@
+ _/ |@
+ |__/ @@
+ _ @
+ | |__@
+ | / /@
+ |_\_\@
+ @@
+ _ @
+ | |@
+ | |@
+ |_|@
+ @@
+ @
+ _ __ @
+ | ' \ @
+ |_|_|_|@
+ @@
+ @
+ _ _ @
+ | ' \ @
+ |_||_|@
+ @@
+ @
+ ___ @
+ / _ \@
+ \___/@
+ @@
+ @
+ _ __ @
+ | '_ \@
+ | .__/@
+ |_| @@
+ @
+ __ _ @
+ / _` |@
+ \__, |@
+ |_|@@
+ @
+ _ _ @
+ | '_|@
+ |_| @
+ @@
+ @
+ ___@
+ (_-<@
+ /__/@
+ @@
+ _ @
+ | |_ @
+ | _|@
+ \__|@
+ @@
+ @
+ _ _ @
+ | || |@
+ \_,_|@
+ @@
+ @
+ __ __@
+ \ V /@
+ \_/ @
+ @@
+ @
+ __ __ __@
+ \ V V /@
+ \_/\_/ @
+ @@
+ @
+ __ __@
+ \ \ /@
+ /_\_\@
+ @@
+ @
+ _ _ @
+ | || |@
+ \_, |@
+ |__/ @@
+ @
+ ___@
+ |_ /@
+ /__|@
+ @@
+ __@
+ / /@
+ _| | @
+ | | @
+ \_\@@
+ _ @
+ | |@
+ | |@
+ | |@
+ |_|@@
+ __ @
+ \ \ @
+ | |_@
+ | | @
+ /_/ @@
+ /\/|@
+ |/\/ @
+ $ @
+ $ @
+ @@
+ _ _ @
+ (_)(_)@
+ /--\ @
+ /_/\_\@
+ @@
+ _ _ @
+ (_)(_)@
+ / __ \@
+ \____/@
+ @@
+ _ _ @
+ (_) (_)@
+ | |_| |@
+ \___/ @
+ @@
+ _ _ @
+ (_)(_)@
+ / _` |@
+ \__,_|@
+ @@
+ _ _ @
+ (_)_(_)@
+ / _ \ @
+ \___/ @
+ @@
+ _ _ @
+ (_)(_)@
+ | || |@
+ \_,_|@
+ @@
+ ___ @
+ / _ \@
+ | |< <@
+ | ||_/@
+ |_| @@
+160 NO-BREAK SPACE
+ $@
+ $@
+ $@
+ $@
+ $@@
+161 INVERTED EXCLAMATION MARK
+ _ @
+ (_)@
+ | |@
+ |_|@
+ @@
+162 CENT SIGN
+ @
+ || @
+ / _)@
+ \ _)@
+ || @@
+163 POUND SIGN
+ __ @
+ _/ _\ @
+ |_ _|_ @
+ (_,___|@
+ @@
+164 CURRENCY SIGN
+ /\_/\@
+ \ . /@
+ / _ \@
+ \/ \/@
+ @@
+165 YEN SIGN
+ __ __ @
+ \ V / @
+ |__ __|@
+ |__ __|@
+ |_| @@
+166 BROKEN BAR
+ _ @
+ | |@
+ |_|@
+ | |@
+ |_|@@
+167 SECTION SIGN
+ __ @
+ / _)@
+ /\ \ @
+ \ \/ @
+ (__/ @@
+168 DIAERESIS
+ _ _ @
+ (_)(_)@
+ $ $ @
+ $ $ @
+ @@
+169 COPYRIGHT SIGN
+ ____ @
+ / __ \ @
+ / / _| \@
+ \ \__| /@
+ \____/ @@
+170 FEMININE ORDINAL INDICATOR
+ __ _ @
+ / _` |@
+ \__,_|@
+ |____|@
+ @@
+171 LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+ ____@
+ / / /@
+ < < < @
+ \_\_\@
+ @@
+172 NOT SIGN
+ ____ @
+ |__ |@
+ |_|@
+ $ @
+ @@
+173 SOFT HYPHEN
+ @
+ __ @
+ |__|@
+ $ @
+ @@
+174 REGISTERED SIGN
+ ____ @
+ / __ \ @
+ / | -) \@
+ \ ||\\ /@
+ \____/ @@
+175 MACRON
+ ___ @
+ |___|@
+ $ @
+ $ @
+ @@
+176 DEGREE SIGN
+ _ @
+ /.\@
+ \_/@
+ $ @
+ @@
+177 PLUS-MINUS SIGN
+ _ @
+ _| |_ @
+ |_ _|@
+ _|_|_ @
+ |_____|@@
+178 SUPERSCRIPT TWO
+ __ @
+ |_ )@
+ /__|@
+ $ @
+ @@
+179 SUPERSCRIPT THREE
+ ___@
+ |_ /@
+ |__)@
+ $ @
+ @@
+180 ACUTE ACCENT
+ __@
+ /_/@
+ $ @
+ $ @
+ @@
+181 MICRO SIGN
+ @
+ _ _ @
+ | || |@
+ | .,_|@
+ |_| @@
+182 PILCROW SIGN
+ ____ @
+ / |@
+ \_ | |@
+ |_|_|@
+ @@
+183 MIDDLE DOT
+ @
+ _ @
+ (_)@
+ $ @
+ @@
+184 CEDILLA
+ @
+ @
+ @
+ _ @
+ )_)@@
+185 SUPERSCRIPT ONE
+ _ @
+ / |@
+ |_|@
+ $ @
+ @@
+186 MASCULINE ORDINAL INDICATOR
+ ___ @
+ / _ \@
+ \___/@
+ |___|@
+ @@
+187 RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+ ____ @
+ \ \ \ @
+ > > >@
+ /_/_/ @
+ @@
+188 VULGAR FRACTION ONE QUARTER
+ _ __ @
+ / |/ /__ @
+ |_/ /_' |@
+ /_/ |_|@
+ @@
+189 VULGAR FRACTION ONE HALF
+ _ __ @
+ / |/ /_ @
+ |_/ /_ )@
+ /_//__|@
+ @@
+190 VULGAR FRACTION THREE QUARTERS
+ ___ __ @
+ |_ // /__ @
+ |__) /_' |@
+ /_/ |_|@
+ @@
+191 INVERTED QUESTION MARK
+ _ @
+ (_) @
+ / /_ @
+ \___|@
+ @@
+192 LATIN CAPITAL LETTER A WITH GRAVE
+ __ @
+ \_\ @
+ /--\ @
+ /_/\_\@
+ @@
+193 LATIN CAPITAL LETTER A WITH ACUTE
+ __ @
+ /_/ @
+ /--\ @
+ /_/\_\@
+ @@
+194 LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+ /\ @
+ |/\| @
+ /--\ @
+ /_/\_\@
+ @@
+195 LATIN CAPITAL LETTER A WITH TILDE
+ /\/|@
+ |/\/ @
+ /--\ @
+ /_/\_\@
+ @@
+196 LATIN CAPITAL LETTER A WITH DIAERESIS
+ _ _ @
+ (_)(_)@
+ /--\ @
+ /_/\_\@
+ @@
+197 LATIN CAPITAL LETTER A WITH RING ABOVE
+ __ @
+ (()) @
+ /--\ @
+ /_/\_\@
+ @@
+198 LATIN CAPITAL LETTER AE
+ ____ @
+ /, __|@
+ / _ _| @
+ /_/|___|@
+ @@
+199 LATIN CAPITAL LETTER C WITH CEDILLA
+ ___ @
+ / __|@
+ | (__ @
+ \___|@
+ )_) @@
+200 LATIN CAPITAL LETTER E WITH GRAVE
+ __ @
+ \_\@
+ | -<@
+ |__<@
+ @@
+201 LATIN CAPITAL LETTER E WITH ACUTE
+ __@
+ /_/@
+ | -<@
+ |__<@
+ @@
+202 LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+ /\ @
+ |/\|@
+ | -<@
+ |__<@
+ @@
+203 LATIN CAPITAL LETTER E WITH DIAERESIS
+ _ _ @
+ (_)(_)@
+ | -< @
+ |__< @
+ @@
+204 LATIN CAPITAL LETTER I WITH GRAVE
+ __ @
+ \_\ @
+ |_ _|@
+ |___|@
+ @@
+205 LATIN CAPITAL LETTER I WITH ACUTE
+ __ @
+ /_/ @
+ |_ _|@
+ |___|@
+ @@
+206 LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+ //\ @
+ |/_\|@
+ |_ _|@
+ |___|@
+ @@
+207 LATIN CAPITAL LETTER I WITH DIAERESIS
+ _ _ @
+ (_)_(_)@
+ |_ _| @
+ |___| @
+ @@
+208 LATIN CAPITAL LETTER ETH
+ ____ @
+ | __ \ @
+ |_ _|) |@
+ |____/ @
+ @@
+209 LATIN CAPITAL LETTER N WITH TILDE
+ /\/|@
+ |/\/ @
+ | \| |@
+ |_|\_|@
+ @@
+210 LATIN CAPITAL LETTER O WITH GRAVE
+ __ @
+ \_\_ @
+ / __ \@
+ \____/@
+ @@
+211 LATIN CAPITAL LETTER O WITH ACUTE
+ __ @
+ _/_/ @
+ / __ \@
+ \____/@
+ @@
+212 LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+ /\ @
+ |/\| @
+ / __ \@
+ \____/@
+ @@
+213 LATIN CAPITAL LETTER O WITH TILDE
+ /\/|@
+ |/\/ @
+ / __ \@
+ \____/@
+ @@
+214 LATIN CAPITAL LETTER O WITH DIAERESIS
+ _ _ @
+ (_)(_)@
+ / __ \@
+ \____/@
+ @@
+215 MULTIPLICATION SIGN
+ @
+ /\/\@
+ > <@
+ \/\/@
+ @@
+216 LATIN CAPITAL LETTER O WITH STROKE
+ ____ @
+ / _//\ @
+ | (//) |@
+ \//__/ @
+ @@
+217 LATIN CAPITAL LETTER U WITH GRAVE
+ __ @
+ _\_\_ @
+ | |_| |@
+ \___/ @
+ @@
+218 LATIN CAPITAL LETTER U WITH ACUTE
+ __ @
+ _/_/_ @
+ | |_| |@
+ \___/ @
+ @@
+219 LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+ //\ @
+ |/ \| @
+ | |_| |@
+ \___/ @
+ @@
+220 LATIN CAPITAL LETTER U WITH DIAERESIS
+ _ _ @
+ (_) (_)@
+ | |_| |@
+ \___/ @
+ @@
+221 LATIN CAPITAL LETTER Y WITH ACUTE
+ __ @
+ _/_/_@
+ \ V /@
+ |_| @
+ @@
+222 LATIN CAPITAL LETTER THORN
+ _ @
+ | |_ @
+ | -_)@
+ |_| @
+ @@
+223 LATIN SMALL LETTER SHARP S
+ ___ @
+ / _ \@
+ | |< <@
+ | ||_/@
+ |_| @@
+224 LATIN SMALL LETTER A WITH GRAVE
+ __ @
+ \_\_ @
+ / _` |@
+ \__,_|@
+ @@
+225 LATIN SMALL LETTER A WITH ACUTE
+ __ @
+ _/_/ @
+ / _` |@
+ \__,_|@
+ @@
+226 LATIN SMALL LETTER A WITH CIRCUMFLEX
+ /\ @
+ |/\| @
+ / _` |@
+ \__,_|@
+ @@
+227 LATIN SMALL LETTER A WITH TILDE
+ /\/|@
+ |/\/ @
+ / _` |@
+ \__,_|@
+ @@
+228 LATIN SMALL LETTER A WITH DIAERESIS
+ _ _ @
+ (_)(_)@
+ / _` |@
+ \__,_|@
+ @@
+229 LATIN SMALL LETTER A WITH RING ABOVE
+ __ @
+ (()) @
+ / _` |@
+ \__,_|@
+ @@
+230 LATIN SMALL LETTER AE
+ @
+ __ ___ @
+ / _` -_)@
+ \__,___|@
+ @@
+231 LATIN SMALL LETTER C WITH CEDILLA
+ @
+ __ @
+ / _|@
+ \__|@
+ )_)@@
+232 LATIN SMALL LETTER E WITH GRAVE
+ __ @
+ \_\ @
+ / -_)@
+ \___|@
+ @@
+233 LATIN SMALL LETTER E WITH ACUTE
+ __ @
+ /_/ @
+ / -_)@
+ \___|@
+ @@
+234 LATIN SMALL LETTER E WITH CIRCUMFLEX
+ //\ @
+ |/_\|@
+ / -_)@
+ \___|@
+ @@
+235 LATIN SMALL LETTER E WITH DIAERESIS
+ _ _ @
+ (_)_(_)@
+ / -_) @
+ \___| @
+ @@
+236 LATIN SMALL LETTER I WITH GRAVE
+ __ @
+ \_\@
+ | |@
+ |_|@
+ @@
+237 LATIN SMALL LETTER I WITH ACUTE
+ __@
+ /_/@
+ | |@
+ |_|@
+ @@
+238 LATIN SMALL LETTER I WITH CIRCUMFLEX
+ //\ @
+ |/_\|@
+ | | @
+ |_| @
+ @@
+239 LATIN SMALL LETTER I WITH DIAERESIS
+ _ _ @
+ (_)_(_)@
+ | | @
+ |_| @
+ @@
+240 LATIN SMALL LETTER ETH
+ \\/\ @
+ \/\\ @
+ / _` |@
+ \___/ @
+ @@
+241 LATIN SMALL LETTER N WITH TILDE
+ /\/| @
+ |/\/ @
+ | ' \ @
+ |_||_|@
+ @@
+242 LATIN SMALL LETTER O WITH GRAVE
+ __ @
+ \_\ @
+ / _ \@
+ \___/@
+ @@
+243 LATIN SMALL LETTER O WITH ACUTE
+ __ @
+ /_/ @
+ / _ \@
+ \___/@
+ @@
+244 LATIN SMALL LETTER O WITH CIRCUMFLEX
+ //\ @
+ |/_\|@
+ / _ \@
+ \___/@
+ @@
+245 LATIN SMALL LETTER O WITH TILDE
+ /\/|@
+ |/\/ @
+ / _ \@
+ \___/@
+ @@
+246 LATIN SMALL LETTER O WITH DIAERESIS
+ _ _ @
+ (_)_(_)@
+ / _ \ @
+ \___/ @
+ @@
+247 DIVISION SIGN
+ _ @
+ (_) @
+ |___|@
+ (_) @
+ @@
+248 LATIN SMALL LETTER O WITH STROKE
+ @
+ ___ @
+ / //\@
+ \//_/@
+ @@
+249 LATIN SMALL LETTER U WITH GRAVE
+ __ @
+ \_\_ @
+ | || |@
+ \_,_|@
+ @@
+250 LATIN SMALL LETTER U WITH ACUTE
+ __ @
+ _/_/ @
+ | || |@
+ \_,_|@
+ @@
+251 LATIN SMALL LETTER U WITH CIRCUMFLEX
+ /\ @
+ |/\| @
+ | || |@
+ \_,_|@
+ @@
+252 LATIN SMALL LETTER U WITH DIAERESIS
+ _ _ @
+ (_)(_)@
+ | || |@
+ \_,_|@
+ @@
+253 LATIN SMALL LETTER Y WITH ACUTE
+ __ @
+ _/_/ @
+ | || |@
+ \_, |@
+ |__/ @@
+254 LATIN SMALL LETTER THORN
+ _ @
+ | |__ @
+ | '_ \@
+ | .__/@
+ |_| @@
+255 LATIN SMALL LETTER Y WITH DIAERESIS
+ _ _ @
+ (_)(_)@
+ | || |@
+ \_, |@
+ |__/ @@
diff --git a/externals/figlet/fonts/smscript.flf b/externals/figlet/fonts/smscript.flf
new file mode 100644
index 000000000..32a8a39da
--- /dev/null
+++ b/externals/figlet/fonts/smscript.flf
@@ -0,0 +1,1097 @@
+flf2a$ 5 4 13 0 10 0 3904 96
+SmScript by Glenn Chappell 4/93 -- based on Script
+Includes ISO Latin-1
+figlet release 2.1 -- 12 Aug 1994
+Permission is hereby given to modify this font, as long as the
+modifier's name is placed on a comment line.
+
+Modified by Paul Burton <solution@earthlink.net> 12/96 to include new parameter
+supported by FIGlet and FIGWin. May also be slightly modified for better use
+of new full-width/kern/smush alternatives, but default output is NOT changed.
+
+$ $@
+$ $@
+$ $@
+$ $@
+$ $@@
+ @
+ |@
+ |@
+ o@
+ @@
+ oo@
+ ||@
+ $@
+ $@
+ @@
+ @
+ _|_|_@
+ _|_|_@
+ | | @
+ @@
+ @
+ |_|_@
+ (|_| @
+ _|_|)@
+ | | @@
+ @
+ () / @
+ / @
+ / ()@
+ @@
+ @
+ () @
+ /\/@
+ \/\@
+ @@
+ o@
+ /@
+ $@
+ $@
+ @@
+ @
+ /@
+ | @
+ | @
+ \@@
+ @
+ \ @
+ |@
+ |@
+ / @@
+ @
+ \|/ @
+ --*--@
+ /|\ @
+ @@
+ @
+ | @
+ --+--@
+ | @
+ @@
+ @
+ @
+ @
+ o@
+ /@@
+ @
+ @
+ ----@
+ $ @
+ @@
+ @
+ @
+ @
+ o@
+ @@
+ @
+ /@
+ / @
+ / @
+ @@
+ _ @
+ / \ @
+ | |@
+ \_/ @
+ @@
+ ,@
+ /|@
+ |@
+ |@
+ @@
+ _ @
+ / )@
+ / @
+ /__@
+ @@
+ ____@
+ __/@
+ $ \@
+ \__/@
+ @@
+ @
+ | | @
+ |__|_@
+ | @
+ @@
+ ___@
+ |__ @
+ $ \@
+ \__/@
+ @@
+ _ @
+ /_ @
+ |/ \@
+ \_/@
+ @@
+ ____@
+ $/@
+ / @
+ / @
+ @@
+ __ @
+ (__)@
+ / \@
+ \__/@
+ @@
+ __ @
+ / |@
+ \_/|@
+ |@
+ @@
+ @
+ o@
+ $@
+ o@
+ @@
+ @
+ o@
+ $@
+ o@
+ /@@
+ @
+ /@
+ < @
+ \@
+ @@
+ @
+ ____@
+ ____@
+ $ @
+ @@
+ @
+ \ @
+ >@
+ / @
+ @@
+ __ @
+ )@
+ | @
+ o @
+ @@
+ ____ @
+ / __,\ @
+ | / | |@
+ | \_/|/ @
+ \____/ @@
+ __, @
+ / | @
+ | | @
+ \_/\_/@
+ @@
+ , _ @
+ /|/_)@
+ | \@
+ |(_/@
+ @@
+ __$ @
+ / () @
+ | $ @
+ \___/@
+ @@
+ $___ @
+ (| \ @
+ | |@
+ (\__/ @
+ @@
+ __$ @
+ / () @
+ >-$ @
+ \___/@
+ @@
+ $_____@
+ () |_$@
+ /| |@
+ (/ @
+ @@
+ @
+ () |@
+ /\/|@
+ /(_/ @
+ @@
+ , @
+ /| | @
+ |--| @
+ | |)@
+ @@
+ @
+ |\ @
+ _ |/ @
+ \_/\/@
+ @@
+ @
+ /| @
+ | | @
+ \|/@
+ (| @@
+ , , @
+ /|_/ @
+ |\ @
+ | \_/@
+ @@
+ $ @
+ \_|) @
+ | @
+ (\__/@
+ @@
+ ,_ _ @
+ /| | | @
+ | | | @
+ | | |_/@
+ @@
+ , @
+ /|/\ @
+ | | @
+ | |_/@
+ @@
+ __ @
+ /\_\/@
+ | |@
+ \__/ @
+ @@
+ , _ @
+ /|/ \@
+ |__/@
+ | $@
+ @@
+ __ @
+ /__\ @
+ |/ \| @
+ \__/\_/@
+ @@
+ , _ @
+ /|/ \ @
+ |__/ @
+ | \_/@
+ @@
+ @
+ () @
+ /\ @
+ /(_)@
+ @@
+ $_____@
+ () | @
+ $| @
+ (/ @
+ @@
+ @
+ (| | @
+ | | @
+ \_/\_/@
+ @@
+ @
+ (| |_/@
+ | | @
+ \/ @
+ @@
+ @
+ (| | |_/@
+ | | | @
+ \/ \/ @
+ @@
+ @
+ (\ / @
+ >< @
+ _/ \_/@
+ @@
+ @
+ (| | @
+ | | @
+ \/|/@
+ (| @@
+ _ @
+ / ) @
+ / @
+ /__/@
+ (| @@
+ _@
+ | @
+ | @
+ | @
+ |_@@
+ @
+ \ @
+ \ @
+ \@
+ @@
+ _ @
+ |@
+ |@
+ |@
+ _|@@
+ /\@
+ $@
+ $@
+ $@
+ @@
+ @
+ @
+ @
+ $ @
+ ____@@
+ o@
+ \@
+ $@
+ $@
+ @@
+ @
+ _, @
+ / | @
+ \/|_/@
+ @@
+ @
+ |) @
+ |/\_@
+ \/ @
+ @@
+ @
+ _ @
+ / @
+ \__/@
+ @@
+ @
+ _| @
+ / | @
+ \/|_/@
+ @@
+ @
+ _ @
+ |/ @
+ |_/@
+ @@
+ @
+ |\ @
+ |/ @
+ |_/@
+ |) @@
+ @
+ _, @
+ / | @
+ \/|/@
+ (| @@
+ @
+ |) @
+ |/\ @
+ | |/@
+ @@
+ @
+ o @
+ | @
+ |/@
+ @@
+ @
+ o @
+ | @
+ |/@
+ (| @@
+ @
+ |) @
+ |/) @
+ | \/@
+ @@
+ @
+ |\ @
+ |/ @
+ |_/@
+ @@
+ @
+ @
+ /|/|/| @
+ $| | |_/@
+ @@
+ @
+ @
+ /|/| @
+ $| |_/@
+ @@
+ @
+ _ @
+ / \_@
+ \_/ @
+ @@
+ @
+ @
+ |/\_@
+ |_/ @
+ (| @@
+ @
+ _, @
+ / | @
+ \/|_/@
+ |) @@
+ @
+ ,_ @
+ / | @
+ $ |/@
+ @@
+ @
+ , @
+ / \_@
+ $\/ @
+ @@
+ @
+ _|_ @
+ | @
+ |_/@
+ @@
+ @
+ @
+ | | @
+ $\/|_/@
+ @@
+ @
+ @
+ | |_@
+ $\/ @
+ @@
+ @
+ @
+ | | |_@
+ $\/ \/ @
+ @@
+ @
+ @
+ /\/ @
+ $/\/@
+ @@
+ @
+ @
+ | | @
+ $\/|/@
+ (| @@
+ @
+ __ @
+ / / _@
+ $/_/ @
+ (| @@
+ @
+ /@
+ _| @
+ | @
+ \@@
+ |@
+ |@
+ |@
+ |@
+ |@@
+ @
+ \ @
+ |_@
+ | @
+ / @@
+ /\/@
+ $ @
+ $ @
+ $ @
+ @@
+ o o @
+ __, @
+ / | @
+ \_/\_/@
+ @@
+ o o @
+ __ @
+ /\_\/@
+ \__/ @
+ @@
+ /\/ @
+ @
+ (| | @
+ \_/\_/@
+ @@
+ o o @
+ _, @
+ / | @
+ \/|_/@
+ @@
+ o o @
+ _ @
+ / \_@
+ \_/ @
+ @@
+ o o @
+ @
+ | | @
+ $\/|_/@
+ @@
+ _ @
+ | \@
+ | <@
+ |_/@
+ | @@
+160 NO-BREAK SPACE
+ $@
+ $@
+ $@
+ $@
+ $@@
+161 INVERTED EXCLAMATION MARK
+ @
+ o@
+ |@
+ |@
+ @@
+162 CENT SIGN
+ @
+ _|_ @
+ / | @
+ \_|_/@
+ | @@
+163 POUND SIGN
+ _ @
+ _|_` @
+ | @
+ (\__/@
+ @@
+164 CURRENCY SIGN
+ \ _ /@
+ / \ @
+ \_/ @
+ / \@
+ @@
+165 YEN SIGN
+ \ /@
+ _\_/_@
+ __|__@
+ | @
+ @@
+166 BROKEN BAR
+ |@
+ |@
+ @
+ |@
+ |@@
+167 SECTION SIGN
+ _@
+ ( @
+ ()@
+ _)@
+ @@
+168 DIAERESIS
+ o o@
+ $ $@
+ $ $@
+ $ $@
+ @@
+169 COPYRIGHT SIGN
+ ____ @
+ / __ \ @
+ | / () |@
+ | \__/ |@
+ \____/ @@
+170 FEMININE ORDINAL INDICATOR
+ _, @
+ (_|_@
+ --- @
+ $ @
+ @@
+171 LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+ @
+ //@
+ << @
+ \\@
+ @@
+172 NOT SIGN
+ @
+ __ @
+ |@
+ $ @
+ @@
+173 SOFT HYPHEN
+ @
+ @
+ ---@
+ $ @
+ @@
+174 REGISTERED SIGN
+ ____ @
+ / ,_ \ @
+ | /|_) |@
+ | |\/ |@
+ \____/ @@
+175 MACRON
+ ____@
+ $ @
+ $ @
+ $ @
+ @@
+176 DEGREE SIGN
+ ()@
+ $@
+ $@
+ $@
+ @@
+177 PLUS-MINUS SIGN
+ @
+ | @
+ --+--@
+ __|__@
+ @@
+178 SUPERSCRIPT TWO
+ _ @
+ )@
+ /_@
+ $@
+ @@
+179 SUPERSCRIPT THREE
+ ___@
+ _/@
+ __)@
+ $ @
+ @@
+180 ACUTE ACCENT
+ /@
+ $@
+ $@
+ $@
+ @@
+181 MICRO SIGN
+ @
+ @
+ | | @
+ |\/|_/@
+ | @@
+182 PILCROW SIGN
+ ___ @
+ / | |@
+ \_| |@
+ | |@
+ @@
+183 MIDDLE DOT
+ @
+ @
+ $O$@
+ $ @
+ @@
+184 CEDILLA
+ @
+ @
+ @
+ $ @
+ _)@@
+185 SUPERSCRIPT ONE
+ ,@
+ /|@
+ |@
+ $@
+ @@
+186 MASCULINE ORDINAL INDICATOR
+ __@
+ (_)@
+ ---@
+ $ @
+ @@
+187 RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+ @
+ \\ @
+ >>@
+ // @
+ @@
+188 VULGAR FRACTION ONE QUARTER
+ , @
+ /| / @
+ |/|_|_@
+ / | @
+ @@
+189 VULGAR FRACTION ONE HALF
+ , @
+ /| /_ @
+ |/ )@
+ / /_@
+ @@
+190 VULGAR FRACTION THREE QUARTERS
+ ___ @
+ _/ / @
+ __)/|_|_@
+ / | @
+ @@
+191 INVERTED QUESTION MARK
+ @
+ o @
+ | @
+ (__@
+ @@
+192 LATIN CAPITAL LETTER A WITH GRAVE
+ \ @
+ __, @
+ / | @
+ \_/\_/@
+ @@
+193 LATIN CAPITAL LETTER A WITH ACUTE
+ / @
+ __, @
+ / | @
+ \_/\_/@
+ @@
+194 LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+ /\ @
+ __, @
+ / | @
+ \_/\_/@
+ @@
+195 LATIN CAPITAL LETTER A WITH TILDE
+ /\/ @
+ __, @
+ / | @
+ \_/\_/@
+ @@
+196 LATIN CAPITAL LETTER A WITH DIAERESIS
+ o o @
+ __, @
+ / | @
+ \_/\_/@
+ @@
+197 LATIN CAPITAL LETTER A WITH RING ABOVE
+ _ @
+ (_) @
+ / | @
+ \_/\_/@
+ @@
+198 LATIN CAPITAL LETTER AE
+ __,__$ @
+ / | () @
+ | |-$ @
+ \_/\___/@
+ @@
+199 LATIN CAPITAL LETTER C WITH CEDILLA
+ __$ @
+ / () @
+ | $ @
+ \___/@
+ _) @@
+200 LATIN CAPITAL LETTER E WITH GRAVE
+ \ @
+ __$ @
+ <_() @
+ <___/@
+ @@
+201 LATIN CAPITAL LETTER E WITH ACUTE
+ / @
+ __$ @
+ <_() @
+ <___/@
+ @@
+202 LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+ /\ @
+ __$ @
+ <_() @
+ <___/@
+ @@
+203 LATIN CAPITAL LETTER E WITH DIAERESIS
+ o o @
+ __$ @
+ <_() @
+ <___/@
+ @@
+204 LATIN CAPITAL LETTER I WITH GRAVE
+ \ @
+ |\ @
+ _ |/ @
+ \_/\/@
+ @@
+205 LATIN CAPITAL LETTER I WITH ACUTE
+ / @
+ |\ @
+ _ |/ @
+ \_/\/@
+ @@
+206 LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+ /\ @
+ |\ @
+ _ |/ @
+ \_/\/@
+ @@
+207 LATIN CAPITAL LETTER I WITH DIAERESIS
+ o o @
+ |\ @
+ _ |/ @
+ \_/\/@
+ @@
+208 LATIN CAPITAL LETTER ETH
+ ___ @
+ (| \ @
+ -|- |@
+ (\__/ @
+ @@
+209 LATIN CAPITAL LETTER N WITH TILDE
+ ,/\/ @
+ /|/\ @
+ | | @
+ | |_/@
+ @@
+210 LATIN CAPITAL LETTER O WITH GRAVE
+ \ @
+ __ @
+ /\_\/@
+ \__/ @
+ @@
+211 LATIN CAPITAL LETTER O WITH ACUTE
+ / @
+ __ @
+ /\_\/@
+ \__/ @
+ @@
+212 LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+ /\ @
+ __ @
+ /\_\/@
+ \__/ @
+ @@
+213 LATIN CAPITAL LETTER O WITH TILDE
+ /\/ @
+ __ @
+ /\_\/@
+ \__/ @
+ @@
+214 LATIN CAPITAL LETTER O WITH DIAERESIS
+ o o @
+ __ @
+ /\_\/@
+ \__/ @
+ @@
+215 MULTIPLICATION SIGN
+ @
+ $\/$@
+ $/\$@
+ $ $@
+ @@
+216 LATIN CAPITAL LETTER O WITH STROKE
+ __/ @
+ /\/\/@
+ | / |@
+ /__/ @
+ / @@
+217 LATIN CAPITAL LETTER U WITH GRAVE
+ \ @
+ @
+ (| | @
+ \_/\_/@
+ @@
+218 LATIN CAPITAL LETTER U WITH ACUTE
+ / @
+ @
+ (| | @
+ \_/\_/@
+ @@
+219 LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+ /\ @
+ @
+ (| | @
+ \_/\_/@
+ @@
+220 LATIN CAPITAL LETTER U WITH DIAERESIS
+ /\/ @
+ @
+ (| | @
+ \_/\_/@
+ @@
+221 LATIN CAPITAL LETTER Y WITH ACUTE
+ / @
+ @
+ (| | @
+ \/|/@
+ (| @@
+222 LATIN CAPITAL LETTER THORN
+ , @
+ /|__ @
+ |__)@
+ | $@
+ @@
+223 LATIN SMALL LETTER SHARP S
+ _ @
+ | \@
+ | <@
+ |_/@
+ | @@
+224 LATIN SMALL LETTER A WITH GRAVE
+ \ @
+ _, @
+ / | @
+ \/|_/@
+ @@
+225 LATIN SMALL LETTER A WITH ACUTE
+ / @
+ _, @
+ / | @
+ \/|_/@
+ @@
+226 LATIN SMALL LETTER A WITH CIRCUMFLEX
+ /\ @
+ _, @
+ / | @
+ \/|_/@
+ @@
+227 LATIN SMALL LETTER A WITH TILDE
+ /\/ @
+ _, @
+ / | @
+ \/|_/@
+ @@
+228 LATIN SMALL LETTER A WITH DIAERESIS
+ o o @
+ _, @
+ / | @
+ \/|_/@
+ @@
+229 LATIN SMALL LETTER A WITH RING ABOVE
+ () @
+ _, @
+ / | @
+ \/|_/@
+ @@
+230 LATIN SMALL LETTER AE
+ @
+ _,_ @
+ / |/ @
+ \/|_/@
+ @@
+231 LATIN SMALL LETTER C WITH CEDILLA
+ @
+ _ @
+ / @
+ \__/@
+ _) @@
+232 LATIN SMALL LETTER E WITH GRAVE
+ \ @
+ _ @
+ |/ @
+ |_/@
+ @@
+233 LATIN SMALL LETTER E WITH ACUTE
+ / @
+ _ @
+ |/ @
+ |_/@
+ @@
+234 LATIN SMALL LETTER E WITH CIRCUMFLEX
+ /\ @
+ _ @
+ |/ @
+ |_/@
+ @@
+235 LATIN SMALL LETTER E WITH DIAERESIS
+ o o @
+ _ @
+ |/ @
+ |__/@
+ @@
+236 LATIN SMALL LETTER I WITH GRAVE
+ \ @
+ @
+ | @
+ |/@
+ @@
+237 LATIN SMALL LETTER I WITH ACUTE
+ / @
+ @
+ | @
+ |/@
+ @@
+238 LATIN SMALL LETTER I WITH CIRCUMFLEX
+ /\@
+ @
+ | @
+ |/@
+ @@
+239 LATIN SMALL LETTER I WITH DIAERESIS
+ o o @
+ @
+ | @
+ |__/@
+ @@
+240 LATIN SMALL LETTER ETH
+ \, @
+ '\ @
+ / |@
+ \/ @
+ @@
+241 LATIN SMALL LETTER N WITH TILDE
+ /\/ @
+ @
+ /|/| @
+ $| |_/@
+ @@
+242 LATIN SMALL LETTER O WITH GRAVE
+ \ @
+ _ @
+ / \_@
+ \_/ @
+ @@
+243 LATIN SMALL LETTER O WITH ACUTE
+ / @
+ _ @
+ / \_@
+ \_/ @
+ @@
+244 LATIN SMALL LETTER O WITH CIRCUMFLEX
+ /\ @
+ _ @
+ / \_@
+ \_/ @
+ @@
+245 LATIN SMALL LETTER O WITH TILDE
+ /\/ @
+ _ @
+ / \_@
+ \_/ @
+ @@
+246 LATIN SMALL LETTER O WITH DIAERESIS
+ o o @
+ _ @
+ / \_@
+ \_/ @
+ @@
+247 DIVISION SIGN
+ @
+ O @
+ ---@
+ O @
+ @@
+248 LATIN SMALL LETTER O WITH STROKE
+ @
+ __/ @
+ / /\_@
+ \/_/ @
+ / @@
+249 LATIN SMALL LETTER U WITH GRAVE
+ \ @
+ @
+ | | @
+ $\/|_/@
+ @@
+250 LATIN SMALL LETTER U WITH ACUTE
+ / @
+ @
+ | | @
+ $\/|_/@
+ @@
+251 LATIN SMALL LETTER U WITH CIRCUMFLEX
+ /\ @
+ @
+ | | @
+ $\/|_/@
+ @@
+252 LATIN SMALL LETTER U WITH DIAERESIS
+ o o @
+ @
+ | | @
+ $\/|_/@
+ @@
+253 LATIN SMALL LETTER Y WITH ACUTE
+ / @
+ @
+ | | @
+ $\/|/@
+ (| @@
+254 LATIN SMALL LETTER THORN
+ @
+ |) @
+ |/\_@
+ |_/ @
+ (| @@
+255 LATIN SMALL LETTER Y WITH DIAERESIS
+ o o @
+ @
+ | | @
+ $\/|/@
+ (| @@
diff --git a/externals/figlet/fonts/smshadow.flf b/externals/figlet/fonts/smshadow.flf
new file mode 100644
index 000000000..7e1329f4c
--- /dev/null
+++ b/externals/figlet/fonts/smshadow.flf
@@ -0,0 +1,899 @@
+flf2a$ 4 3 14 0 10 0 1920 96
+SmShadow by Glenn Chappell 4/93 -- based on Small
+Includes ISO Latin-1
+figlet release 2.1 -- 12 Aug 1994
+Permission is hereby given to modify this font, as long as the
+modifier's name is placed on a comment line.
+
+Modified by Paul Burton <solution@earthlink.net> 12/96 to include new parameter
+supported by FIGlet and FIGWin. May also be slightly modified for better use
+of new full-width/kern/smush alternatives, but default output is NOT changed.
+
+ $$@
+ $$@
+ $$@
+ $$@@
+ |$@
+ _|$@
+ _)$@
+ @@
+ | )$@
+ V V$ @
+ @
+ @@
+ | |$ @
+ _ |_ |_|$@
+ _ |_ |_|$@
+ _| _|$ @@
+ |$ @
+ (_-<$@
+ _ _/$@
+ _|$ @@
+ _) /$ @
+ /$ @
+ _/ _)$@
+ @@
+ _|$ @
+ _| _|$@
+ \____|$ @
+ @@
+ )$@
+ /$ @
+ @
+ @@
+ /$@
+ |$ @
+ |$ @
+ \_\$@@
+ \ \$ @
+ |$@
+ |$@
+ _/$ @@
+ \ \ /$ @
+ _ _|$@
+ _/ _\$ @
+ @@
+ |$ @
+ __ __|$@
+ _|$ @
+ @@
+ @
+ @
+ )$@
+ /$ @@
+ @
+ ____|$@
+ @
+ @@
+ @
+ @
+ _)$@
+ @@
+ /$@
+ /$ @
+ _/$ @
+ @@
+ \$ @
+ ( |$@
+ \__/$ @
+ @@
+ _ |$@
+ |$@
+ _|$@
+ @@
+ _ )$@
+ /$ @
+ ___|$@
+ @@
+ __ /$@
+ _ \$@
+ ___/$@
+ @@
+ | |$ @
+ __ _|$@
+ _|$ @
+ @@
+ __|$@
+ __ \$@
+ ___/$@
+ @@
+ /$ @
+ _ \$@
+ \___/$@
+ @@
+ __ /$@
+ /$ @
+ _/$ @
+ @@
+ _ )$@
+ _ \$@
+ \___/$@
+ @@
+ _ \$@
+ \_ /$@
+ _/$ @
+ @@
+ _)$@
+ @
+ _)$@
+ @@
+ _)$@
+ @
+ )$@
+ /$ @@
+ /$@
+ < <$ @
+ \_\$@
+ @@
+ @
+ ____|$@
+ ____|$@
+ @@
+ \ \$ @
+ > >$@
+ _/$ @
+ @@
+ __ \$@
+ _/$@
+ _)$ @
+ @@
+ __ \$ @
+ / _` |$@
+ \__,_|$@
+ \____/$ @@
+ \$ @
+ _ \$ @
+ _/ _\$@
+ @@
+ _ )$@
+ _ \$@
+ ___/$@
+ @@
+ __|$@
+ ($ @
+ \___|$@
+ @@
+ _ \$ @
+ | |$@
+ ___/$ @
+ @@
+ __|$@
+ _|$ @
+ ___|$@
+ @@
+ __|$@
+ _|$ @
+ _|$ @
+ @@
+ __|$@
+ (_ |$@
+ \___|$@
+ @@
+ | |$@
+ __ |$@
+ _| _|$@
+ @@
+ _ _|$@
+ |$ @
+ ___|$@
+ @@
+ |$@
+ \ |$@
+ \__/$ @
+ @@
+ | /$@
+ . <$ @
+ _|\_\$@
+ @@
+ |$ @
+ |$ @
+ ____|$@
+ @@
+ \ |$@
+ |\/ |$@
+ _| _|$@
+ @@
+ \ |$@
+ . |$@
+ _|\_|$@
+ @@
+ _ \$ @
+ ( |$@
+ \___/$ @
+ @@
+ _ \$@
+ __/$@
+ _|$ @
+ @@
+ _ \$ @
+ ( |$@
+ \__\_\$@
+ @@
+ _ \$@
+ /$@
+ _|_\$@
+ @@
+ __|$@
+ \__ \$@
+ ____/$@
+ @@
+ __ __|$@
+ |$ @
+ _|$ @
+ @@
+ | |$@
+ | |$@
+ \__/$ @
+ @@
+ \ \ /$@
+ \ \ /$ @
+ \_/$ @
+ @@
+ \ \ /$@
+ \ \ \ /$ @
+ \_/\_/$ @
+ @@
+ \ \ /$@
+ > <$ @
+ _/\_\$@
+ @@
+ \ \ /$@
+ \ /$ @
+ _|$ @
+ @@
+ __ /$@
+ /$ @
+ ____|$@
+ @@
+ _|$@
+ |$ @
+ |$ @
+ __|$@@
+ \ \$ @
+ \ \$ @
+ \_\$@
+ @@
+ _ |$@
+ |$@
+ |$@
+ __|$@@
+ \$ @
+ /\|$@
+ @
+ @@
+ @
+ @
+ @
+ ____|$@@
+ )$@
+ \|$@
+ @
+ @@
+ @
+ _` |$@
+ \__,_|$@
+ @@
+ |$ @
+ _ \$@
+ _.__/$@
+ @@
+ @
+ _|$@
+ \__|$@
+ @@
+ |$@
+ _` |$@
+ \__,_|$@
+ @@
+ @
+ -_)$@
+ \___|$@
+ @@
+ _|$@
+ _|$@
+ _|$ @
+ @@
+ @
+ _` |$@
+ \__, |$@
+ ____/$ @@
+ |$ @
+ \$ @
+ _| _|$@
+ @@
+ _)$@
+ |$@
+ _|$@
+ @@
+ _)$@
+ |$@
+ |$@
+ __/$ @@
+ |$ @
+ | /$@
+ _\_\$@
+ @@
+ |$@
+ |$@
+ _|$@
+ @@
+ @
+ ` \$ @
+ _|_|_|$@
+ @@
+ @
+ \$ @
+ _| _|$@
+ @@
+ @
+ _ \$@
+ \___/$@
+ @@
+ @
+ _ \$@
+ .__/$@
+ _|$ @@
+ @
+ _` |$@
+ \__, |$@
+ _|$@@
+ @
+ _|$@
+ _|$ @
+ @@
+ @
+ (_-<$@
+ ___/$@
+ @@
+ |$ @
+ _|$@
+ \__|$@
+ @@
+ @
+ | |$@
+ \_,_|$@
+ @@
+ @
+ \ \ /$@
+ \_/$ @
+ @@
+ @
+ \ \ \ /$@
+ \_/\_/$ @
+ @@
+ @
+ \ \ /$@
+ _\_\$@
+ @@
+ @
+ | |$@
+ \_, |$@
+ ___/$ @@
+ @
+ _ /$@
+ ___|$@
+ @@
+ /$@
+ _ |$ @
+ |$ @
+ \_\$@@
+ |$@
+ |$@
+ |$@
+ _|$@@
+ \ \$ @
+ |_$@
+ |$ @
+ _/$ @@
+ \ |$@
+ /\/$ @
+ @
+ @@
+ _) \_)$@
+ _ \$ @
+ / _\$@
+ @@
+ _) _)$@
+ __ \$@
+ \____/$@
+ @@
+ _) _)$@
+ | |$@
+ \__/$ @
+ @@
+ _) _)$@
+ _` |$@
+ \__,_|$@
+ @@
+ _) _)$@
+ _ \$@
+ \___/$@
+ @@
+ _) _)$@
+ | |$@
+ \_,_|$@
+ @@
+ _ \$@
+ |< <$@
+ |__/$@
+ _|$ @@
+160 NO-BREAK SPACE
+ $$@
+ $$@
+ $$@
+ $$@@
+161 INVERTED EXCLAMATION MARK
+ _)$@
+ |$@
+ _|$@
+ @@
+162 CENT SIGN
+ |$ @
+ _)$@
+ \ _)$@
+ |$ @@
+163 POUND SIGN
+ _\$ @
+ _ _|$ @
+ _,___|$@
+ @@
+164 CURRENCY SIGN
+ \ . /$@
+ _ \$@
+ \/ /$@
+ @@
+165 YEN SIGN
+ \ \ /$ @
+ __ __|$@
+ __ __|$@
+ _|$ @@
+166 BROKEN BAR
+ |$@
+ _|$@
+ |$@
+ _|$@@
+167 SECTION SIGN
+ _)$@
+ \ \$ @
+ \ \/$ @
+ __/$ @@
+168 DIAERESIS
+ _) _)$@
+ @
+ @
+ @@
+169 COPYRIGHT SIGN
+ \$ @
+ _| \$@
+ \ \__| /$@
+ \____/$ @@
+170 FEMININE ORDINAL INDICATOR
+ _` |$@
+ \__,_|$@
+ _____|$@
+ @@
+171 LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+ / /$@
+ < < <$ @
+ \_\_\$@
+ @@
+172 NOT SIGN
+ ____ |$@
+ _|$@
+ @
+ @@
+173 SOFT HYPHEN
+ @
+ ___|$@
+ @
+ @@
+174 REGISTERED SIGN
+ \$ @
+ -) \$@
+ \ |\\ /$@
+ \____/$ @@
+175 MACRON
+ ___|$@
+ @
+ @
+ @@
+176 DEGREE SIGN
+ .\$@
+ \_/$@
+ @
+ @@
+177 PLUS-MINUS SIGN
+ |$ @
+ _ _|$@
+ _|$ @
+ _____|$@@
+178 SUPERSCRIPT TWO
+ _ )$@
+ __|$@
+ @
+ @@
+179 SUPERSCRIPT THREE
+ _ /$@
+ __)$@
+ @
+ @@
+180 ACUTE ACCENT
+ _/$@
+ @
+ @
+ @@
+181 MICRO SIGN
+ @
+ | |$@
+ .,_|$@
+ _|$ @@
+182 PILCROW SIGN
+ |$@
+ \_ | |$@
+ _|_|$@
+ @@
+183 MIDDLE DOT
+ @
+ _)$@
+ @
+ @@
+184 CEDILLA
+ @
+ @
+ @
+ _)$@@
+185 SUPERSCRIPT ONE
+ _ |$@
+ _|$@
+ @
+ @@
+186 MASCULINE ORDINAL INDICATOR
+ _ \$@
+ \___/$@
+ ____|$@
+ @@
+187 RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+ \ \ \$ @
+ > > >$@
+ _/_/$ @
+ @@
+188 VULGAR FRACTION ONE QUARTER
+ _ | /$ @
+ _| /_' |$@
+ _/ _|$@
+ @@
+189 VULGAR FRACTION ONE HALF
+ _ | /$ @
+ _| /_ )$@
+ _/ __|$@
+ @@
+190 VULGAR FRACTION THREE QUARTERS
+ _ / /$ @
+ __) /_' |$@
+ _/ _|$@
+ @@
+191 INVERTED QUESTION MARK
+ _)$ @
+ /$ @
+ \___|$@
+ @@
+192 LATIN CAPITAL LETTER A WITH GRAVE
+ \_\$ @
+ --\$ @
+ _/\_\$@
+ @@
+193 LATIN CAPITAL LETTER A WITH ACUTE
+ _/$ @
+ --\$ @
+ _/\_\$@
+ @@
+194 LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+ /\\$ @
+ --\$ @
+ _/\_\$@
+ @@
+195 LATIN CAPITAL LETTER A WITH TILDE
+ / _/$ @
+ --\$ @
+ _/\_\$@
+ @@
+196 LATIN CAPITAL LETTER A WITH DIAERESIS
+ _) \_)$@
+ _ \$ @
+ / _\$@
+ @@
+197 LATIN CAPITAL LETTER A WITH RING ABOVE
+ ( )$ @
+ _ \$ @
+ _/ _\$@
+ @@
+198 LATIN CAPITAL LETTER AE
+ , __|$@
+ _ _|$ @
+ _/ ___|$@
+ @@
+199 LATIN CAPITAL LETTER C WITH CEDILLA
+ |$@
+ ($ @
+ \___|$@
+ _)$ @@
+200 LATIN CAPITAL LETTER E WITH GRAVE
+ \_\$@
+ -<$@
+ __<$@
+ @@
+201 LATIN CAPITAL LETTER E WITH ACUTE
+ _/$@
+ -<$@
+ __<$@
+ @@
+202 LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+ /\\$@
+ -<$@
+ __<$@
+ @@
+203 LATIN CAPITAL LETTER E WITH DIAERESIS
+ _) _)$@
+ -<$ @
+ __<$ @
+ @@
+204 LATIN CAPITAL LETTER I WITH GRAVE
+ \_\$ @
+ _ _|$@
+ ___|$@
+ @@
+205 LATIN CAPITAL LETTER I WITH ACUTE
+ _/$ @
+ _ _|$@
+ ___|$@
+ @@
+206 LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+ /\\$ @
+ _ _|$@
+ ___|$@
+ @@
+207 LATIN CAPITAL LETTER I WITH DIAERESIS
+ _) _)$@
+ _ _|$ @
+ ___|$ @
+ @@
+208 LATIN CAPITAL LETTER ETH
+ _ \$ @
+ _ _| |$@
+ ___/$ @
+ @@
+209 LATIN CAPITAL LETTER N WITH TILDE
+ / _/$@
+ \ |$@
+ _|\_|$@
+ @@
+210 LATIN CAPITAL LETTER O WITH GRAVE
+ \_\$ @
+ __ \$@
+ \____/$@
+ @@
+211 LATIN CAPITAL LETTER O WITH ACUTE
+ _/$ @
+ __ \$@
+ \____/$@
+ @@
+212 LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+ /\\$ @
+ __ \$@
+ \____/$@
+ @@
+213 LATIN CAPITAL LETTER O WITH TILDE
+ / _/$ @
+ __ \$@
+ \____/$@
+ @@
+214 LATIN CAPITAL LETTER O WITH DIAERESIS
+ _) _)$@
+ __ \$@
+ \____/$@
+ @@
+215 MULTIPLICATION SIGN
+ \ \$@
+ , '$@
+ \/\/$@
+ @@
+216 LATIN CAPITAL LETTER O WITH STROKE
+ _ /\$ @
+ ( / |$@
+ \_/__/$ @
+ @@
+217 LATIN CAPITAL LETTER U WITH GRAVE
+ \_\$ @
+ | |$@
+ \__/$ @
+ @@
+218 LATIN CAPITAL LETTER U WITH ACUTE
+ _/$ @
+ | |$@
+ \__/$ @
+ @@
+219 LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+ /\\$ @
+ | |$@
+ \__/$ @
+ @@
+220 LATIN CAPITAL LETTER U WITH DIAERESIS
+ _) _)$@
+ | |$@
+ \__/$ @
+ @@
+221 LATIN CAPITAL LETTER Y WITH ACUTE
+ _/$ @
+ \ \ /$@
+ _|$ @
+ @@
+222 LATIN CAPITAL LETTER THORN
+ |$ @
+ -_)$@
+ _|$ @
+ @@
+223 LATIN SMALL LETTER SHARP S
+ _ \$@
+ |< <$@
+ |__/$@
+ _|$ @@
+224 LATIN SMALL LETTER A WITH GRAVE
+ \_\$ @
+ _` |$@
+ \__,_|$@
+ @@
+225 LATIN SMALL LETTER A WITH ACUTE
+ _/$ @
+ _` |$@
+ \__,_|$@
+ @@
+226 LATIN SMALL LETTER A WITH CIRCUMFLEX
+ /\\$ @
+ _` |$@
+ \__,_|$@
+ @@
+227 LATIN SMALL LETTER A WITH TILDE
+ / _/$ @
+ _` |$@
+ \__,_|$@
+ @@
+228 LATIN SMALL LETTER A WITH DIAERESIS
+ _) _)$@
+ _` |$@
+ \__,_|$@
+ @@
+229 LATIN SMALL LETTER A WITH RING ABOVE
+ ( )$ @
+ _` |$@
+ \__,_|$@
+ @@
+230 LATIN SMALL LETTER AE
+ @
+ _` -_)$@
+ \__,___|$@
+ @@
+231 LATIN SMALL LETTER C WITH CEDILLA
+ @
+ _|$@
+ \__|$@
+ _)$@@
+232 LATIN SMALL LETTER E WITH GRAVE
+ \_\$ @
+ -_)$@
+ \___|$@
+ @@
+233 LATIN SMALL LETTER E WITH ACUTE
+ _/$ @
+ -_)$@
+ \___|$@
+ @@
+234 LATIN SMALL LETTER E WITH CIRCUMFLEX
+ /\\$ @
+ -_)$@
+ \___|$@
+ @@
+235 LATIN SMALL LETTER E WITH DIAERESIS
+ _) _)$@
+ -_)$ @
+ \___|$ @
+ @@
+236 LATIN SMALL LETTER I WITH GRAVE
+ \_\$@
+ |$@
+ _|$@
+ @@
+237 LATIN SMALL LETTER I WITH ACUTE
+ _/$@
+ |$@
+ _|$@
+ @@
+238 LATIN SMALL LETTER I WITH CIRCUMFLEX
+ /\\$@
+ |$ @
+ _|$ @
+ @@
+239 LATIN SMALL LETTER I WITH DIAERESIS
+ _) _)$@
+ |$ @
+ _|$ @
+ @@
+240 LATIN SMALL LETTER ETH
+ , \'$@
+ _` |$@
+ \___/$ @
+ @@
+241 LATIN SMALL LETTER N WITH TILDE
+ / _/$ @
+ ' \$ @
+ _| _|$@
+ @@
+242 LATIN SMALL LETTER O WITH GRAVE
+ \_\$ @
+ _ \$@
+ \___/$@
+ @@
+243 LATIN SMALL LETTER O WITH ACUTE
+ _/$ @
+ _ \$@
+ \___/$@
+ @@
+244 LATIN SMALL LETTER O WITH CIRCUMFLEX
+ /\\$ @
+ _ \$@
+ \___/$@
+ @@
+245 LATIN SMALL LETTER O WITH TILDE
+ / _/$@
+ _ \$@
+ \___/$@
+ @@
+246 LATIN SMALL LETTER O WITH DIAERESIS
+ _) _)$@
+ _ \$@
+ \___/$@
+ @@
+247 DIVISION SIGN
+ _)$ @
+ ___|$@
+ _)$ @
+ @@
+248 LATIN SMALL LETTER O WITH STROKE
+ @
+ /\$@
+ \_/_/$@
+ @@
+249 LATIN SMALL LETTER U WITH GRAVE
+ \_\$ @
+ | |$@
+ \_,_|$@
+ @@
+250 LATIN SMALL LETTER U WITH ACUTE
+ _/$ @
+ | |$@
+ \_,_|$@
+ @@
+251 LATIN SMALL LETTER U WITH CIRCUMFLEX
+ /\\$ @
+ | |$@
+ \_,_|$@
+ @@
+252 LATIN SMALL LETTER U WITH DIAERESIS
+ _) _)$@
+ | |$@
+ \_,_|$@
+ @@
+253 LATIN SMALL LETTER Y WITH ACUTE
+ _/$ @
+ | |$@
+ \_, |$@
+ ___/$ @@
+254 LATIN SMALL LETTER THORN
+ |$ @
+ '_ \$@
+ .__/$@
+ _|$ @@
+255 LATIN SMALL LETTER Y WITH DIAERESIS
+ _) _)$@
+ | |$@
+ \_, |$@
+ ___/$ @@
diff --git a/externals/figlet/fonts/smslant.flf b/externals/figlet/fonts/smslant.flf
new file mode 100644
index 000000000..24284b846
--- /dev/null
+++ b/externals/figlet/fonts/smslant.flf
@@ -0,0 +1,1097 @@
+flf2a$ 5 4 14 15 10 0 22415 96
+SmSlant by Glenn Chappell 6/93 - based on Small & Slant
+Includes ISO Latin-1
+figlet release 2.1 -- 12 Aug 1994
+Permission is hereby given to modify this font, as long as the
+modifier's name is placed on a comment line.
+
+Modified by Paul Burton <solution@earthlink.net> 12/96 to include new parameter
+supported by FIGlet and FIGWin. May also be slightly modified for better use
+of new full-width/kern/smush alternatives, but default output is NOT changed.
+
+ $@
+ $ @
+ $ @
+ $ @
+$ @@
+ __@
+ / /@
+ /_/ @
+(_) @
+ @@
+ _ _ @
+( | )@
+|/|/ @
+$ @
+ @@
+ ____ @
+ __/ / /_@
+ /_ . __/@
+/_ __/ @
+ /_/_/ @@
+ @
+ _//@
+ (_-<@
+/ __/@
+// @@
+ _ __@
+(_)_/_/@
+ _/_/_ @
+/_/ (_)@
+ @@
+ ____ @
+ / __/___@
+ > _/_ _/@
+|_____/ @
+ @@
+ _ @
+( )@
+|/ @
+$ @
+ @@
+ __@
+ _/_/@
+ / / @
+/ / @
+|_| @@
+ _ @
+ | |@
+ / /@
+ _/_/ @
+/_/ @@
+ @
+ _/|@
+> _<@
+|/ @
+ @@
+ __ @
+ __/ /_@
+/_ __/@
+ /_/ @
+ @@
+ @
+ @
+ _ @
+( )@
+|/ @@
+ @
+ ____@
+/___/@
+ $ @
+ @@
+ @
+ @
+ _ @
+(_)@
+ @@
+ __@
+ _/_/@
+ _/_/ @
+/_/ @
+ @@
+ ___ @
+ / _ \@
+/ // /@
+\___/ @
+ @@
+ ___@
+ < /@
+ / / @
+/_/ @
+ @@
+ ___ @
+ |_ |@
+ / __/ @
+/____/ @
+ @@
+ ____@
+ |_ /@
+ _/_ < @
+/____/ @
+ @@
+ ____@
+ / / /@
+/_ _/@
+ /_/ @
+ @@
+ ____@
+ / __/@
+ /__ \ @
+/____/ @
+ @@
+ ____@
+ / __/@
+/ _ \ @
+\___/ @
+ @@
+ ____@
+/_ /@
+ / / @
+/_/ @
+ @@
+ ___ @
+ ( _ )@
+/ _ |@
+\___/ @
+ @@
+ ___ @
+ / _ \@
+ \_, /@
+/___/ @
+ @@
+ _ @
+ (_)@
+ _ @
+(_) @
+ @@
+ _ @
+ (_)@
+ _ @
+( ) @
+|/ @@
+ __@
+ / /@
+< < @
+ \_\@
+ @@
+ @
+ ____@
+ /___/@
+/___/ @
+ @@
+__ @
+\ \ @
+ > >@
+/_/ @
+ @@
+ ___ @
+/__ \@
+ /__/@
+(_) @
+ @@
+ _____ @
+ / ___ \@
+/ / _ `/@
+\ \_,_/ @
+ \___/ @@
+ ___ @
+ / _ |@
+ / __ |@
+/_/ |_|@
+ @@
+ ___ @
+ / _ )@
+ / _ |@
+/____/ @
+ @@
+ _____@
+ / ___/@
+/ /__ @
+\___/ @
+ @@
+ ___ @
+ / _ \@
+ / // /@
+/____/ @
+ @@
+ ____@
+ / __/@
+ / _/ @
+/___/ @
+ @@
+ ____@
+ / __/@
+ / _/ @
+/_/ @
+ @@
+ _____@
+ / ___/@
+/ (_ / @
+\___/ @
+ @@
+ __ __@
+ / // /@
+ / _ / @
+/_//_/ @
+ @@
+ ____@
+ / _/@
+ _/ / @
+/___/ @
+ @@
+ __@
+ __ / /@
+/ // / @
+\___/ @
+ @@
+ __ __@
+ / //_/@
+ / ,< @
+/_/|_| @
+ @@
+ __ @
+ / / @
+ / /__@
+/____/@
+ @@
+ __ ___@
+ / |/ /@
+ / /|_/ / @
+/_/ /_/ @
+ @@
+ _ __@
+ / |/ /@
+ / / @
+/_/|_/ @
+ @@
+ ____ @
+ / __ \@
+/ /_/ /@
+\____/ @
+ @@
+ ___ @
+ / _ \@
+ / ___/@
+/_/ @
+ @@
+ ____ @
+ / __ \@
+/ /_/ /@
+\___\_\@
+ @@
+ ___ @
+ / _ \@
+ / , _/@
+/_/|_| @
+ @@
+ ____@
+ / __/@
+ _\ \ @
+/___/ @
+ @@
+ ______@
+/_ __/@
+ / / @
+/_/ @
+ @@
+ __ __@
+ / / / /@
+/ /_/ / @
+\____/ @
+ @@
+ _ __@
+ | | / /@
+ | |/ / @
+ |___/ @
+ @@
+ _ __@
+ | | /| / /@
+ | |/ |/ / @
+ |__/|__/ @
+ @@
+ _ __@
+ | |/_/@
+ _> < @
+/_/|_| @
+ @@
+ __ __@
+ \ \/ /@
+ \ / @
+ /_/ @
+ @@
+ ____@
+ /_ /@
+ / /_@
+ /___/@
+ @@
+ ___@
+ / _/@
+ / / @
+ / / @
+/__/ @@
+__ @
+\ \ @
+ \ \ @
+ \_\@
+ @@
+ ___@
+ / /@
+ / / @
+ _/ / @
+/__/ @@
+ //|@
+|/||@
+ $ @
+$ @
+ @@
+ @
+ @
+ @
+ ____@
+/___/@@
+ _ @
+( )@
+ V @
+$ @
+ @@
+ @
+ ___ _@
+/ _ `/@
+\_,_/ @
+ @@
+ __ @
+ / / @
+ / _ \@
+/_.__/@
+ @@
+ @
+ ____@
+/ __/@
+\__/ @
+ @@
+ __@
+ ___/ /@
+/ _ / @
+\_,_/ @
+ @@
+ @
+ ___ @
+/ -_)@
+\__/ @
+ @@
+ ___@
+ / _/@
+ / _/ @
+/_/ @
+ @@
+ @
+ ___ _@
+ / _ `/@
+ \_, / @
+/___/ @@
+ __ @
+ / / @
+ / _ \@
+/_//_/@
+ @@
+ _ @
+ (_)@
+ / / @
+/_/ @
+ @@
+ _ @
+ (_)@
+ / / @
+ __/ / @
+|___/ @@
+ __ @
+ / /__@
+ / '_/@
+/_/\_\ @
+ @@
+ __@
+ / /@
+ / / @
+/_/ @
+ @@
+ @
+ __ _ @
+ / ' \@
+/_/_/_/@
+ @@
+ @
+ ___ @
+ / _ \@
+/_//_/@
+ @@
+ @
+ ___ @
+/ _ \@
+\___/@
+ @@
+ @
+ ___ @
+ / _ \@
+ / .__/@
+/_/ @@
+ @
+ ___ _@
+/ _ `/@
+\_, / @
+ /_/ @@
+ @
+ ____@
+ / __/@
+/_/ @
+ @@
+ @
+ ___@
+ (_-<@
+/___/@
+ @@
+ __ @
+ / /_@
+/ __/@
+\__/ @
+ @@
+ @
+ __ __@
+/ // /@
+\_,_/ @
+ @@
+ @
+ _ __@
+| |/ /@
+|___/ @
+ @@
+ @
+ _ __@
+| |/|/ /@
+|__,__/ @
+ @@
+ @
+ __ __@
+ \ \ /@
+/_\_\ @
+ @@
+ @
+ __ __@
+ / // /@
+ \_, / @
+/___/ @@
+ @
+ ___@
+/_ /@
+/__/@
+ @@
+ __@
+ _/_/@
+_/ / @
+/ / @
+\_\ @@
+ __@
+ / /@
+ / / @
+ / / @
+/_/ @@
+ __ @
+ \ \ @
+ / /_@
+ _/_/ @
+/_/ @@
+ /\//@
+//\/ @
+ $ @
+$ @
+ @@
+ _ _ @
+ (_)(_)@
+ / - | @
+/_/|_| @
+ @@
+ _ _ @
+ (_)_(_)@
+/ __ \ @
+\____/ @
+ @@
+ _ _ @
+ (_) (_)@
+/ /_/ / @
+\____/ @
+ @@
+ _ _ @
+ (_)(_)@
+/ _ `/ @
+\_,_/ @
+ @@
+ _ _ @
+ (_)(_)@
+/ _ \ @
+\___/ @
+ @@
+ _ _ @
+ (_)(_)@
+/ // / @
+\_,_/ @
+ @@
+ ____ @
+ / _ )@
+ / /< < @
+ / //__/ @
+/_/ @@
+160 NO-BREAK SPACE
+ $@
+ $ @
+ $ @
+ $ @
+$ @@
+161 INVERTED EXCLAMATION MARK
+ _ @
+ (_)@
+ / / @
+/_/ @
+ @@
+162 CENT SIGN
+ @
+ __//@
+/ __/@
+\ _/ @
+// @@
+163 POUND SIGN
+ __ @
+ __/__|@
+ /_ _/_ @
+(_,___/ @
+ @@
+164 CURRENCY SIGN
+ /|_/|@
+ | . / @
+ /_ | @
+|/ |/ @
+ @@
+165 YEN SIGN
+ ____@
+ _| / /@
+ /_ __/@
+/_ __/ @
+ /_/ @@
+166 BROKEN BAR
+ __@
+ / /@
+ /_/ @
+ / / @
+/_/ @@
+167 SECTION SIGN
+ __ @
+ _/ _)@
+ / | | @
+ | |_/ @
+(__/ @@
+168 DIAERESIS
+ _ _ @
+(_) (_)@
+ $ $ @
+$ $ @
+ @@
+169 COPYRIGHT SIGN
+ ____ @
+ / ___\ @
+ / / _/ |@
+| |__/ / @
+ \____/ @@
+170 FEMININE ORDINAL INDICATOR
+ ___ _@
+ / _ `/@
+ _\_,_/ @
+/____/ @
+ @@
+171 LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+ ____@
+ / / /@
+< < < @
+ \_\_\@
+ @@
+172 NOT SIGN
+ @
+ ____@
+/_ /@
+ /_/ @
+ @@
+173 SOFT HYPHEN
+ @
+ ___@
+/__/@
+ $ @
+ @@
+174 REGISTERED SIGN
+ ____ @
+ / __ \ @
+ / / -) |@
+| //\\ / @
+ \____/ @@
+175 MACRON
+ ____@
+/___/@
+ $ @
+$ @
+ @@
+176 DEGREE SIGN
+ __ @
+ /. |@
+|__/ @
+ $ @
+ @@
+177 PLUS-MINUS SIGN
+ __ @
+ __/ /_@
+ /_ __/@
+ __/_/_ @
+/_____/ @@
+178 SUPERSCRIPT TWO
+ __ @
+ |_ )@
+/__| @
+ $ @
+ @@
+179 SUPERSCRIPT THREE
+ ___@
+ |_ /@
+/__) @
+ $ @
+ @@
+180 ACUTE ACCENT
+ __@
+/_/@
+ $ @
+$ @
+ @@
+181 MICRO SIGN
+ @
+ __ __@
+ / // /@
+ / .,_/ @
+/_/ @@
+182 PILCROW SIGN
+ _____@
+ / /@
+|_ / / @
+/_/_/ @
+ @@
+183 MIDDLE DOT
+ @
+ _ @
+(_)@
+$ @
+ @@
+184 CEDILLA
+ @
+ @
+ @
+ _ @
+/_)@@
+185 SUPERSCRIPT ONE
+ __@
+ < /@
+/_/ @
+$ @
+ @@
+186 MASCULINE ORDINAL INDICATOR
+ ___ @
+ / _ \@
+ _\___/@
+/____/ @
+ @@
+187 RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+____ @
+\ \ \ @
+ > > >@
+/_/_/ @
+ @@
+188 VULGAR FRACTION ONE QUARTER
+ __ __ @
+ < /_/_/___@
+/_//_//_' /@
+ /_/ /_/ @
+ @@
+189 VULGAR FRACTION ONE HALF
+ __ __ @
+ < /_/_/_ @
+/_//_/|_ )@
+ /_/ /__| @
+ @@
+190 VULGAR FRACTION THREE QUARTERS
+ ___ __ @
+ |_ /_/_/___@
+/__)/_//_' /@
+ /_/ /_/ @
+ @@
+191 INVERTED QUESTION MARK
+ _ @
+ _(_)@
+/ _/_@
+\___/@
+ @@
+192 LATIN CAPITAL LETTER A WITH GRAVE
+ __ @
+ _\_\@
+ / - |@
+/_/|_|@
+ @@
+193 LATIN CAPITAL LETTER A WITH ACUTE
+ __@
+ _/_/@
+ / - |@
+/_/|_|@
+ @@
+194 LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+ //|@
+ _|/||@
+ / - | @
+/_/|_| @
+ @@
+195 LATIN CAPITAL LETTER A WITH TILDE
+ /\//@
+ _//\/ @
+ / - | @
+/_/|_| @
+ @@
+196 LATIN CAPITAL LETTER A WITH DIAERESIS
+ _ _ @
+ (_)(_)@
+ / - | @
+/_/|_| @
+ @@
+197 LATIN CAPITAL LETTER A WITH RING ABOVE
+ (())@
+ / _ |@
+ / __ |@
+/_/ |_|@
+ @@
+198 LATIN CAPITAL LETTER AE
+ _______@
+ / _ __/@
+ / _ _/ @
+/_//___/ @
+ @@
+199 LATIN CAPITAL LETTER C WITH CEDILLA
+ _____@
+ / ___/@
+/ /__ @
+\___/ @
+/_) @@
+200 LATIN CAPITAL LETTER E WITH GRAVE
+ __ @
+ \_\@
+ / -<@
+/__< @
+ @@
+201 LATIN CAPITAL LETTER E WITH ACUTE
+ __@
+ _/_/@
+ / -< @
+/__< @
+ @@
+202 LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+ //|@
+ |/||@
+ / -< @
+/__< @
+ @@
+203 LATIN CAPITAL LETTER E WITH DIAERESIS
+ _ _ @
+ (_)(_)@
+ / -< @
+/__< @
+ @@
+204 LATIN CAPITAL LETTER I WITH GRAVE
+ __ @
+ _\_\ @
+ /_ __/@
+/____/ @
+ @@
+205 LATIN CAPITAL LETTER I WITH ACUTE
+ __@
+ __/_/@
+ /_ __/@
+/____/ @
+ @@
+206 LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+ //|@
+ _|/||@
+ /_ __/@
+/____/ @
+ @@
+207 LATIN CAPITAL LETTER I WITH DIAERESIS
+ _ _ @
+ (_)(_)@
+ /_ __/ @
+/____/ @
+ @@
+208 LATIN CAPITAL LETTER ETH
+ ____ @
+ _/ __ \@
+/_ _// /@
+/_____/ @
+ @@
+209 LATIN CAPITAL LETTER N WITH TILDE
+ /\//@
+ __//\/ @
+ / |/ / @
+/_/|__/ @
+ @@
+210 LATIN CAPITAL LETTER O WITH GRAVE
+ __ @
+ _\_\ @
+/ __ \@
+\____/@
+ @@
+211 LATIN CAPITAL LETTER O WITH ACUTE
+ __@
+ __/_/@
+/ __ \@
+\____/@
+ @@
+212 LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+ //|@
+ _|/||@
+/ __ \@
+\____/@
+ @@
+213 LATIN CAPITAL LETTER O WITH TILDE
+ /\//@
+ _//\/ @
+/ __ \ @
+\____/ @
+ @@
+214 LATIN CAPITAL LETTER O WITH DIAERESIS
+ _ _ @
+ (_)_(_)@
+/ __ \ @
+\____/ @
+ @@
+215 MULTIPLICATION SIGN
+ @
+ /|/|@
+ > < @
+|/|/ @
+ @@
+216 LATIN CAPITAL LETTER O WITH STROKE
+ _____ @
+ / _// \@
+/ //// /@
+\_//__/ @
+ @@
+217 LATIN CAPITAL LETTER U WITH GRAVE
+ __ @
+ __\_\ @
+/ /_/ /@
+\____/ @
+ @@
+218 LATIN CAPITAL LETTER U WITH ACUTE
+ __@
+ __ /_/@
+/ /_/ /@
+\____/ @
+ @@
+219 LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+ //|@
+ __|/||@
+/ /_/ /@
+\____/ @
+ @@
+220 LATIN CAPITAL LETTER U WITH DIAERESIS
+ _ _ @
+ (_) (_)@
+/ /_/ / @
+\____/ @
+ @@
+221 LATIN CAPITAL LETTER Y WITH ACUTE
+ __@
+__/_/@
+\ V /@
+ /_/ @
+ @@
+222 LATIN CAPITAL LETTER THORN
+ __ @
+ / / @
+ / -_)@
+/_/ @
+ @@
+223 LATIN SMALL LETTER SHARP S
+ ____ @
+ / _ )@
+ / /< < @
+ / //__/ @
+/_/ @@
+224 LATIN SMALL LETTER A WITH GRAVE
+ __ @
+ _\_\_@
+/ _ `/@
+\_,_/ @
+ @@
+225 LATIN SMALL LETTER A WITH ACUTE
+ __@
+ __/_/@
+/ _ `/@
+\_,_/ @
+ @@
+226 LATIN SMALL LETTER A WITH CIRCUMFLEX
+ //|@
+ _|/||@
+/ _ `/@
+\_,_/ @
+ @@
+227 LATIN SMALL LETTER A WITH TILDE
+ /\//@
+ _//\/ @
+/ _ `/ @
+\_,_/ @
+ @@
+228 LATIN SMALL LETTER A WITH DIAERESIS
+ _ _ @
+ (_)(_)@
+/ _ `/ @
+\_,_/ @
+ @@
+229 LATIN SMALL LETTER A WITH RING ABOVE
+ __ @
+ _(())@
+/ _ `/@
+\_,_/ @
+ @@
+230 LATIN SMALL LETTER AE
+ @
+ ___ ___ @
+/ _ ` -_)@
+\_,____/ @
+ @@
+231 LATIN SMALL LETTER C WITH CEDILLA
+ @
+ ____@
+/ __/@
+\__/ @
+/_) @@
+232 LATIN SMALL LETTER E WITH GRAVE
+ __ @
+ _\_\@
+/ -_)@
+\__/ @
+ @@
+233 LATIN SMALL LETTER E WITH ACUTE
+ __@
+ _/_/@
+/ -_)@
+\__/ @
+ @@
+234 LATIN SMALL LETTER E WITH CIRCUMFLEX
+ //|@
+ |/||@
+/ -_)@
+\__/ @
+ @@
+235 LATIN SMALL LETTER E WITH DIAERESIS
+ _ _ @
+(_)(_)@
+/ -_) @
+\__/ @
+ @@
+236 LATIN SMALL LETTER I WITH GRAVE
+ __ @
+ \_\@
+ / / @
+/_/ @
+ @@
+237 LATIN SMALL LETTER I WITH ACUTE
+ __@
+ /_/@
+ / / @
+/_/ @
+ @@
+238 LATIN SMALL LETTER I WITH CIRCUMFLEX
+ //|@
+ |/||@
+ / / @
+/_/ @
+ @@
+239 LATIN SMALL LETTER I WITH DIAERESIS
+ _ _ @
+(_)_(_)@
+ / / @
+/_/ @
+ @@
+240 LATIN SMALL LETTER ETH
+ _||_@
+ __ || @
+/ _` | @
+\___/ @
+ @@
+241 LATIN SMALL LETTER N WITH TILDE
+ /\//@
+ _//\/ @
+ / _ \ @
+/_//_/ @
+ @@
+242 LATIN SMALL LETTER O WITH GRAVE
+ __ @
+ _\_\@
+/ _ \@
+\___/@
+ @@
+243 LATIN SMALL LETTER O WITH ACUTE
+ __@
+ _/_/@
+/ _ \@
+\___/@
+ @@
+244 LATIN SMALL LETTER O WITH CIRCUMFLEX
+ //|@
+ _|/||@
+/ _ \ @
+\___/ @
+ @@
+245 LATIN SMALL LETTER O WITH TILDE
+ /\//@
+ _//\/ @
+/ _ \ @
+\___/ @
+ @@
+246 LATIN SMALL LETTER O WITH DIAERESIS
+ _ _ @
+ (_)(_)@
+/ _ \ @
+\___/ @
+ @@
+247 DIVISION SIGN
+ _ @
+ _(_)@
+/___/@
+(_) @
+ @@
+248 LATIN SMALL LETTER O WITH STROKE
+ @
+ ___ @
+/ //\@
+\//_/@
+ @@
+249 LATIN SMALL LETTER U WITH GRAVE
+ __ @
+ __\_\@
+/ // /@
+\_,_/ @
+ @@
+250 LATIN SMALL LETTER U WITH ACUTE
+ __@
+ __/_/@
+/ // /@
+\_,_/ @
+ @@
+251 LATIN SMALL LETTER U WITH CIRCUMFLEX
+ //|@
+ _|/||@
+/ // /@
+\_,_/ @
+ @@
+252 LATIN SMALL LETTER U WITH DIAERESIS
+ _ _ @
+ (_)(_)@
+/ // / @
+\_,_/ @
+ @@
+253 LATIN SMALL LETTER Y WITH ACUTE
+ __@
+ __/_/@
+ / // /@
+ \_, / @
+/___/ @@
+254 LATIN SMALL LETTER THORN
+ __ @
+ / / @
+ / _ \@
+ / .__/@
+/_/ @@
+255 LATIN SMALL LETTER Y WITH DIAERESIS
+ _ _ @
+ (_)(_)@
+ / // / @
+ \_, / @
+/___/ @@
diff --git a/externals/figlet/fonts/standard.flf b/externals/figlet/fonts/standard.flf
new file mode 100644
index 000000000..bb15241b0
--- /dev/null
+++ b/externals/figlet/fonts/standard.flf
@@ -0,0 +1,2238 @@
+flf2a$ 6 5 16 15 15 0 24463 229
+Standard by Glenn Chappell & Ian Chai 3/93 -- based on Frank's .sig
+Includes ISO Latin-1
+figlet release 2.1 -- 12 Aug 1994
+Modified for figlet 2.2 by John Cowan <cowan@ccil.org>
+ to add Latin-{2,3,4,5} support (Unicode U+0100-017F).
+Permission is hereby given to modify this font, as long as the
+modifier's name is placed on a comment line.
+
+---
+
+Modified by Paul Burton <solution@earthlink.net> 12/96 to include new parameter
+supported by FIGlet and FIGWin. May also be slightly modified for better use
+of new full-width/kern/smush alternatives, but default output is NOT changed.
+
+Modified 2012-05 by Patrick Gillespie (patorjk@gmail.com) to add the 0xCA0 character.
+ $@
+ $@
+ $@
+ $@
+ $@
+ $@@
+ _ @
+ | |@
+ | |@
+ |_|@
+ (_)@
+ @@
+ _ _ @
+ ( | )@
+ V V @
+ $ @
+ $ @
+ @@
+ _ _ @
+ _| || |_ @
+ |_ .. _|@
+ |_ _|@
+ |_||_| @
+ @@
+ _ @
+ | | @
+ / __)@
+ \__ \@
+ ( /@
+ |_| @@
+ _ __@
+ (_)/ /@
+ / / @
+ / /_ @
+ /_/(_)@
+ @@
+ ___ @
+ ( _ ) @
+ / _ \/\@
+ | (_> <@
+ \___/\/@
+ @@
+ _ @
+ ( )@
+ |/ @
+ $ @
+ $ @
+ @@
+ __@
+ / /@
+ | | @
+ | | @
+ | | @
+ \_\@@
+ __ @
+ \ \ @
+ | |@
+ | |@
+ | |@
+ /_/ @@
+ @
+ __/\__@
+ \ /@
+ /_ _\@
+ \/ @
+ @@
+ @
+ _ @
+ _| |_ @
+ |_ _|@
+ |_| @
+ @@
+ @
+ @
+ @
+ _ @
+ ( )@
+ |/ @@
+ @
+ @
+ _____ @
+ |_____|@
+ $ @
+ @@
+ @
+ @
+ @
+ _ @
+ (_)@
+ @@
+ __@
+ / /@
+ / / @
+ / / @
+ /_/ @
+ @@
+ ___ @
+ / _ \ @
+ | | | |@
+ | |_| |@
+ \___/ @
+ @@
+ _ @
+ / |@
+ | |@
+ | |@
+ |_|@
+ @@
+ ____ @
+ |___ \ @
+ __) |@
+ / __/ @
+ |_____|@
+ @@
+ _____ @
+ |___ / @
+ |_ \ @
+ ___) |@
+ |____/ @
+ @@
+ _ _ @
+ | || | @
+ | || |_ @
+ |__ _|@
+ |_| @
+ @@
+ ____ @
+ | ___| @
+ |___ \ @
+ ___) |@
+ |____/ @
+ @@
+ __ @
+ / /_ @
+ | '_ \ @
+ | (_) |@
+ \___/ @
+ @@
+ _____ @
+ |___ |@
+ / / @
+ / / @
+ /_/ @
+ @@
+ ___ @
+ ( _ ) @
+ / _ \ @
+ | (_) |@
+ \___/ @
+ @@
+ ___ @
+ / _ \ @
+ | (_) |@
+ \__, |@
+ /_/ @
+ @@
+ @
+ _ @
+ (_)@
+ _ @
+ (_)@
+ @@
+ @
+ _ @
+ (_)@
+ _ @
+ ( )@
+ |/ @@
+ __@
+ / /@
+ / / @
+ \ \ @
+ \_\@
+ @@
+ @
+ _____ @
+ |_____|@
+ |_____|@
+ $ @
+ @@
+ __ @
+ \ \ @
+ \ \@
+ / /@
+ /_/ @
+ @@
+ ___ @
+ |__ \@
+ / /@
+ |_| @
+ (_) @
+ @@
+ ____ @
+ / __ \ @
+ / / _` |@
+ | | (_| |@
+ \ \__,_|@
+ \____/ @@
+ _ @
+ / \ @
+ / _ \ @
+ / ___ \ @
+ /_/ \_\@
+ @@
+ ____ @
+ | __ ) @
+ | _ \ @
+ | |_) |@
+ |____/ @
+ @@
+ ____ @
+ / ___|@
+ | | @
+ | |___ @
+ \____|@
+ @@
+ ____ @
+ | _ \ @
+ | | | |@
+ | |_| |@
+ |____/ @
+ @@
+ _____ @
+ | ____|@
+ | _| @
+ | |___ @
+ |_____|@
+ @@
+ _____ @
+ | ___|@
+ | |_ @
+ | _| @
+ |_| @
+ @@
+ ____ @
+ / ___|@
+ | | _ @
+ | |_| |@
+ \____|@
+ @@
+ _ _ @
+ | | | |@
+ | |_| |@
+ | _ |@
+ |_| |_|@
+ @@
+ ___ @
+ |_ _|@
+ | | @
+ | | @
+ |___|@
+ @@
+ _ @
+ | |@
+ _ | |@
+ | |_| |@
+ \___/ @
+ @@
+ _ __@
+ | |/ /@
+ | ' / @
+ | . \ @
+ |_|\_\@
+ @@
+ _ @
+ | | @
+ | | @
+ | |___ @
+ |_____|@
+ @@
+ __ __ @
+ | \/ |@
+ | |\/| |@
+ | | | |@
+ |_| |_|@
+ @@
+ _ _ @
+ | \ | |@
+ | \| |@
+ | |\ |@
+ |_| \_|@
+ @@
+ ___ @
+ / _ \ @
+ | | | |@
+ | |_| |@
+ \___/ @
+ @@
+ ____ @
+ | _ \ @
+ | |_) |@
+ | __/ @
+ |_| @
+ @@
+ ___ @
+ / _ \ @
+ | | | |@
+ | |_| |@
+ \__\_\@
+ @@
+ ____ @
+ | _ \ @
+ | |_) |@
+ | _ < @
+ |_| \_\@
+ @@
+ ____ @
+ / ___| @
+ \___ \ @
+ ___) |@
+ |____/ @
+ @@
+ _____ @
+ |_ _|@
+ | | @
+ | | @
+ |_| @
+ @@
+ _ _ @
+ | | | |@
+ | | | |@
+ | |_| |@
+ \___/ @
+ @@
+ __ __@
+ \ \ / /@
+ \ \ / / @
+ \ V / @
+ \_/ @
+ @@
+ __ __@
+ \ \ / /@
+ \ \ /\ / / @
+ \ V V / @
+ \_/\_/ @
+ @@
+ __ __@
+ \ \/ /@
+ \ / @
+ / \ @
+ /_/\_\@
+ @@
+ __ __@
+ \ \ / /@
+ \ V / @
+ | | @
+ |_| @
+ @@
+ _____@
+ |__ /@
+ / / @
+ / /_ @
+ /____|@
+ @@
+ __ @
+ | _|@
+ | | @
+ | | @
+ | | @
+ |__|@@
+ __ @
+ \ \ @
+ \ \ @
+ \ \ @
+ \_\@
+ @@
+ __ @
+ |_ |@
+ | |@
+ | |@
+ | |@
+ |__|@@
+ /\ @
+ |/\|@
+ $ @
+ $ @
+ $ @
+ @@
+ @
+ @
+ @
+ @
+ _____ @
+ |_____|@@
+ _ @
+ ( )@
+ \|@
+ $ @
+ $ @
+ @@
+ @
+ __ _ @
+ / _` |@
+ | (_| |@
+ \__,_|@
+ @@
+ _ @
+ | |__ @
+ | '_ \ @
+ | |_) |@
+ |_.__/ @
+ @@
+ @
+ ___ @
+ / __|@
+ | (__ @
+ \___|@
+ @@
+ _ @
+ __| |@
+ / _` |@
+ | (_| |@
+ \__,_|@
+ @@
+ @
+ ___ @
+ / _ \@
+ | __/@
+ \___|@
+ @@
+ __ @
+ / _|@
+ | |_ @
+ | _|@
+ |_| @
+ @@
+ @
+ __ _ @
+ / _` |@
+ | (_| |@
+ \__, |@
+ |___/ @@
+ _ @
+ | |__ @
+ | '_ \ @
+ | | | |@
+ |_| |_|@
+ @@
+ _ @
+ (_)@
+ | |@
+ | |@
+ |_|@
+ @@
+ _ @
+ (_)@
+ | |@
+ | |@
+ _/ |@
+ |__/ @@
+ _ @
+ | | __@
+ | |/ /@
+ | < @
+ |_|\_\@
+ @@
+ _ @
+ | |@
+ | |@
+ | |@
+ |_|@
+ @@
+ @
+ _ __ ___ @
+ | '_ ` _ \ @
+ | | | | | |@
+ |_| |_| |_|@
+ @@
+ @
+ _ __ @
+ | '_ \ @
+ | | | |@
+ |_| |_|@
+ @@
+ @
+ ___ @
+ / _ \ @
+ | (_) |@
+ \___/ @
+ @@
+ @
+ _ __ @
+ | '_ \ @
+ | |_) |@
+ | .__/ @
+ |_| @@
+ @
+ __ _ @
+ / _` |@
+ | (_| |@
+ \__, |@
+ |_|@@
+ @
+ _ __ @
+ | '__|@
+ | | @
+ |_| @
+ @@
+ @
+ ___ @
+ / __|@
+ \__ \@
+ |___/@
+ @@
+ _ @
+ | |_ @
+ | __|@
+ | |_ @
+ \__|@
+ @@
+ @
+ _ _ @
+ | | | |@
+ | |_| |@
+ \__,_|@
+ @@
+ @
+ __ __@
+ \ \ / /@
+ \ V / @
+ \_/ @
+ @@
+ @
+ __ __@
+ \ \ /\ / /@
+ \ V V / @
+ \_/\_/ @
+ @@
+ @
+ __ __@
+ \ \/ /@
+ > < @
+ /_/\_\@
+ @@
+ @
+ _ _ @
+ | | | |@
+ | |_| |@
+ \__, |@
+ |___/ @@
+ @
+ ____@
+ |_ /@
+ / / @
+ /___|@
+ @@
+ __@
+ / /@
+ | | @
+ < < @
+ | | @
+ \_\@@
+ _ @
+ | |@
+ | |@
+ | |@
+ | |@
+ |_|@@
+ __ @
+ \ \ @
+ | | @
+ > >@
+ | | @
+ /_/ @@
+ /\/|@
+ |/\/ @
+ $ @
+ $ @
+ $ @
+ @@
+ _ _ @
+ (_)_(_)@
+ /_\ @
+ / _ \ @
+ /_/ \_\@
+ @@
+ _ _ @
+ (_)_(_)@
+ / _ \ @
+ | |_| |@
+ \___/ @
+ @@
+ _ _ @
+ (_) (_)@
+ | | | |@
+ | |_| |@
+ \___/ @
+ @@
+ _ _ @
+ (_)_(_)@
+ / _` |@
+ | (_| |@
+ \__,_|@
+ @@
+ _ _ @
+ (_)_(_)@
+ / _ \ @
+ | (_) |@
+ \___/ @
+ @@
+ _ _ @
+ (_) (_)@
+ | | | |@
+ | |_| |@
+ \__,_|@
+ @@
+ ___ @
+ / _ \@
+ | |/ /@
+ | |\ \@
+ | ||_/@
+ |_| @@
+160 NO-BREAK SPACE
+ $@
+ $@
+ $@
+ $@
+ $@
+ $@@
+161 INVERTED EXCLAMATION MARK
+ _ @
+ (_)@
+ | |@
+ | |@
+ |_|@
+ @@
+162 CENT SIGN
+ _ @
+ | | @
+ / __)@
+ | (__ @
+ \ )@
+ |_| @@
+163 POUND SIGN
+ ___ @
+ / ,_\ @
+ _| |_ @
+ | |___ @
+ (_,____|@
+ @@
+164 CURRENCY SIGN
+ /\___/\@
+ \ _ /@
+ | (_) |@
+ / ___ \@
+ \/ \/@
+ @@
+165 YEN SIGN
+ __ __ @
+ \ V / @
+ |__ __|@
+ |__ __|@
+ |_| @
+ @@
+166 BROKEN BAR
+ _ @
+ | |@
+ |_|@
+ _ @
+ | |@
+ |_|@@
+167 SECTION SIGN
+ __ @
+ _/ _)@
+ / \ \ @
+ \ \\ \@
+ \ \_/@
+ (__/ @@
+168 DIAERESIS
+ _ _ @
+ (_) (_)@
+ $ $ @
+ $ $ @
+ $ $ @
+ @@
+169 COPYRIGHT SIGN
+ _____ @
+ / ___ \ @
+ / / __| \ @
+ | | (__ |@
+ \ \___| / @
+ \_____/ @@
+170 FEMININE ORDINAL INDICATOR
+ __ _ @
+ / _` |@
+ \__,_|@
+ |____|@
+ $ @
+ @@
+171 LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+ ____@
+ / / /@
+ / / / @
+ \ \ \ @
+ \_\_\@
+ @@
+172 NOT SIGN
+ @
+ _____ @
+ |___ |@
+ |_|@
+ $ @
+ @@
+173 SOFT HYPHEN
+ @
+ @
+ ____ @
+ |____|@
+ $ @
+ @@
+174 REGISTERED SIGN
+ _____ @
+ / ___ \ @
+ / | _ \ \ @
+ | | / |@
+ \ |_|_\ / @
+ \_____/ @@
+175 MACRON
+ _____ @
+ |_____|@
+ $ @
+ $ @
+ $ @
+ @@
+176 DEGREE SIGN
+ __ @
+ / \ @
+ | () |@
+ \__/ @
+ $ @
+ @@
+177 PLUS-MINUS SIGN
+ _ @
+ _| |_ @
+ |_ _|@
+ _|_|_ @
+ |_____|@
+ @@
+178 SUPERSCRIPT TWO
+ ___ @
+ |_ )@
+ / / @
+ /___|@
+ $ @
+ @@
+179 SUPERSCRIPT THREE
+ ____@
+ |__ /@
+ |_ \@
+ |___/@
+ $ @
+ @@
+180 ACUTE ACCENT
+ __@
+ /_/@
+ $ @
+ $ @
+ $ @
+ @@
+181 MICRO SIGN
+ @
+ _ _ @
+ | | | |@
+ | |_| |@
+ | ._,_|@
+ |_| @@
+182 PILCROW SIGN
+ _____ @
+ / |@
+ | (| | |@
+ \__ | |@
+ |_|_|@
+ @@
+183 MIDDLE DOT
+ @
+ _ @
+ (_)@
+ $ @
+ $ @
+ @@
+184 CEDILLA
+ @
+ @
+ @
+ @
+ _ @
+ )_)@@
+185 SUPERSCRIPT ONE
+ _ @
+ / |@
+ | |@
+ |_|@
+ $ @
+ @@
+186 MASCULINE ORDINAL INDICATOR
+ ___ @
+ / _ \@
+ \___/@
+ |___|@
+ $ @
+ @@
+187 RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+ ____ @
+ \ \ \ @
+ \ \ \@
+ / / /@
+ /_/_/ @
+ @@
+188 VULGAR FRACTION ONE QUARTER
+ _ __ @
+ / | / / _ @
+ | |/ / | | @
+ |_/ /|_ _|@
+ /_/ |_| @
+ @@
+189 VULGAR FRACTION ONE HALF
+ _ __ @
+ / | / /__ @
+ | |/ /_ )@
+ |_/ / / / @
+ /_/ /___|@
+ @@
+190 VULGAR FRACTION THREE QUARTERS
+ ____ __ @
+ |__ / / / _ @
+ |_ \/ / | | @
+ |___/ /|_ _|@
+ /_/ |_| @
+ @@
+191 INVERTED QUESTION MARK
+ _ @
+ (_) @
+ | | @
+ / /_ @
+ \___|@
+ @@
+192 LATIN CAPITAL LETTER A WITH GRAVE
+ __ @
+ \_\ @
+ /_\ @
+ / _ \ @
+ /_/ \_\@
+ @@
+193 LATIN CAPITAL LETTER A WITH ACUTE
+ __ @
+ /_/ @
+ /_\ @
+ / _ \ @
+ /_/ \_\@
+ @@
+194 LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+ //\ @
+ |/_\| @
+ /_\ @
+ / _ \ @
+ /_/ \_\@
+ @@
+195 LATIN CAPITAL LETTER A WITH TILDE
+ /\/| @
+ |/\/ @
+ /_\ @
+ / _ \ @
+ /_/ \_\@
+ @@
+196 LATIN CAPITAL LETTER A WITH DIAERESIS
+ _ _ @
+ (_)_(_)@
+ /_\ @
+ / _ \ @
+ /_/ \_\@
+ @@
+197 LATIN CAPITAL LETTER A WITH RING ABOVE
+ _ @
+ (o) @
+ /_\ @
+ / _ \ @
+ /_/ \_\@
+ @@
+198 LATIN CAPITAL LETTER AE
+ ______ @
+ / ____|@
+ / _ _| @
+ / __ |___ @
+ /_/ |_____|@
+ @@
+199 LATIN CAPITAL LETTER C WITH CEDILLA
+ ____ @
+ / ___|@
+ | | @
+ | |___ @
+ \____|@
+ )_) @@
+200 LATIN CAPITAL LETTER E WITH GRAVE
+ __ @
+ _\_\_ @
+ | ____|@
+ | _|_ @
+ |_____|@
+ @@
+201 LATIN CAPITAL LETTER E WITH ACUTE
+ __ @
+ _/_/_ @
+ | ____|@
+ | _|_ @
+ |_____|@
+ @@
+202 LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+ //\ @
+ |/_\| @
+ | ____|@
+ | _|_ @
+ |_____|@
+ @@
+203 LATIN CAPITAL LETTER E WITH DIAERESIS
+ _ _ @
+ (_)_(_)@
+ | ____|@
+ | _|_ @
+ |_____|@
+ @@
+204 LATIN CAPITAL LETTER I WITH GRAVE
+ __ @
+ \_\ @
+ |_ _|@
+ | | @
+ |___|@
+ @@
+205 LATIN CAPITAL LETTER I WITH ACUTE
+ __ @
+ /_/ @
+ |_ _|@
+ | | @
+ |___|@
+ @@
+206 LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+ //\ @
+ |/_\|@
+ |_ _|@
+ | | @
+ |___|@
+ @@
+207 LATIN CAPITAL LETTER I WITH DIAERESIS
+ _ _ @
+ (_)_(_)@
+ |_ _| @
+ | | @
+ |___| @
+ @@
+208 LATIN CAPITAL LETTER ETH
+ ____ @
+ | _ \ @
+ _| |_| |@
+ |__ __| |@
+ |____/ @
+ @@
+209 LATIN CAPITAL LETTER N WITH TILDE
+ /\/|@
+ |/\/ @
+ | \| |@
+ | .` |@
+ |_|\_|@
+ @@
+210 LATIN CAPITAL LETTER O WITH GRAVE
+ __ @
+ \_\ @
+ / _ \ @
+ | |_| |@
+ \___/ @
+ @@
+211 LATIN CAPITAL LETTER O WITH ACUTE
+ __ @
+ /_/ @
+ / _ \ @
+ | |_| |@
+ \___/ @
+ @@
+212 LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+ //\ @
+ |/_\| @
+ / _ \ @
+ | |_| |@
+ \___/ @
+ @@
+213 LATIN CAPITAL LETTER O WITH TILDE
+ /\/| @
+ |/\/ @
+ / _ \ @
+ | |_| |@
+ \___/ @
+ @@
+214 LATIN CAPITAL LETTER O WITH DIAERESIS
+ _ _ @
+ (_)_(_)@
+ / _ \ @
+ | |_| |@
+ \___/ @
+ @@
+215 MULTIPLICATION SIGN
+ @
+ @
+ /\/\@
+ > <@
+ \/\/@
+ @@
+216 LATIN CAPITAL LETTER O WITH STROKE
+ ____ @
+ / _// @
+ | |// |@
+ | //| |@
+ //__/ @
+ @@
+217 LATIN CAPITAL LETTER U WITH GRAVE
+ __ @
+ _\_\_ @
+ | | | |@
+ | |_| |@
+ \___/ @
+ @@
+218 LATIN CAPITAL LETTER U WITH ACUTE
+ __ @
+ _/_/_ @
+ | | | |@
+ | |_| |@
+ \___/ @
+ @@
+219 LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+ //\ @
+ |/ \| @
+ | | | |@
+ | |_| |@
+ \___/ @
+ @@
+220 LATIN CAPITAL LETTER U WITH DIAERESIS
+ _ _ @
+ (_) (_)@
+ | | | |@
+ | |_| |@
+ \___/ @
+ @@
+221 LATIN CAPITAL LETTER Y WITH ACUTE
+ __ @
+ __/_/__@
+ \ \ / /@
+ \ V / @
+ |_| @
+ @@
+222 LATIN CAPITAL LETTER THORN
+ _ @
+ | |___ @
+ | __ \@
+ | ___/@
+ |_| @
+ @@
+223 LATIN SMALL LETTER SHARP S
+ ___ @
+ / _ \@
+ | |/ /@
+ | |\ \@
+ | ||_/@
+ |_| @@
+224 LATIN SMALL LETTER A WITH GRAVE
+ __ @
+ \_\_ @
+ / _` |@
+ | (_| |@
+ \__,_|@
+ @@
+225 LATIN SMALL LETTER A WITH ACUTE
+ __ @
+ /_/_ @
+ / _` |@
+ | (_| |@
+ \__,_|@
+ @@
+226 LATIN SMALL LETTER A WITH CIRCUMFLEX
+ //\ @
+ |/_\| @
+ / _` |@
+ | (_| |@
+ \__,_|@
+ @@
+227 LATIN SMALL LETTER A WITH TILDE
+ /\/| @
+ |/\/_ @
+ / _` |@
+ | (_| |@
+ \__,_|@
+ @@
+228 LATIN SMALL LETTER A WITH DIAERESIS
+ _ _ @
+ (_)_(_)@
+ / _` |@
+ | (_| |@
+ \__,_|@
+ @@
+229 LATIN SMALL LETTER A WITH RING ABOVE
+ __ @
+ (()) @
+ / _ '|@
+ | (_| |@
+ \__,_|@
+ @@
+230 LATIN SMALL LETTER AE
+ @
+ __ ____ @
+ / _` _ \@
+ | (_| __/@
+ \__,____|@
+ @@
+231 LATIN SMALL LETTER C WITH CEDILLA
+ @
+ ___ @
+ / __|@
+ | (__ @
+ \___|@
+ )_) @@
+232 LATIN SMALL LETTER E WITH GRAVE
+ __ @
+ \_\ @
+ / _ \@
+ | __/@
+ \___|@
+ @@
+233 LATIN SMALL LETTER E WITH ACUTE
+ __ @
+ /_/ @
+ / _ \@
+ | __/@
+ \___|@
+ @@
+234 LATIN SMALL LETTER E WITH CIRCUMFLEX
+ //\ @
+ |/_\|@
+ / _ \@
+ | __/@
+ \___|@
+ @@
+235 LATIN SMALL LETTER E WITH DIAERESIS
+ _ _ @
+ (_)_(_)@
+ / _ \ @
+ | __/ @
+ \___| @
+ @@
+236 LATIN SMALL LETTER I WITH GRAVE
+ __ @
+ \_\@
+ | |@
+ | |@
+ |_|@
+ @@
+237 LATIN SMALL LETTER I WITH ACUTE
+ __@
+ /_/@
+ | |@
+ | |@
+ |_|@
+ @@
+238 LATIN SMALL LETTER I WITH CIRCUMFLEX
+ //\ @
+ |/_\|@
+ | | @
+ | | @
+ |_| @
+ @@
+239 LATIN SMALL LETTER I WITH DIAERESIS
+ _ _ @
+ (_)_(_)@
+ | | @
+ | | @
+ |_| @
+ @@
+240 LATIN SMALL LETTER ETH
+ /\/\ @
+ > < @
+ _\/\ |@
+ / __` |@
+ \____/ @
+ @@
+241 LATIN SMALL LETTER N WITH TILDE
+ /\/| @
+ |/\/ @
+ | '_ \ @
+ | | | |@
+ |_| |_|@
+ @@
+242 LATIN SMALL LETTER O WITH GRAVE
+ __ @
+ \_\ @
+ / _ \ @
+ | (_) |@
+ \___/ @
+ @@
+243 LATIN SMALL LETTER O WITH ACUTE
+ __ @
+ /_/ @
+ / _ \ @
+ | (_) |@
+ \___/ @
+ @@
+244 LATIN SMALL LETTER O WITH CIRCUMFLEX
+ //\ @
+ |/_\| @
+ / _ \ @
+ | (_) |@
+ \___/ @
+ @@
+245 LATIN SMALL LETTER O WITH TILDE
+ /\/| @
+ |/\/ @
+ / _ \ @
+ | (_) |@
+ \___/ @
+ @@
+246 LATIN SMALL LETTER O WITH DIAERESIS
+ _ _ @
+ (_)_(_)@
+ / _ \ @
+ | (_) |@
+ \___/ @
+ @@
+247 DIVISION SIGN
+ @
+ _ @
+ _(_)_ @
+ |_____|@
+ (_) @
+ @@
+248 LATIN SMALL LETTER O WITH STROKE
+ @
+ ____ @
+ / _//\ @
+ | (//) |@
+ \//__/ @
+ @@
+249 LATIN SMALL LETTER U WITH GRAVE
+ __ @
+ _\_\_ @
+ | | | |@
+ | |_| |@
+ \__,_|@
+ @@
+250 LATIN SMALL LETTER U WITH ACUTE
+ __ @
+ _/_/_ @
+ | | | |@
+ | |_| |@
+ \__,_|@
+ @@
+251 LATIN SMALL LETTER U WITH CIRCUMFLEX
+ //\ @
+ |/ \| @
+ | | | |@
+ | |_| |@
+ \__,_|@
+ @@
+252 LATIN SMALL LETTER U WITH DIAERESIS
+ _ _ @
+ (_) (_)@
+ | | | |@
+ | |_| |@
+ \__,_|@
+ @@
+253 LATIN SMALL LETTER Y WITH ACUTE
+ __ @
+ _/_/_ @
+ | | | |@
+ | |_| |@
+ \__, |@
+ |___/ @@
+254 LATIN SMALL LETTER THORN
+ _ @
+ | |__ @
+ | '_ \ @
+ | |_) |@
+ | .__/ @
+ |_| @@
+255 LATIN SMALL LETTER Y WITH DIAERESIS
+ _ _ @
+ (_) (_)@
+ | | | |@
+ | |_| |@
+ \__, |@
+ |___/ @@
+0x0100 LATIN CAPITAL LETTER A WITH MACRON
+ ____ @
+ /___/ @
+ /_\ @
+ / _ \ @
+ /_/ \_\@
+ @@
+0x0101 LATIN SMALL LETTER A WITH MACRON
+ ___ @
+ /_ _/@
+ / _` |@
+ | (_| |@
+ \__,_|@
+ @@
+0x0102 LATIN CAPITAL LETTER A WITH BREVE
+ _ _ @
+ \\_// @
+ /_\ @
+ / _ \ @
+ /_/ \_\@
+ @@
+0x0103 LATIN SMALL LETTER A WITH BREVE
+ \_/ @
+ ___ @
+ / _` |@
+ | (_| |@
+ \__,_|@
+ @@
+0x0104 LATIN CAPITAL LETTER A WITH OGONEK
+ @
+ _ @
+ /_\ @
+ / _ \ @
+ /_/ \_\@
+ (_(@@
+0x0105 LATIN SMALL LETTER A WITH OGONEK
+ @
+ __ _ @
+ / _` |@
+ | (_| |@
+ \__,_|@
+ (_(@@
+0x0106 LATIN CAPITAL LETTER C WITH ACUTE
+ __ @
+ _/_/ @
+ / ___|@
+ | |___ @
+ \____|@
+ @@
+0x0107 LATIN SMALL LETTER C WITH ACUTE
+ __ @
+ /__/@
+ / __|@
+ | (__ @
+ \___|@
+ @@
+0x0108 LATIN CAPITAL LETTER C WITH CIRCUMFLEX
+ /\ @
+ _//\\@
+ / ___|@
+ | |___ @
+ \____|@
+ @@
+0x0109 LATIN SMALL LETTER C WITH CIRCUMFLEX
+ /\ @
+ /_\ @
+ / __|@
+ | (__ @
+ \___|@
+ @@
+0x010A LATIN CAPITAL LETTER C WITH DOT ABOVE
+ [] @
+ ____ @
+ / ___|@
+ | |___ @
+ \____|@
+ @@
+0x010B LATIN SMALL LETTER C WITH DOT ABOVE
+ [] @
+ ___ @
+ / __|@
+ | (__ @
+ \___|@
+ @@
+0x010C LATIN CAPITAL LETTER C WITH CARON
+ \\// @
+ _\/_ @
+ / ___|@
+ | |___ @
+ \____|@
+ @@
+0x010D LATIN SMALL LETTER C WITH CARON
+ \\//@
+ _\/ @
+ / __|@
+ | (__ @
+ \___|@
+ @@
+0x010E LATIN CAPITAL LETTER D WITH CARON
+ \\// @
+ __\/ @
+ | _ \ @
+ | |_| |@
+ |____/ @
+ @@
+0x010F LATIN SMALL LETTER D WITH CARON
+ \/ _ @
+ __| |@
+ / _` |@
+ | (_| |@
+ \__,_|@
+ @@
+0x0110 LATIN CAPITAL LETTER D WITH STROKE
+ ____ @
+ |_ __ \ @
+ /| |/ | |@
+ /|_|/_| |@
+ |_____/ @
+ @@
+0x0111 LATIN SMALL LETTER D WITH STROKE
+ ---|@
+ __| |@
+ / _` |@
+ | (_| |@
+ \__,_|@
+ @@
+0x0112 LATIN CAPITAL LETTER E WITH MACRON
+ ____ @
+ /___/ @
+ | ____|@
+ | _|_ @
+ |_____|@
+ @@
+0x0113 LATIN SMALL LETTER E WITH MACRON
+ ____@
+ /_ _/@
+ / _ \ @
+ | __/ @
+ \___| @
+ @@
+0x0114 LATIN CAPITAL LETTER E WITH BREVE
+ _ _ @
+ \\_// @
+ | ____|@
+ | _|_ @
+ |_____|@
+ @@
+0x0115 LATIN SMALL LETTER E WITH BREVE
+ \\ //@
+ -- @
+ / _ \ @
+ | __/ @
+ \___| @
+ @@
+0x0116 LATIN CAPITAL LETTER E WITH DOT ABOVE
+ [] @
+ _____ @
+ | ____|@
+ | _|_ @
+ |_____|@
+ @@
+0x0117 LATIN SMALL LETTER E WITH DOT ABOVE
+ [] @
+ __ @
+ / _ \@
+ | __/@
+ \___|@
+ @@
+0x0118 LATIN CAPITAL LETTER E WITH OGONEK
+ @
+ _____ @
+ | ____|@
+ | _|_ @
+ |_____|@
+ (__(@@
+0x0119 LATIN SMALL LETTER E WITH OGONEK
+ @
+ ___ @
+ / _ \@
+ | __/@
+ \___|@
+ (_(@@
+0x011A LATIN CAPITAL LETTER E WITH CARON
+ \\// @
+ __\/_ @
+ | ____|@
+ | _|_ @
+ |_____|@
+ @@
+0x011B LATIN SMALL LETTER E WITH CARON
+ \\//@
+ \/ @
+ / _ \@
+ | __/@
+ \___|@
+ @@
+0x011C LATIN CAPITAL LETTER G WITH CIRCUMFLEX
+ _/\_ @
+ / ___|@
+ | | _ @
+ | |_| |@
+ \____|@
+ @@
+0x011D LATIN SMALL LETTER G WITH CIRCUMFLEX
+ /\ @
+ _/_ \@
+ / _` |@
+ | (_| |@
+ \__, |@
+ |___/ @@
+0x011E LATIN CAPITAL LETTER G WITH BREVE
+ _\/_ @
+ / ___|@
+ | | _ @
+ | |_| |@
+ \____|@
+ @@
+0x011F LATIN SMALL LETTER G WITH BREVE
+ \___/ @
+ __ _ @
+ / _` |@
+ | (_| |@
+ \__, |@
+ |___/ @@
+0x0120 LATIN CAPITAL LETTER G WITH DOT ABOVE
+ _[]_ @
+ / ___|@
+ | | _ @
+ | |_| |@
+ \____|@
+ @@
+0x0121 LATIN SMALL LETTER G WITH DOT ABOVE
+ [] @
+ __ _ @
+ / _` |@
+ | (_| |@
+ \__, |@
+ |___/ @@
+0x0122 LATIN CAPITAL LETTER G WITH CEDILLA
+ ____ @
+ / ___|@
+ | | _ @
+ | |_| |@
+ \____|@
+ )__) @@
+0x0123 LATIN SMALL LETTER G WITH CEDILLA
+ @
+ __ _ @
+ / _` |@
+ | (_| |@
+ \__, |@
+ |_))))@@
+0x0124 LATIN CAPITAL LETTER H WITH CIRCUMFLEX
+ _/ \_ @
+ | / \ |@
+ | |_| |@
+ | _ |@
+ |_| |_|@
+ @@
+0x0125 LATIN SMALL LETTER H WITH CIRCUMFLEX
+ _ /\ @
+ | |//\ @
+ | '_ \ @
+ | | | |@
+ |_| |_|@
+ @@
+0x0126 LATIN CAPITAL LETTER H WITH STROKE
+ _ _ @
+ | |=| |@
+ | |_| |@
+ | _ |@
+ |_| |_|@
+ @@
+0x0127 LATIN SMALL LETTER H WITH STROKE
+ _ @
+ |=|__ @
+ | '_ \ @
+ | | | |@
+ |_| |_|@
+ @@
+0x0128 LATIN CAPITAL LETTER I WITH TILDE
+ /\//@
+ |_ _|@
+ | | @
+ | | @
+ |___|@
+ @@
+0x0129 LATIN SMALL LETTER I WITH TILDE
+ @
+ /\/@
+ | |@
+ | |@
+ |_|@
+ @@
+0x012A LATIN CAPITAL LETTER I WITH MACRON
+ /___/@
+ |_ _|@
+ | | @
+ | | @
+ |___|@
+ @@
+0x012B LATIN SMALL LETTER I WITH MACRON
+ ____@
+ /___/@
+ | | @
+ | | @
+ |_| @
+ @@
+0x012C LATIN CAPITAL LETTER I WITH BREVE
+ \__/@
+ |_ _|@
+ | | @
+ | | @
+ |___|@
+ @@
+0x012D LATIN SMALL LETTER I WITH BREVE
+ @
+ \_/@
+ | |@
+ | |@
+ |_|@
+ @@
+0x012E LATIN CAPITAL LETTER I WITH OGONEK
+ ___ @
+ |_ _|@
+ | | @
+ | | @
+ |___|@
+ (__(@@
+0x012F LATIN SMALL LETTER I WITH OGONEK
+ _ @
+ (_) @
+ | | @
+ | | @
+ |_|_@
+ (_(@@
+0x0130 LATIN CAPITAL LETTER I WITH DOT ABOVE
+ _[] @
+ |_ _|@
+ | | @
+ | | @
+ |___|@
+ @@
+0x0131 LATIN SMALL LETTER DOTLESS I
+ @
+ _ @
+ | |@
+ | |@
+ |_|@
+ @@
+0x0132 LATIN CAPITAL LIGATURE IJ
+ ___ _ @
+ |_ _|| |@
+ | | | |@
+ | |_| |@
+ |__|__/ @
+ @@
+0x0133 LATIN SMALL LIGATURE IJ
+ _ _ @
+ (_) (_)@
+ | | | |@
+ | | | |@
+ |_|_/ |@
+ |__/ @@
+0x0134 LATIN CAPITAL LETTER J WITH CIRCUMFLEX
+ /\ @
+ /_\|@
+ _ | | @
+ | |_| | @
+ \___/ @
+ @@
+0x0135 LATIN SMALL LETTER J WITH CIRCUMFLEX
+ /\@
+ /_\@
+ | |@
+ | |@
+ _/ |@
+ |__/ @@
+0x0136 LATIN CAPITAL LETTER K WITH CEDILLA
+ _ _ @
+ | |/ / @
+ | ' / @
+ | . \ @
+ |_|\_\ @
+ )__)@@
+0x0137 LATIN SMALL LETTER K WITH CEDILLA
+ _ @
+ | | __@
+ | |/ /@
+ | < @
+ |_|\_\@
+ )_)@@
+0x0138 LATIN SMALL LETTER KRA
+ @
+ _ __ @
+ | |/ \@
+ | < @
+ |_|\_\@
+ @@
+0x0139 LATIN CAPITAL LETTER L WITH ACUTE
+ _ //@
+ | | // @
+ | | @
+ | |___ @
+ |_____|@
+ @@
+0x013A LATIN SMALL LETTER L WITH ACUTE
+ //@
+ | |@
+ | |@
+ | |@
+ |_|@
+ @@
+0x013B LATIN CAPITAL LETTER L WITH CEDILLA
+ _ @
+ | | @
+ | | @
+ | |___ @
+ |_____|@
+ )__)@@
+0x013C LATIN SMALL LETTER L WITH CEDILLA
+ _ @
+ | | @
+ | | @
+ | | @
+ |_| @
+ )_)@@
+0x013D LATIN CAPITAL LETTER L WITH CARON
+ _ \\//@
+ | | \/ @
+ | | @
+ | |___ @
+ |_____|@
+ @@
+0x013E LATIN SMALL LETTER L WITH CARON
+ _ \\//@
+ | | \/ @
+ | | @
+ | | @
+ |_| @
+ @@
+0x013F LATIN CAPITAL LETTER L WITH MIDDLE DOT
+ _ @
+ | | @
+ | | [] @
+ | |___ @
+ |_____|@
+ @@
+0x0140 LATIN SMALL LETTER L WITH MIDDLE DOT
+ _ @
+ | | @
+ | | []@
+ | | @
+ |_| @
+ @@
+0x0141 LATIN CAPITAL LETTER L WITH STROKE
+ __ @
+ | // @
+ |//| @
+ // |__ @
+ |_____|@
+ @@
+0x0142 LATIN SMALL LETTER L WITH STROKE
+ _ @
+ | |@
+ |//@
+ //|@
+ |_|@
+ @@
+0x0143 LATIN CAPITAL LETTER N WITH ACUTE
+ _/ /_ @
+ | \ | |@
+ | \| |@
+ | |\ |@
+ |_| \_|@
+ @@
+0x0144 LATIN SMALL LETTER N WITH ACUTE
+ _ @
+ _ /_/ @
+ | '_ \ @
+ | | | |@
+ |_| |_|@
+ @@
+0x0145 LATIN CAPITAL LETTER N WITH CEDILLA
+ _ _ @
+ | \ | |@
+ | \| |@
+ | |\ |@
+ |_| \_|@
+ )_) @@
+0x0146 LATIN SMALL LETTER N WITH CEDILLA
+ @
+ _ __ @
+ | '_ \ @
+ | | | |@
+ |_| |_|@
+ )_) @@
+0x0147 LATIN CAPITAL LETTER N WITH CARON
+ _\/ _ @
+ | \ | |@
+ | \| |@
+ | |\ |@
+ |_| \_|@
+ @@
+0x0148 LATIN SMALL LETTER N WITH CARON
+ \\// @
+ _\/_ @
+ | '_ \ @
+ | | | |@
+ |_| |_|@
+ @@
+0x0149 LATIN SMALL LETTER N PRECEDED BY APOSTROPHE
+ @
+ _ __ @
+ ( )| '_\ @
+ |/| | | |@
+ |_| |_|@
+ @@
+0x014A LATIN CAPITAL LETTER ENG
+ _ _ @
+ | \ | |@
+ | \| |@
+ | |\ |@
+ |_| \ |@
+ )_)@@
+0x014B LATIN SMALL LETTER ENG
+ _ __ @
+ | '_ \ @
+ | | | |@
+ |_| | |@
+ | |@
+ |__ @@
+0x014C LATIN CAPITAL LETTER O WITH MACRON
+ ____ @
+ /_ _/ @
+ / _ \ @
+ | (_) |@
+ \___/ @
+ @@
+0x014D LATIN SMALL LETTER O WITH MACRON
+ ____ @
+ /_ _/ @
+ / _ \ @
+ | (_) |@
+ \___/ @
+ @@
+0x014E LATIN CAPITAL LETTER O WITH BREVE
+ \ / @
+ _-_ @
+ / _ \ @
+ | |_| |@
+ \___/ @
+ @@
+0x014F LATIN SMALL LETTER O WITH BREVE
+ \ / @
+ _-_ @
+ / _ \ @
+ | |_| |@
+ \___/ @
+ @@
+0x0150 LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
+ ___ @
+ /_/_/@
+ / _ \ @
+ | |_| |@
+ \___/ @
+ @@
+0x0151 LATIN SMALL LETTER O WITH DOUBLE ACUTE
+ ___ @
+ /_/_/@
+ / _ \ @
+ | |_| |@
+ \___/ @
+ @@
+0x0152 LATIN CAPITAL LIGATURE OE
+ ___ ___ @
+ / _ \| __|@
+ | | | | | @
+ | |_| | |__@
+ \___/|____@
+ @@
+0x0153 LATIN SMALL LIGATURE OE
+ @
+ ___ ___ @
+ / _ \ / _ \@
+ | (_) | __/@
+ \___/ \___|@
+ @@
+0x0154 LATIN CAPITAL LETTER R WITH ACUTE
+ _/_/ @
+ | _ \ @
+ | |_) |@
+ | _ < @
+ |_| \_\@
+ @@
+0x0155 LATIN SMALL LETTER R WITH ACUTE
+ __@
+ _ /_/@
+ | '__|@
+ | | @
+ |_| @
+ @@
+0x0156 LATIN CAPITAL LETTER R WITH CEDILLA
+ ____ @
+ | _ \ @
+ | |_) |@
+ | _ < @
+ |_| \_\@
+ )_) @@
+0x0157 LATIN SMALL LETTER R WITH CEDILLA
+ @
+ _ __ @
+ | '__|@
+ | | @
+ |_| @
+ )_) @@
+0x0158 LATIN CAPITAL LETTER R WITH CARON
+ _\_/ @
+ | _ \ @
+ | |_) |@
+ | _ < @
+ |_| \_\@
+ @@
+0x0159 LATIN SMALL LETTER R WITH CARON
+ \\// @
+ _\/_ @
+ | '__|@
+ | | @
+ |_| @
+ @@
+0x015A LATIN CAPITAL LETTER S WITH ACUTE
+ _/_/ @
+ / ___| @
+ \___ \ @
+ ___) |@
+ |____/ @
+ @@
+0x015B LATIN SMALL LETTER S WITH ACUTE
+ __@
+ _/_/@
+ / __|@
+ \__ \@
+ |___/@
+ @@
+0x015C LATIN CAPITAL LETTER S WITH CIRCUMFLEX
+ _/\_ @
+ / ___| @
+ \___ \ @
+ ___) |@
+ |____/ @
+ @@
+0x015D LATIN SMALL LETTER S WITH CIRCUMFLEX
+ @
+ /_\_@
+ / __|@
+ \__ \@
+ |___/@
+ @@
+0x015E LATIN CAPITAL LETTER S WITH CEDILLA
+ ____ @
+ / ___| @
+ \___ \ @
+ ___) |@
+ |____/ @
+ )__)@@
+0x015F LATIN SMALL LETTER S WITH CEDILLA
+ @
+ ___ @
+ / __|@
+ \__ \@
+ |___/@
+ )_)@@
+0x0160 LATIN CAPITAL LETTER S WITH CARON
+ _\_/ @
+ / ___| @
+ \___ \ @
+ ___) |@
+ |____/ @
+ @@
+0x0161 LATIN SMALL LETTER S WITH CARON
+ \\//@
+ _\/ @
+ / __|@
+ \__ \@
+ |___/@
+ @@
+0x0162 LATIN CAPITAL LETTER T WITH CEDILLA
+ _____ @
+ |_ _|@
+ | | @
+ | | @
+ |_| @
+ )__)@@
+0x0163 LATIN SMALL LETTER T WITH CEDILLA
+ _ @
+ | |_ @
+ | __|@
+ | |_ @
+ \__|@
+ )_)@@
+0x0164 LATIN CAPITAL LETTER T WITH CARON
+ _____ @
+ |_ _|@
+ | | @
+ | | @
+ |_| @
+ @@
+0x0165 LATIN SMALL LETTER T WITH CARON
+ \/ @
+ | |_ @
+ | __|@
+ | |_ @
+ \__|@
+ @@
+0x0166 LATIN CAPITAL LETTER T WITH STROKE
+ _____ @
+ |_ _|@
+ | | @
+ -|-|- @
+ |_| @
+ @@
+0x0167 LATIN SMALL LETTER T WITH STROKE
+ _ @
+ | |_ @
+ | __|@
+ |-|_ @
+ \__|@
+ @@
+0x0168 LATIN CAPITAL LETTER U WITH TILDE
+ @
+ _/\/_ @
+ | | | |@
+ | |_| |@
+ \___/ @
+ @@
+0x0169 LATIN SMALL LETTER U WITH TILDE
+ @
+ _/\/_ @
+ | | | |@
+ | |_| |@
+ \__,_|@
+ @@
+0x016A LATIN CAPITAL LETTER U WITH MACRON
+ ____ @
+ /__ _/@
+ | | | |@
+ | |_| |@
+ \___/ @
+ @@
+0x016B LATIN SMALL LETTER U WITH MACRON
+ ____ @
+ / _ /@
+ | | | |@
+ | |_| |@
+ \__,_|@
+ @@
+0x016C LATIN CAPITAL LETTER U WITH BREVE
+ @
+ \_/_ @
+ | | | |@
+ | |_| |@
+ \____|@
+ @@
+0x016D LATIN SMALL LETTER U WITH BREVE
+ @
+ \_/_ @
+ | | | |@
+ | |_| |@
+ \__,_|@
+ @@
+0x016E LATIN CAPITAL LETTER U WITH RING ABOVE
+ O @
+ __ _ @
+ | | | |@
+ | |_| |@
+ \___/ @
+ @@
+0x016F LATIN SMALL LETTER U WITH RING ABOVE
+ O @
+ __ __ @
+ | | | |@
+ | |_| |@
+ \__,_|@
+ @@
+0x0170 LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
+ -- --@
+ /_//_/@
+ | | | |@
+ | |_| |@
+ \___/ @
+ @@
+0x0171 LATIN SMALL LETTER U WITH DOUBLE ACUTE
+ ____@
+ _/_/_/@
+ | | | |@
+ | |_| |@
+ \__,_|@
+ @@
+0x0172 LATIN CAPITAL LETTER U WITH OGONEK
+ _ _ @
+ | | | |@
+ | | | |@
+ | |_| |@
+ \___/ @
+ (__(@@
+0x0173 LATIN SMALL LETTER U WITH OGONEK
+ @
+ _ _ @
+ | | | |@
+ | |_| |@
+ \__,_|@
+ (_(@@
+0x0174 LATIN CAPITAL LETTER W WITH CIRCUMFLEX
+ __ /\ __@
+ \ \ //\\/ /@
+ \ \ /\ / / @
+ \ V V / @
+ \_/\_/ @
+ @@
+0x0175 LATIN SMALL LETTER W WITH CIRCUMFLEX
+ /\ @
+ __ //\\__@
+ \ \ /\ / /@
+ \ V V / @
+ \_/\_/ @
+ @@
+0x0176 LATIN CAPITAL LETTER Y WITH CIRCUMFLEX
+ /\ @
+ __//\\ @
+ \ \ / /@
+ \ V / @
+ |_| @
+ @@
+0x0177 LATIN SMALL LETTER Y WITH CIRCUMFLEX
+ /\ @
+ //\\ @
+ | | | |@
+ | |_| |@
+ \__, |@
+ |___/ @@
+0x0178 LATIN CAPITAL LETTER Y WITH DIAERESIS
+ [] []@
+ __ _@
+ \ \ / /@
+ \ V / @
+ |_| @
+ @@
+0x0179 LATIN CAPITAL LETTER Z WITH ACUTE
+ __/_/@
+ |__ /@
+ / / @
+ / /_ @
+ /____|@
+ @@
+0x017A LATIN SMALL LETTER Z WITH ACUTE
+ _ @
+ _/_/@
+ |_ /@
+ / / @
+ /___|@
+ @@
+0x017B LATIN CAPITAL LETTER Z WITH DOT ABOVE
+ __[]_@
+ |__ /@
+ / / @
+ / /_ @
+ /____|@
+ @@
+0x017C LATIN SMALL LETTER Z WITH DOT ABOVE
+ [] @
+ ____@
+ |_ /@
+ / / @
+ /___|@
+ @@
+0x017D LATIN CAPITAL LETTER Z WITH CARON
+ _\_/_@
+ |__ /@
+ / / @
+ / /_ @
+ /____|@
+ @@
+0x017E LATIN SMALL LETTER Z WITH CARON
+ \\//@
+ _\/_@
+ |_ /@
+ / / @
+ /___|@
+ @@
+0x017F LATIN SMALL LETTER LONG S
+ __ @
+ / _|@
+ |-| | @
+ |-| | @
+ |_| @
+ @@
+0x02C7 CARON
+ \\//@
+ \/ @
+ $@
+ $@
+ $@
+ $@@
+0x02D8 BREVE
+ \\_//@
+ \_/ @
+ $@
+ $@
+ $@
+ $@@
+0x02D9 DOT ABOVE
+ []@
+ $@
+ $@
+ $@
+ $@
+ $@@
+0x02DB OGONEK
+ $@
+ $@
+ $@
+ $@
+ $@
+ )_) @@
+0x02DD DOUBLE ACUTE ACCENT
+ _ _ @
+ /_/_/@
+ $@
+ $@
+ $@
+ $@@
+0xCA0 KANNADA LETTER TTHA
+ _____)@
+ /_ ___/@
+ / _ \ @
+ | (_) | @
+ $\___/$ @
+ @@
diff --git a/externals/figlet/fonts/term.flf b/externals/figlet/fonts/term.flf
new file mode 100644
index 000000000..e27d01eee
--- /dev/null
+++ b/externals/figlet/fonts/term.flf
@@ -0,0 +1,600 @@
+flf2a 1 1 2 -1 13 0 0 242
+Terminal by Glenn Chappell 4/93
+Includes characters 128-255
+Enhanced for Latin-2,3,4 by John Cowan <cowan@ccil.org>
+Latin character sets supported only if your screen font does
+figlet release 2.2 -- November 1996
+Permission is hereby given to modify this font, as long as the
+modifier's name is placed on a comment line.
+
+Double-checked by Paul Burton <solution@earthlink.net> 12/96. Added the new
+parameter supported by FIGlet and FIGWin. Unlike all other FIGfonts, this one
+is intended to produce output exactly the same as the input unless a control
+file is used. Therefore it produces the SAME output for smush, kern or fit.
+
+@
+!@
+"@
+#@
+$@
+%@
+&@
+'@
+(@
+)@
+*@
++@
+,@
+-@
+.@
+/@
+0@
+1@
+2@
+3@
+4@
+5@
+6@
+7@
+8@
+9@
+:@
+;@
+<@
+=@
+>@
+?@
+@#
+A@
+B@
+C@
+D@
+E@
+F@
+G@
+H@
+I@
+J@
+K@
+L@
+M@
+N@
+O@
+P@
+Q@
+R@
+S@
+T@
+U@
+V@
+W@
+X@
+Y@
+Z@
+[@
+\@
+]@
+^@
+_@
+`@
+a@
+b@
+c@
+d@
+e@
+f@
+g@
+h@
+i@
+j@
+k@
+l@
+m@
+n@
+o@
+p@
+q@
+r@
+s@
+t@
+u@
+v@
+w@
+x@
+y@
+z@
+{@
+|@
+}@
+~@
+Ä@
+Ö@
+Ü@
+ä@
+ö@
+ü@
+ß@
+128
+@
+129
+@
+130
+@
+131
+@
+132
+@
+133
+ @
+134
+@
+135
+@
+136
+@
+137
+@
+138
+@
+139
+@
+140
+@
+141
+@
+142
+@
+143
+@
+144
+@
+145
+@
+146
+@
+147
+@
+148
+@
+149
+@
+150
+@
+151
+@
+152
+@
+153
+@
+154
+@
+155
+@
+156
+@
+157
+@
+158
+@
+159
+@
+160 NO-BREAK SPACE
+ @
+161 INVERTED EXCLAMATION MARK
+¡@
+162 CENT SIGN
+¢@
+163 POUND SIGN
+£@
+164 CURRENCY SIGN
+¤@
+165 YEN SIGN
+¥@
+166 BROKEN BAR
+¦@
+167 SECTION SIGN
+§@
+168 DIAERESIS
+¨@
+169 COPYRIGHT SIGN
+©@
+170 FEMININE ORDINAL INDICATOR
+ª@
+171 LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+«@
+172 NOT SIGN
+¬@
+173 SOFT HYPHEN
+@
+174 REGISTERED SIGN
+®@
+175 MACRON
+¯@
+176 DEGREE SIGN
+°@
+177 PLUS-MINUS SIGN
+±@
+178 SUPERSCRIPT TWO
+²@
+179 SUPERSCRIPT THREE
+³@
+180 ACUTE ACCENT
+´@
+181 MICRO SIGN
+µ@
+182 PILCROW SIGN
+¶@
+183 MIDDLE DOT
+·@
+184 CEDILLA
+¸@
+185 SUPERSCRIPT ONE
+¹@
+186 MASCULINE ORDINAL INDICATOR
+º@
+187 RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+»@
+188 VULGAR FRACTION ONE QUARTER
+¼@
+189 VULGAR FRACTION ONE HALF
+½@
+190 VULGAR FRACTION THREE QUARTERS
+¾@
+191 INVERTED QUESTION MARK
+¿@
+192 LATIN CAPITAL LETTER A WITH GRAVE
+À@
+193 LATIN CAPITAL LETTER A WITH ACUTE
+Á@
+194 LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+Â@
+195 LATIN CAPITAL LETTER A WITH TILDE
+Ã@
+196 LATIN CAPITAL LETTER A WITH DIAERESIS
+Ä@
+197 LATIN CAPITAL LETTER A WITH RING ABOVE
+Å@
+198 LATIN CAPITAL LETTER AE
+Æ@
+199 LATIN CAPITAL LETTER C WITH CEDILLA
+Ç@
+200 LATIN CAPITAL LETTER E WITH GRAVE
+È@
+201 LATIN CAPITAL LETTER E WITH ACUTE
+É@
+202 LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+Ê@
+203 LATIN CAPITAL LETTER E WITH DIAERESIS
+Ë@
+204 LATIN CAPITAL LETTER I WITH GRAVE
+Ì@
+205 LATIN CAPITAL LETTER I WITH ACUTE
+Í@
+206 LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+Î@
+207 LATIN CAPITAL LETTER I WITH DIAERESIS
+Ï@
+208 LATIN CAPITAL LETTER ETH
+Ð@
+209 LATIN CAPITAL LETTER N WITH TILDE
+Ñ@
+210 LATIN CAPITAL LETTER O WITH GRAVE
+Ò@
+211 LATIN CAPITAL LETTER O WITH ACUTE
+Ó@
+212 LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+Ô@
+213 LATIN CAPITAL LETTER O WITH TILDE
+Õ@
+214 LATIN CAPITAL LETTER O WITH DIAERESIS
+Ö@
+215 MULTIPLICATION SIGN
+×@
+216 LATIN CAPITAL LETTER O WITH STROKE
+Ø@
+217 LATIN CAPITAL LETTER U WITH GRAVE
+Ù@
+218 LATIN CAPITAL LETTER U WITH ACUTE
+Ú@
+219 LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+Û@
+220 LATIN CAPITAL LETTER U WITH DIAERESIS
+Ü@
+221 LATIN CAPITAL LETTER Y WITH ACUTE
+Ý@
+222 LATIN CAPITAL LETTER THORN
+Þ@
+223 LATIN SMALL LETTER SHARP S
+ß@
+224 LATIN SMALL LETTER A WITH GRAVE
+à@
+225 LATIN SMALL LETTER A WITH ACUTE
+á@
+226 LATIN SMALL LETTER A WITH CIRCUMFLEX
+â@
+227 LATIN SMALL LETTER A WITH TILDE
+ã@
+228 LATIN SMALL LETTER A WITH DIAERESIS
+ä@
+229 LATIN SMALL LETTER A WITH RING ABOVE
+å@
+230 LATIN SMALL LETTER AE
+æ@
+231 LATIN SMALL LETTER C WITH CEDILLA
+ç@
+232 LATIN SMALL LETTER E WITH GRAVE
+è@
+233 LATIN SMALL LETTER E WITH ACUTE
+é@
+234 LATIN SMALL LETTER E WITH CIRCUMFLEX
+ê@
+235 LATIN SMALL LETTER E WITH DIAERESIS
+ë@
+236 LATIN SMALL LETTER I WITH GRAVE
+ì@
+237 LATIN SMALL LETTER I WITH ACUTE
+í@
+238 LATIN SMALL LETTER I WITH CIRCUMFLEX
+î@
+239 LATIN SMALL LETTER I WITH DIAERESIS
+ï@
+240 LATIN SMALL LETTER ETH
+ð@
+241 LATIN SMALL LETTER N WITH TILDE
+ñ@
+242 LATIN SMALL LETTER O WITH GRAVE
+ò@
+243 LATIN SMALL LETTER O WITH ACUTE
+ó@
+244 LATIN SMALL LETTER O WITH CIRCUMFLEX
+ô@
+245 LATIN SMALL LETTER O WITH TILDE
+õ@
+246 LATIN SMALL LETTER O WITH DIAERESIS
+ö@
+247 DIVISION SIGN
+÷@
+248 LATIN SMALL LETTER O WITH STROKE
+ø@
+249 LATIN SMALL LETTER U WITH GRAVE
+ù@
+250 LATIN SMALL LETTER U WITH ACUTE
+ú@
+251 LATIN SMALL LETTER U WITH CIRCUMFLEX
+û@
+252 LATIN SMALL LETTER U WITH DIAERESIS
+ü@
+253 LATIN SMALL LETTER Y WITH ACUTE
+ý@
+254 LATIN SMALL LETTER THORN
+þ@
+255 LATIN SMALL LETTER Y WITH DIAERESIS
+ÿ@
+0x0100 LATIN CAPITAL LETTER A WITH MACRON
+À@
+0x0101 LATIN SMALL LETTER A WITH MACRON
+à@
+0x0102 LATIN CAPITAL LETTER A WITH BREVE
+Ã@
+0x0103 LATIN SMALL LETTER A WITH BREVE
+ã@
+0x0104 LATIN CAPITAL LETTER A WITH OGONEK
+¡@
+0x0105 LATIN SMALL LETTER A WITH OGONEK
+±@
+0x0106 LATIN CAPITAL LETTER C WITH ACUTE
+Æ@
+0x0107 LATIN SMALL LETTER C WITH ACUTE
+æ@
+0x0108 LATIN CAPITAL LETTER C WITH CIRCUMFLEX
+Æ@
+0x0109 LATIN SMALL LETTER C WITH CIRCUMFLEX
+æ@
+0x010A LATIN CAPITAL LETTER C WITH DOT ABOVE
+Å@
+0x010B LATIN SMALL LETTER C WITH DOT ABOVE
+å@
+0x010C LATIN CAPITAL LETTER C WITH CARON
+È@
+0x010D LATIN SMALL LETTER C WITH CARON
+è@
+0x010E LATIN CAPITAL LETTER D WITH CARON
+Ï@
+0x010F LATIN SMALL LETTER D WITH CARON
+ï@
+0x0110 LATIN CAPITAL LETTER D WITH STROKE
+Ð@
+0x0111 LATIN SMALL LETTER D WITH STROKE
+ð@
+0x0112 LATIN CAPITAL LETTER E WITH MACRON
+ª@
+0x0113 LATIN SMALL LETTER E WITH MACRON
+º@
+0x0116 LATIN CAPITAL LETTER E WITH DOT ABOVE
+Ì@
+0x0117 LATIN SMALL LETTER E WITH DOT ABOVE
+ì@
+0x0118 LATIN CAPITAL LETTER E WITH OGONEK
+Ê@
+0x0119 LATIN SMALL LETTER E WITH OGONEK
+ê@
+0x011A LATIN CAPITAL LETTER E WITH CARON
+Ì@
+0x011B LATIN SMALL LETTER E WITH CARON
+ì@
+0x011C LATIN CAPITAL LETTER G WITH CIRCUMFLEX
+Ø@
+0x011D LATIN SMALL LETTER G WITH CIRCUMFLEX
+ø@
+0x011E LATIN CAPITAL LETTER G WITH BREVE
+«@
+0x011F LATIN SMALL LETTER G WITH BREVE
+»@
+0x0120 LATIN CAPITAL LETTER G WITH DOT ABOVE
+Õ@
+0x0121 LATIN SMALL LETTER G WITH DOT ABOVE
+õ@
+0x0122 LATIN CAPITAL LETTER G WITH CEDILLA
+«@
+0x0123 LATIN SMALL LETTER G WITH CEDILLA
+»@
+0x0124 LATIN CAPITAL LETTER H WITH CIRCUMFLEX
+¦@
+0x0125 LATIN SMALL LETTER H WITH CIRCUMFLEX
+¶@
+0x0126 LATIN CAPITAL LETTER H WITH STROKE
+¡@
+0x0127 LATIN SMALL LETTER H WITH STROKE
+±@
+0x0128 LATIN CAPITAL LETTER I WITH TILDE
+¥@
+0x0129 LATIN SMALL LETTER I WITH TILDE
+µ@
+0x012A LATIN CAPITAL LETTER I WITH MACRON
+Ï@
+0x012B LATIN SMALL LETTER I WITH MACRON
+ï@
+0x012E LATIN CAPITAL LETTER I WITH OGONEK
+Ç@
+0x012F LATIN SMALL LETTER I WITH OGONEK
+ç@
+0x0130 LATIN CAPITAL LETTER I WITH DOT ABOVE
+©@
+0x0131 LATIN SMALL LETTER DOTLESS I
+¹@
+0x0134 LATIN CAPITAL LETTER J WITH CIRCUMFLEX
+¬@
+0x0135 LATIN SMALL LETTER J WITH CIRCUMFLEX
+¼@
+0x0136 LATIN CAPITAL LETTER K WITH CEDILLA
+Ó@
+0x0137 LATIN SMALL LETTER K WITH CEDILLA
+ó@
+0x0138 LATIN SMALL LETTER KRA
+¢@
+0x0139 LATIN CAPITAL LETTER L WITH ACUTE
+Å@
+0x013A LATIN SMALL LETTER L WITH ACUTE
+å@
+0x013B LATIN CAPITAL LETTER L WITH CEDILLA
+¦@
+0x013C LATIN SMALL LETTER L WITH CEDILLA
+¶@
+0x013D LATIN CAPITAL LETTER L WITH CARON
+¥@
+0x013E LATIN SMALL LETTER L WITH CARON
+µ@
+0x0141 LATIN CAPITAL LETTER L WITH STROKE
+£@
+0x0142 LATIN SMALL LETTER L WITH STROKE
+³@
+0x0143 LATIN CAPITAL LETTER N WITH ACUTE
+Ñ@
+0x0144 LATIN SMALL LETTER N WITH ACUTE
+ñ@
+0x0145 LATIN CAPITAL LETTER N WITH CEDILLA
+Ñ@
+0x0146 LATIN SMALL LETTER N WITH CEDILLA
+ñ@
+0x0147 LATIN CAPITAL LETTER N WITH CARON
+Ò@
+0x0148 LATIN SMALL LETTER N WITH CARON
+ò@
+0x014A LATIN CAPITAL LETTER ENG
+½@
+0x014B LATIN SMALL LETTER ENG
+¿@
+0x014C LATIN CAPITAL LETTER O WITH MACRON
+Ò@
+0x014D LATIN SMALL LETTER O WITH MACRON
+ò@
+0x0150 LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
+Õ@
+0x0151 LATIN SMALL LETTER O WITH DOUBLE ACUTE
+õ@
+0x0154 LATIN CAPITAL LETTER R WITH ACUTE
+À@
+0x0155 LATIN SMALL LETTER R WITH ACUTE
+à@
+0x0156 LATIN CAPITAL LETTER R WITH CEDILLA
+£@
+0x0157 LATIN SMALL LETTER R WITH CEDILLA
+³@
+0x0158 LATIN CAPITAL LETTER R WITH CARON
+Ø@
+0x0159 LATIN SMALL LETTER R WITH CARON
+ø@
+0x015A LATIN CAPITAL LETTER S WITH ACUTE
+¦@
+0x015B LATIN SMALL LETTER S WITH ACUTE
+¶@
+0x015C LATIN CAPITAL LETTER S WITH CIRCUMFLEX
+Þ@
+0x015D LATIN SMALL LETTER S WITH CIRCUMFLEX
+þ@
+0x015E LATIN CAPITAL LETTER S WITH CEDILLA
+ª@
+0x015F LATIN SMALL LETTER S WITH CEDILLA
+º@
+0x0160 LATIN CAPITAL LETTER S WITH CARON
+©@
+0x0161 LATIN SMALL LETTER S WITH CARON
+¹@
+0x0162 LATIN CAPITAL LETTER T WITH CEDILLA
+Þ@
+0x0163 LATIN SMALL LETTER T WITH CEDILLA
+þ@
+0x0164 LATIN CAPITAL LETTER T WITH CARON
+«@
+0x0165 LATIN SMALL LETTER T WITH CARON
+»@
+0x0166 LATIN CAPITAL LETTER T WITH STROKE
+¬@
+0x0167 LATIN SMALL LETTER T WITH STROKE
+¼@
+0x0168 LATIN CAPITAL LETTER U WITH TILDE
+Ý@
+0x0169 LATIN SMALL LETTER U WITH TILDE
+ý@
+0x016A LATIN CAPITAL LETTER U WITH MACRON
+Þ@
+0x016B LATIN SMALL LETTER U WITH MACRON
+þ@
+0x016C LATIN CAPITAL LETTER U WITH BREVE
+Ý@
+0x016D LATIN SMALL LETTER U WITH BREVE
+ý@
+0x016E LATIN CAPITAL LETTER U WITH RING ABOVE
+Ù@
+0x016F LATIN SMALL LETTER U WITH RING ABOVE
+ù@
+0x0170 LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
+Û@
+0x0171 LATIN SMALL LETTER U WITH DOUBLE ACUTE
+û@
+0x0172 LATIN CAPITAL LETTER U WITH OGONEK
+Ù@
+0x0173 LATIN SMALL LETTER U WITH OGONEK
+ù@
+0x0179 LATIN CAPITAL LETTER Z WITH ACUTE
+¬@
+0x017A LATIN SMALL LETTER Z WITH ACUTE
+¼@
+0x017B LATIN CAPITAL LETTER Z WITH DOT ABOVE
+¯@
+0x017C LATIN SMALL LETTER Z WITH DOT ABOVE
+¿@
+0x017D LATIN CAPITAL LETTER Z WITH CARON
+®@
+0x017E LATIN SMALL LETTER Z WITH CARON
+¾@
+0x02C7 CARON
+·@
+0x02D8 BREVE
+¢@
+0x02D9 DOT ABOVE
+ÿ@
+0x02DB OGONEK
+²@
+0x02DD DOUBLE ACUTE ACCENT
+½@
diff --git a/externals/figlet/fonts/upper.flc b/externals/figlet/fonts/upper.flc
new file mode 100644
index 000000000..f38347176
--- /dev/null
+++ b/externals/figlet/fonts/upper.flc
@@ -0,0 +1,193 @@
+flc2a
+# Upper by Glenn Chappell <ggc@uiuc.edu> 1/94
+# Converts lower-case to upper-case.
+# Modified to support all of Unicode by John Cowan <cowan@ccil.org> 10/96
+# figlet release 2.2 -- November 1996
+#
+# This is a figlet controlfile.
+#
+# Explanation of first line:
+# flc2 - "magic number" for file identification
+# a - should always be `a', for now
+#
+# File body:
+# The first character of any line is the "command" for that line.
+# Possible figlet 2.1 commands are as follows:
+# `#' - comment, continues until end-of-line
+# `t' - translate, a not-so-fancy version of the Unix "tr" command
+# `f' - freeze, treat further lines as if they were in a new file
+#
+# The following lines convert lower-case to upper-case.
+#
+# Standard letters:
+t a-z A-Z
+#
+# figlet Deutsch characters (obsolete in 2.2 and later):
+t \-252-\-250 \-255-\-253
+#
+# ISO Latin-1 accented letters:
+t \224-\246 \192-\214
+t \248-\254 \216-\222
+# Note: Latin-1 has no upper-case Y umlaut, so map to "Y".
+# But remove the following line for Unicode fonts.
+t \255 Y
+# This is the proper Unicode mapping, and does no harm for non-Unicode fonts.
+t \255 \0x0178
+# Latin Extended A (Latin-2,3,4,5) accented letters:
+t \0x01\0x01 \0x0100
+t \0x0103 \0x0102
+t \0x0105 \0x0104
+t \0x0107 \0x0106
+t \0x0109 \0x0108
+t \0x010B \0x010A
+t \0x010D \0x010C
+t \0x010F \0x010E
+t \0x01\0x01 \0x0100
+t \0x0103 \0x0102
+t \0x0105 \0x0104
+t \0x0117 \0x0116
+t \0x0119 \0x0118
+t \0x011B \0x011A
+t \0x011D \0x011C
+t \0x011F \0x011E
+t \0x01\0x01 \0x0100
+t \0x0103 \0x0102
+t \0x0105 \0x0104
+t \0x0127 \0x0126
+t \0x0129 \0x0128
+t \0x012B \0x012A
+t \0x012D \0x012C
+t \0x012F \0x012E
+t \0x0131 I
+t \0x0133 \0x0132
+t \0x0135 \0x0134
+t \0x0137 \0x0136
+t \0x0138 K
+t \0x013A \0x0139
+t \0x013C \0x013B
+t \0x013E \0x013D
+t \0x0140 \0x013F
+t \0x0142 \0x0141
+t \0x0144 \0x0143
+t \0x0146 \0x0145
+t \0x0148 \0x0147
+t \0x0149 N
+t \0x014B \0x014A
+t \0x014D \0x014C
+t \0x014F \0x014E
+t \0x0151 \0x0150
+t \0x0153 \0x0152
+t \0x0155 \0x0154
+t \0x0157 \0x0156
+t \0x0159 \0x0158
+t \0x015B \0x015A
+t \0x015D \0x015C
+t \0x015F \0x015E
+t \0x0161 \0x0160
+t \0x0163 \0x0162
+t \0x0165 \0x0164
+t \0x0167 \0x0166
+t \0x0169 \0x0168
+t \0x016B \0x016A
+t \0x016D \0x016C
+t \0x016F \0x016E
+t \0x0171 \0x0170
+t \0x0173 \0x0172
+t \0x0175 \0x0174
+t \0x0177 \0x0176
+t \0x017A \0x0179
+t \0x017C \0x017B
+t \0x017E \0x017D
+t \0x017F S
+# Greek letters:
+\0x037A \0x0399
+\0x0390 \0x0399
+\0x03AC \0x0386
+\0x03AD \0x0388
+\0x03AE \0x0389
+\0x03AF \0x038A
+\0x03B0 \0x03AB
+\0x03B1-\0x03C1 \0x0391-\0x03A1
+\0x03C2 \0x03A3
+\0x03C3-\0x03CB \0x03A3-\0x03AB
+\0x03CC \0x038C
+\0x03CD \0x038E
+\0x03CE \0x038F
+\0x03E3 \0x03E2
+\0x03E5 \0x03E4
+\0x03E7 \0x03E6
+\0x03E9 \0x03E8
+\0x03EB \0x03EA
+\0x03ED \0x03EC
+\0x03EF \0x03ED
+# Cyrillic letters:
+\0x0430-\0x044F \0x0410-\0x042F
+\0x0451-\0x045F \0x0401-\0x040F
+\0x0461 \0x0460
+\0x0463 \0x0461
+\0x0465 \0x0464
+\0x0467 \0x0466
+\0x0469 \0x0468
+\0x046B \0x046A
+\0x046D \0x046C
+\0x046F \0x046E
+\0x0471 \0x0470
+\0x0473 \0x0471
+\0x0475 \0x0474
+\0x0477 \0x0476
+\0x0479 \0x0478
+\0x047B \0x047A
+\0x047D \0x047C
+\0x047F \0x047E
+\0x0481 \0x0480
+\0x0491 \0x0490
+\0x0493 \0x0491
+\0x0495 \0x0494
+\0x0497 \0x0496
+\0x0499 \0x0498
+\0x049B \0x049A
+\0x049D \0x049C
+\0x049F \0x049E
+\0x04A1 \0x04A0
+\0x04A3 \0x04A1
+\0x04A5 \0x04A4
+\0x04A7 \0x04A6
+\0x04A9 \0x04A8
+\0x04AB \0x04AA
+\0x04AD \0x04AC
+\0x04AF \0x04AE
+\0x04B1 \0x04B0
+\0x04B3 \0x04B1
+\0x04B5 \0x04B4
+\0x04B7 \0x04B6
+\0x04B9 \0x04B8
+\0x04BB \0x04BA
+\0x04BD \0x04BC
+\0x04BF \0x04BE
+\0x04C2 \0x04C1
+\0x04C4 \0x04C3
+\0x04C8 \0x04C7
+\0x04CC \0x04CB
+\0x04D1 \0x04D0
+\0x04D3 \0x04D2
+\0x04D5 \0x04D4
+\0x04D7 \0x04D6
+\0x04D9 \0x04D8
+\0x04DB \0x04DA
+\0x04DD \0x04DC
+\0x04DF \0x04DE
+\0x04E1 \0x04E0
+\0x04E3 \0x04E2
+\0x04E5 \0x04E4
+\0x04E7 \0x04E6
+\0x04E9 \0x04E8
+\0x04EB \0x04EA
+\0x04ED \0x04EC
+\0x04EF \0x04EE
+\0x04F1 \0x04F0
+\0x04F3 \0x04F2
+\0x04F5 \0x04F4
+\0x04F7 \0x04F6
+\0x04F9 \0x04F8
+# Armenian letters:
+\0x0561-\0x0586 \0x0531-\0x0556
diff --git a/externals/figlet/fonts/ushebrew.flc b/externals/figlet/fonts/ushebrew.flc
new file mode 100644
index 000000000..313af84b5
--- /dev/null
+++ b/externals/figlet/fonts/ushebrew.flc
@@ -0,0 +1,33 @@
+flc2a
+# implements a natural mapping from the U.S. keyboard
+# to Hebrew characters in the Ivrit font.
+# Note that capital letters remain unchanged.
+
+t a \0x05d0
+t b \0x05d1
+t g \0x05d2
+t d \0x05d3
+t h \0x05d4
+t v \0x05d5
+t z \0x05d6
+t c \0x05d7
+t t \0x05d8
+t y \0x05d9
+t k \0x05db
+t f \0x05da
+t l \0x05dc
+t m \0x05de
+t o \0x05dd
+t n \0x05e0
+t i \0x05df
+t e \0x05e1
+t _ \0x05e2
+t p \0x05e4
+t u \0x05e3
+t j \0x05e6
+t w \0x05e5
+t q \0x05e7
+t r \0x05e8
+t s \0x05e9
+t x \0x05ea
+t ~ \-3
diff --git a/externals/figlet/fonts/uskata.flc b/externals/figlet/fonts/uskata.flc
new file mode 100644
index 000000000..62e559f4b
--- /dev/null
+++ b/externals/figlet/fonts/uskata.flc
@@ -0,0 +1,53 @@
+flc2a
+# Maps the upper and lower case alphabet (A-Z and a-v) into the
+# 48 basic katakana Unicodes. Can be used with any Unicode katakana
+# font, such as Banner.
+t A \0x30A2
+t B \0x30A4
+t C \0x30A6
+t D \0x30A8
+t E \0x30AA
+t F \0x30AB
+t G \0x30AD
+t H \0x30AF
+t I \0x30B1
+t J \0x30B3
+t K \0x30B5
+t L \0x30B7
+t M \0x30B9
+t N \0x30BB
+t O \0x30BD
+t P \0x30BF
+t Q \0x30C1
+t R \0x30C4
+t S \0x30C6
+t T \0x30C8
+t U \0x30CA
+t V \0x30CB
+t W \0x30CC
+t X \0x30CD
+t Y \0x30CE
+t Z \0x30CF
+t a \0x30D2
+t b \0x30D5
+t c \0x30D8
+t d \0x30DB
+t e \0x30DE
+t f \0x30DF
+t g \0x30E0
+t h \0x30E1
+t i \0x30E2
+t j \0x30E4
+t k \0x30E6
+t l \0x30E8
+t m \0x30F1
+t n \0x30E9
+t o \0x30EA
+t p \0x30EB
+t q \0x30EC
+t r \0x30ED
+t s \0x30EF
+t t \0x30F0
+t u \0x30F2
+t v \0x30F3
+t ~ \-4
diff --git a/externals/figlet/fonts/utf8.flc b/externals/figlet/fonts/utf8.flc
new file mode 100644
index 000000000..532986d7c
--- /dev/null
+++ b/externals/figlet/fonts/utf8.flc
@@ -0,0 +1,4 @@
+flc2a
+# Set UTF-8 input mode (an 8-bit encoding of Unicode that preserves ASCII)
+# Meaningful only to FIGlet 2.2 beta 4 or better
+u
diff --git a/externals/figlet/getopt.c b/externals/figlet/getopt.c
new file mode 100644
index 000000000..421899152
--- /dev/null
+++ b/externals/figlet/getopt.c
@@ -0,0 +1,104 @@
+/*
+ * * @(#)getopt.c 2.3 (smail) 5/30/87
+ */
+
+/*
+ * Here's something you've all been waiting for: the AT&T public domain
+ * source for getopt(3). It is the code which was given out at the 1985
+ * UNIFORUM conference in Dallas. I obtained it by electronic mail directly
+ * from AT&T. The people there assure me that it is indeed in the public
+ * domain.
+ *
+ * There is no manual page. That is because the one they gave out at UNIFORUM
+ * was slightly different from the current System V Release 2 manual page.
+ * The difference apparently involved a note about the famous rules 5 and 6,
+ * recommending using white space between an option and its first argument,
+ * and not grouping options that have arguments. Getopt itself is currently
+ * lenient about both of these things White space is allowed, but not
+ * mandatory, and the last option in a group can have an argument. That
+ * particular version of the man page evidently has no official existence,
+ * and my source at AT&T did not send a copy. The current SVR2 man page
+ * reflects the actual behavior of this getopt. However, I am not about to
+ * post a copy of anything licensed by AT&T.
+ */
+
+#ifdef BSD
+ #include <strings.h>
+#else
+ #define index strchr
+ #include <string.h>
+#endif
+
+/* LINTLIBRARY */
+#ifndef NULL
+#define NULL 0
+#endif
+
+#define EOF (-1)
+#define ERR(s, c) if(opterr){\
+ extern int write(int, void *, unsigned);\
+ char errbuf[2];\
+ errbuf[0] = (char)c; errbuf[1] = '\n';\
+ (void) write(2, strlwr(argv[0]), (unsigned)strlen(argv[0]));\
+ (void) write(2, s, (unsigned)strlen(s));\
+ (void) write(2, errbuf, 2);}
+
+extern char *index();
+
+int opterr = 1;
+int optind = 1;
+int optopt;
+char *optarg;
+
+int getopt(int argc, char *argv[], char *opts)
+{
+ static int sp = 1;
+ register int c;
+ register char *cp;
+
+ if (sp == 1)
+ {
+ if (optind >= argc || argv[optind][0] != '-' ||
+ argv[optind][1] == '\0')
+ return (EOF);
+ else if (strcmp(argv[optind], "--") == 0)
+ {
+ optind++;
+ return (EOF);
+ }
+ }
+ optopt = c = argv[optind][sp];
+ if (c == ':' || (cp = index(opts, c)) == NULL)
+ {
+ ERR(": illegal option -- ", c);
+ if (argv[optind][++sp] == '\0')
+ {
+ optind++;
+ sp = 1;
+ }
+ return ('?');
+ }
+ if (*++cp == ':')
+ {
+ if (argv[optind][sp + 1] != '\0')
+ optarg = &argv[optind++][sp + 1];
+ else if (++optind >= argc)
+ {
+ ERR(": option requires an argument -- ", c);
+ sp = 1;
+ return ('?');
+ }
+ else optarg = argv[optind++];
+ sp = 1;
+ }
+ else
+ {
+ if (argv[optind][++sp] == '\0')
+ {
+ sp = 1;
+ optind++;
+ }
+ optarg = NULL;
+ }
+ return (c);
+}
diff --git a/externals/figlet/inflate.c b/externals/figlet/inflate.c
new file mode 100644
index 000000000..06cef443b
--- /dev/null
+++ b/externals/figlet/inflate.c
@@ -0,0 +1,1321 @@
+/*
+ * inflate.c - inflate decompression routine
+ *
+ * Version 1.1.2
+ */
+
+/*
+ * Copyright (C) 1995, Edward B. Hamrick
+ *
+ * Permission to use, copy, modify, and distribute this software and
+ * its documentation for any purpose and without fee is hereby granted,
+ * provided that the above copyright notice appear in all copies and
+ * that both that copyright notice and this permission notice appear in
+ * supporting documentation, and that the name of the copyright holders
+ * not be used in advertising or publicity pertaining to distribution of
+ * the software without specific, written prior permission. The copyright
+ * holders makes no representations about the suitability of this software
+ * for any purpose. It is provided "as is" without express or implied warranty.
+ *
+ * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS
+ * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS,
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT
+ * OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF
+ * USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
+ * OF THIS SOFTWARE.
+ */
+
+/*
+ * Changes from 1.1 to 1.1.2:
+ * Relicensed under the MIT license, with consent of the copyright holders.
+ * Claudio Matsuoka (Jan 11 2011)
+ */
+
+/*
+ * inflate.c is based on the public-domain (non-copyrighted) version
+ * written by Mark Adler, version c14o, 23 August 1994. It has been
+ * modified to be reentrant, more portable, and to be data driven.
+ */
+
+/*
+ * 1) All file i/o is done externally to these routines
+ * 2) Routines are symmetrical so inflate can feed into deflate
+ * 3) Routines can be easily integrated into wide range of applications
+ * 4) Routines are very portable, and use only ANSI C
+ * 5) No #defines in inflate.h to conflict with external #defines
+ * 6) No external routines need be called by these routines
+ * 7) Buffers are owned by the calling routine
+ * 8) No static non-constant variables are allowed
+ */
+
+/*
+ * Note that for each call to InflatePutBuffer, there will be
+ * 0 or more calls to (*putbuffer_ptr). Before InflatePutBuffer
+ * returns, it will have output as much uncompressed data as
+ * is possible.
+ */
+
+#ifdef MEMCPY
+#include <mem.h>
+#endif
+
+#include "inflate.h"
+
+/*
+ * Macros for constants
+ */
+
+#ifndef NULL
+#define NULL ((void *) 0)
+#endif
+
+#ifndef TRUE
+#define TRUE 1
+#endif
+
+#ifndef FALSE
+#define FALSE 0
+#endif
+
+#ifndef WINDOWSIZE
+#define WINDOWSIZE 0x8000
+#endif
+
+#ifndef WINDOWMASK
+#define WINDOWMASK 0x7fff
+#endif
+
+#ifndef BUFFERSIZE
+#define BUFFERSIZE 0x4000
+#endif
+
+#ifndef BUFFERMASK
+#define BUFFERMASK 0x3fff
+#endif
+
+#ifndef INFLATESTATETYPE
+#define INFLATESTATETYPE 0xabcdabcdL
+#endif
+
+/*
+ * typedefs
+ */
+
+typedef unsigned long ulg;
+typedef unsigned short ush;
+typedef unsigned char uch;
+
+/* Structure to hold state for inflating zip files */
+struct InflateState {
+
+ unsigned long runtimetypeid1; /* to detect run-time errors */
+ int errorencountered; /* error encountered flag */
+
+ /* Decoding state */
+ int state; /* -1 -> need block type */
+ /* 0 -> need stored setup */
+ /* 1 -> need fixed setup */
+ /* 2 -> need dynamic setup */
+ /* 10 -> need stored data */
+ /* 11 -> need fixed data */
+ /* 12 -> need dynamic data */
+
+/* State for decoding fixed & dynamic data */
+ struct huft *tl; /* literal/length decoder tbl */
+ struct huft *td; /* distance decoder table */
+ int bl; /* bits decoded by tl */
+ int bd; /* bits decoded by td */
+
+ /* State for decoding stored data */
+ unsigned int storelength;
+
+ /* State to keep track that last block has been encountered */
+ int lastblock; /* current block is last */
+
+ /* Input buffer state (circular) */
+ ulg bb; /* input buffer bits */
+ unsigned int bk; /* input buffer count of bits */
+ unsigned int bp; /* input buffer pointer */
+ unsigned int bs; /* input buffer size */
+ unsigned char buffer[BUFFERSIZE]; /* input buffer data */
+
+ /* Storage for try/catch */
+ ulg catch_bb; /* bit buffer */
+ unsigned int catch_bk; /* bits in bit buffer */
+ unsigned int catch_bp; /* buffer pointer */
+ unsigned int catch_bs; /* buffer size */
+
+ /* Output window state (circular) */
+ unsigned int wp; /* output window pointer */
+ unsigned int wf; /* output window flush-from */
+ unsigned char window[WINDOWSIZE]; /* output window data */
+
+ /* Application state */
+ void *AppState; /* opaque ptr for callout */
+
+ /* pointers to call-outs */
+ int (*putbuffer_ptr)( /* returns 0 on success */
+ void *AppState, /* opaque ptr from Initialize */
+ unsigned char *buffer, /* buffer to put */
+ long length /* length of buffer */
+ );
+
+ void *(*malloc_ptr)(long length); /* utility routine */
+
+ void (*free_ptr)(void *buffer); /* utility routine */
+
+ unsigned long runtimetypeid2; /* to detect run-time errors */
+};
+
+/*
+ * Error handling macro
+ */
+
+#define ERROREXIT(is) {(is)->errorencountered = TRUE; return TRUE;}
+
+/*
+ * Macros for handling data in the input buffer
+ *
+ * Note that the NEEDBITS and DUMPBITS macros
+ * need to be bracketed by the TRY/CATCH macros
+ *
+ * The usage is:
+ *
+ * TRY
+ * {
+ * NEEDBITS(j)
+ * x = b & mask_bits[j];
+ * DUMPBITS(j)
+ * }
+ * CATCH_BEGIN
+ * cleanup code
+ * CATCH_END
+ *
+ * Note that there can only be one TRY/CATCH pair per routine
+ * because of the use of goto in the implementation of the macros.
+ *
+ * NEEDBITS makes sure that b has at least j bits in it, and
+ * DUMPBITS removes the bits from b. The macros use the variable k
+ * for the number of bits in b. Normally, b and k are register
+ * variables for speed, and are initialized at the beginning of a
+ * routine that uses these macros from a global bit buffer and count.
+ *
+ * In order to not ask for more bits than there are in the compressed
+ * stream, the Huffman tables are constructed to only ask for just
+ * enough bits to make up the end-of-block code (value 256). Then no
+ * bytes need to be "returned" to the buffer at the end of the last
+ * block. See the huft_build() routine.
+ */
+
+#define TRY \
+ is->catch_bb = b; \
+ is->catch_bk = k; \
+ is->catch_bp = is->bp; \
+ is->catch_bs = is->bs;
+
+#define CATCH_BEGIN \
+ goto cleanup_done; \
+ cleanup: \
+ b = is->catch_bb; \
+ k = is->catch_bk; \
+ is->bb = b; \
+ is->bk = k; \
+ is->bp = is->catch_bp; \
+ is->bs = is->catch_bs;
+
+#define CATCH_END \
+ cleanup_done: ;
+
+#define NEEDBITS(n) \
+{ \
+ while (k < (n)) \
+ { \
+ if (is->bs <= 0) \
+ { \
+ goto cleanup; \
+ } \
+ b |= ((ulg) (is->buffer[is->bp & BUFFERMASK])) << k; \
+ is->bs--; \
+ is->bp++; \
+ k += 8; \
+ } \
+}
+
+#define DUMPBITS(n) \
+{ \
+ b >>= (n); \
+ k -= (n); \
+}
+
+/*
+ * Macro for flushing the output window to the putbuffer callout.
+ *
+ * Note that the window is always flushed when it fills to 32K,
+ * and before returning to the application.
+ */
+
+#define FLUSHWINDOW(w, now) \
+if ((now && (is->wp > is->wf)) || ((w) >= WINDOWSIZE)) \
+{ \
+ is->wp = (w); \
+ if ((*(is->putbuffer_ptr)) \
+ (is->AppState, is->window+is->wf, is->wp-is->wf)) \
+ ERROREXIT(is); \
+ is->wp &= WINDOWMASK; \
+ is->wf = is->wp; \
+ (w) = is->wp; \
+}
+
+/*
+ * Inflate deflated (PKZIP's method 8 compressed) data. The compression
+ * method searches for as much of the current string of bytes (up to a
+ * length of 258) in the previous 32K bytes. If it doesn't find any
+ * matches (of at least length 3), it codes the next byte. Otherwise, it
+ * codes the length of the matched string and its distance backwards from
+ * the current position. There is a single Huffman code that codes both
+ * single bytes (called "literals") and match lengths. A second Huffman
+ * code codes the distance information, which follows a length code. Each
+ * length or distance code actually represents a base value and a number
+ * of "extra" (sometimes zero) bits to get to add to the base value. At
+ * the end of each deflated block is a special end-of-block (EOB) literal/
+ * length code. The decoding process is basically: get a literal/length
+ * code; if EOB then done; if a literal, emit the decoded byte; if a
+ * length then get the distance and emit the referred-to bytes from the
+ * sliding window of previously emitted data.
+ *
+ * There are (currently) three kinds of inflate blocks: stored, fixed, and
+ * dynamic. The compressor outputs a chunk of data at a time and decides
+ * which method to use on a chunk-by-chunk basis. A chunk might typically
+ * be 32K to 64K, uncompressed. If the chunk is uncompressible, then the
+ * "stored" method is used. In this case, the bytes are simply stored as
+ * is, eight bits per byte, with none of the above coding. The bytes are
+ * preceded by a count, since there is no longer an EOB code.
+ *
+ * If the data is compressible, then either the fixed or dynamic methods
+ * are used. In the dynamic method, the compressed data is preceded by
+ * an encoding of the literal/length and distance Huffman codes that are
+ * to be used to decode this block. The representation is itself Huffman
+ * coded, and so is preceded by a description of that code. These code
+ * descriptions take up a little space, and so for small blocks, there is
+ * a predefined set of codes, called the fixed codes. The fixed method is
+ * used if the block ends up smaller that way (usually for quite small
+ * chunks); otherwise the dynamic method is used. In the latter case, the
+ * codes are customized to the probabilities in the current block and so
+ * can code it much better than the pre-determined fixed codes can.
+ *
+ * The Huffman codes themselves are decoded using a mutli-level table
+ * lookup, in order to maximize the speed of decoding plus the speed of
+ * building the decoding tables. See the comments below that precede the
+ * lbits and dbits tuning parameters.
+ */
+
+/*
+ * Notes beyond the 1.93a appnote.txt:
+ *
+ * 1. Distance pointers never point before the beginning of the output
+ * stream.
+ * 2. Distance pointers can point back across blocks, up to 32k away.
+ * 3. There is an implied maximum of 7 bits for the bit length table and
+ * 15 bits for the actual data.
+ * 4. If only one code exists, then it is encoded using one bit. (Zero
+ * would be more efficient, but perhaps a little confusing.) If two
+ * codes exist, they are coded using one bit each (0 and 1).
+ * 5. There is no way of sending zero distance codes--a dummy must be
+ * sent if there are none. (History: a pre 2.0 version of PKZIP would
+ * store blocks with no distance codes, but this was discovered to be
+ * too harsh a criterion.) Valid only for 1.93a. 2.04c does allow
+ * zero distance codes, which is sent as one code of zero bits in
+ * length.
+ * 6. There are up to 286 literal/length codes. Code 256 represents the
+ * end-of-block. Note however that the static length tree defines
+ * 288 codes just to fill out the Huffman codes. Codes 286 and 287
+ * cannot be used though, since there is no length base or extra bits
+ * defined for them. Similarly, there are up to 30 distance codes.
+ * However, static trees define 32 codes (all 5 bits) to fill out the
+ * Huffman codes, but the last two had better not show up in the data.
+ * 7. Unzip can check dynamic Huffman blocks for complete code sets.
+ * The exception is that a single code would not be complete (see #4).
+ * 8. The five bits following the block type is really the number of
+ * literal codes sent minus 257.
+ * 9. Length codes 8,16,16 are interpreted as 13 length codes of 8 bits
+ * (1+6+6). Therefore, to output three times the length, you output
+ * three codes (1+1+1), whereas to output four times the same length,
+ * you only need two codes (1+3). Hmm.
+ *10. In the tree reconstruction algorithm, Code = Code + Increment
+ * only if BitLength(i) is not zero. (Pretty obvious.)
+ *11. Correction: 4 Bits: # of Bit Length codes - 4 (4 - 19)
+ *12. Note: length code 284 can represent 227-258, but length code 285
+ * really is 258. The last length deserves its own, short code
+ * since it gets used a lot in very redundant files. The length
+ * 258 is special since 258 - 3 (the min match length) is 255.
+ *13. The literal/length and distance code bit lengths are read as a
+ * single stream of lengths. It is possible (and advantageous) for
+ * a repeat code (16, 17, or 18) to go across the boundary between
+ * the two sets of lengths.
+ */
+
+/*
+ * Huffman code lookup table entry--this entry is four bytes for machines
+ * that have 16-bit pointers (e.g. PC's in the small or medium model).
+ * Valid extra bits are 0..13. e == 15 is EOB (end of block), e == 16
+ * means that v is a literal, 16 < e < 32 means that v is a pointer to
+ * the next table, which codes e - 16 bits, and lastly e == 99 indicates
+ * an unused code. If a code with e == 99 is looked up, this implies an
+ * error in the data.
+ */
+
+struct huft {
+ uch e; /* number of extra bits or operation */
+ uch b; /* number of bits in this code or subcode */
+ union {
+ ush n; /* literal, length base, or distance base */
+ struct huft *t; /* pointer to next level of table */
+ } v;
+};
+
+/*
+ * Tables for deflate from PKZIP's appnote.txt.
+ */
+
+static const unsigned border[] = { /* Order of the bit length code lengths */
+ 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15};
+
+static const ush cplens[] = { /* Copy lengths for literal codes 257..285 */
+ 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31,
+ 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0};
+ /* note: see note #13 above about the 258 in this list. */
+
+static const ush cplext[] = { /* Extra bits for literal codes 257..285 */
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2,
+ 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, 99, 99}; /* 99==invalid */
+
+static const ush cpdist[] = { /* Copy offsets for distance codes 0..29 */
+ 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193,
+ 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145,
+ 8193, 12289, 16385, 24577};
+
+static const ush cpdext[] = { /* Extra bits for distance codes */
+ 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6,
+ 7, 7, 8, 8, 9, 9, 10, 10, 11, 11,
+ 12, 12, 13, 13};
+
+/*
+ * Constants for run-time computation of mask
+ */
+
+static const ush mask_bits[] = {
+ 0x0000,
+ 0x0001, 0x0003, 0x0007, 0x000f, 0x001f, 0x003f, 0x007f, 0x00ff,
+ 0x01ff, 0x03ff, 0x07ff, 0x0fff, 0x1fff, 0x3fff, 0x7fff, 0xffff
+};
+
+/*
+ * Huffman code decoding is performed using a multi-level table lookup.
+ * The fastest way to decode is to simply build a lookup table whose
+ * size is determined by the longest code. However, the time it takes
+ * to build this table can also be a factor if the data being decoded
+ * is not very long. The most common codes are necessarily the
+ * shortest codes, so those codes dominate the decoding time, and hence
+ * the speed. The idea is you can have a shorter table that decodes the
+ * shorter, more probable codes, and then point to subsidiary tables for
+ * the longer codes. The time it costs to decode the longer codes is
+ * then traded against the time it takes to make longer tables.
+ *
+ * This results of this trade are in the variables lbits and dbits
+ * below. lbits is the number of bits the first level table for literal/
+ * length codes can decode in one step, and dbits is the same thing for
+ * the distance codes. Subsequent tables are also less than or equal to
+ * those sizes. These values may be adjusted either when all of the
+ * codes are shorter than that, in which case the longest code length in
+ * bits is used, or when the shortest code is *longer* than the requested
+ * table size, in which case the length of the shortest code in bits is
+ * used.
+ *
+ * There are two different values for the two tables, since they code a
+ * different number of possibilities each. The literal/length table
+ * codes 286 possible values, or in a flat code, a little over eight
+ * bits. The distance table codes 30 possible values, or a little less
+ * than five bits, flat. The optimum values for speed end up being
+ * about one bit more than those, so lbits is 8+1 and dbits is 5+1.
+ * The optimum values may differ though from machine to machine, and
+ * possibly even between compilers. Your mileage may vary.
+ */
+
+static const int lbits = 9; /* bits in base literal/length lookup table */
+static const int dbits = 6; /* bits in base distance lookup table */
+
+/* If BMAX needs to be larger than 16, then h and x[] should be ulg. */
+#define BMAX 16 /* maximum bit length of any code (16 for explode) */
+#define N_MAX 288 /* maximum number of codes in any set */
+
+/*
+ * Free the malloc'ed tables built by huft_build(), which makes a linked
+ * list of the tables it made, with the links in a dummy first entry of
+ * each table.
+ */
+
+static int huft_free(
+ struct InflateState *is, /* Inflate state */
+ struct huft *t /* table to free */
+)
+{
+ struct huft *p, *q;
+
+ /* Go through linked list, freeing from the malloced (t[-1]) address. */
+ p = t;
+ while (p != (struct huft *)NULL)
+ {
+ q = (--p)->v.t;
+ (*is->free_ptr)((char*)p);
+ p = q;
+ }
+ return 0;
+}
+
+/*
+ * Given a list of code lengths and a maximum table size, make a set of
+ * tables to decode that set of codes. Return zero on success, one if
+ * the given code set is incomplete (the tables are still built in this
+ * case), two if the input is invalid (all zero length codes or an
+ * oversubscribed set of lengths), and three if not enough memory.
+ * The code with value 256 is special, and the tables are constructed
+ * so that no bits beyond that code are fetched when that code is
+ * decoded.
+ */
+
+static int huft_build(
+ struct InflateState *is, /* Inflate state */
+ unsigned *b, /* code lengths in bits (all assumed <= BMAX) */
+ unsigned n, /* number of codes (assumed <= N_MAX) */
+ unsigned s, /* number of simple-valued codes (0..s-1) */
+ const ush *d, /* list of base values for non-simple codes */
+ const ush *e, /* list of extra bits for non-simple codes */
+ struct huft **t, /* result: starting table */
+ int *m /* maximum lookup bits, returns actual */
+)
+{
+ unsigned a; /* counter for codes of length k */
+ unsigned c[BMAX+1]; /* bit length count table */
+ unsigned el; /* length of EOB code (value 256) */
+ unsigned f; /* i repeats in table every f entries */
+ int g; /* maximum code length */
+ int h; /* table level */
+ unsigned i; /* counter, current code */
+ unsigned j; /* counter */
+ int k; /* number of bits in current code */
+ int lx[BMAX+1]; /* memory for l[-1..BMAX-1] */
+ int *l = lx+1; /* stack of bits per table */
+ unsigned *p; /* pointer into c[], b[], or v[] */
+ struct huft *q; /* points to current table */
+ struct huft r; /* table entry for structure assignment */
+ struct huft *u[BMAX]; /* table stack */
+ unsigned v[N_MAX]; /* values in order of bit length */
+ int w; /* bits before this table == (l * h) */
+ unsigned x[BMAX+1]; /* bit offsets, then code stack */
+ unsigned *xp; /* pointer into x */
+ int y; /* number of dummy codes added */
+ unsigned z; /* number of entries in current table */
+
+ /* clear the bit length count table */
+ for (i=0; i<(BMAX+1); i++)
+ {
+ c[i] = 0;
+ }
+
+ /* Generate counts for each bit length */
+ el = n > 256 ? b[256] : BMAX; /* set length of EOB code, if any */
+ p = b; i = n;
+ do {
+ c[*p]++; p++; /* assume all entries <= BMAX */
+ } while (--i);
+ if (c[0] == n) /* null input--all zero length codes */
+ {
+ *t = (struct huft *)NULL;
+ *m = 0;
+ return 0;
+ }
+
+ /* Find minimum and maximum length, bound *m by those */
+ for (j = 1; j <= BMAX; j++)
+ if (c[j])
+ break;
+ k = j; /* minimum code length */
+ if ((unsigned)*m < j)
+ *m = j;
+ for (i = BMAX; i; i--)
+ if (c[i])
+ break;
+ g = i; /* maximum code length */
+ if ((unsigned)*m > i)
+ *m = i;
+
+ /* Adjust last length count to fill out codes, if needed */
+ for (y = 1 << j; j < i; j++, y <<= 1)
+ if ((y -= c[j]) < 0)
+ return 2; /* bad input: more codes than bits */
+ if ((y -= c[i]) < 0)
+ return 2;
+ c[i] += y;
+
+ /* Generate starting offsets into the value table for each length */
+ x[1] = j = 0;
+ p = c + 1; xp = x + 2;
+ while (--i) { /* note that i == g from above */
+ *xp++ = (j += *p++);
+ }
+
+ /* Make a table of values in order of bit lengths */
+ p = b; i = 0;
+ do {
+ if ((j = *p++) != 0)
+ v[x[j]++] = i;
+ } while (++i < n);
+
+ /* Generate the Huffman codes and for each, make the table entries */
+ x[0] = i = 0; /* first Huffman code is zero */
+ p = v; /* grab values in bit order */
+ h = -1; /* no tables yet--level -1 */
+ w = l[-1] = 0; /* no bits decoded yet */
+ u[0] = (struct huft *)NULL; /* just to keep compilers happy */
+ q = (struct huft *)NULL; /* ditto */
+ z = 0; /* ditto */
+
+ /* go through the bit lengths (k already is bits in shortest code) */
+ for (; k <= g; k++)
+ {
+ a = c[k];
+ while (a--)
+ {
+ /* here i is the Huffman code of length k bits for value *p */
+ /* make tables up to required level */
+ while (k > w + l[h])
+ {
+ w += l[h++]; /* add bits already decoded */
+
+ /* compute minimum size table less than or equal to *m bits */
+ z = (z = g - w) > (unsigned)*m ? *m : z; /* upper limit */
+ if ((f = 1 << (j = k - w)) > a + 1) /* try a k-w bit table */
+ { /* too few codes for k-w bit table */
+ f -= a + 1; /* deduct codes from patterns left */
+ xp = c + k;
+ while (++j < z) /* try smaller tables up to z bits */
+ {
+ if ((f <<= 1) <= *++xp)
+ break; /* enough codes to use up j bits */
+ f -= *xp; /* else deduct codes from patterns */
+ }
+ }
+ if ((unsigned)w + j > el && (unsigned)w < el)
+ j = el - w; /* make EOB code end at table */
+ z = 1 << j; /* table entries for j-bit table */
+ l[h] = j; /* set table size in stack */
+
+ /* allocate and link in new table */
+ if ((q = (struct huft *)
+ ((*is->malloc_ptr)((z + 1)*sizeof(struct huft)))) ==
+ (struct huft *)NULL)
+ {
+ if (h)
+ huft_free(is, u[0]);
+ return 3; /* not enough memory */
+ }
+ *t = q + 1; /* link to list for huft_free() */
+ *(t = &(q->v.t)) = (struct huft *)NULL;
+ u[h] = ++q; /* table starts after link */
+
+ /* connect to last table, if there is one */
+ if (h)
+ {
+ x[h] = i; /* save pattern for backing up */
+ r.b = (uch)l[h-1]; /* bits to dump before this table */
+ r.e = (uch)(16 + j); /* bits in this table */
+ r.v.t = q; /* pointer to this table */
+ j = (i & ((1 << w) - 1)) >> (w - l[h-1]);
+ u[h-1][j] = r; /* connect to last table */
+ }
+ }
+
+ /* set up table entry in r */
+ r.b = (uch)(k - w);
+ if (p >= v + n)
+ r.e = 99; /* out of values--invalid code */
+ else if (*p < s)
+ {
+ r.e = (uch)(*p < 256 ? 16 : 15); /* 256 is end-of-block code */
+ r.v.n = (ush) *p++; /* simple code is just the value */
+ }
+ else
+ {
+ r.e = (uch)e[*p - s]; /* non-simple--look up in lists */
+ r.v.n = d[*p++ - s];
+ }
+
+ /* fill code-like entries with r */
+ f = 1 << (k - w);
+ for (j = i >> w; j < z; j += f)
+ q[j] = r;
+
+ /* backwards increment the k-bit code i */
+ for (j = 1 << (k - 1); i & j; j >>= 1)
+ i ^= j;
+ i ^= j;
+
+ /* backup over finished tables */
+ while ((i & ((1 << w) - 1)) != x[h])
+ w -= l[--h]; /* don't need to update q */
+ }
+ }
+
+ /* return actual size of base table */
+ *m = l[0];
+
+ /* Return true (1) if we were given an incomplete table */
+ return y != 0 && g != 1;
+}
+
+/*
+ * inflate (decompress) the codes in a stored (uncompressed) block.
+ * Return an error code or zero if it all goes ok.
+ */
+
+static int inflate_stored(
+ struct InflateState *is /* Inflate state */
+)
+{
+ ulg b; /* bit buffer */
+ unsigned k; /* number of bits in bit buffer */
+ unsigned w; /* current window position */
+
+ /* make local copies of state */
+ b = is->bb; /* initialize bit buffer */
+ k = is->bk; /* initialize bit count */
+ w = is->wp; /* initialize window position */
+
+ /*
+ * Note that this code knows that NEEDBITS jumps to cleanup
+ */
+
+ while (is->storelength > 0) /* do until end of block */
+ {
+ NEEDBITS(8)
+ is->window[w++] = (uch) b;
+ DUMPBITS(8)
+ FLUSHWINDOW(w, FALSE);
+ is->storelength--;
+ }
+
+ cleanup:
+
+ /* restore the state from the locals */
+ is->bb = b; /* restore bit buffer */
+ is->bk = k; /* restore bit count */
+ is->wp = w; /* restore window pointer */
+
+ if (is->storelength > 0)
+ return -1;
+ else
+ return 0;
+}
+
+static int inflate_codes(
+ struct InflateState *is, /* Inflate state */
+ struct huft *tl, /* literal/length decoder table */
+ struct huft *td, /* distance decoder table */
+ int bl, /* number of bits decoded by tl[] */
+ int bd /* number of bits decoded by td[] */
+)
+{
+ unsigned e; /* table entry flag/number of extra bits */
+ unsigned n, d; /* length and index for copy */
+ unsigned w; /* current window position */
+ struct huft *t; /* pointer to table entry */
+ unsigned ml, md; /* masks for bl and bd bits */
+ ulg b; /* bit buffer */
+ unsigned k; /* number of bits in bit buffer */
+
+ /* make local copies of state */
+ b = is->bb; /* initialize bit buffer */
+ k = is->bk; /* initialize bit count */
+ w = is->wp; /* initialize window position */
+
+ /* inflate the coded data */
+ ml = mask_bits[bl]; /* precompute masks for speed */
+ md = mask_bits[bd];
+ for (;;) /* do until end of block */
+ {
+ TRY
+ {
+ NEEDBITS((unsigned)bl)
+ if ((e = (t = tl + ((unsigned)b & ml))->e) > 16)
+ do {
+ if (e == 99)
+ return 1;
+ DUMPBITS(t->b)
+ e -= 16;
+ NEEDBITS(e)
+ } while ((e = (t = t->v.t + ((unsigned)b & mask_bits[e]))->e) > 16);
+ DUMPBITS(t->b)
+
+ if (e == 16) /* it's a literal */
+ {
+ is->window[w++] = (uch)t->v.n;
+ FLUSHWINDOW(w, FALSE);
+ }
+ else if (e == 15) /* it's an EOB */
+ {
+ break;
+ }
+ else /* it's a length */
+ {
+ /* get length of block to copy */
+ NEEDBITS(e)
+ n = t->v.n + ((unsigned)b & mask_bits[e]);
+ DUMPBITS(e);
+
+ /* decode distance of block to copy */
+ NEEDBITS((unsigned)bd)
+ if ((e = (t = td + ((unsigned)b & md))->e) > 16)
+ do {
+ if (e == 99)
+ return 1;
+ DUMPBITS(t->b)
+ e -= 16;
+ NEEDBITS(e)
+ } while ((e = (t = t->v.t + ((unsigned)b & mask_bits[e]))->e) > 16);
+ DUMPBITS(t->b)
+ NEEDBITS(e)
+ d = w - t->v.n - ((unsigned)b & mask_bits[e]);
+ DUMPBITS(e)
+
+ /* do the copy */
+ do {
+ n -= (e = ((e = WINDOWSIZE - ((d &= WINDOWMASK) > w ? d : w)) > n)
+ ? n : e
+ );
+#if defined(MEMCPY)
+ if (w - d >= e) /* (this test assumes unsigned comparison) */
+ {
+ memcpy(is->window + w, is->window + d, e);
+ w += e;
+ d += e;
+ }
+ else /* do it slow to avoid memcpy() overlap */
+#endif /* MEMCPY */
+ do {
+ is->window[w++] = is->window[d++];
+ } while (--e);
+ FLUSHWINDOW(w, FALSE);
+ } while (n);
+ }
+ }
+ CATCH_BEGIN
+ is->wp = w; /* restore window pointer */
+ return -1;
+ CATCH_END
+ }
+
+ /* restore the state from the locals */
+ is->bb = b; /* restore bit buffer */
+ is->bk = k; /* restore bit count */
+ is->wp = w; /* restore window pointer */
+
+ /* done */
+ return 0;
+}
+
+/*
+ * "decompress" an inflated type 0 (stored) block.
+ */
+
+static int inflate_stored_setup(
+ struct InflateState *is /* Inflate state */
+)
+{
+ unsigned n; /* number of bytes in block */
+ ulg b; /* bit buffer */
+ unsigned k; /* number of bits in bit buffer */
+
+ /* make local copies of state */
+ b = is->bb; /* initialize bit buffer */
+ k = is->bk; /* initialize bit count */
+
+ TRY
+ {
+ /* go to byte boundary */
+ n = k & 7;
+ DUMPBITS(n);
+
+ /* get the length and its complement */
+ NEEDBITS(16)
+ n = ((unsigned)b & 0xffff);
+ DUMPBITS(16)
+ NEEDBITS(16)
+ if (n != (unsigned)((~b) & 0xffff))
+ return 1; /* error in compressed data */
+ DUMPBITS(16)
+ }
+ CATCH_BEGIN
+ return -1;
+ CATCH_END
+
+ /* Save store state for this block */
+ is->storelength = n;
+
+ /* restore the state from the locals */
+ is->bb = b; /* restore bit buffer */
+ is->bk = k; /* restore bit count */
+
+ return 0;
+}
+
+/*
+ * decompress an inflated type 1 (fixed Huffman codes) block. We should
+ * either replace this with a custom decoder, or at least precompute the
+ * Huffman tables.
+ */
+
+static int inflate_fixed_setup(
+ struct InflateState *is /* Inflate state */
+)
+{
+ int i; /* temporary variable */
+ struct huft *tl; /* literal/length code table */
+ struct huft *td; /* distance code table */
+ int bl; /* lookup bits for tl */
+ int bd; /* lookup bits for td */
+ unsigned l[288]; /* length list for huft_build */
+
+ /* set up literal table */
+ for (i = 0; i < 144; i++)
+ l[i] = 8;
+ for (; i < 256; i++)
+ l[i] = 9;
+ for (; i < 280; i++)
+ l[i] = 7;
+ for (; i < 288; i++) /* make a complete, but wrong code set */
+ l[i] = 8;
+ bl = 7;
+ if ((i = huft_build(is, l, 288, 257, cplens, cplext, &tl, &bl)) != 0)
+ return i;
+
+ /* set up distance table */
+ for (i = 0; i < 30; i++) /* make an incomplete code set */
+ l[i] = 5;
+ bd = 5;
+ if ((i = huft_build(is, l, 30, 0, cpdist, cpdext, &td, &bd)) > 1)
+ {
+ huft_free(is, tl);
+ return i;
+ }
+
+ /* Save inflate state for this block */
+ is->tl = tl;
+ is->td = td;
+ is->bl = bl;
+ is->bd = bd;
+
+ return 0;
+}
+
+/*
+ * decompress an inflated type 2 (dynamic Huffman codes) block.
+ */
+
+#define PKZIP_BUG_WORKAROUND
+
+static int inflate_dynamic_setup(
+ struct InflateState *is /* Inflate state */
+)
+{
+ int i; /* temporary variables */
+ unsigned j;
+ unsigned l; /* last length */
+ unsigned m; /* mask for bit lengths table */
+ unsigned n; /* number of lengths to get */
+ struct huft *tl; /* literal/length code table */
+ struct huft *td; /* distance code table */
+ int bl; /* lookup bits for tl */
+ int bd; /* lookup bits for td */
+ unsigned nb; /* number of bit length codes */
+ unsigned nl; /* number of literal/length codes */
+ unsigned nd; /* number of distance codes */
+#ifdef PKZIP_BUG_WORKAROUND
+ unsigned ll[288+32]; /* literal/length and distance code lengths */
+#else
+ unsigned ll[286+30]; /* literal/length and distance code lengths */
+#endif
+ ulg b; /* bit buffer */
+ unsigned k; /* number of bits in bit buffer */
+
+ /* make local copies of state */
+ b = is->bb; /* initialize bit buffer */
+ k = is->bk; /* initialize bit count */
+
+ /* initialize tl for cleanup */
+ tl = NULL;
+
+ TRY
+ {
+ /* read in table lengths */
+ NEEDBITS(5)
+ nl = 257 + ((unsigned)b & 0x1f); /* number of literal/length codes */
+ DUMPBITS(5)
+ NEEDBITS(5)
+ nd = 1 + ((unsigned)b & 0x1f); /* number of distance codes */
+ DUMPBITS(5)
+ NEEDBITS(4)
+ nb = 4 + ((unsigned)b & 0xf); /* number of bit length codes */
+ DUMPBITS(4)
+#ifdef PKZIP_BUG_WORKAROUND
+ if (nl > 288 || nd > 32)
+#else
+ if (nl > 286 || nd > 30)
+#endif
+ return 1; /* bad lengths */
+
+ /* read in bit-length-code lengths */
+ for (j = 0; j < 19; j++) ll[j] = 0;
+ for (j = 0; j < nb; j++)
+ {
+ NEEDBITS(3)
+ ll[border[j]] = (unsigned)b & 7;
+ DUMPBITS(3)
+ }
+
+ /* build decoding table for trees--single level, 7 bit lookup */
+ bl = 7;
+ if ((i = huft_build(is, ll, 19, 19, NULL, NULL, &tl, &bl)) != 0)
+ {
+ if (i == 1)
+ huft_free(is, tl);
+ return i; /* incomplete code set */
+ }
+
+ /* read in literal and distance code lengths */
+ n = nl + nd;
+ m = mask_bits[bl];
+ i = l = 0;
+ while ((unsigned)i < n)
+ {
+ NEEDBITS((unsigned)bl)
+ j = (td = tl + ((unsigned)b & m))->b;
+ DUMPBITS(j)
+ j = td->v.n;
+ if (j < 16) /* length of code in bits (0..15) */
+ ll[i++] = l = j; /* save last length in l */
+ else if (j == 16) /* repeat last length 3 to 6 times */
+ {
+ NEEDBITS(2)
+ j = 3 + ((unsigned)b & 3);
+ DUMPBITS(2)
+ if ((unsigned)i + j > n)
+ return 1;
+ while (j--)
+ ll[i++] = l;
+ }
+ else if (j == 17) /* 3 to 10 zero length codes */
+ {
+ NEEDBITS(3)
+ j = 3 + ((unsigned)b & 7);
+ DUMPBITS(3)
+ if ((unsigned)i + j > n)
+ return 1;
+ while (j--)
+ ll[i++] = 0;
+ l = 0;
+ }
+ else /* j == 18: 11 to 138 zero length codes */
+ {
+ NEEDBITS(7)
+ j = 11 + ((unsigned)b & 0x7f);
+ DUMPBITS(7)
+ if ((unsigned)i + j > n)
+ return 1;
+ while (j--)
+ ll[i++] = 0;
+ l = 0;
+ }
+ }
+
+ /* free decoding table for trees */
+ huft_free(is, tl);
+ }
+ CATCH_BEGIN
+ if (tl) huft_free(is, tl);
+ return -1;
+ CATCH_END
+
+ /* restore the state from the locals */
+ is->bb = b; /* restore bit buffer */
+ is->bk = k; /* restore bit count */
+
+ /* build the decoding tables for literal/length and distance codes */
+ bl = lbits;
+ if ((i = huft_build(is, ll, nl, 257, cplens, cplext, &tl, &bl)) != 0)
+ {
+ if (i == 1) {
+ /* incomplete literal tree */
+ huft_free(is, tl);
+ }
+ return i; /* incomplete code set */
+ }
+ bd = dbits;
+ if ((i = huft_build(is, ll + nl, nd, 0, cpdist, cpdext, &td, &bd)) != 0)
+ {
+ if (i == 1) {
+ /* incomplete distance tree */
+#ifdef PKZIP_BUG_WORKAROUND
+ }
+#else
+ huft_free(is, td);
+ }
+ huft_free(is, tl);
+ return i; /* incomplete code set */
+#endif
+ }
+
+ /* Save inflate state for this block */
+ is->tl = tl;
+ is->td = td;
+ is->bl = bl;
+ is->bd = bd;
+
+ return 0;
+}
+
+/* Routine to initialize inflate decompression */
+void *InflateInitialize( /* returns InflateState */
+ void *AppState, /* for passing to putbuffer */
+ int (*putbuffer_ptr)( /* returns 0 on success */
+ void *AppState, /* opaque ptr from Initialize */
+ unsigned char *buffer, /* buffer to put */
+ long length /* length of buffer */
+ ),
+ void *(*malloc_ptr)(long length), /* utility routine */
+ void (*free_ptr)(void *buffer) /* utility routine */
+)
+{
+ struct InflateState *is;
+
+ /* Do some argument checking */
+ if ((!putbuffer_ptr) || (!malloc_ptr) || (!free_ptr)) return NULL;
+
+ /* Allocate the InflateState memory area */
+ is = (struct InflateState *) (*malloc_ptr)(sizeof(struct InflateState));
+ if (!is) return NULL;
+
+ /* Set up the initial values of the inflate state */
+ is->runtimetypeid1 = INFLATESTATETYPE;
+ is->errorencountered = FALSE;
+
+ is->bb = 0;
+ is->bk = 0;
+ is->bp = 0;
+ is->bs = 0;
+
+ is->wp = 0;
+ is->wf = 0;
+
+ is->state = -1;
+ is->lastblock = FALSE;
+
+ is->AppState = AppState;
+
+ is->putbuffer_ptr = putbuffer_ptr;
+ is->malloc_ptr = malloc_ptr;
+ is->free_ptr = free_ptr;
+
+ is->runtimetypeid2 = INFLATESTATETYPE;
+
+ /* Return this state info to the caller */
+ return is;
+}
+
+/* Call-in routine to put a buffer into inflate decompression */
+int InflatePutBuffer( /* returns 0 on success */
+ void *InflateState, /* opaque ptr from Initialize */
+ unsigned char *buffer, /* buffer to put */
+ long length /* length of buffer */
+)
+{
+ struct InflateState *is;
+
+ int beginstate;
+
+ /* Get (and check) the InflateState structure */
+ is = (struct InflateState *) InflateState;
+ if (!is || (is->runtimetypeid1 != INFLATESTATETYPE)
+ || (is->runtimetypeid2 != INFLATESTATETYPE)) return TRUE;
+ if (is->errorencountered) return TRUE;
+
+ do
+ {
+ int size, i;
+
+
+ if ((is->state == -1) && (is->lastblock)) break;
+
+ /* Save the beginning state */
+ beginstate = is->state;
+
+ /* Push as much as possible into input buffer */
+ size = BUFFERSIZE - is->bs;
+ if (size > length) size = (int) length;
+ i = is->bp + is->bs;
+
+ while (size-- > 0)
+ {
+ is->buffer[i++ & BUFFERMASK] = *buffer;
+ is->bs++;
+ buffer++;
+ length--;
+ }
+
+ /* Process some more data */
+ if (is->state == -1)
+ {
+ int e; /* last block flag */
+ unsigned t; /* block type */
+
+ ulg b; /* bit buffer */
+ unsigned k; /* number of bits in bit buffer */
+
+ /* make local copies of state */
+ b = is->bb; /* initialize bit buffer */
+ k = is->bk; /* initialize bit count */
+
+ TRY
+ {
+ /* read in last block bit */
+ NEEDBITS(1)
+ e = (int)b & 1;
+ DUMPBITS(1)
+
+ /* read in block type */
+ NEEDBITS(2)
+ t = (unsigned)b & 3;
+ DUMPBITS(2)
+
+ if (t <= 2)
+ {
+ is->state = t;
+ is->lastblock = e;
+ }
+ else
+ {
+ ERROREXIT(is);
+ }
+ }
+ CATCH_BEGIN
+ CATCH_END
+
+ /* restore the state from the locals */
+ is->bb = b; /* restore bit buffer */
+ is->bk = k; /* restore bit count */
+ }
+ else if (is->state == 0)
+ {
+ int ret;
+
+ ret = inflate_stored_setup(is);
+
+ if (ret > 0)
+ ERROREXIT(is);
+
+ if (ret == 0) is->state += 10;
+ }
+ else if (is->state == 1)
+ {
+ int ret;
+
+ ret = inflate_fixed_setup(is);
+
+ if (ret > 0)
+ ERROREXIT(is);
+
+ if (ret == 0) is->state += 10;
+ }
+ else if (is->state == 2)
+ {
+ int ret;
+
+ ret = inflate_dynamic_setup(is);
+
+ if (ret > 0)
+ ERROREXIT(is);
+
+ if (ret == 0) is->state += 10;
+ }
+ else if (is->state == 10)
+ {
+ int ret;
+
+ ret = inflate_stored(is);
+
+ if (ret > 0)
+ ERROREXIT(is);
+
+ if (ret == 0)
+ {
+ is->state = -1;
+ }
+ }
+ else if ((is->state == 11) ||
+ (is->state == 12) )
+ {
+ int ret;
+
+ ret = inflate_codes(is, is->tl, is->td, is->bl, is->bd);
+
+ if (ret > 0)
+ ERROREXIT(is);
+
+ if (ret == 0)
+ {
+ /* free the decoding tables */
+ huft_free(is, is->tl);
+ huft_free(is, is->td);
+ is->state = -1;
+ }
+ }
+ else
+ {
+ ERROREXIT(is);
+ }
+ }
+ while (length || (is->state != beginstate));
+
+ FLUSHWINDOW(is->wp, TRUE);
+
+ return is->errorencountered;
+}
+
+/* Routine to terminate inflate decompression */
+int InflateTerminate( /* returns 0 on success */
+ void *InflateState /* opaque ptr from Initialize */
+)
+{
+ int err;
+ void (*free_ptr)(void *buffer);
+
+ struct InflateState *is;
+
+ /* Get (and check) the InflateState structure */
+ is = (struct InflateState *) InflateState;
+ if (!is || (is->runtimetypeid1 != INFLATESTATETYPE)
+ || (is->runtimetypeid2 != INFLATESTATETYPE)) return TRUE;
+
+ /* save the error return */
+ err = is->errorencountered || (is->bs > 0)
+ || (is->state != -1)
+ || (!is->lastblock);
+
+ /* save the address of the free routine */
+ free_ptr = is->free_ptr;
+
+ /* Deallocate everything */
+ (*free_ptr)(is);
+
+ return err;
+}
diff --git a/externals/figlet/inflate.h b/externals/figlet/inflate.h
new file mode 100644
index 000000000..4fc745482
--- /dev/null
+++ b/externals/figlet/inflate.h
@@ -0,0 +1,90 @@
+/*
+ * inflate.h - inflate decompression routine
+ *
+ * Version 1.1.2
+ */
+
+/*
+ * Copyright (C) 1995, Edward B. Hamrick
+ *
+ * Permission to use, copy, modify, and distribute this software and
+ * its documentation for any purpose and without fee is hereby granted,
+ * provided that the above copyright notice appear in all copies and
+ * that both that copyright notice and this permission notice appear in
+ * supporting documentation, and that the name of the copyright holders
+ * not be used in advertising or publicity pertaining to distribution of
+ * the software without specific, written prior permission. The copyright
+ * holders makes no representations about the suitability of this software
+ * for any purpose. It is provided "as is" without express or implied warranty.
+ *
+ * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS
+ * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS,
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT
+ * OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF
+ * USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
+ * OF THIS SOFTWARE.
+ */
+
+/*
+ * Changes from 1.1 to 1.1.2:
+ * Relicensed under the MIT license, with consent of the copyright holders.
+ * Claudio Matsuoka (Jan 11 2011)
+ */
+
+/*
+ * 1) All file i/o is done externally to these routines
+ * 2) Routines are symmetrical so inflate can feed into deflate
+ * 3) Routines can be easily integrated into wide range of applications
+ * 4) Routines are very portable, and use only ANSI C
+ * 5) No #defines in inflate.h to conflict with external #defines
+ * 6) No external routines need be called by these routines
+ * 7) Buffers are owned by the calling routine
+ * 8) No static non-constant variables are allowed
+ */
+
+/*
+ * Note that for each call to InflatePutBuffer, there will be
+ * 0 or more calls to (*putbuffer_ptr). All except the last
+ * call to (*putbuffer_ptr) will be with 32768 bytes, although
+ * this behaviour may change in the future. Before InflatePutBuffer
+ * returns, it will have output as much uncompressed data as
+ * is possible.
+ */
+
+#ifndef __INFLATE_H
+#define __INFLATE_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Routine to initialize inflate decompression */
+void *InflateInitialize( /* returns InflateState */
+ void *AppState, /* for passing to putbuffer */
+ int (*putbuffer_ptr)( /* returns 0 on success */
+ void *AppState, /* opaque ptr from Initialize */
+ unsigned char *buffer, /* buffer to put */
+ long length /* length of buffer */
+ ),
+ void *(*malloc_ptr)(long length), /* utility routine */
+ void (*free_ptr)(void *buffer) /* utility routine */
+);
+
+/* Call-in routine to put a buffer into inflate decompression */
+int InflatePutBuffer( /* returns 0 on success */
+ void *InflateState, /* opaque ptr from Initialize */
+ unsigned char *buffer, /* buffer to put */
+ long length /* length of buffer */
+);
+
+/* Routine to terminate inflate decompression */
+int InflateTerminate( /* returns 0 on success */
+ void *InflateState /* opaque ptr from Initialize */
+);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/externals/figlet/run-tests.sh b/externals/figlet/run-tests.sh
new file mode 100755
index 000000000..4c373ec8d
--- /dev/null
+++ b/externals/figlet/run-tests.sh
@@ -0,0 +1,92 @@
+#!/bin/sh
+
+LC_ALL=POSIX
+export LC_ALL
+
+TESTDIR=tests
+OUTPUT=.test-output.txt
+LOGFILE=tests.log
+CMD="./figlet"
+FONTDIR="$1"
+
+run_test() {
+ test_dsc=$1
+ test_cmd=$2
+
+ total=`expr $total + 1`
+ test_num=`printf %03d $total`
+
+ echo >> $LOGFILE
+ printf "Run test $test_num: ${test_dsc}... " | tee -a $LOGFILE
+ echo >> $LOGFILE
+ echo "Command: $test_cmd" >> $LOGFILE
+ eval "$test_cmd" > "$OUTPUT" 2>> $LOGFILE
+ cmp "$OUTPUT" "tests/res${test_num}.txt" >> $LOGFILE 2>&1
+ if [ $? -eq 0 ]; then
+ echo "pass" | tee -a $LOGFILE
+ else
+ echo "**fail**" | tee -a $LOGFILE
+ result=1
+ fail=`expr $fail + 1`
+ fi
+}
+
+result=0
+fail=0
+$CMD -v > $LOGFILE
+
+file="$TESTDIR/input.txt"
+cmd="cat $file|$CMD"
+
+printf "Default font dir: "; $CMD -I2
+if [ -n "$FONTDIR" ]; then
+ FIGLET_FONTDIR="$FONTDIR"
+ export FIGLET_FONTDIR
+fi
+printf "Current font dir: "; $CMD -I2
+printf "Default font: "; $CMD -I3
+$CMD -f small "Test results" | tee -a $LOGFILE
+
+total=0
+
+run_test "showfigfonts output" "./showfigfonts"
+run_test "text rendering in all fonts" \
+ "for i in fonts/*.flf; do $cmd -f \$i; done"
+run_test "long text rendering" "cat tests/longtext.txt|$CMD"
+run_test "left-to-right text" "$cmd -L"
+run_test "right-to-left text" "$cmd -R"
+run_test "flush-left justification" "$cmd -l"
+run_test "flush-right justification" "$cmd -r"
+run_test "center justification" "$cmd -c"
+run_test "kerning mode" "$cmd -k"
+run_test "full width mode" "$cmd -W"
+run_test "overlap mode" "$cmd -o"
+run_test "tlf2 font rendering" "$cmd -f tests/emboss"
+run_test "kerning flush-left right-to-left mode" "$cmd -klR"
+run_test "kerning centered right-to-left mode (slant)" "$cmd -kcR -f slant"
+run_test "full-width flush-right right-to-left mode" "$cmd -WrR"
+run_test "overlap flush-right mode (big)" "$cmd -or -f big"
+run_test "tlf2 kerning flush-right mode" "$cmd -kr -f tests/emboss"
+run_test "tlf2 overlap centered mode" "$cmd -oc -f tests/emboss"
+run_test "tlf2 full-width flush-left right-to-left mode" \
+ "$cmd -WRl -f tests/emboss"
+run_test "specify font directory" \
+ "X=.t;mkdir \$X;cp fonts/script.flf \$X/foo.flf;$cmd -d\$X -ffoo;rm -Rf \$X"
+run_test "paragraph mode long line output" "$cmd -p -w250"
+run_test "short line output" "$cmd -w5"
+run_test "kerning paragraph centered mode (small)" "$cmd -kpc -fsmall"
+run_test "list of control files" "ls fonts/*flc"
+run_test "uskata control file" "printf 'ABCDE'|$CMD -fbanner -Cuskata"
+run_test "jis0201 control file" "printf '\261\262\263\264\265'|$CMD -fbanner -Cjis0201"
+run_test "right-to-left smushing with JavE font" "$cmd -f tests/flowerpower -R"
+
+rm -f "$OUTPUT"
+
+echo
+if [ $result -ne 0 ]; then
+ echo " $fail tests failed. See $LOGFILE for result details"
+else
+ echo " All tests passed."
+fi
+
+exit $result
diff --git a/externals/figlet/showfigfonts b/externals/figlet/showfigfonts
new file mode 100755
index 000000000..90c4d0afe
--- /dev/null
+++ b/externals/figlet/showfigfonts
@@ -0,0 +1,55 @@
+#!/bin/sh -
+# showfigfonts by Glenn Chappell <ggc@uiuc.edu>
+# figlet release 2.1.1 -- 25 Aug 1994
+# Based on showfigfonts by Greg Galperin <grg@ai.mit.edu>, Nov 1993.
+#
+# Prints a list of available figlet fonts, along with a sample of each
+# font. If directory is given, lists fonts in that directory; otherwise
+# uses the default font directory. If word is given, prints that word
+# in each font; otherwise prints the font name.
+#
+# Usage: showfigfonts [ -d directory ] [ word ]
+
+DIR=`dirname $0`
+FIGLET=$DIR/figlet
+
+# Get figlet version
+FIGLETVERSION=`$FIGLET -I1 2>/dev/null`
+if [ -z "$FIGLETVERSION" ]; then
+ FIGLETVERSION=20000
+fi
+
+USAGE="Usage: `basename $0` [ -d directory ] [ word ]"
+
+if [ "$1" = '-d' ]; then
+ FONTDIR="$2"
+ WORD="$3"
+ if [ $# -gt 3 ] || [ $# -lt 2 ]; then
+ echo "$USAGE"
+ exit 1
+ fi
+else
+ WORD="$1"
+ if [ $# -gt 1 ]; then
+ echo "$USAGE"
+ exit 1
+ fi
+ if [ "$FIGLETVERSION" -lt 20100 ]; then
+ # figlet 2.0
+ FONTDIR="`$FIGLET -F | sed -e '1d' -e '3,$d' -e 's/Font directory: //'`"
+ else
+ # figlet 2.1 or later
+ FONTDIR="`$FIGLET -I2`"
+ fi
+fi
+
+FONTLIST=`ls "$FONTDIR"/*.flf | sed 's!.*/\(.*\)\.flf$!\1!'`
+for F in $FONTLIST ; do
+ echo "$F :"
+ if [ -n "$WORD" ]; then
+ echo "$WORD" | $FIGLET -d "$FONTDIR" -f "$F"
+ else
+ echo "$F" | $FIGLET -d "$FONTDIR" -f "$F"
+ fi
+ echo "" ; echo ""
+done
diff --git a/externals/figlet/showfigfonts.6 b/externals/figlet/showfigfonts.6
new file mode 100644
index 000000000..0ec5783df
--- /dev/null
+++ b/externals/figlet/showfigfonts.6
@@ -0,0 +1,67 @@
+.\" showfigfonts by Glenn Chappell <ggc@uiuc.edu>
+.\" figlet release 2.1.1 -- 25 Aug 1994
+.\" Based on showfigfonts by Greg Galperin <grg@ai.mit.edu>, Nov 1993.
+.\"
+.\" Prints a list of available figlet fonts, along with a sample of each
+.\" font. If directory is given, lists fonts in that directory; otherwise
+.\" uses the default font directory. If word is given, prints that word
+.\" in each font; otherwise prints the font name.
+.\"
+.\" Usage: showfigfonts [ -d directory ] [ word ]
+.\"
+.\" Manual page by Jonathon Abbott, for the Debian Project
+.\" slightly modified by Francesco Tapparo, for the Debian Project
+.TH SHOWFIGFONTS 6 "31 May 2012" "v2.2.5"
+
+.SH NAME
+showfigfonts \- prints a list of available figlet fonts
+
+.SH SYNOPSIS
+.B showfigfonts
+[
+.B \-d
+.I directory
+]
+[
+.I word
+]
+
+.SH "DESCRIPTION"
+Prints a list of available figlet fonts, along with a sample of each
+font. If directory is given, lists fonts in that directory; otherwise
+uses the default font directory. If word is given, prints that word
+in each font; otherwise prints the font name.
+
+.SH EXAMPLES
+To use
+.B showfigfonts
+with its default settings, simply type
+.RS
+
+.B example% showfigfonts
+
+.RE
+
+To print all the fonts in /usr/share/fonts/figlet
+.RS
+
+.B example% showfigfonts -d /usr/share/fonts/figlet
+
+.RE
+
+To print the word foo using all available fonts
+.RS
+
+.B example% showfigfonts foo
+
+.RE
+
+.SH "AUTHORS"
+showfigfonts was written by Glenn Chappell <ggc@uiuc.edu>
+
+This manual page was written by Jonathon Abbott for the Debian Project.
+
+.SH "SEE ALSO"
+.BR figlet (6),
+.BR chkfont (6),
+.BR figlist (6)
diff --git a/externals/figlet/tests/emboss.tlf b/externals/figlet/tests/emboss.tlf
new file mode 100644
index 000000000..eff0852d4
--- /dev/null
+++ b/externals/figlet/tests/emboss.tlf
@@ -0,0 +1,325 @@
+tlf2a 3 3 8 -1 18 0 0 0
+===============================================================================
+ This is emboss.tlf, or âEmbossâ, by Sam Hocevar <sam@hocevar.net>. It was
+created on September 30th, 2006.
+
+ This font is free software. It comes without any warranty, to the extent
+permitted by applicable law. You can redistribute it and/or modify it under
+the terms of the Do What The Fuck You Want To Public License, Version 2,
+as published by Sam Hocevar. See http://sam.zoy.org/wtfpl/COPYING for more
+details.
+
+ Missing characters: # $ % , ; < >
+
+ To create emboss2.tlf, use the following command:
+ $ sed '/@@/,$y/ââââââ/ââââââ/' < emboss.tlf > emboss2.tlf
+
+ This font is part of TOIletâs official distribution. More information
+on the TOIlet website at http://caca.zoy.org/wiki/toilet
+===============================================================================
+ @
+ @
+ @@
+â!
+â!
+â!!
+ââ"
+ "
+ ""
+ @
+ @
+#@@
+ @
+ @
+$@@
+ @
+ @
+%@@
+âââ &
+ââââ&
+âââ &&
+â'
+ '
+ ''
+ â(
+â (
+ â((
+â )
+ â)
+â ))
+â â*
+âââ*
+â â**
+ â +
+âââ+
+ â ++
+ @
+ @
+,@@
+ -
+ââ-
+ --
+ .
+ .
+â..
+ â/
+ â /
+â //
+âââ0
+âââ0
+âââ00
+ââ 1
+ â 1
+âââ11
+âââ2
+âââ2
+âââ22
+âââ3
+âââ3
+âââ33
+â â4
+âââ4
+ â44
+âââ5
+âââ5
+âââ55
+âââ6
+âââ6
+âââ66
+âââ7
+ â7
+ â77
+âââ8
+âââ8
+âââ88
+âââ9
+âââ9
+âââ99
+ :
+â:
+â::
+ @
+ @
+;@@
+ @
+ @
+<@@
+ =
+âââ=
+âââ==
+ @
+ @
+>@@
+âââ?
+ â?
+ â ??
+âââ@
+âââ@
+âââ@@
+âââA
+âââA
+â âAA
+ââ B
+âââB
+ââ BB
+âââC
+â C
+âââCC
+ââ D
+â âD
+ââ DD
+âââE
+âââE
+âââEE
+âââF
+âââF
+â FF
+âââG
+â âG
+âââGG
+â âH
+âââH
+â âHH
+âI
+âI
+âII
+ âJ
+ âJ
+ââJJ
+â âK
+ââ K
+â âKK
+â L
+â L
+âââLL
+ââ M
+âââM
+âââMM
+ââ N
+â âN
+â âNN
+âââO
+â âO
+âââOO
+âââp
+âââP
+â PP
+âââ Q
+â â Q
+ââââQQ
+âââR
+âââR
+â âRR
+âââS
+âââS
+âââSS
+âââT
+ â T
+ â TT
+â âU
+â âU
+âââUU
+â âV
+â âV
+ â VV
+âââW
+âââW
+âââWW
+â âX
+ â X
+â âXX
+â âY
+âââY
+ â YY
+âââZ
+ââ Z
+âââZZ
+ââ[
+â [
+ââ[[
+â \
+ â \
+ â\\
+ââ]
+ â]
+ââ]]
+ â ^
+â â^
+ ^^
+ _
+ _
+âââ__
+â `
+ â`
+ ``
+âââa
+âââa
+â âaa
+ââ b
+âââb
+ââ bb
+âââc
+â c
+âââcc
+ââ d
+â âd
+ââ dd
+âââe
+âââe
+âââee
+âââf
+âââf
+â ff
+âââg
+â âg
+âââgg
+â âh
+âââh
+â âhh
+âi
+âi
+âii
+ âj
+ âj
+ââjj
+â âk
+ââ k
+â âkk
+â l
+â l
+âââll
+ââ m
+âââm
+âââmm
+ââ n
+â ân
+â ânn
+âââo
+â âo
+âââoo
+âââp
+âââp
+â pp
+âââ q
+â â q
+ââââqq
+âââr
+âââr
+â ârr
+âââs
+âââs
+âââss
+ââât
+ â t
+ â tt
+â âu
+â âu
+âââuu
+â âv
+â âv
+ â vv
+âââw
+âââw
+âââww
+â âx
+ â x
+â âxx
+â ây
+ââây
+ â yy
+âââz
+ââ z
+âââzz
+ ââ{
+ââ {
+ ââ{{
+â|
+â|
+â||
+ââ }
+ ââ}
+ââ }}
+ â â~
+â â ~
+ ~~
+ââââââÃ
+ââââââÃ
+â ââââÃÃ
+ââââââÃ
+â ââââÃ
+ââââââÃÃ
+â ââââÃ
+â ââââÃ
+ââââââÃÃ
+ââââââä
+ââââââä
+â ââââää
+ââââââö
+â ââââö
+ââââââöö
+â ââââü
+â ââââü
+ââââââüü
+ââââââÃ
+ââââââÃ
+ââââââÃÃ
diff --git a/externals/figlet/tests/flowerpower.flf b/externals/figlet/tests/flowerpower.flf
new file mode 100644
index 000000000..3f294fb37
Binary files /dev/null and b/externals/figlet/tests/flowerpower.flf differ
diff --git a/externals/figlet/tests/input.txt b/externals/figlet/tests/input.txt
new file mode 100644
index 000000000..882652022
--- /dev/null
+++ b/externals/figlet/tests/input.txt
@@ -0,0 +1,7 @@
+<joshk> joshk@influx:/etc/logrotate.d> sh -n *
+<joshk> apache: line 14: syntax error near unexpected token `}'
+<joshk> apache: line 14: `}'
+<joshk> the plot thickens
+<asuffield> those aren't shell scripts
+<erich> this wasn't chicken.
+ -- in #debian-devel
diff --git a/externals/figlet/tests/longtext.txt b/externals/figlet/tests/longtext.txt
new file mode 100644
index 000000000..72e3a1820
--- /dev/null
+++ b/externals/figlet/tests/longtext.txt
@@ -0,0 +1,14 @@
+ What is involved in such [close] relationships is a form of emotional
+chemistry, so far unexplained by any school of psychiatry I am aware of, that
+conditions nothing so simple as a choice between the poles of attraction and
+repulsion. You can meet some people thirty, forty times down the years, and
+they remain amiable bystanders, like the shore lights of towns that a sailor
+passes at stated times but never calls at on the regular run. Conversely,
+all considerations of sex aside, you can meet some other people once or twice
+and they remain permanent influences on your life.
+ Everyone is aware of this discrepancy between the acquaintance seen
+as familiar wallpaper or instant friend. The chemical action it entails is
+less worth analyzing than enjoying. At any rate, these six pieces are about
+men with whom I felt an immediate sympat - to use a coining of Max Beerbohm's
+more satisfactory to me than the opaque vogue word "empathy".
+ -- Alistair Cooke, "Six Men"
diff --git a/externals/figlet/tests/res001.txt b/externals/figlet/tests/res001.txt
new file mode 100644
index 000000000..a85fa5952
--- /dev/null
+++ b/externals/figlet/tests/res001.txt
@@ -0,0 +1,148 @@
+banner :
+
+##### ## # # # # ###### #####
+# # # # ## # ## # # # #
+##### # # # # # # # # ##### # #
+# # ###### # # # # # # # #####
+# # # # # ## # ## # # #
+##### # # # # # # ###### # #
+
+
+
+big :
+ _ _
+| | (_)
+| |__ _ __ _
+| '_ \| |/ _` |
+| |_) | | (_| |
+|_.__/|_|\__, |
+ __/ |
+ |___/
+
+
+block :
+
+_| _| _|
+_|_|_| _| _|_| _|_|_| _| _|
+_| _| _| _| _| _| _|_|
+_| _| _| _| _| _| _| _|
+_|_|_| _| _|_| _|_|_| _| _|
+
+
+
+
+bubble :
+ _ _ _ _ _ _
+ / \ / \ / \ / \ / \ / \
+( b | u | b | b | l | e )
+ \_/ \_/ \_/ \_/ \_/ \_/
+
+
+digital :
++-+-+-+-+-+-+-+
+|d|i|g|i|t|a|l|
++-+-+-+-+-+-+-+
+
+
+ivrit :
+ _ _ _
+ | |_(_)_ ____ _(_)
+ | __| | '__\ \ / / |
+ | |_| | | \ V /| |
+ \__|_|_| \_/ |_|
+
+
+
+lean :
+
+ _/
+ _/ _/_/ _/_/_/ _/_/_/
+ _/ _/_/_/_/ _/ _/ _/ _/
+ _/ _/ _/ _/ _/ _/
+_/ _/_/_/ _/_/_/ _/ _/
+
+
+
+
+mini :
+
+._ _ o._ o
+| | ||| ||
+
+
+
+mnemonic :
+mnemonic
+
+
+script :
+
+ o
+ , __ ,_ _ _|_
+/ \_/ / | | |/ \_|
+ \/ \___/ |_/|_/|__/ |_/
+ /|
+ \|
+
+
+shadow :
+ | |
+ __| __ \ _` | _` | _ \\ \ \ /
+\__ \ | | | ( | ( | ( |\ \ \ /
+____/_| |_|\__,_|\__,_|\___/ \_/\_/
+
+
+
+slant :
+ __ __
+ _____/ /___ _____ / /_
+ / ___/ / __ `/ __ \/ __/
+ (__ ) / /_/ / / / / /_
+/____/_/\__,_/_/ /_/\__/
+
+
+
+small :
+ _ _
+ ____ __ __ _| | |
+(_-< ' \/ _` | | |
+/__/_|_|_\__,_|_|_|
+
+
+
+smscript :
+
+ , , _ ,_ o _|_
+/ \_/|/|/| / \_/ / | | |/\_|
+ \/ | | |_/ \/ \__/ |/|/|_/ |_/
+ (|
+
+
+smshadow :
+ | |
+(_-< ` \ (_-< \ _` | _` | _ \\ \ \ /
+___/_|_|_|___/_| _|\__,_|\__,_|\___/ \_/\_/
+
+
+
+smslant :
+ __ __
+ ___ __ _ ___ / /__ ____ / /_
+ (_-</ ' \(_-</ / _ `/ _ \/ __/
+/___/_/_/_/___/_/\_,_/_//_/\__/
+
+
+
+standard :
+ _ _ _
+ ___| |_ __ _ _ __ __| | __ _ _ __ __| |
+/ __| __/ _` | '_ \ / _` |/ _` | '__/ _` |
+\__ \ || (_| | | | | (_| | (_| | | | (_| |
+|___/\__\__,_|_| |_|\__,_|\__,_|_| \__,_|
+
+
+
+term :
+term
+
+
diff --git a/externals/figlet/tests/res002.txt b/externals/figlet/tests/res002.txt
new file mode 100644
index 000000000..752f6578b
--- /dev/null
+++ b/externals/figlet/tests/res002.txt
@@ -0,0 +1,1992 @@
+ # #
+ # # #### #### # # # # #
+ # # # # # # # # # #
+# # # # #### ###### #### #
+ # # # # # # # # # #
+ # # # # # # # # # # # #
+ # #### #### #### # # # # #
+
+ #####
+ # #### #### # # # # # # # # # ###### # # #
+ # # # # # # # # # ### # # ## # # # # #
+ # # # #### ###### #### # ### # # # # # ##### # # #
+ # # # # # # # # # #### # # # # # # # #
+# # # # # # # # # # # # # ## # # # #
+ #### #### #### # # # # ##### # # # # ###### ####
+
+ # # #
+# # ### # ###### ##### #### # # #### #### #####
+ # # # # # # # # # # # # # # # #
+ ## # ##### # # # # # # # # #
+ ## # # # # # # # # # # ### #####
+ # # ### # # # # # # # # # # # # #
+# # # # ###### # #### # ###### #### #### # #
+
+ #
+ #### ##### ## ##### ###### ##### # #### # #
+# # # # # # # # # # # # #
+# # # # # # ##### # # # #### ######
+# # # ###### # # ### # # # # # #
+# # # # # # # ### # # # # # # #
+ #### # # # # ###### ### ##### # #### # #
+
+
+ # # # #
+ ## # # #
+##### # # # #######
+ # # # # #
+ # ## # #
+ # #
+
+ # #
+ # # #### #### # # # # #
+ # # # # # # # # # #
+# # # # #### ###### #### #
+ # # # # # # # # # #
+ # # # # # # # # # # # #
+ # #### #### #### # # # # #
+
+ #
+ ## ##### ## #### # # ###### ### # # # # ######
+ # # # # # # # # # # # # # # ## # #
+# # # # # # # ###### ##### # # # # # #####
+###### ##### ###### # # # # # # # # # # #
+# # # # # # # # # # ### # # # ## #
+# # # # # #### # # ###### # ###### # # # ######
+
+ # # #
+ ## # # ### #### # # # # ##### ## # #
+# # # # # # # # ## # # # # # #
+ # # # #### # # # # # # # ##
+ # ####### # # # # # # # ###### ##
+ # # ### # # # # ## # # # # #
+##### # # #### # # # # # # # #
+
+
+###### ##### ##### #### ##### # # ###### ## #####
+# # # # # # # # # ## # # # # # #
+##### # # # # # # # # # # # ##### # # # #
+# ##### ##### # # ##### # # # # ###### #####
+# # # # # # # # # # ## # # # # #
+###### # # # # #### # # # # ###### # # # #
+
+
+# # # # ###### # # ##### ###### #### ##### ###### #####
+# # ## # # # # # # # # # # # # #
+# # # # # ##### ## # # ##### # # ##### # #
+# # # # # # ## ##### # # # # # #
+# # # ## # # # # # # # # # # #
+ #### # # ###### # # # ###### #### # ###### #####
+
+ ### ### ###
+##### #### # # ###### # # ### # ###
+ # # # # # # ## # # # #
+ # # # #### ##### # # # # ## #
+ # # # # # # # # # #
+ # # # # # # # ## #
+ # #### # # ###### # # ###
+
+ # #
+ # # #### #### # # # # #
+ # # # # # # # # # #
+# # # # #### ###### #### #
+ # # # # # # # # # #
+ # # # # # # # # # # # #
+ # #### #### #### # # # # #
+
+ #
+ ## ##### ## #### # # ###### ### # # # # ######
+ # # # # # # # # # # # # # # ## # #
+# # # # # # # ###### ##### # # # # # #####
+###### ##### ###### # # # # # # # # # # #
+# # # # # # # # # # ### # # # ## #
+# # # # # #### # # ###### # ###### # # # ######
+
+ # # # ### ### ###
+ ## # # ### ### # ###
+# # # # # # # #
+ # # # # ## #
+ # ####### # #
+ # # ### #
+##### # # ###
+
+ # #
+ # # #### #### # # # # # ##### # # ######
+ # # # # # # # # # # # # # #
+# # # # #### ###### #### # # ###### #####
+ # # # # # # # # # # # # # #
+ # # # # # # # # # # # # # # # #
+ # #### #### #### # # # # # # # # ######
+
+
+##### # #### #####
+# # # # # #
+# # # # # #
+##### # # # #
+# # # # #
+# ###### #### #
+
+
+##### # # # #### # # ###### # # ####
+ # # # # # # # # # ## # #
+ # ###### # # #### ##### # # # ####
+ # # # # # # # # # # # #
+ # # # # # # # # # # ## # #
+ # # # # #### # # ###### # # ####
+
+ # #
+ # ## #### # # ###### ###### # ###### # ##### #
+ # # # # # # # # # # # # # #
+# # # #### # # ##### ##### # ##### # # # #
+ # ###### # # # # # # # # # # #
+ # # # # # # # # # # # # # # #
+ # # # #### #### # # # ###### ###### ##### #
+
+ ###
+##### # # #### #### ###### ## ##### ###### # # ### #####
+ # # # # # # # # # # # # ## # # #
+ # ###### # # #### ##### # # # # ##### # # # # #
+ # # # # # # # ###### ##### # # # # #
+ # # # # # # # # # # # # # # ## #
+ # # # #### #### ###### # # # # ###### # # #
+
+
+ #### # # ###### # #
+# # # # # #
+ #### ###### ##### # #
+ # # # # # #
+# # # # # # #
+ #### # # ###### ###### ######
+
+
+ #### #### ##### # ##### ##### ####
+# # # # # # # # # #
+ #### # # # # # # # ####
+ # # ##### # ##### # #
+# # # # # # # # # # #
+ #### #### # # # # # ####
+
+ # #
+ # ###### ##### # #### # # # ##### # # # ####
+ # # # # # # # # # # # # # # #
+# ##### # # # # ###### # # ###### # ####
+ # # ##### # # # # # # # # # #
+ # # # # # # # # # # # # # # # #
+ # ###### # # # #### # # # # # # # ####
+
+ ###
+# # ## #### # # ### #####
+# # # # # ## # # #
+# # # # #### # # # # #
+# ## # ###### # # # # #
+## ## # # # # # ## #
+# # # # #### # # #
+
+
+ #### # # # #### # # ###### # #
+# # # # # # # # # # ## #
+# ###### # # #### ##### # # #
+# # # # # # # # # # # ###
+# # # # # # # # # # # ## ###
+ #### # # # #### # # ###### # # ###
+
+
+ # # #
+ # ## #
+ ##### ##### # # # #
+ # # # #
+ # # ##
+ # # #
+
+ # #
+ # # ##### ###### ##### # ## # # ##### ###### # # ######
+####### # # # # # # # # ## # # # # # # #
+ # # # # ##### ##### # # # # # # ##### # # ##### # # #####
+####### # # # # # # ###### # # # # # # # # #
+ # # # # # # # # # # # ## # # # # # #
+ # # ##### ###### ##### # # # # # ##### ###### ## ######
+
+
+#
+#
+#
+#
+#
+######
+
+ ___ _ _ __
+ / (_) | | | | \ \
+ / / _ ___ ___| |__ | | __ \ \
+< < | |/ _ \/ __| '_ \| |/ / > >
+ \ \| | (_) \__ \ | | | < / /
+ \_\ |\___/|___/_| |_|_|\_\/_/
+ _/ |
+ |__/
+ _ _ _ _ __ _ __ _
+ (_) | | | | ____ (_) / _| | _ / / | |
+ _ ___ ___| |__ | | __/ __ \ _ _ __ | |_| |_ ___ _(_) / /__| |_ ___
+ | |/ _ \/ __| '_ \| |/ / / _` | | '_ \| _| | | | \ \/ / / / _ \ __/ __|
+ | | (_) \__ \ | | | < | (_| | | | | | | | | |_| |> < _ / / __/ || (__
+ | |\___/|___/_| |_|_|\_\ \__,_|_|_| |_|_| |_|\__,_/_/\_(_)_/ \___|\__\___|
+ _/ | \____/
+|__/
+ ___ _ _ ___ _
+ / / | | | | | | \ \ | |
+ / /| | ___ __ _ _ __ ___ | |_ __ _| |_ ___ __| |\ \ ___| |__
+ / / | |/ _ \ / _` | '__/ _ \| __/ _` | __/ _ \ / _` | > > / __| '_ \
+ / / | | (_) | (_| | | | (_) | || (_| | || __/| (_| |/ / \__ \ | | |
+/_/ |_|\___/ \__, |_| \___/ \__\__,_|\__\___(_)__,_/_/ |___/_| |_|
+ __/ |
+ |___/
+ _
+ /\| |/\
+ ______ _ __ \ ` ' /
+|______| '_ \ |_ _|
+ | | | | / , . \
+ |_| |_| \/|_|\/
+
+
+ ___ _ _ __ _
+ / (_) | | | | \ \ | | _
+ / / _ ___ ___| |__ | | __ \ \ __ _ _ __ __ _ ___| |__ ___(_)
+< < | |/ _ \/ __| '_ \| |/ / > > / _` | '_ \ / _` |/ __| '_ \ / _ \
+ \ \| | (_) \__ \ | | | < / / | (_| | |_) | (_| | (__| | | | __/_
+ \_\ |\___/|___/_| |_|_|\_\/_/ \__,_| .__/ \__,_|\___|_| |_|\___(_)
+ _/ | | |
+ |__/ |_|
+ _ _ __ _ _ _
+| (_) /_ | || | _ | |
+| |_ _ __ ___ | | || |_(_) ___ _ _ _ __ | |_ __ ___ __
+| | | '_ \ / _ \ | |__ _| / __| | | | '_ \| __/ _` \ \/ /
+| | | | | | __/ | | | | _ \__ \ |_| | | | | || (_| |> <
+|_|_|_| |_|\___| |_| |_| (_) |___/\__, |_| |_|\__\__,_/_/\_\
+ __/ |
+ |___/
+
+
+ ___ _ __ _ __ ___ _ __ _ __ ___ __ _ _ __
+ / _ \ '__| '__/ _ \| '__| | '_ \ / _ \/ _` | '__|
+| __/ | | | | (_) | | | | | | __/ (_| | |
+ \___|_| |_| \___/|_| |_| |_|\___|\__,_|_|
+
+
+ _ _ _ _
+ | | | | | | | |
+ _ _ _ __ _____ ___ __ ___ ___| |_ ___ __| | | |_ ___ | | _____ _ __
+| | | | '_ \ / _ \ \/ / '_ \ / _ \/ __| __/ _ \/ _` | | __/ _ \| |/ / _ \ '_ \
+| |_| | | | | __/> <| |_) | __/ (__| || __/ (_| | | || (_) | < __/ | | |
+ \__,_|_| |_|\___/_/\_\ .__/ \___|\___|\__\___|\__,_| \__\___/|_|\_\___|_| |_|
+ | |
+ |_|
+ ___ _
+( ) \ ( )
+ \|| ||/
+ \ \
+ / /
+ | |
+ /_/
+
+ ___ _ _ __ _
+ / (_) | | | | \ \ | | _
+ / / _ ___ ___| |__ | | __ \ \ __ _ _ __ __ _ ___| |__ ___(_)
+< < | |/ _ \/ __| '_ \| |/ / > > / _` | '_ \ / _` |/ __| '_ \ / _ \
+ \ \| | (_) \__ \ | | | < / / | (_| | |_) | (_| | (__| | | | __/_
+ \_\ |\___/|___/_| |_|_|\_\/_/ \__,_| .__/ \__,_|\___|_| |_|\___(_)
+ _/ | | |
+ |__/ |_|
+ _ _ __ _ _ ___ _
+| (_) /_ | || | _ ( ) \ ( )
+| |_ _ __ ___ | | || |_(_) \|| ||/
+| | | '_ \ / _ \ | |__ _| \ \
+| | | | | | __/ | | | | _ / /
+|_|_|_| |_|\___| |_| |_| (_) | |
+ /_/
+
+ ___ _ _ __ _ _ _ _
+ / (_) | | | | \ \ | | | | | | | |
+ / / _ ___ ___| |__ | | __ \ \ | |_| |__ ___ _ __ | | ___ | |_
+< < | |/ _ \/ __| '_ \| |/ / > > | __| '_ \ / _ \ | '_ \| |/ _ \| __|
+ \ \| | (_) \__ \ | | | < / / | |_| | | | __/ | |_) | | (_) | |_
+ \_\ |\___/|___/_| |_|_|\_\/_/ \__|_| |_|\___| | .__/|_|\___/ \__|
+ _/ | | |
+ |__/ |_|
+ _ _ _ _
+| | | | (_) | |
+| |_| |__ _ ___| | _____ _ __ ___
+| __| '_ \| |/ __| |/ / _ \ '_ \/ __|
+| |_| | | | | (__| < __/ | | \__ \
+ \__|_| |_|_|\___|_|\_\___|_| |_|___/
+
+
+ __ __ __ _ _ ___ _ _
+ / / / _|/ _(_) | | | \ \ | | | |
+ / / __ _ ___ _ _| |_| |_ _ ___| | __| |\ \ | |_| |__ ___ ___ ___
+< < / _` / __| | | | _| _| |/ _ \ |/ _` | > > | __| '_ \ / _ \/ __|/ _ \
+ \ \ (_| \__ \ |_| | | | | | | __/ | (_| |/ / | |_| | | | (_) \__ \ __/
+ \_\__,_|___/\__,_|_| |_| |_|\___|_|\__,_/_/ \__|_| |_|\___/|___/\___|
+
+
+ _ _ _ _ _
+ ( ) | | | | | |
+ __ _ _ __ ___ _ __ |/| |_ ___| |__ ___| | |
+ / _` | '__/ _ \ '_ \ | __| / __| '_ \ / _ \ | |
+| (_| | | | __/ | | | | |_ \__ \ | | | __/ | |
+ \__,_|_| \___|_| |_| \__| |___/_| |_|\___|_|_|
+
+
+ _ _
+ (_) | |
+ ___ ___ _ __ _ _ __ | |_ ___
+/ __|/ __| '__| | '_ \| __/ __|
+\__ \ (__| | | | |_) | |_\__ \
+|___/\___|_| |_| .__/ \__|___/
+ | |
+ |_|
+ __ _ _ __ _ _ _
+ / / (_) | | \ \ | | | | (_)
+ / / ___ _ __ _ ___| |__ \ \ | |_| |__ _ ___
+< < / _ \ '__| |/ __| '_ \ > > | __| '_ \| / __|
+ \ \ __/ | | | (__| | | |/ / | |_| | | | \__ \
+ \_\___|_| |_|\___|_| |_/_/ \__|_| |_|_|___/
+
+
+ _ _ _ _ _
+ ( ) | | | (_) | |
+__ ____ _ ___ _ __ |/| |_ ___| |__ _ ___| | _____ _ __
+\ \ /\ / / _` / __| '_ \ | __| / __| '_ \| |/ __| |/ / _ \ '_ \
+ \ V V / (_| \__ \ | | | | |_ | (__| | | | | (__| < __/ | | |_
+ \_/\_/ \__,_|___/_| |_| \__| \___|_| |_|_|\___|_|\_\___|_| |_(_)
+
+
+ _
+ (_)
+ ______ ______ _ _ __
+ |______|______| | | '_ \
+ | | | | |
+ |_|_| |_|
+
+
+ _ _ _ _ _ _ _
+ _| || |_ | | | | (_) | | | |
+|_ __ _| __| | ___| |__ _ __ _ _ __ ______ __| | _____ _____| |
+ _| || |_ / _` |/ _ \ '_ \| |/ _` | '_ \______/ _` |/ _ \ \ / / _ \ |
+|_ __ _| (_| | __/ |_) | | (_| | | | | | (_| | __/\ V / __/ |
+ |_||_| \__,_|\___|_.__/|_|\__,_|_| |_| \__,_|\___| \_/ \___|_|
+
+
+
+ _| _| _| _| _|
+ _| _|_| _|_|_| _|_|_| _| _| _|
+_| _| _| _| _|_| _| _| _|_| _|
+ _| _| _| _| _|_| _| _| _| _| _|
+ _| _| _|_| _|_|_| _| _| _| _| _|
+ _|
+ _|
+
+ _| _| _| _|_|_|_|_| _|
+ _|_| _|_|_| _|_|_| _| _| _| _| _|_|_|
+ _| _| _| _|_| _| _| _|_| _| _|_|_| _| _| _| _|
+ _| _| _| _|_| _| _| _| _| _| _| _| _| _| _| _|
+ _| _|_| _|_|_| _| _| _| _| _| _|_|_|_| _| _| _|
+ _| _|
+_| _|_|_|_|_|_|
+
+ _|_| _| _| _|
+ _| _| _| _| _| _| _| _| _|_| _|_|_|_| _|_|_|
+_|_|_|_| _| _| _| _|_| _| _|_|_|_| _| _|
+ _| _| _| _| _| _| _| _| _| _|
+ _| _| _|_|_| _| _| _| _| _|_|_| _|_| _|_|_|
+
+
+
+ _| _| _|
+ _| _| _|_| _|_|_| _| _|_| _|_| _|_|_|_| _|_|_|
+ _| _| _| _| _| _| _|_| _| _| _| _| _|
+ _| _| _| _| _| _| _| _| _| _| _| _|
+_| _| _|_| _|_|_| _| _|_| _|_| _|_|_|
+ _|
+ _|_|
+
+ _| _| _| _|
+_|_|_|_| _|_| _|_|_| _| _|_|_| _|_|_|
+ _| _|_|_|_| _| _| _| _|_| _| _|
+ _| _| _| _| _| _|_| _| _|
+ _|_| _|_|_| _| _|_|_| _| _|_|_| _| _|
+
+
+
+ _| _| _|
+ _|_|_| _|_|_|
+_|_|_|_|_| _| _| _|_|_|_|_|
+ _| _| _|_|_|
+ _| _| _| _| _|
+
+
+
+ _| _| _| _| _|
+ _| _|_| _|_|_| _|_|_| _| _| _|
+_| _| _| _| _|_| _| _| _|_| _|
+ _| _| _| _| _|_| _| _| _| _| _|
+ _| _| _|_| _|_|_| _| _| _| _| _|
+ _|
+ _|
+
+ _|
+ _|_|_| _|_|_| _|_|_| _|_|_| _|_|_| _|_| _|
+_| _| _| _| _| _| _| _| _| _|_|_|_|
+_| _| _| _| _| _| _| _| _| _|
+ _|_|_| _|_|_| _|_|_| _|_|_| _| _| _|_|_| _|
+ _|
+ _|
+
+_| _| _| _| _|
+_| _|_|_| _|_| _|_| _| _| _|
+_| _| _| _| _|_|_|_| _| _|_|_|_|
+_| _| _| _| _| _| _|
+_| _| _| _| _|_|_| _| _| _|
+
+
+
+ _|
+ _|_|_| _| _| _|_|_| _|_|_|_| _|_|_| _| _|
+_|_| _| _| _| _| _| _| _| _|_|
+ _|_| _| _| _| _| _| _| _| _| _|
+_|_|_| _|_|_| _| _| _|_| _|_|_| _| _|
+ _|
+ _|_|
+
+
+ _|_| _| _|_| _| _|_| _|_| _| _|_|
+_|_|_|_| _|_| _|_| _| _| _|_|
+_| _| _| _| _| _|
+ _|_|_| _| _| _|_| _|
+
+
+
+
+_|_|_| _|_| _|_|_| _| _|_|
+_| _| _|_|_|_| _| _| _|_|
+_| _| _| _| _| _|
+_| _| _|_|_| _|_|_| _|
+
+
+
+
+_| _| _|_|_| _|_| _| _| _|_|_| _|_| _|_|_|
+_| _| _| _| _|_|_|_| _|_| _| _| _|_|_|_| _|
+_| _| _| _| _| _| _| _| _| _| _|
+ _|_|_| _| _| _|_|_| _| _| _|_|_| _|_|_| _|_|_|
+ _|
+ _|
+
+ _| _|
+_|_|_|_| _|_| _|_|_|
+ _| _|_|_|_| _| _|
+ _| _| _| _|
+ _|_| _|_|_| _|_|_|
+
+
+ _| _| _|
+ _| _| _| _| _|
+_|_|_|_| _|_| _| _| _|_| _|_|_| _|
+ _| _| _| _|_| _|_|_|_| _| _| _|
+ _| _| _| _| _| _| _| _| _|
+ _|_| _|_| _| _| _|_|_| _| _| _|
+ _|
+
+
+ _| _| _| _| _|
+ _| _|_| _|_|_| _|_|_| _| _| _|
+_| _| _| _| _|_| _| _| _|_| _|
+ _| _| _| _| _|_| _| _| _| _| _|
+ _| _| _|_| _|_|_| _| _| _| _| _|
+ _|
+ _|
+
+ _|
+ _|_|_| _|_|_| _|_|_| _|_|_| _|_|_| _|_| _|
+_| _| _| _| _| _| _| _| _| _|_|_|_|
+_| _| _| _| _| _| _| _| _| _|
+ _|_|_| _|_|_| _|_|_| _|_|_| _| _| _|_|_| _|
+ _|
+ _|
+ _| _| _|
+_| _| _| _| _| _| _| _|
+_| _|_|_| _|_| _|_| _| _| _| _|
+_| _| _| _| _|_|_|_| _| _|_|_|_| _|
+_| _| _| _| _| _| _| _|
+_| _| _| _| _|_|_| _| _| _| _|
+ _|
+
+
+ _| _| _| _| _|
+ _| _|_| _|_|_| _|_|_| _| _| _|
+_| _| _| _| _|_| _| _| _|_| _|
+ _| _| _| _| _|_| _| _| _| _| _|
+ _| _| _|_| _|_|_| _| _| _| _| _|
+ _|
+ _|
+
+ _| _| _| _|
+_|_|_|_| _|_|_| _|_| _|_|_| _| _|_| _|_|_|_|
+ _| _| _| _|_|_|_| _| _| _| _| _| _|
+ _| _| _| _| _| _| _| _| _| _|
+ _|_| _| _| _|_|_| _|_|_| _| _|_| _|_|
+ _|
+ _|
+
+ _| _| _| _|
+_|_|_|_| _|_|_| _|_|_| _| _| _|_| _|_|_| _|_|_|
+ _| _| _| _| _| _|_| _|_|_|_| _| _| _|_|
+ _| _| _| _| _| _| _| _| _| _| _|_|
+ _|_| _| _| _| _|_|_| _| _| _|_|_| _| _| _|_|_|
+
+
+
+ _| _|_| _|_| _| _|
+ _| _|_|_| _|_|_| _| _| _| _| _|_| _|
+_| _| _| _|_| _| _| _|_|_|_| _|_|_|_| _| _|_|_|_| _|
+ _| _| _| _|_| _| _| _| _| _| _| _|
+ _| _|_|_| _|_|_| _|_|_| _| _| _| _|_|_| _|
+
+
+
+ _| _| _| _|
+ _|_|_| _| _|_|_|_| _|_|_| _|_| _|_|_| _|_|
+_| _| _| _| _| _| _| _| _|_| _|_|_|_|
+_| _| _| _| _| _| _| _| _|_| _|
+ _|_|_| _| _|_| _| _| _|_| _|_|_| _|_|_|
+
+
+ _|
+ _| _|
+ _|_|_| _| _|_| _|_| _|_|_| _|_|_|_|
+_| _| _|_| _|_|_|_| _| _| _|
+_| _| _| _| _| _| _|
+ _|_|_| _| _|_|_| _| _| _|_|
+
+
+
+ _| _| _|
+ _|_|_| _|_|_| _|_| _| _|
+_|_| _| _| _|_|_|_| _| _|
+ _|_| _| _| _| _| _|
+_|_|_| _| _| _|_|_| _| _|
+
+
+
+ _| _|
+ _|_|_| _|_|_| _| _|_| _|_|_| _|_|_|_| _|_|_|
+_|_| _| _|_| _| _| _| _| _|_|
+ _|_| _| _| _| _| _| _| _|_|
+_|_|_| _|_|_| _| _| _|_|_| _|_| _|_|_|
+ _|
+ _|
+
+ _| _| _| _|
+ _| _|_| _| _|_| _|_|_| _|_|_| _|
+_| _|_|_|_| _|_| _| _| _| _| _|
+ _| _| _| _| _| _| _| _|
+ _| _|_|_| _| _| _|_|_| _| _| _|
+
+
+
+ _| _| _|
+_|_|_|_| _|_|_| _|_|_|
+ _| _| _| _| _|_|
+ _| _| _| _| _|_|
+ _|_| _| _| _| _|_|_|
+
+
+ _|
+ _| _|
+_| _| _| _|_|_| _|_|_| _|_|_| _|_|_|_|
+_| _| _| _| _| _|_| _| _| _|
+ _| _| _| _| _| _| _|_| _| _| _|
+ _| _| _|_|_| _|_|_| _| _| _|_|
+
+
+
+ _| _| _|
+ _|_|_| _|_|_| _|_|_| _| _| _|_| _|_|_|
+_| _| _| _| _| _|_| _|_|_|_| _| _|
+_| _| _| _| _| _| _| _| _| _|
+ _|_|_| _| _| _| _|_|_| _| _| _|_|_| _| _| _|
+
+
+
+
+
+ _|_|_|_|_|
+
+
+
+
+
+ _|
+ _|_|_|
+_|_|_|_|_| _| _| _|
+ _| _| _|
+ _| _| _|
+
+
+
+ _| _| _| _| _|
+_|_|_|_|_| _|_|_| _|_| _|_|_| _|_|_| _|_|_|
+ _| _| _| _| _|_|_|_| _| _| _| _| _| _| _| _|_|_|_|_|
+_|_|_|_|_| _| _| _| _| _| _| _| _| _| _|
+ _| _| _|_|_| _|_|_| _|_|_| _| _|_|_| _| _|
+
+
+
+ _| _|
+ _|_|_| _|_| _| _| _|_| _|
+_| _| _|_|_|_| _| _| _|_|_|_| _|
+_| _| _| _| _| _| _|
+ _|_|_| _|_|_| _| _|_|_| _|
+
+
+ _ _ _ _ _ _ _
+ / \ / \ / \ / \ / \ / \ / \
+( < | j | o | s | h | k | > )
+ \_/ \_/ \_/ \_/ \_/ \_/ \_/
+ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
+ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \
+( j | o | s | h | k | @ | i | n | f | l | u | x | : | / | e | t | c | / | l )
+ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/
+ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
+ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \
+( o | g | r | o | t | a | t | e | . | d | > ) ( s | h ) ( - | n ) ( * )
+ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/
+ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
+ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \
+( < | j | o | s | h | k | > ) ( a | p | a | c | h | e | : ) ( l | i | n | e )
+ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/
+ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
+ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \
+( 1 | 4 | : ) ( s | y | n | t | a | x ) ( e | r | r | o | r ) ( n | e | a | r )
+ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/
+ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
+ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \
+( u | n | e | x | p | e | c | t | e | d ) ( t | o | k | e | n ) ( ` | } | ' )
+ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/
+ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
+ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \
+( < | j | o | s | h | k | > ) ( a | p | a | c | h | e | : ) ( l | i | n | e )
+ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/
+ _ _ _ _ _ _
+ / \ / \ / \ / \ / \ / \
+( 1 | 4 | : ) ( ` | } | ' )
+ \_/ \_/ \_/ \_/ \_/ \_/
+ _ _ _ _ _ _ _ _ _ _ _ _ _ _
+ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \
+( < | j | o | s | h | k | > ) ( t | h | e ) ( p | l | o | t )
+ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/
+ _ _ _ _ _ _ _ _
+ / \ / \ / \ / \ / \ / \ / \ / \
+( t | h | i | c | k | e | n | s )
+ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/
+ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
+ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \
+( < | a | s | u | f | f | i | e | l | d | > ) ( t | h | o | s | e )
+ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/
+ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
+ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \
+( a | r | e | n | ' | t ) ( s | h | e | l | l ) ( s | c | r | i | p | t | s )
+ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/
+ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
+ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \
+( < | e | r | i | c | h | > ) ( t | h | i | s ) ( w | a | s | n | ' | t )
+ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/
+ _ _ _ _ _ _ _ _
+ / \ / \ / \ / \ / \ / \ / \ / \
+( c | h | i | c | k | e | n | . )
+ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/
+ _ _ _ _
+ / \ / \ / \ / \
+ ( - | - ) ( i | n )
+ \_/ \_/ \_/ \_/
+ _ _ _ _ _ _ _ _ _ _ _ _ _
+ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \
+( # | d | e | b | i | a | n | - | d | e | v | e | l )
+ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/
++-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+|<|j|o|s|h|k|>| |j|o|s|h|k|@|i|n|f|l|u|x|:|/|e|t|c|/|l|o|g|r|o|t|a|t|e|.|d|>|
++-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
++-+-+ +-+-+ +-+
+|s|h| |-|n| |*|
++-+-+ +-+-+ +-+
++-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+ +-+-+-+-+ +-+-+-+ +-+-+-+-+-+-+ +-+-+-+-+-+
+|<|j|o|s|h|k|>| |a|p|a|c|h|e|:| |l|i|n|e| |1|4|:| |s|y|n|t|a|x| |e|r|r|o|r|
++-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+ +-+-+-+-+ +-+-+-+ +-+-+-+-+-+-+ +-+-+-+-+-+
++-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+ +-+-+-+
+|n|e|a|r| |u|n|e|x|p|e|c|t|e|d| |t|o|k|e|n| |`|}|'|
++-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+ +-+-+-+
++-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+ +-+-+-+-+ +-+-+-+ +-+-+-+
+|<|j|o|s|h|k|>| |a|p|a|c|h|e|:| |l|i|n|e| |1|4|:| |`|}|'|
++-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+ +-+-+-+-+ +-+-+-+ +-+-+-+
++-+-+-+-+-+-+-+ +-+-+-+ +-+-+-+-+ +-+-+-+-+-+-+-+-+
+|<|j|o|s|h|k|>| |t|h|e| |p|l|o|t| |t|h|i|c|k|e|n|s|
++-+-+-+-+-+-+-+ +-+-+-+ +-+-+-+-+ +-+-+-+-+-+-+-+-+
++-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+ +-+-+-+-+-+-+ +-+-+-+-+-+ +-+-+-+-+-+-+-+
+|<|a|s|u|f|f|i|e|l|d|>| |t|h|o|s|e| |a|r|e|n|'|t| |s|h|e|l|l| |s|c|r|i|p|t|s|
++-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+ +-+-+-+-+-+-+ +-+-+-+-+-+ +-+-+-+-+-+-+-+
++-+-+-+-+-+-+-+ +-+-+-+-+ +-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+
+|<|e|r|i|c|h|>| |t|h|i|s| |w|a|s|n|'|t| |c|h|i|c|k|e|n|.|
++-+-+-+-+-+-+-+ +-+-+-+-+ +-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+
+ +-+-+ +-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+
+ |-|-| |i|n| |#|d|e|b|i|a|n|-|d|e|v|e|l|
+ +-+-+ +-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+
+ __ _ _ _ __
+ \ \| | _| |__ ___ ___ (_)/ /
+ \ \ |/ / '_ \/ __|/ _ \| / /
+ / / <| | | \__ \ (_) | \ \
+ /_/|_|\_\_| |_|___/\___// |\_\
+ |__/
+ _ __ _ __ _ ____ _ _ _
+ ___| |_ ___ / /__ ___ _| |/ _|_ __ (_) / __ \| | _| |__ ___ ___ (_)
+ / __| __/ _ \ / (_) \/ / | | | | |_| '_ \| |/ / _` | |/ / '_ \/ __|/ _ \| |
+ | (__| || __// / _ > <| |_| | | _| | | | | | (_| | <| | | \__ \ (_) | |
+ \___|\__\___/_/ (_)_/\_\\__,_|_|_| |_| |_|_|\ \__,_|_|\_\_| |_|___/\___// |
+ \____/ |__/
+ _ __ _ _ _ _ __
+ | |__ ___ \ \ __| | ___| |_ __ _| |_ ___ _ __ __ _ ___ | | / /
+ | '_ \/ __| \ \/ _` | / _ \ __/ _` | __/ _ \| '__/ _` |/ _ \| | / /
+ | | | \__ \ / / (_| || __/ || (_| | || (_) | | | (_| | (_) | |/ /
+ |_| |_|___/ /_/ \__,_(_)___|\__\__,_|\__\___/|_| \__, |\___/|_/_/
+ |___/
+
+ __/\__ _ __
+ \ / | '_ \ _____
+ /_ _\ | | | |_____|
+ \/ |_| |_|
+
+ _ __ _ _ _ __
+ _ ___| |__ ___ __ _ _ __ __ _ \ \| | _| |__ ___ ___ (_)/ /
+ (_) _ \ '_ \ / __/ _` | '_ \ / _` | \ \ |/ / '_ \/ __|/ _ \| / /
+ | __/ | | | (_| (_| | |_) | (_| | / / <| | | \__ \ (_) | \ \
+ (_)___|_| |_|\___\__,_| .__/ \__,_| /_/|_|\_\_| |_|___/\___// |\_\
+ |_| |__/
+ _ _ _ _ _ _
+ __ ____ _| |_ _ __ _ _ ___ _| || | / | ___ _ __ (_) |
+ \ \/ / _` | __| '_ \| | | / __| (_) || |_| | / _ \ '_ \| | |
+ > < (_| | |_| | | | |_| \__ \ _|__ _| | | __/ | | | | |
+ /_/\_\__,_|\__|_| |_|\__, |___/ (_) |_| |_| \___|_| |_|_|_|
+ |___/
+
+ _ __ __ _ ___ _ __ _ __ ___ _ __ _ __ ___
+ | '__/ _` |/ _ \ '_ \ | '__/ _ \| '__| '__/ _ \
+ | | | (_| | __/ | | | | | | (_) | | | | | __/
+ |_| \__,_|\___|_| |_| |_| \___/|_| |_| \___|
+
+ _ _ _ _
+ _ __ ___| | _____ | |_ __| | ___| |_ ___ ___ _ ____ _____ _ __ _ _
+ | '_ \ / _ \ |/ / _ \| __| / _` |/ _ \ __/ __/ _ \ '_ \ \/ / _ \ '_ \| | | |
+ | | | | __/ < (_) | |_ | (_| | __/ || (_| __/ |_) > < __/ | | | |_| |
+ |_| |_|\___|_|\_\___/ \__| \__,_|\___|\__\___\___| .__/_/\_\___|_| |_|\__,_|
+ |_|
+ ___ _
+ ( ) \ ( )
+ |/ | | \|
+ > >
+ | |
+ /_/
+ _ __ _ _ _ __
+ _ ___| |__ ___ __ _ _ __ __ _ \ \| | _| |__ ___ ___ (_)/ /
+ (_) _ \ '_ \ / __/ _` | '_ \ / _` | \ \ |/ / '_ \/ __|/ _ \| / /
+ | __/ | | | (_| (_| | |_) | (_| | / / <| | | \__ \ (_) | \ \
+ (_)___|_| |_|\___\__,_| .__/ \__,_| /_/|_|\_\_| |_|___/\___// |\_\
+ |_| |__/
+ ___ _ _ _ _ _ _
+ ( ) \ ( ) _| || | / | ___ _ __ (_) |
+ |/ | | \| (_) || |_| | / _ \ '_ \| | |
+ > > _|__ _| | | __/ | | | | |
+ | | (_) |_| |_| \___|_| |_|_|_|
+ /_/
+ _ _ _ _ __ _ _ _ __
+ | |_ ___ | |_ __ ___| |__ | |_ \ \| | _| |__ ___ ___ (_)/ /
+ | __/ _ \| | '_ \ / _ \ '_ \| __| \ \ |/ / '_ \/ __|/ _ \| / /
+ | || (_) | | |_) | | __/ | | | |_ / / <| | | \__ \ (_) | \ \
+ \__\___/|_| .__/ \___|_| |_|\__| /_/|_|\_\_| |_|___/\___// |\_\
+ |_| |__/
+ _ _ _ _
+ ___ _ __ ___| | _____(_) |__ | |_
+ / __| '_ \ / _ \ |/ / __| | '_ \| __|
+ \__ \ | | | __/ < (__| | | | | |_
+ |___/_| |_|\___|_|\_\___|_|_| |_|\__|
+
+ _ _ __ _ _ _ __ __ __
+ ___ ___ ___ | |__ | |_ \ \ __| | | ___(_)/ _|/ _|_ _ ___ __ _ / /
+ / _ \/ __|/ _ \| '_ \| __| \ \/ _` | |/ _ \ | |_| |_| | | / __|/ _` / /
+ | __/\__ \ (_) | | | | |_ / / (_| | | __/ | _| _| |_| \__ \ (_| \ \
+ \___||___/\___/|_| |_|\__| /_/ \__,_|_|\___|_|_| |_| \__,_|___/\__,_|\_\
+
+ _ _ _ _ _
+ | | | ___| |__ ___ | |_( )_ __ ___ _ __ __ _
+ | | |/ _ \ '_ \/ __| | __|/| '_ \ / _ \ '__/ _` |
+ | | | __/ | | \__ \ | |_ | | | | __/ | | (_| |
+ |_|_|\___|_| |_|___/ \__| |_| |_|\___|_| \__,_|
+
+ _ _
+ ___| |_ _ __ (_)_ __ ___ ___
+ / __| __| '_ \| | '__/ __/ __|
+ \__ \ |_| |_) | | | | (__\__ \
+ |___/\__| .__/|_|_| \___|___/
+ |_|
+ _ _ _ __ _ _ __
+ ___(_) |__ | |_ \ \| |__ ___(_)_ __ ___ / /
+ / __| | '_ \| __| \ \ '_ \ / __| | '__/ _ \/ /
+ \__ \ | | | | |_ / / | | | (__| | | | __/\ \
+ |___/_|_| |_|\__| /_/|_| |_|\___|_|_| \___| \_\
+
+ _ _ _ _ _
+ _ __ ___| | _____(_) |__ ___ | |_( )_ __ ___ __ ___ __
+ | '_ \ / _ \ |/ / __| | '_ \ / __| | __|/| '_ \/ __|/ _` \ \ /\ / /
+ _| | | | __/ < (__| | | | | (__ | |_ | | | \__ \ (_| |\ V V /
+ (_)_| |_|\___|_|\_\___|_|_| |_|\___| \__| |_| |_|___/\__,_| \_/\_/
+
+ _
+ _ __ (_)
+ | '_ \| | _____ _____
+ | | | | | |_____|_____|
+ |_| |_|_|
+
+ _ _ _ _ _ _ _
+ | | _____ _____ __| | _ __ __ _(_) |__ ___ __| |_| || |_
+ | |/ _ \ \ / / _ \/ _` |_____| '_ \ / _` | | '_ \ / _ \/ _` |_ .. _|
+ | | __/\ V / __/ (_| |_____| | | | (_| | | |_) | __/ (_| |_ _|
+ |_|\___| \_/ \___|\__,_| |_| |_|\__,_|_|_.__/ \___|\__,_| |_||_|
+
+
+ _/ _/ _/ _/ _/
+ _/ _/_/ _/_/_/ _/_/_/ _/ _/ _/
+_/ _/ _/ _/ _/_/ _/ _/ _/_/ _/
+ _/ _/ _/ _/ _/_/ _/ _/ _/ _/ _/
+ _/ _/ _/_/ _/_/_/ _/ _/ _/ _/ _/
+ _/
+ _/
+
+ _/ _/ _/ _/_/_/_/_/ _/
+ _/_/ _/_/_/ _/_/_/ _/ _/ _/ _/
+ _/ _/ _/ _/_/ _/ _/ _/_/ _/ _/_/_/ _/ _/
+ _/ _/ _/ _/_/ _/ _/ _/ _/ _/ _/ _/ _/ _/
+ _/ _/_/ _/_/_/ _/ _/ _/ _/ _/ _/_/_/_/ _/
+ _/ _/
+_/ _/_/_/_/_/_/
+
+ _/_/ _/ _/
+ _/_/_/ _/ _/ _/ _/ _/ _/ _/ _/ _/_/
+ _/ _/ _/_/_/_/ _/ _/ _/ _/_/ _/ _/_/_/_/
+ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/
+_/ _/ _/ _/ _/_/_/ _/ _/ _/ _/ _/_/_/
+
+
+
+ _/ _/ _/
+_/_/_/_/ _/_/_/ _/ _/ _/_/ _/_/_/ _/ _/_/ _/_/
+ _/ _/ _/ _/ _/ _/ _/ _/ _/_/ _/ _/
+_/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/
+ _/_/ _/_/_/ _/ _/ _/_/ _/_/_/ _/ _/_/
+ _/
+ _/_/
+
+ _/ _/ _/ _/
+_/_/_/_/ _/_/_/ _/_/_/_/ _/_/ _/_/_/ _/
+ _/ _/ _/ _/ _/_/_/_/ _/ _/ _/
+_/ _/ _/ _/ _/ _/ _/ _/
+ _/_/ _/_/_/ _/_/ _/_/_/ _/ _/_/_/ _/
+
+
+
+ _/ _/ _/ _/
+ _/_/_/ _/_/_/ _/_/_/ _/_/_/
+ _/_/ _/ _/ _/_/_/_/_/ _/ _/ _/_/_/_/_/
+ _/_/ _/ _/ _/ _/ _/_/_/
+_/_/_/ _/ _/ _/ _/ _/ _/ _/
+
+
+
+ _/ _/ _/ _/ _/
+ _/ _/_/ _/_/_/ _/_/_/ _/ _/ _/
+_/ _/ _/ _/ _/_/ _/ _/ _/_/ _/
+ _/ _/ _/ _/ _/_/ _/ _/ _/ _/ _/
+ _/ _/ _/_/ _/_/_/ _/ _/ _/ _/ _/
+ _/
+ _/
+
+ _/
+ _/_/_/ _/_/_/ _/_/_/ _/_/_/ _/_/_/ _/_/ _/
+ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/_/_/_/
+_/ _/ _/ _/ _/ _/ _/ _/ _/ _/
+ _/_/_/ _/_/_/ _/_/_/ _/_/_/ _/ _/ _/_/_/ _/
+ _/
+ _/
+
+ _/ _/ _/ _/ _/
+ _/ _/_/_/ _/_/ _/_/ _/ _/ _/
+ _/ _/ _/ _/ _/_/_/_/ _/ _/_/_/_/
+ _/ _/ _/ _/ _/ _/ _/
+_/ _/ _/ _/ _/_/_/ _/ _/ _/
+
+
+
+ _/
+ _/_/_/ _/ _/ _/_/_/ _/_/_/_/ _/_/_/ _/ _/
+ _/_/ _/ _/ _/ _/ _/ _/ _/ _/_/
+ _/_/ _/ _/ _/ _/ _/ _/ _/ _/ _/
+_/_/_/ _/_/_/ _/ _/ _/_/ _/_/_/ _/ _/
+ _/
+ _/_/
+
+
+ _/_/ _/ _/_/ _/ _/_/ _/_/ _/ _/_/
+ _/_/_/_/ _/_/ _/_/ _/ _/ _/_/
+_/ _/ _/ _/ _/ _/
+ _/_/_/ _/ _/ _/_/ _/
+
+
+
+
+ _/_/_/ _/_/ _/_/_/ _/ _/_/
+ _/ _/ _/_/_/_/ _/ _/ _/_/
+ _/ _/ _/ _/ _/ _/
+_/ _/ _/_/_/ _/_/_/ _/
+
+
+
+
+ _/ _/ _/_/_/ _/_/ _/ _/ _/_/_/ _/_/ _/_/_/
+ _/ _/ _/ _/ _/_/_/_/ _/_/ _/ _/ _/_/_/_/ _/
+_/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/
+ _/_/_/ _/ _/ _/_/_/ _/ _/ _/_/_/ _/_/_/ _/_/_/
+ _/
+ _/
+
+ _/ _/
+_/_/_/_/ _/_/ _/_/_/
+ _/ _/_/_/_/ _/ _/
+_/ _/ _/ _/
+ _/_/ _/_/_/ _/_/_/
+
+
+ _/ _/ _/
+ _/ _/ _/ _/ _/
+_/_/_/_/ _/_/ _/ _/ _/_/ _/_/_/ _/
+ _/ _/ _/ _/_/ _/_/_/_/ _/ _/ _/
+_/ _/ _/ _/ _/ _/ _/ _/ _/
+ _/_/ _/_/ _/ _/ _/_/_/ _/ _/ _/
+ _/
+
+
+ _/ _/ _/ _/ _/
+ _/ _/_/ _/_/_/ _/_/_/ _/ _/ _/
+_/ _/ _/ _/ _/_/ _/ _/ _/_/ _/
+ _/ _/ _/ _/ _/_/ _/ _/ _/ _/ _/
+ _/ _/ _/_/ _/_/_/ _/ _/ _/ _/ _/
+ _/
+ _/
+
+ _/
+ _/_/_/ _/_/_/ _/_/_/ _/_/_/ _/_/_/ _/_/ _/
+ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/_/_/_/
+_/ _/ _/ _/ _/ _/ _/ _/ _/ _/
+ _/_/_/ _/_/_/ _/_/_/ _/_/_/ _/ _/ _/_/_/ _/
+ _/
+ _/
+
+ _/ _/ _/ _/ _/
+ _/ _/_/_/ _/_/ _/_/ _/ _/ _/
+ _/ _/ _/ _/ _/_/_/_/ _/ _/_/_/_/
+ _/ _/ _/ _/ _/ _/ _/
+_/ _/ _/ _/ _/_/_/ _/ _/ _/
+
+
+ _/ _/ _/
+ _/ _/ _/
+ _/
+ _/
+ _/
+ _/
+ _/
+
+
+ _/ _/ _/ _/ _/
+ _/ _/_/ _/_/_/ _/_/_/ _/ _/ _/
+_/ _/ _/ _/ _/_/ _/ _/ _/_/ _/
+ _/ _/ _/ _/ _/_/ _/ _/ _/ _/ _/
+ _/ _/ _/_/ _/_/_/ _/ _/ _/ _/ _/
+ _/
+ _/
+
+ _/ _/ _/ _/
+_/_/_/_/ _/_/_/ _/_/ _/_/_/ _/ _/_/ _/_/_/_/
+ _/ _/ _/ _/_/_/_/ _/ _/ _/ _/ _/ _/
+_/ _/ _/ _/ _/ _/ _/ _/ _/ _/
+ _/_/ _/ _/ _/_/_/ _/_/_/ _/ _/_/ _/_/
+ _/
+ _/
+
+ _/ _/ _/ _/
+_/_/_/_/ _/_/_/ _/_/_/ _/ _/ _/_/ _/_/_/ _/_/_/
+ _/ _/ _/ _/ _/ _/_/ _/_/_/_/ _/ _/ _/_/
+_/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/_/
+ _/_/ _/ _/ _/ _/_/_/ _/ _/ _/_/_/ _/ _/ _/_/_/
+
+
+
+ _/ _/_/ _/_/ _/ _/
+ _/ _/_/_/ _/_/_/ _/ _/ _/ _/ _/_/ _/
+_/ _/ _/ _/_/ _/ _/ _/_/_/_/_/_/_/_/ _/ _/_/_/_/ _/
+ _/ _/ _/ _/_/ _/ _/ _/ _/ _/ _/ _/
+ _/ _/_/_/ _/_/_/ _/_/_/ _/ _/ _/ _/_/_/ _/
+
+
+
+ _/ _/ _/ _/
+ _/_/_/ _/ _/_/_/_/ _/_/_/ _/_/ _/_/_/ _/_/
+ _/ _/ _/ _/ _/ _/ _/ _/ _/_/ _/_/_/_/
+_/ _/ _/ _/ _/ _/ _/ _/ _/_/ _/
+ _/_/_/ _/ _/_/ _/ _/ _/_/ _/_/_/ _/_/_/
+
+
+ _/
+ _/ _/
+ _/_/_/ _/ _/_/ _/_/ _/_/_/ _/_/_/_/
+ _/ _/ _/_/ _/_/_/_/ _/ _/ _/
+_/ _/ _/ _/ _/ _/ _/
+ _/_/_/ _/ _/_/_/ _/ _/ _/_/
+
+
+
+ _/ _/ _/
+ _/_/_/ _/_/_/ _/_/ _/ _/
+ _/_/ _/ _/ _/_/_/_/ _/ _/
+ _/_/ _/ _/ _/ _/ _/
+_/_/_/ _/ _/ _/_/_/ _/ _/
+
+
+
+ _/ _/
+ _/_/_/ _/_/_/ _/ _/_/ _/_/_/ _/_/_/_/ _/_/_/
+ _/_/ _/ _/_/ _/ _/ _/ _/ _/_/
+ _/_/ _/ _/ _/ _/ _/ _/ _/_/
+_/_/_/ _/_/_/ _/ _/ _/_/_/ _/_/ _/_/_/
+ _/
+ _/
+
+ _/ _/ _/ _/
+ _/ _/_/ _/ _/_/ _/_/_/ _/_/_/ _/
+_/ _/_/_/_/ _/_/ _/ _/ _/ _/ _/
+ _/ _/ _/ _/ _/ _/ _/ _/
+ _/ _/_/_/ _/ _/ _/_/_/ _/ _/ _/
+
+
+
+ _/ _/ _/
+_/_/_/_/ _/_/_/ _/_/_/
+ _/ _/ _/ _/ _/_/
+_/ _/ _/ _/ _/_/
+ _/_/ _/ _/ _/ _/_/_/
+
+
+ _/
+ _/ _/
+ _/ _/ _/ _/_/_/ _/_/_/ _/_/_/ _/_/_/_/
+_/ _/ _/ _/ _/ _/_/ _/ _/ _/
+ _/ _/ _/ _/ _/ _/ _/_/ _/ _/ _/
+ _/ _/ _/_/_/ _/_/_/ _/ _/ _/_/
+
+
+
+ _/ _/ _/
+ _/_/_/ _/_/_/ _/_/_/ _/ _/ _/_/ _/_/_/
+ _/ _/ _/ _/ _/ _/_/ _/_/_/_/ _/ _/
+_/ _/ _/ _/ _/ _/ _/ _/ _/ _/
+ _/_/_/ _/ _/ _/ _/_/_/ _/ _/ _/_/_/ _/ _/ _/
+
+
+
+
+
+
+
+
+
+
+
+ _/
+ _/_/_/
+_/_/_/_/_/ _/_/_/_/_/ _/ _/ _/
+ _/ _/ _/
+ _/ _/ _/
+
+
+
+ _/ _/ _/ _/ _/
+ _/_/_/_/_/ _/_/_/ _/_/ _/_/_/ _/_/_/ _/_/_/
+ _/ _/ _/ _/ _/_/_/_/ _/ _/ _/ _/ _/ _/ _/
+_/_/_/_/_/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/
+ _/ _/ _/_/_/ _/_/_/ _/_/_/ _/ _/_/_/ _/ _/
+
+
+
+ _/ _/
+ _/_/_/ _/_/ _/ _/ _/_/ _/
+_/_/_/_/_/ _/ _/ _/_/_/_/ _/ _/ _/_/_/_/ _/
+ _/ _/ _/ _/ _/ _/ _/
+ _/_/_/ _/_/_/ _/ _/_/_/ _/
+
+
+
+/o _ _|_ | \
+\|(_)_>| ||</
+_|
+ __ _
+ o _ _|_ | / \o.__|_| o /__|_ _ /| _ _ .___|_ _._|_ _ _|\ _|_
+ |(_)_>| ||<| (|/|| || ||_|><o/(/_|_(_/ |(_)(_||(_)|_(_| |_(/_o(_|/ _>| |
+_| \__ _|
+
+__._ \|/
+ | | /|\
+
+
+/o _ _|_ | \ _.._ _. _|_ _ o |o._ _ /||_|_o _ .__|_ _. _ ._.__ ._
+\|(_)_>| ||</ (_||_)(_|(_| |(/_o ||| |(/_ | | o _>\/| ||_(_|>< (/_| |(_)|
+_| | /
+ -.
+._ _ _.._ ._ _ ._ _ __|_ _ _| _|_ _ | _ ._ \|_/
+| |(/_(_|| |_|| |(/_><|_)(/_(_ |_(/_(_| |_(_)|<(/_| | |
+ | -'
+ -.
+/o _ _|_ | \ _.._ _. _|_ _ o |o._ _ /||_|_o \|_/
+\|(_)_>| ||</ (_||_)(_|(_| |(/_o ||| |(/_ | | o |
+_| | -'
+
+/o _ _|_ | \ _|_|_ _ ._ | __|_ _|_|_ o _| _ ._ _
+\|(_)_>| ||</ |_| |(/_ |_)|(_)|_ |_| ||(_|<(/_| |_>
+_| |
+ _ _
+/ _. _ _|__|_o _ | _|\ _|_|_ _ _ _ _..__ ._/_|_ _|_ _ || _ _._o.__|_ _
+\(_|_>|_|| | |(/_|(_|/ |_| |(_)_>(/_ (_||(/_| | |_ _>| |(/_|| _>(_| ||_)|__>
+ |
+
+/ _ ._o _|_ \ _|_|_ o _ _. _._/_|_ _|_ o _| _ ._
+\(/_| |(_| |/ |_| ||_> \/\/(_|_>| | |_ (_| ||(_|<(/_| |o
+
+
+ ____ o._ -|-|- _| _ |_ o _..____| _ _ |
+ || | -|-|-(_|(/_|_)|(_|| |(_|(/_\/(/_|
+
+<joshk>&SPjoshk&Atinflux:/etc/logrotate.d>&SPsh&SP-n&SP*
+<joshk>&SPapache:&SPline&SP14:&SPsyntax&SPerror&SPnear&SPunexpected&SPtoken
+&'!&!)'
+<joshk>&SPapache:&SPline&SP14:&SP&'!&!)'
+<joshk>&SPthe&SPplot&SPthickens
+<asuffield>&SPthose&SParen't&SPshell&SPscripts
+<erich>&SPthis&SPwasn't&SPchicken.
+&SP&SP&SP&SP&SP&SP&SP&SP&SP&SP&SP&SP&SP&SP&SP&SP--&SPin&SP&Nbdebian-devel
+ _ _
+ /o | | | | \
+/ __ , | | | | \
+\ | / \_/ \_|/ \ |/_) /
+ \|/\__/ \/ | |_/| \_//
+ /|
+ \|
+ _ _ _ _
+ o | | | | ____ o | | | | o /
+ __ , | | | | / __,\ _ _ | | | | /_ _|_ __
+ | / \_/ \_|/ \ |/_) | / | || / |/ | |/ |/ | | /\/ /|/ | /
+ |/\__/ \/ | |_/| \_/| \_/|/ |_/ | |_/|__/|__/ \_/|_/ /\_/o/ |__/|_/\___/
+/| \____/ |\
+\| |/
+ _ _
+ /| | | \ | |
+ / | | __ __, ,_ __ _|_ __, _|_ _ __| \ , | |
+ / |/ / \_/ | / | / \_| / | | |/ / | / / \_|/ \
+/ |__/\__/ \_/|/ |_/\__/ |_/\_/|_/|_/|__/o\_/|_// \/ | |_/
+ /|
+ \|
+
+
+ _ _ \|/
+-----/ |/ | --*--
+ | |_/ /|\
+
+
+ _ _ _
+ /o | | | | \ | | o
+/ __ , | | | | \ __, _ __, __ | | _
+\ | / \_/ \_|/ \ |/_) / / | |/ \_/ | / |/ \ |/
+ \|/\__/ \/ | |_/| \_// \_/|_/|__/ \_/|_/\___/| |_/|__/o
+ /| /|
+ \| \|
+ _ ,
+| | o /|| | o
+| | _ _ _ ||__|_ , _ _ _|_ __,
+|/ | / |/ | |/ | | / \_| | / |/ | | / | /\/
+|__/|_/ | |_/|__/ | | o \/ \_/|/ | |_/|_/\_/|_/ /\_/
+ /|
+ \|
+
+
+ _ ,_ ,_ __ ,_ _ _ _ __, ,_
+|/ / | / | / \_/ | / |/ | |/ / | / |
+|__/ |_/ |_/\__/ |_/ | |_/|__/\_/|_/ |_/
+
+
+ _
+ | | |
+ _ _ _ _ _ __ _|_ _ __| _|_ __ | | _ _ _
+| | / |/ | |/ /\/ |/ \_|/ / | |/ / | | / \_|/_) |/ / |/ |
+ \_/|_/ | |_/|__/ /\_/|__/ |__/\___/|_/|__/\_/|_/ |_/\__/ | \_/|__/ | |_/
+ /|
+ \|
+o o
+\\ /
+ |
+ >
+ |
+ /
+
+ _ _ _
+ /o | | | | \ | | o
+/ __ , | | | | \ __, _ __, __ | | _
+\ | / \_/ \_|/ \ |/_) / / | |/ \_/ | / |/ \ |/
+ \|/\__/ \/ | |_/| \_// \_/|_/|__/ \_/|_/\___/| |_/|__/o
+ /| /|
+ \| \|
+ _ , o o
+| | o /|| | o \\ /
+| | _ _ _ ||__|_ |
+|/ | / |/ | |/ | | >
+|__/|_/ | |_/|__/ | | o |
+ /
+
+ _ _ _ _
+ /o | | | | \ | | | |
+/ __ , | | | | \ _|_ | | _ _ | | __ _|_
+\ | / \_/ \_|/ \ |/_) / | |/ \ |/ |/ \_|/ / \_|
+ \|/\__/ \/ | |_/| \_// |_/| |_/|__/ |__/ |__/\__/ |_/
+ /| /|
+ \| \|
+ _ _
+ | | o | |
+_|_ | | __ | | _ _ _ ,
+ | |/ \ | / |/_) |/ / |/ | / \_
+ |_/| |_/|_/\___/| \_/|__/ | |_/ \/
+
+
+ _ _ _ _
+ / | | | | o | | | \ | |
+/ __, , | | | | _ | | __| \ _|_ | | __ , _
+\ / | / \_| | |/ |/ | |/ |/ / | / | |/ \ / \_/ \_|/
+ \\_/|_/ \/ \_/|_/|__/|__/|_/|__/|__/\_/|_// |_/| |_/\__/ \/ |__/
+ |\ |\
+ |/ |/
+ o _ _ _
+ / | | | | | |
+ __, ,_ _ _ _ _|_ , | | _ | | | |
+/ | / | |/ / |/ | | / \_|/ \ |/ |/ |/
+\_/|_/ |_/|__/ | |_/ |_/ \/ | |_/|__/|__/|__/
+
+
+
+ o
+ , __ ,_ _ _|_ ,
+/ \_/ / | | |/ \_| / \_
+ \/ \___/ |_/|_/|__/ |_/ \/
+ /|
+ \|
+ _ _
+ / o | | \ | | o
+/ _ ,_ __ | | \ _|_ | | ,
+\ |/ / | | / |/ \ / | |/ \ | / \_
+ \|__/ |_/|_/\___/| |_// |_/| |_/|_/ \/
+
+
+ o _ _
+ / | | o | |
+ __, , _ _ _|_ __ | | __ | | _ _ _
+| | |_/ | / \_/ |/ | | / |/ \ | / |/_) |/ / |/ |
+ \/ \/ \_/|_/ \/ | |_/ |_/ \___/| |_/|_/\___/| \_/|__/ | |_/o
+
+
+
+ o
+ _ _
+ ---------- | / |/ |
+ |_/ | |_/
+
+
+ _ _
+ | | | | | o | | |
+--+--+-- __| _ | | __, _ _ __| _ _ | |
+--+--+--/ | |/ |/ \_| / | / |/ |-----/ | |/ | |_|/ |/
+ | | \_/|_/|__/\_/ |_/\_/|_/ | |_/ \_/|_/|__/ \/ |__/|__/
+
+
+ /_) | | \ \
+ / | _ \ __| __ \ | /\ \
+\ \ | ( |\__ \ | | | < /
+ \_\ |\___/ ____/_| |_|_|\_\_/
+ ___/
+ _) | | __ \ _) _| | / |
+ | _ \ __| __ \ | / / _` | | __ \ | | | |\ \ /_) / _ \ __|
+ | ( |\__ \ | | | < | ( | | | | __| | | | ` < / __/ |
+ |\___/ ____/_| |_|_|\_\\ \__,_|_|_| _|_| _|\__,_| _/\_\_)_/ \___|\__|
+___/ \____/
+ / | | | |\ \ |
+ __| / | _ \ _` | __| _ \ __| _` | __| _ \ _` | \ \ __| __ \
+ ( / | ( | ( | | ( | | ( | | __/ ( | / \__ \ | | |
+\___|_/ _|\___/ \__, |_| \___/ \__|\__,_|\__|\___|_)\__,_| _/ ____/_| |_|
+ |___/
+ \
+ __ \ \ /
+_____| | | _ _\
+ _| _| \/
+
+ /_) | | \ \ |
+ / | _ \ __| __ \ | /\ \ _` | __ \ _` | __| __ \ _ \_)
+\ \ | ( |\__ \ | | | < / ( | | | ( | ( | | | __/
+ \_\ |\___/ ____/_| |_|_|\_\_/ \__,_| .__/ \__,_|\___|_| |_|\___|_)
+ ___/ _|
+ |_) _ | | | |
+ | | __ \ _ \ | | | _) __| | | __ \ __| _` |\ \ /
+ | | | | __/ |___ __| \__ \ | | | | | ( | ` <
+_|_|_| _|\___| _| _| _) ____/\__, |_| _|\__|\__,_| _/\_\
+ ____/
+
+ _ \ __| __| _ \ __| __ \ _ \ _` | __|
+ __/ | | ( | | | | __/ ( | |
+\___|_| _| \___/ _| _| _|\___|\__,_|_|
+
+ | |
+ | | __ \ _ \\ \ / __ \ _ \ __| __| _ \ _` |
+ | | | | __/ ` < | | __/ ( | __/ ( |
+\__,_|_| _|\___| _/\_\ .__/ \___|\___|\__|\___|\__,_|
+ _|
+ | | )\ \ )
+ __| _ \ | / _ \ __ \ \| | /
+ | ( | < __/ | | ` >
+\__|\___/ _|\_\\___|_| _| |
+ _/
+ /_) | | \ \ |
+ / | _ \ __| __ \ | /\ \ _` | __ \ _` | __| __ \ _ \_)
+\ \ | ( |\__ \ | | | < / ( | | | ( | ( | | | __/
+ \_\ |\___/ ____/_| |_|_|\_\_/ \__,_| .__/ \__,_|\___|_| |_|\___|_)
+ ___/ _|
+ |_) _ | | | )\ \ )
+ | | __ \ _ \ | | | _) \| | /
+ | | | | __/ |___ __| ` >
+_|_|_| _|\___| _| _| _) |
+ _/
+ /_) | | \ \ | | | |
+ / | _ \ __| __ \ | /\ \ __| __ \ _ \ __ \ | _ \ __|
+\ \ | ( |\__ \ | | | < / | | | | __/ | | | ( | |
+ \_\ |\___/ ____/_| |_|_|\_\_/ \__|_| |_|\___| .__/ _|\___/ \__|
+ ___/ _|
+ | | _) |
+ __| __ \ | __| | / _ \ __ \ __|
+ | | | | | ( < __/ | |\__ \
+\__|_| |_|_|\___|_|\_\\___|_| _|____/
+
+ / _| _|_) | |\ \ | |
+ / _` | __| | | | | | _ \ | _` | \ \ __| __ \ _ \ __| _ \
+\ \ ( |\__ \ | | __| __| | __/ | ( | / | | | | ( |\__ \ __/
+ \_\\__,_|____/\__,_|_| _| _|\___|_|\__,_| _/ \__|_| |_|\___/ ____/\___|
+
+ ) | | | |
+ _` | __| _ \ __ \ / __| __| __ \ _ \ | |
+ ( | | __/ | | | \__ \ | | | __/ | |
+\__,_|_| \___|_| _| \__| ____/_| |_|\___|_|_|
+
+ _) |
+ __| __| __| | __ \ __| __|
+\__ \ ( | | | | | \__ \
+____/\___|_| _| .__/ \__|____/
+ _|
+ / _) | \ \ | | _)
+ / _ \ __| | __| __ \ \ \ __| __ \ | __|
+\ \ __/ | | ( | | | / | | | | |\__ \
+ \_\\___|_| _|\___|_| |_|_/ \__|_| |_|_|____/
+
+ ) | | _) |
+\ \ \ / _` | __| __ \ / __| __| __ \ | __| | / _ \ __ \
+ \ \ \ / ( |\__ \ | | | ( | | | | ( < __/ | |
+ \_/\_/ \__,_|____/_| _| \__| \___|_| |_|_|\___|_|\_\\___|_| _|_)
+
+ _)
+ | __ \
+ _____|_____| | | |
+ _|_| _|
+
+ | | | | _) | |
+_ |_ |_| _` | _ \ __ \ | _` | __ \ _` | _ \\ \ / _ \ |
+_ |_ |_| ( | __/ | | | ( | | |_____| ( | __/ \ \ / __/ |
+ _| _| \__,_|\___|_.__/ _|\__,_|_| _| \__,_|\___| \_/ \___|_|
+
+ __ _ __ __ __
+ / / (_)___ _____/ /_ / /_\ \
+/ / / / __ \/ ___/ __ \/ //_/\ \
+\ \ / / /_/ (__ ) / / / ,< / /
+ \_\_/ /\____/____/_/ /_/_/|_| /_/
+ /___/
+ _ __ __ ______ _ ______ __ __
+ (_)___ _____/ /_ / /__/ ____ \(_)___ / __/ /_ ___ ___ _/_/__ / /_
+ / / __ \/ ___/ __ \/ //_/ / __ `/ / __ \/ /_/ / / / / |/_(_)_/_// _ \/ __/
+ / / /_/ (__ ) / / / ,< / / /_/ / / / / / __/ / /_/ /> <_ _/_/ / __/ /_
+ __/ /\____/____/_/ /_/_/|_|\ \__,_/_/_/ /_/_/ /_/\__,_/_/|_(_)_/ \___/\__/
+/___/ \____/
+ ____ __ __ ____
+ _____ _/_/ /___ ____ __________ / /_____ _/ /____ ____/ /\ \
+ / ___/_/_// / __ \/ __ `/ ___/ __ \/ __/ __ `/ __/ _ \ / __ / \ \
+/ /___/_/ / / /_/ / /_/ / / / /_/ / /_/ /_/ / /_/ __// /_/ / / /
+\___/_/ /_/\____/\__, /_/ \____/\__/\__,_/\__/\___(_)__,_/ /_/
+ /____/
+ __
+ _____/ /_ ____ __/|_
+ / ___/ __ \ ______/ __ \ | /
+ (__ ) / / / /_____/ / / / /_ __|
+/____/_/ /_/ /_/ /_/ |/
+
+ __ _ __ __ __ __
+ / / (_)___ _____/ /_ / /_\ \ ____ _____ ____ ______/ /_ ___ _
+/ / / / __ \/ ___/ __ \/ //_/\ \ / __ `/ __ \/ __ `/ ___/ __ \/ _ \(_)
+\ \ / / /_/ (__ ) / / / ,< / / / /_/ / /_/ / /_/ / /__/ / / / __/
+ \_\_/ /\____/____/_/ /_/_/|_| /_/ \__,_/ .___/\__,_/\___/_/ /_/\___(_)
+ /___/ /_/
+ ___ _____ __ __
+ / (_)___ ___ < / // / _ _______ ______ / /_____ __ __
+ / / / __ \/ _ \ / / // /_(_) / ___/ / / / __ \/ __/ __ `/ |/_/
+ / / / / / / __/ / /__ __/ (__ ) /_/ / / / / /_/ /_/ /> <
+/_/_/_/ /_/\___/ /_/ /_/ (_) /____/\__, /_/ /_/\__/\__,_/_/|_|
+ /____/
+
+ ___ ______________ _____ ____ ___ ____ ______
+ / _ \/ ___/ ___/ __ \/ ___/ / __ \/ _ \/ __ `/ ___/
+/ __/ / / / / /_/ / / / / / / __/ /_/ / /
+\___/_/ /_/ \____/_/ /_/ /_/\___/\__,_/_/
+
+ __ __
+ __ ______ ___ _ ______ ___ _____/ /____ ____/ /
+ / / / / __ \/ _ \| |/_/ __ \/ _ \/ ___/ __/ _ \/ __ /
+/ /_/ / / / / __/> </ /_/ / __/ /__/ /_/ __/ /_/ /
+\__,_/_/ /_/\___/_/|_/ .___/\___/\___/\__/\___/\__,_/
+ /_/
+ __ __ _ _ _
+ / /_____ / /_____ ____ ( )| |( )
+ / __/ __ \/ //_/ _ \/ __ \ V / /|/
+/ /_/ /_/ / ,< / __/ / / / _>_>
+\__/\____/_/|_|\___/_/ /_/ _/_/
+ /_/
+ __ _ __ __ __ __
+ / / (_)___ _____/ /_ / /_\ \ ____ _____ ____ ______/ /_ ___ _
+/ / / / __ \/ ___/ __ \/ //_/\ \ / __ `/ __ \/ __ `/ ___/ __ \/ _ \(_)
+\ \ / / /_/ (__ ) / / / ,< / / / /_/ / /_/ / /_/ / /__/ / / / __/
+ \_\_/ /\____/____/_/ /_/_/|_| /_/ \__,_/ .___/\__,_/\___/_/ /_/\___(_)
+ /___/ /_/
+ ___ _____ __ _ _ _
+ / (_)___ ___ < / // / _ ( )| |( )
+ / / / __ \/ _ \ / / // /_(_) V / /|/
+ / / / / / / __/ / /__ __/ _>_>
+/_/_/_/ /_/\___/ /_/ /_/ (_) _/_/
+ /_/
+ __ _ __ __ __ __ __ __ __
+ / / (_)___ _____/ /_ / /_\ \ / /_/ /_ ___ ____ / /___ / /_
+/ / / / __ \/ ___/ __ \/ //_/\ \ / __/ __ \/ _ \ / __ \/ / __ \/ __/
+\ \ / / /_/ (__ ) / / / ,< / / / /_/ / / / __/ / /_/ / / /_/ / /_
+ \_\_/ /\____/____/_/ /_/_/|_| /_/ \__/_/ /_/\___/ / .___/_/\____/\__/
+ /___/ /_/
+ __ __ _ __
+ / /_/ /_ (_)____/ /_____ ____ _____
+ / __/ __ \/ / ___/ //_/ _ \/ __ \/ ___/
+/ /_/ / / / / /__/ ,< / __/ / / (__ )
+\__/_/ /_/_/\___/_/|_|\___/_/ /_/____/
+
+ __ _________ __ ____ __ __
+ / / ____ ________ __/ __/ __(_)__ / /___/ /\ \ / /_/ /_ ____ ________
+/ / / __ `/ ___/ / / / /_/ /_/ / _ \/ / __ / \ \ / __/ __ \/ __ \/ ___/ _ \
+\ \/ /_/ (__ ) /_/ / __/ __/ / __/ / /_/ / / / / /_/ / / / /_/ (__ ) __/
+ \_\__,_/____/\__,_/_/ /_/ /_/\___/_/\__,_/ /_/ \__/_/ /_/\____/____/\___/
+
+ _ __ __ ____
+ ____ _________ ____ ( )/ /_ _____/ /_ ___ / / /
+ / __ `/ ___/ _ \/ __ \|// __/ / ___/ __ \/ _ \/ / /
+/ /_/ / / / __/ / / / / /_ (__ ) / / / __/ / /
+\__,_/_/ \___/_/ /_/ \__/ /____/_/ /_/\___/_/_/
+
+ _ __
+ _______________(_)___ / /______
+ / ___/ ___/ ___/ / __ \/ __/ ___/
+ (__ ) /__/ / / / /_/ / /_(__ )
+/____/\___/_/ /_/ .___/\__/____/
+ /_/
+ __ _ ____ __ __ _
+ / / ___ _____(_)____/ /\ \ / /_/ /_ (_)____
+/ / / _ \/ ___/ / ___/ __ \ \ / __/ __ \/ / ___/
+\ \/ __/ / / / /__/ / / / / / /_/ / / / (__ )
+ \_\___/_/ /_/\___/_/ /_/_/ \__/_/ /_/_/____/
+
+ _ __ __ _ __
+ _ ______ __________ ( )/ /_ _____/ /_ (_)____/ /_____ ____
+| | /| / / __ `/ ___/ __ \|// __/ / ___/ __ \/ / ___/ //_/ _ \/ __ \
+| |/ |/ / /_/ (__ ) / / / / /_ / /__/ / / / / /__/ ,< / __/ / / /
+|__/|__/\__,_/____/_/ /_/ \__/ \___/_/ /_/_/\___/_/|_|\___/_/ /_(_)
+
+ _
+ (_)___
+ ____________ / / __ \
+ /_____/_____/ / / / / /
+ /_/_/ /_/
+
+ __ __ __ __ _ __ __
+ __/ // /_____/ /__ / /_ (_)___ _____ ____/ /__ _ _____ / /
+ /_ _ __/ __ / _ \/ __ \/ / __ `/ __ \______/ __ / _ \ | / / _ \/ /
+/_ _ __/ /_/ / __/ /_/ / / /_/ / / / /_____/ /_/ / __/ |/ / __/ /
+ /_//_/ \__,_/\___/_.___/_/\__,_/_/ /_/ \__,_/\___/|___/\___/_/
+
+ __ _ _ _ __
+ / /(_)___ __| |_ | |__\ \
+< < | / _ (_-< ' \| / / > >
+ \_\/ \___/__/_||_|_\_\/_/
+ |__/
+ _ _ _ ____ _ __ _ _ __ _ ___
+ (_)___ __| |_ | |__/ __ \(_)_ _ / _| |_ ___ _(_) / /__| |_ __ / / |___
+ | / _ (_-< ' \| / / / _` | | ' \| _| | || \ \ /_ / / -_) _/ _|/ /| / _ \
+ _/ \___/__/_||_|_\_\ \__,_|_|_||_|_| |_|\_,_/_\_(_)_/\___|\__\__/_/ |_\___/
+|__/ \____/
+ _ _ ___ _
+ __ _ _ _ ___| |_ __ _| |_ ___ __| \ \ __| |_ ___ _ _ _/\_
+/ _` | '_/ _ \ _/ _` | _/ -_)_/ _` |> > (_-< ' \ |___| ' \ > <
+\__, |_| \___/\__\__,_|\__\___(_)__,_/_/ /__/_||_| |_||_| \/
+|___/
+ __ _ _ _ __ _ _ _ _
+ / /(_)___ __| |_ | |__\ \ __ _ _ __ __ _ __| |_ ___(_) | (_)_ _ ___
+< < | / _ (_-< ' \| / / > > / _` | '_ \/ _` / _| ' \/ -_)_ | | | ' \/ -_)
+ \_\/ \___/__/_||_|_\_\/_/ \__,_| .__/\__,_\__|_||_\___(_) |_|_|_||_\___|
+ |__/ |_|
+ _ _ _ _ _
+/ | | (_) ____ _ _ _| |_ __ ___ __ ___ _ _ _ _ ___ _ _ _ _ ___ __ _ _ _
+| |_ _| (_-< || | ' \ _/ _` \ \ / / -_) '_| '_/ _ \ '_| | ' \/ -_) _` | '_|
+|_| |_(_) /__/\_, |_||_\__\__,_/_\_\ \___|_| |_| \___/_| |_||_\___\__,_|_|
+ |__/
+ _ _ _ _ ___ _
+ _ _ _ _ _____ ___ __ ___ __| |_ ___ __| | | |_ ___| |_____ _ _ ( ) \ ( )
+| || | ' \/ -_) \ / '_ \/ -_) _| _/ -_) _` | | _/ _ \ / / -_) ' \ \|| ||/
+ \_,_|_||_\___/_\_\ .__/\___\__|\__\___\__,_| \__\___/_\_\___|_||_| | |
+ |_| /_/
+ __ _ _ _ __ _ _ _ _
+ / /(_)___ __| |_ | |__\ \ __ _ _ __ __ _ __| |_ ___(_) | (_)_ _ ___
+< < | / _ (_-< ' \| / / > > / _` | '_ \/ _` / _| ' \/ -_)_ | | | ' \/ -_)
+ \_\/ \___/__/_||_|_\_\/_/ \__,_| .__/\__,_\__|_||_\___(_) |_|_|_||_\___|
+ |__/ |_|
+ _ _ _ _ ___ _
+/ | | (_) ( ) \ ( )
+| |_ _| \|| ||/
+|_| |_(_) | |
+ /_/
+ __ _ _ _ __ _ _ _ _
+ / /(_)___ __| |_ | |__\ \ | |_| |_ ___ _ __| |___| |_
+< < | / _ (_-< ' \| / / > > | _| ' \/ -_) | '_ \ / _ \ _|
+ \_\/ \___/__/_||_|_\_\/_/ \__|_||_\___| | .__/_\___/\__|
+ |__/ |_|
+ _ _ _ _
+| |_| |_ (_)__| |_____ _ _ ___
+| _| ' \| / _| / / -_) ' \(_-<
+ \__|_||_|_\__|_\_\___|_||_/__/
+
+ __ __ __ _ _ ___ _ _
+ / /__ _ ____ _ / _|/ _(_)___| |__| \ \ | |_| |_ ___ ___ ___
+< </ _` (_-< || | _| _| / -_) / _` |> > | _| ' \/ _ (_-</ -_)
+ \_\__,_/__/\_,_|_| |_| |_\___|_\__,_/_/ \__|_||_\___/__/\___|
+
+ _ _ _ _ _ _ _
+ __ _ _ _ ___ _ _ ( ) |_ __| |_ ___| | | ___ __ _ _(_)_ __| |_ ___
+/ _` | '_/ -_) ' \|/| _| (_-< ' \/ -_) | | (_-</ _| '_| | '_ \ _(_-<
+\__,_|_| \___|_||_| \__| /__/_||_\___|_|_| /__/\__|_| |_| .__/\__/__/
+ |_|
+ __ _ _ __ _ _ _ _ _
+ / /___ _ _(_)__| |_ \ \ | |_| |_ (_)___ __ __ ____ _ ____ _ ( ) |_
+< </ -_) '_| / _| ' \ > > | _| ' \| (_-< \ V V / _` (_-< ' \|/| _|
+ \_\___|_| |_\__|_||_/_/ \__|_||_|_/__/ \_/\_/\__,_/__/_||_| \__|
+
+ _ _ _
+ __| |_ (_)__| |_____ _ _
+/ _| ' \| / _| / / -_) ' \ _
+\__|_||_|_\__|_\_\___|_||_(_)
+
+ _
+ ___ ___ (_)_ _
+ |___|___| | | ' \
+ |_|_||_|
+
+ _ _ _ _ _ _ _
+ _| | |_ __| |___| |__(_)__ _ _ _ ___ __| |_____ _____| |
+|_ . _/ _` / -_) '_ \ / _` | ' \___/ _` / -_) V / -_) |
+|_ _\__,_\___|_.__/_\__,_|_||_| \__,_\___|\_/\___|_|
+ |_|_|
+
+ /o _ , |) |) \
+< | / \_/ \_|/\ |/) >
+ \|/\_/ \/ | |/| \//
+ (|
+ ____
+ o _ , |) |) / __,\ o |\ |\ o /__|_ _ /|\ _ _,
+ | / \_/ \_|/\ |/) | / | || /|/| |/ |/ | | /\/ /|/ | / / |/ / \_/ |
+ |/\_/ \/ | |/| \/| \_/|/ |/ | |_/|_/|_/ \/|_/ /\/o/ |_/|_/\__// |_/\_/ \/|/
+(| \____/ |) (|
+
+ ,_ _ _|_ _, _|_ _ _| \ , |) \|/
+/ | / \_| / | | |/ / | > / \_|/\ ----/|/| --*--
+ |/\_/ |_/\/|_/|_/|_/o\/|_// \/ | |/ | |_/ /|\
+
+
+ /o _ , |) |) \ _, _, _ |) _ o |\ o _
+< | / \_/ \_|/\ |/) > / | |/\_/ | / |/\ |/ |/ | /|/| |/
+ \|/\_/ \/ | |/| \// \/|_/|_/ \/|_/\__/| |/|_/o |_/|/ | |_/|_/
+ (| (|
+ ,
+/|| | o , _|_ _, _ ,_ ,_ _ ,_
+ ||__|_ / \_| | /|/| | / | /\/ |/ / | / | / \_/ |
+ | | o \/ \/|/ | |_/|_/\/|_/ /\/ |_/ |/ |/\_/ |/
+ (|
+
+ _ _, ,_ _ _ _ _|_ _ _|
+/|/| |/ / | / | | | /|/| |/ /\/ |/\_|/ / | |/ / |
+ | |_/|_/\/|_/ |/ \/|_/ | |_/|_/ /\/|_/ |_/\__/|_/|_/\/|_/
+ (|
+ o o
+_|_ _ |) _ \\ /
+ | / \_|/) |/ /|/| |_
+ |_/\_/ | \/|_/ | |_/ |
+ /
+
+ /o _ , |) |) \ _, _, _ |) _ o |\ o _
+< | / \_/ \_|/\ |/) > / | |/\_/ | / |/\ |/ |/ | /|/| |/
+ \|/\_/ \/ | |/| \// \/|_/|_/ \/|_/\__/| |/|_/o |_/|/ | |_/|_/
+ (| (|
+ , o o
+/|| | o \\ /
+ ||__|_ |_
+ | | o |
+ /
+
+ /o _ , |) |) \ _|_ |) _ |\ _ _|_
+< | / \_/ \_|/\ |/) > | |/\ |/ |/\_|/ / \_|
+ \|/\_/ \/ | |/| \// |_/| |/|_/ |_/ |_/\_/ |_/
+ (| (|
+
+_|_ |) o _ |) _ ,
+ | |/\ | / |/) |/ /|/| / \_
+ |_/| |/|/\__/| \/|_/ | |_/ \/
+
+
+ / _, , |\ |\ o _ |\ _| \ _|_ |) _ , _
+< / | / \_| | |/ |/ | |/ |/ / | > | |/\ / \_/ \_|/
+ \\/|_/ \/ \/|_/|_/|_/|/|_/|_/\/|_// |_/| |/\_/ \/ |_/
+ |) |)
+ o
+ _, ,_ _ /_|_ , |) _ |\ |\ , _ ,_ o _|_ ,
+/ | / | |/ /|/| | / \_|/\ |/ |/ |/ / \_/ / | | |/\_| / \_
+\/|_/ |/|_/ | |_/ |_/ \/ | |/|_/|_/|_/ \/ \__/ |/|/|_/ |_/ \/
+ (|
+ o
+ / _ ,_ o _ |) \ _|_ |) o , _, , /_|_
+< |/ / | | / |/\ > | |/\ | / \_ | | |_/ | / \_/|/| |
+ \|_/ |/|/\__/| |// |_/| |/|/ \/ \/ \/ \/|_/ \/ | |_/ |_/
+
+
+ _ |) o _ |) _
+/ |/\ | / |/) |/ /|/|
+\__/| |/|/\__/| \/|_/ | |_/o
+
+
+ o
+ -------- | /|/|
+ |/ | |_/
+
+
+_|_|_ _| _|) o _, _| _ _ |\
+_|_|_/ | |/|/\_| / | /|/|----/ | |/ | |_|/ |/
+ | | \/|_/|_/\/ |/\/|_/ | |_/ \/|_/|_/ \/ |_/|_/
+
+ /_) | | \ \
+< < | _ \(_-< \ | /> >
+ \_\ |\___/___/_| _|_\_\_/
+ __/
+ _) | | __ \ _) _|| _) / | /|
+ | _ \(_-< \ | // _` | | \ _|| | |\ \ / / -_) _| _| / | _ \
+ |\___/___/_| _|_\_\\__,_|_|_| _|_| _|\_,_| _\_\_)_/\___|\__|\__|_/ _|\___/
+__/ \____/
+ | | |\ \ | \ \ /
+ _` | _|_ \ _| _` | _| -_) _` | > > (_-< \ ____|\ _ _|
+\__, |_|\___/\__|\__,_|\__|\___|_)\__,_| _/ ___/_| _| _| _| _/ _\
+____/
+ /_) | | \ \ | _) |_)
+< < | _ \(_-< \ | /> > _` | _ \ _` | _| \ -_) | | \ -_)
+ \_\ |\___/___/_| _|_\_\_/ \__,_|.__/\__,_|\__|_| _|\___|_) _|_|_| _|\___|
+ __/ _|
+_ | | |_) |
+ |__ _| (_-< | | \ _| _` |\ \ / -_) _|_|_ \ _|
+ _| _|_) ___/\_, |_| _|\__|\__,_| _\_\ \___|_|_|\___/_|
+ ___/
+ | |
+ \ -_) _` | _| | | \ -_)\ \ / _ \ -_) _| _| -_) _` |
+_| _|\___|\__,_|_| \_,_|_| _|\___| _\_\.__/\___|\__|\__|\___|\__,_|
+ _|
+ | | )\ \ )
+ _| _ \ | / -_) \ \| |_/
+\__|\___/_\_\\___|_| _| |
+ _/
+ /_) | | \ \ | _) |_)
+< < | _ \(_-< \ | /> > _` | _ \ _` | _| \ -_) | | \ -_)
+ \_\ |\___/___/_| _|_\_\_/ \__,_|.__/\__,_|\__|_| _|\___|_) _|_|_| _|\___|
+ __/ _|
+_ | | |_) )\ \ )
+ |__ _| \| |_/
+ _| _|_) |
+ _/
+ /_) | | \ \ | | | |
+< < | _ \(_-< \ | /> > _| \ -_) _ \ | _ \ _|
+ \_\ |\___/___/_| _|_\_\_/ \__|_| _|\___| .__/_|\___/\__|
+ __/ _|
+ | | _) |
+ _| \ | _| | / -_) \ (_-<
+\__|_| _|_|\__|_\_\\___|_| _|___/
+
+ / _|_|_) | |\ \ | |
+< < _` |(_-< | | _|_| | -_) | _` | > > _| \ _ \(_-< -_)
+ \_\\__,_|___/\_,_|_|_| _|\___|_|\__,_| _/ \__|_| _|\___/___/\___|
+
+ )| | | | _) |
+ _` | _|-_) \/ _| (_-< \ -_) | | (_-< _| _|| _ \ _|(_-<
+\__,_|_|\___|_| _|\__| ___/_| _|\___|_|_| ___/\__|_| _|.__/\__|___/
+ _|
+ / _) | \ \ | | _) )|
+< < -_) _|| _| \ > > _| \ |(_-< \ \ \ / _` |(_-< \/ _|
+ \_\\___|_| _|\__|_| _|_/ \__|_| _|_|___/ \_/\_/\__,_|___/_| _|\__|
+
+ | _) |
+ _| \ | _| | / -_) \
+\__|_| _|_|\__|_\_\\___|_| _|_)
+
+ _)
+ ____|____| | \
+ _|_| _|
+
+ | | | | _) | |
+_ |_ |_| _` | -_) _ \ | _` | \____|_` | -_)\ \ / -_) |
+_ |_ |_|\__,_|\___|_.__/_|\__,_|_| _| \__,_|\___| \_/\___|_|
+ _| _|
+ __ _ __ __ __
+ / / (_)__ ___ / / / /_\ \
+< < / / _ \(_-</ _ \/ '_/> >
+ \_\_/ /\___/___/_//_/_/\_\/_/
+ |___/
+ _ __ __ _____ _ _____ _ __ __ __
+ (_)__ ___ / / / /__/ ___ \(_)__ / _/ /_ ____ __(_)_/_/__ / /_____ _/_/
+ / / _ \(_-</ _ \/ '_/ / _ `/ / _ \/ _/ / // /\ \ / _/_// -_) __/ __//_/
+ __/ /\___/___/_//_/_/\_\\ \_,_/_/_//_/_//_/\_,_//_\_(_)_/ \__/\__/\__/_/
+|___/ \___/
+ __ __ __ ____ __
+ / /__ ___ ________ / /____ _/ /____ ___/ /\ \ ___ / / _______ _/|
+ / / _ \/ _ `/ __/ _ \/ __/ _ `/ __/ -_)/ _ / > > (_-</ _ \ /___/ _ \ > _<
+/_/\___/\_, /_/ \___/\__/\_,_/\__/\__(_)_,_/ /_/ /___/_//_/ /_//_/ |/
+ /___/
+ __ _ __ __ __ __ _ ___
+ / / (_)__ ___ / / / /_\ \ ___ ____ ___ _____/ / ___ (_) / (_)__ ___
+< < / / _ \(_-</ _ \/ '_/> > / _ `/ _ \/ _ `/ __/ _ \/ -_) / / / _ \/ -_)
+ \_\_/ /\___/___/_//_/_/\_\/_/ \_,_/ .__/\_,_/\__/_//_/\__(_) /_/_/_//_/\__/
+ |___/ /_/
+ _______ _ __
+ < / / /(_) ___ __ _____ / /____ ___ __ ___ ___________ ____
+ / /_ _/ (_-</ // / _ \/ __/ _ `/\ \ / / -_) __/ __/ _ \/ __/
+/_/ /_/(_) /___/\_, /_//_/\__/\_,_//_\_\ \__/_/ /_/ \___/_/
+ /___/
+ __ __
+ ___ ___ ___ _____ __ _____ _____ __ ___ ___ ____/ /____ ___/ /
+ / _ \/ -_) _ `/ __/ / // / _ \/ -_) \ // _ \/ -_) __/ __/ -_) _ /
+/_//_/\__/\_,_/_/ \_,_/_//_/\__/_\_\/ .__/\__/\__/\__/\__/\_,_/
+ /_/
+ __ __ _ __ _
+ / /____ / /_____ ___ ( )\ \( )
+/ __/ _ \/ '_/ -_) _ \ V / /|/
+\__/\___/_/\_\\__/_//_/ _/_/
+ /_/
+ __ _ __ __ __ __ _ ___
+ / / (_)__ ___ / / / /_\ \ ___ ____ ___ _____/ / ___ (_) / (_)__ ___
+< < / / _ \(_-</ _ \/ '_/> > / _ `/ _ \/ _ `/ __/ _ \/ -_) / / / _ \/ -_)
+ \_\_/ /\___/___/_//_/_/\_\/_/ \_,_/ .__/\_,_/\__/_//_/\__(_) /_/_/_//_/\__/
+ |___/ /_/
+ _______ _ _ __ _
+ < / / /(_) ( )\ \( )
+ / /_ _/ V / /|/
+/_/ /_/(_) _/_/
+ /_/
+ __ _ __ __ __ __ __ __ __
+ / / (_)__ ___ / / / /_\ \ / /_/ / ___ ___ / /__ / /_
+< < / / _ \(_-</ _ \/ '_/> > / __/ _ \/ -_) / _ \/ / _ \/ __/
+ \_\_/ /\___/___/_//_/_/\_\/_/ \__/_//_/\__/ / .__/_/\___/\__/
+ |___/ /_/
+ __ __ _ __
+ / /_/ / (_)___/ /_____ ___ ___
+/ __/ _ \/ / __/ '_/ -_) _ \(_-<
+\__/_//_/_/\__/_/\_\\__/_//_/___/
+
+ __ _______ __ ____ __ __
+ / /___ ____ __ __/ _/ _(_)__ / /__/ /\ \ / /_/ / ___ ___ ___
+< </ _ `(_-</ // / _/ _/ / -_) / _ / > > / __/ _ \/ _ \(_-</ -_)
+ \_\_,_/___/\_,_/_//_//_/\__/_/\_,_/ /_/ \__/_//_/\___/___/\__/
+
+ _ __ __ ____ _ __
+ ___ ________ ___ ( ) /_ ___ / / ___ / / / ___ ________(_)__ / /____
+/ _ `/ __/ -_) _ \|/ __/ (_-</ _ \/ -_) / / (_-</ __/ __/ / _ \/ __(_-<
+\_,_/_/ \__/_//_/ \__/ /___/_//_/\__/_/_/ /___/\__/_/ /_/ .__/\__/___/
+ /_/
+ __ _ ____ __ __ _ _ __
+ / /___ ____(_)___/ /\ \ / /_/ / (_)__ _ _____ ____ ___ ( ) /_
+< </ -_) __/ / __/ _ \> > / __/ _ \/ (_-< | |/|/ / _ `(_-</ _ \|/ __/
+ \_\__/_/ /_/\__/_//_/_/ \__/_//_/_/___/ |__,__/\_,_/___/_//_/ \__/
+
+ __ _ __
+ ____/ / (_)___/ /_____ ___
+/ __/ _ \/ / __/ '_/ -_) _ \_
+\__/_//_/_/\__/_/\_\\__/_//_(_)
+
+ _
+ ________ (_)__
+ /___/___/ / / _ \
+ /_/_//_/
+
+ ____ __ __ _ __ __
+ __/ / /____/ /__ / / (_)__ ____ _______/ /__ _ _____ / /
+ /_ . __/ _ / -_) _ \/ / _ `/ _ \/___/ _ / -_) |/ / -_) /
+/_ __/\_,_/\__/_.__/_/\_,_/_//_/ \_,_/\__/|___/\__/_/
+ /_/_/
+ __ _ _ _ __
+ / /(_) ___ ___| |__ | | __\ \
+/ / | |/ _ \/ __| '_ \| |/ / \ \
+\ \ | | (_) \__ \ | | | < / /
+ \_\/ |\___/|___/_| |_|_|\_\/_/
+ |__/
+ _ _ _ ____ _ __ _ __ _
+ (_) ___ ___| |__ | | __/ __ \(_)_ __ / _| |_ ___ ___ / /__| |_ ___
+ | |/ _ \/ __| '_ \| |/ / / _` | | '_ \| |_| | | | \ \/ (_) / / _ \ __/ __|
+ | | (_) \__ \ | | | < | (_| | | | | | _| | |_| |> < _ / / __/ || (__
+ _/ |\___/|___/_| |_|_|\_\ \__,_|_|_| |_|_| |_|\__,_/_/\_(_)_/ \___|\__\___|
+|__/ \____/
+ ___ _ _ ___ _
+ / / | ___ __ _ _ __ ___ | |_ __ _| |_ ___ __| \ \ ___| |__
+ / /| |/ _ \ / _` | '__/ _ \| __/ _` | __/ _ \ / _` |\ \ / __| '_ \
+ / / | | (_) | (_| | | | (_) | || (_| | || __/| (_| |/ / \__ \ | | |
+/_/ |_|\___/ \__, |_| \___/ \__\__,_|\__\___(_)__,_/_/ |___/_| |_|
+ |___/
+
+ _ __ __/\__
+ _____| '_ \ \ /
+|_____| | | | /_ _\
+ |_| |_| \/
+
+ __ _ _ _ __ _
+ / /(_) ___ ___| |__ | | __\ \ __ _ _ __ __ _ ___| |__ ___ _
+/ / | |/ _ \/ __| '_ \| |/ / \ \ / _` | '_ \ / _` |/ __| '_ \ / _ (_)
+\ \ | | (_) \__ \ | | | < / / | (_| | |_) | (_| | (__| | | | __/_
+ \_\/ |\___/|___/_| |_|_|\_\/_/ \__,_| .__/ \__,_|\___|_| |_|\___(_)
+ |__/ |_|
+ _ _ _ _ _ _
+| (_)_ __ ___ / | || | _ ___ _ _ _ __ | |_ __ ___ __
+| | | '_ \ / _ \ | | || |(_) / __| | | | '_ \| __/ _` \ \/ /
+| | | | | | __/ | |__ _| \__ \ |_| | | | | || (_| |> <
+|_|_|_| |_|\___| |_| |_|(_) |___/\__, |_| |_|\__\__,_/_/\_\
+ |___/
+
+ ___ _ __ _ __ ___ _ __ _ __ ___ __ _ _ __
+ / _ \ '__| '__/ _ \| '__| | '_ \ / _ \/ _` | '__|
+| __/ | | | | (_) | | | | | | __/ (_| | |
+ \___|_| |_| \___/|_| |_| |_|\___|\__,_|_|
+
+ _ _ _ _
+ _ _ _ __ _____ ___ __ ___ ___| |_ ___ __| | | |_ ___ | | _____ _ __
+| | | | '_ \ / _ \ \/ / '_ \ / _ \/ __| __/ _ \/ _` | | __/ _ \| |/ / _ \ '_ \
+| |_| | | | | __/> <| |_) | __/ (__| || __/ (_| | | || (_) | < __/ | | |
+ \__,_|_| |_|\___/_/\_\ .__/ \___|\___|\__\___|\__,_| \__\___/|_|\_\___|_| |_|
+ |_|
+ ___ _
+( ) \ ( )
+ \|| ||/
+ > >
+ | |
+ /_/
+ __ _ _ _ __ _
+ / /(_) ___ ___| |__ | | __\ \ __ _ _ __ __ _ ___| |__ ___ _
+/ / | |/ _ \/ __| '_ \| |/ / \ \ / _` | '_ \ / _` |/ __| '_ \ / _ (_)
+\ \ | | (_) \__ \ | | | < / / | (_| | |_) | (_| | (__| | | | __/_
+ \_\/ |\___/|___/_| |_|_|\_\/_/ \__,_| .__/ \__,_|\___|_| |_|\___(_)
+ |__/ |_|
+ _ _ _ _ _ ___ _
+| (_)_ __ ___ / | || | _ ( ) \ ( )
+| | | '_ \ / _ \ | | || |(_) \|| ||/
+| | | | | | __/ | |__ _| > >
+|_|_|_| |_|\___| |_| |_|(_) | |
+ /_/
+ __ _ _ _ __ _ _ _ _
+ / /(_) ___ ___| |__ | | __\ \ | |_| |__ ___ _ __ | | ___ | |_
+/ / | |/ _ \/ __| '_ \| |/ / \ \ | __| '_ \ / _ \ | '_ \| |/ _ \| __|
+\ \ | | (_) \__ \ | | | < / / | |_| | | | __/ | |_) | | (_) | |_
+ \_\/ |\___/|___/_| |_|_|\_\/_/ \__|_| |_|\___| | .__/|_|\___/ \__|
+ |__/ |_|
+ _ _ _ _
+| |_| |__ (_) ___| | _____ _ __ ___
+| __| '_ \| |/ __| |/ / _ \ '_ \/ __|
+| |_| | | | | (__| < __/ | | \__ \
+ \__|_| |_|_|\___|_|\_\___|_| |_|___/
+
+ __ __ __ _ _ ___ _ _
+ / /__ _ ___ _ _ / _|/ _(_) ___| | __| \ \ | |_| |__ ___ ___ ___
+/ // _` / __| | | | |_| |_| |/ _ \ |/ _` |\ \ | __| '_ \ / _ \/ __|/ _ \
+\ \ (_| \__ \ |_| | _| _| | __/ | (_| |/ / | |_| | | | (_) \__ \ __/
+ \_\__,_|___/\__,_|_| |_| |_|\___|_|\__,_/_/ \__|_| |_|\___/|___/\___|
+
+ _ _ _ _ _
+ __ _ _ __ ___ _ __ ( ) |_ ___| |__ ___| | |
+ / _` | '__/ _ \ '_ \|/| __| / __| '_ \ / _ \ | |
+| (_| | | | __/ | | | | |_ \__ \ | | | __/ | |
+ \__,_|_| \___|_| |_| \__| |___/_| |_|\___|_|_|
+
+ _ _
+ ___ ___ _ __(_)_ __ | |_ ___
+/ __|/ __| '__| | '_ \| __/ __|
+\__ \ (__| | | | |_) | |_\__ \
+|___/\___|_| |_| .__/ \__|___/
+ |_|
+ __ _ _ __ _ _ _ _ _
+ / /___ _ __(_) ___| |__ \ \ | |_| |__ (_)___ __ ____ _ ___ _ __ ( ) |_
+/ // _ \ '__| |/ __| '_ \ \ \ | __| '_ \| / __| \ \ /\ / / _` / __| '_ \|/| __|
+\ \ __/ | | | (__| | | |/ / | |_| | | | \__ \ \ V V / (_| \__ \ | | | | |_
+ \_\___|_| |_|\___|_| |_/_/ \__|_| |_|_|___/ \_/\_/ \__,_|___/_| |_| \__|
+
+ _ _ _
+ ___| |__ (_) ___| | _____ _ __
+ / __| '_ \| |/ __| |/ / _ \ '_ \
+| (__| | | | | (__| < __/ | | |_
+ \___|_| |_|_|\___|_|\_\___|_| |_(_)
+
+ _
+ (_)_ __
+ _____ _____ | | '_ \
+ |_____|_____| | | | | |
+ |_|_| |_|
+
+ _ _ _ _ _ _ _
+ _| || |_ __| | ___| |__ (_) __ _ _ __ __| | _____ _____| |
+|_ .. _|/ _` |/ _ \ '_ \| |/ _` | '_ \ _____ / _` |/ _ \ \ / / _ \ |
+|_ _| (_| | __/ |_) | | (_| | | | |_____| (_| | __/\ V / __/ |
+ |_||_| \__,_|\___|_.__/|_|\__,_|_| |_| \__,_|\___| \_/ \___|_|
+
+<joshk> joshk@influx:/etc/logrotate.d> sh -n *
+<joshk> apache: line 14: syntax error near unexpected token `}'
+<joshk> apache: line 14: `}'
+<joshk> the plot thickens
+<asuffield> those aren't shell scripts
+<erich> this wasn't chicken.
+ -- in #debian-devel
diff --git a/externals/figlet/tests/res003.txt b/externals/figlet/tests/res003.txt
new file mode 100644
index 000000000..31770d6c9
--- /dev/null
+++ b/externals/figlet/tests/res003.txt
@@ -0,0 +1,432 @@
+ __ ___ _ _
+ \ \ / / |__ __ _| |_ (_)___
+ \ \ /\ / /| '_ \ / _` | __| | / __|
+ \ V V / | | | | (_| | |_ | \__ \
+ \_/\_/ |_| |_|\__,_|\__| |_|___/
+
+ _ _ _ _ _
+(_)_ ____ _____ | |_ _____ __| | (_)_ __ ___ _ _ ___| |__
+| | '_ \ \ / / _ \| \ \ / / _ \/ _` | | | '_ \ / __| | | |/ __| '_ \
+| | | | \ V / (_) | |\ V / __/ (_| | | | | | | \__ \ |_| | (__| | | |
+|_|_| |_|\_/ \___/|_| \_/ \___|\__,_| |_|_| |_| |___/\__,_|\___|_| |_|
+
+ __ _ __
+| _|___| | ___ ___ __|_ |
+| |/ __| |/ _ \/ __|/ _ \ |
+| | (__| | (_) \__ \ __/ |
+| |\___|_|\___/|___/\___| |
+|__| |__|
+ _ _ _ _ _ _
+ _ __ ___| | __ _| |_(_) ___ _ __ ___| |__ (_)_ __ ___ (_)___ __ _
+| '__/ _ \ |/ _` | __| |/ _ \| '_ \/ __| '_ \| | '_ \/ __| | / __| / _` |
+| | | __/ | (_| | |_| | (_) | | | \__ \ | | | | |_) \__ \ | \__ \ | (_| |
+|_| \___|_|\__,_|\__|_|\___/|_| |_|___/_| |_|_| .__/|___/ |_|___/ \__,_|
+ |_|
+ __ __
+ / _| ___ _ __ _ __ ___ ___ / _|
+| |_ / _ \| '__| '_ ` _ \ / _ \| |_
+| _| (_) | | | | | | | | | (_) | _|
+|_| \___/|_| |_| |_| |_| \___/|_|
+
+ _ _ _
+ ___ _ __ ___ ___ | |_(_) ___ _ __ __ _| |
+ / _ \ '_ ` _ \ / _ \| __| |/ _ \| '_ \ / _` | |
+| __/ | | | | | (_) | |_| | (_) | | | | (_| | |
+ \___|_| |_| |_|\___/ \__|_|\___/|_| |_|\__,_|_|
+
+ _ _ _ __
+ ___| |__ ___ _ __ ___ (_)___| |_ _ __ _ _ ___ ___ / _| __ _ _ __
+ / __| '_ \ / _ \ '_ ` _ \| / __| __| '__| | | | / __|/ _ \ | |_ / _` | '__|
+| (__| | | | __/ | | | | | \__ \ |_| | | |_| |_ \__ \ (_) | | _| (_| | |
+ \___|_| |_|\___|_| |_| |_|_|___/\__|_| \__, ( ) |___/\___/ |_| \__,_|_|
+ |___/|/
+ _ _ _ _
+ _ _ _ __ _____ ___ __ | | __ _(_)_ __ ___ __| | | |__ _ _
+| | | | '_ \ / _ \ \/ / '_ \| |/ _` | | '_ \ / _ \/ _` | | '_ \| | | |
+| |_| | | | | __/> <| |_) | | (_| | | | | | __/ (_| | | |_) | |_| |
+ \__,_|_| |_|\___/_/\_\ .__/|_|\__,_|_|_| |_|\___|\__,_| |_.__/ \__, |
+ |_| |___/
+ _ _ __
+ __ _ _ __ _ _ ___ ___| |__ ___ ___ | | ___ / _|
+ / _` | '_ \| | | | / __|/ __| '_ \ / _ \ / _ \| | / _ \| |_
+| (_| | | | | |_| | \__ \ (__| | | | (_) | (_) | | | (_) | _|
+ \__,_|_| |_|\__, | |___/\___|_| |_|\___/ \___/|_| \___/|_|
+ |___/
+ _ _ _ ___
+ _ __ ___ _ _ ___| |__ (_) __ _| |_ _ __ _ _ |_ _| __ _ _ __ ___
+| '_ \/ __| | | |/ __| '_ \| |/ _` | __| '__| | | | | | / _` | '_ ` _ \
+| |_) \__ \ |_| | (__| | | | | (_| | |_| | | |_| | | | | (_| | | | | | |
+| .__/|___/\__, |\___|_| |_|_|\__,_|\__|_| \__, | |___| \__,_|_| |_| |_|
+|_| |___/ |___/
+ __ _ _ _
+ __ ___ ____ _ _ __ ___ ___ / _| | |_| |__ __ _| |_
+ / _` \ \ /\ / / _` | '__/ _ \ / _ \| |_ | __| '_ \ / _` | __|
+| (_| |\ V V / (_| | | | __/ | (_) | _| | |_| | | | (_| | |_
+ \__,_| \_/\_/ \__,_|_| \___| \___/|_|( ) \__|_| |_|\__,_|\__|
+ |/
+ _ _ _ _
+ ___ ___ _ __ __| (_) |_(_) ___ _ __ ___
+ / __/ _ \| '_ \ / _` | | __| |/ _ \| '_ \/ __|
+| (_| (_) | | | | (_| | | |_| | (_) | | | \__ \
+ \___\___/|_| |_|\__,_|_|\__|_|\___/|_| |_|___/
+
+ _ _ _
+ _ __ ___ | |_| |__ (_)_ __ __ _ ___ ___
+| '_ \ / _ \| __| '_ \| | '_ \ / _` | / __|/ _ \
+| | | | (_) | |_| | | | | | | | (_| | \__ \ (_) |
+|_| |_|\___/ \__|_| |_|_|_| |_|\__, | |___/\___/
+ |___/
+ _ _
+ ___(_)_ __ ___ _ __ | | ___ __ _ ___ __ _
+/ __| | '_ ` _ \| '_ \| |/ _ \ / _` / __| / _` |
+\__ \ | | | | | | |_) | | __/ | (_| \__ \ | (_| |
+|___/_|_| |_| |_| .__/|_|\___| \__,_|___/ \__,_|
+ |_|
+ _ _ _ _
+ ___| |__ ___ (_) ___ ___ | |__ ___| |___ _____ ___ _ __
+ / __| '_ \ / _ \| |/ __/ _ \ | '_ \ / _ \ __\ \ /\ / / _ \/ _ \ '_ \
+| (__| | | | (_) | | (_| __/ | |_) | __/ |_ \ V V / __/ __/ | | |
+ \___|_| |_|\___/|_|\___\___| |_.__/ \___|\__| \_/\_/ \___|\___|_| |_|
+
+ _ _ _ __
+| |_| |__ ___ _ __ ___ | | ___ ___ ___ / _|
+| __| '_ \ / _ \ | '_ \ / _ \| |/ _ \/ __| / _ \| |_
+| |_| | | | __/ | |_) | (_) | | __/\__ \ | (_) | _|
+ \__|_| |_|\___| | .__/ \___/|_|\___||___/ \___/|_|
+ |_|
+ _ _ _ _ _
+ __ _| |_| |_ _ __ __ _ ___| |_(_) ___ _ __ __ _ _ __ __| |
+ / _` | __| __| '__/ _` |/ __| __| |/ _ \| '_ \ / _` | '_ \ / _` |
+| (_| | |_| |_| | | (_| | (__| |_| | (_) | | | | | (_| | | | | (_| |
+ \__,_|\__|\__|_| \__,_|\___|\__|_|\___/|_| |_| \__,_|_| |_|\__,_|
+
+ _ _ __ __
+ _ __ ___ _ __ _ _| |___(_) ___ _ __ \ \ / /__ _ _
+| '__/ _ \ '_ \| | | | / __| |/ _ \| '_ \ \ V / _ \| | | |
+| | | __/ |_) | |_| | \__ \ | (_) | | | |_ | | (_) | |_| |
+|_| \___| .__/ \__,_|_|___/_|\___/|_| |_(_) |_|\___/ \__,_|
+ |_|
+ _
+ ___ __ _ _ __ _ __ ___ ___ ___| |_ ___ ___ _ __ ___ ___
+ / __/ _` | '_ \ | '_ ` _ \ / _ \/ _ \ __| / __|/ _ \| '_ ` _ \ / _ \
+| (_| (_| | | | | | | | | | | __/ __/ |_ \__ \ (_) | | | | | | __/
+ \___\__,_|_| |_| |_| |_| |_|\___|\___|\__| |___/\___/|_| |_| |_|\___|
+
+ _ _ _ _ _
+ _ __ ___ ___ _ __ | | ___ | |_| |__ (_)_ __| |_ _ _
+| '_ \ / _ \/ _ \| '_ \| |/ _ \ | __| '_ \| | '__| __| | | |
+| |_) | __/ (_) | |_) | | __/ | |_| | | | | | | |_| |_| |_
+| .__/ \___|\___/| .__/|_|\___| \__|_| |_|_|_| \__|\__, ( )
+|_| |_| |___/|/
+ __ _ _ _
+ / _| ___ _ __| |_ _ _ | |_(_)_ __ ___ ___ ___
+| |_ / _ \| '__| __| | | | | __| | '_ ` _ \ / _ \/ __|
+| _| (_) | | | |_| |_| | | |_| | | | | | | __/\__ \
+|_| \___/|_| \__|\__, | \__|_|_| |_| |_|\___||___/
+ |___/
+ _ _ _
+ __| | _____ ___ __ | |_| |__ ___ _ _ ___ __ _ _ __ ___
+ / _` |/ _ \ \ /\ / / '_ \ | __| '_ \ / _ \ | | | |/ _ \/ _` | '__/ __|
+| (_| | (_) \ V V /| | | | | |_| | | | __/ | |_| | __/ (_| | | \__ \_
+ \__,_|\___/ \_/\_/ |_| |_| \__|_| |_|\___| \__, |\___|\__,_|_| |___( )
+ |___/ |/
+ _
+ __ _ _ __ __| |
+ / _` | '_ \ / _` |
+| (_| | | | | (_| |
+ \__,_|_| |_|\__,_|
+
+ _ _ _
+| |_| |__ ___ _ _ _ __ ___ _ __ ___ __ _(_)_ __
+| __| '_ \ / _ \ | | | | '__/ _ \ '_ ` _ \ / _` | | '_ \
+| |_| | | | __/ |_| | | | | __/ | | | | | (_| | | | | |
+ \__|_| |_|\___|\__, | |_| \___|_| |_| |_|\__,_|_|_| |_|
+ |___/
+ _ _ _
+ __ _ _ __ ___ (_) __ _| |__ | | ___
+ / _` | '_ ` _ \| |/ _` | '_ \| |/ _ \
+| (_| | | | | | | | (_| | |_) | | __/
+ \__,_|_| |_| |_|_|\__,_|_.__/|_|\___|
+
+ _ _ _ _ _ _
+| |__ _ _ ___| |_ __ _ _ __ __| | ___ _ __ ___ | (_) | _____
+| '_ \| | | / __| __/ _` | '_ \ / _` |/ _ \ '__/ __| | | | |/ / _ \
+| |_) | |_| \__ \ || (_| | | | | (_| | __/ | \__ \_ | | | < __/
+|_.__/ \__, |___/\__\__,_|_| |_|\__,_|\___|_| |___( ) |_|_|_|\_\___|
+ |___/ |/
+ _ _ _ _ _ _ _
+| |_| |__ ___ ___| |__ ___ _ __ ___ | (_) __ _| |__ | |_ ___
+| __| '_ \ / _ \ / __| '_ \ / _ \| '__/ _ \ | | |/ _` | '_ \| __/ __|
+| |_| | | | __/ \__ \ | | | (_) | | | __/ | | | (_| | | | | |_\__ \
+ \__|_| |_|\___| |___/_| |_|\___/|_| \___| |_|_|\__, |_| |_|\__|___/
+ |___/
+ __ _ _ _ _
+ ___ / _| | |_ _____ ___ __ ___ | |_| |__ __ _| |_ __ _
+ / _ \| |_ | __/ _ \ \ /\ / / '_ \/ __| | __| '_ \ / _` | __| / _` |
+| (_) | _| | || (_) \ V V /| | | \__ \ | |_| | | | (_| | |_ | (_| |
+ \___/|_| \__\___/ \_/\_/ |_| |_|___/ \__|_| |_|\__,_|\__| \__,_|
+
+ _ _
+ ___ __ _(_) | ___ _ __
+/ __|/ _` | | |/ _ \| '__|
+\__ \ (_| | | | (_) | |
+|___/\__,_|_|_|\___/|_|
+
+ _ _ _ _
+ _ __ __ _ ___ ___ ___ ___ __ _| |_ ___| |_ __ _| |_ ___ __| |
+| '_ \ / _` / __/ __|/ _ \/ __| / _` | __| / __| __/ _` | __/ _ \/ _` |
+| |_) | (_| \__ \__ \ __/\__ \ | (_| | |_ \__ \ || (_| | || __/ (_| |
+| .__/ \__,_|___/___/\___||___/ \__,_|\__| |___/\__\__,_|\__\___|\__,_|
+|_|
+ _ _ _ _
+| |_(_)_ __ ___ ___ ___ | |__ _ _| |_ _ __ _____ _____ _ __
+| __| | '_ ` _ \ / _ \/ __| | '_ \| | | | __| | '_ \ / _ \ \ / / _ \ '__|
+| |_| | | | | | | __/\__ \ | |_) | |_| | |_ | | | | __/\ V / __/ |
+ \__|_|_| |_| |_|\___||___/ |_.__/ \__,_|\__| |_| |_|\___| \_/ \___|_|
+
+ _ _ _ _ _
+ ___ __ _| | |___ __ _| |_ ___ _ __ | |_| |__ ___
+ / __/ _` | | / __| / _` | __| / _ \| '_ \ | __| '_ \ / _ \
+| (_| (_| | | \__ \ | (_| | |_ | (_) | | | | | |_| | | | __/
+ \___\__,_|_|_|___/ \__,_|\__| \___/|_| |_| \__|_| |_|\___|
+
+ _
+ _ __ ___ __ _ _ _| | __ _ _ __ _ __ _ _ _ __
+| '__/ _ \/ _` | | | | |/ _` | '__| | '__| | | | '_ \
+| | | __/ (_| | |_| | | (_| | | | | | |_| | | | |_
+|_| \___|\__, |\__,_|_|\__,_|_| |_| \__,_|_| |_(_)
+ |___/
+ ____ _
+ / ___|___ _ ____ _____ _ __ ___ ___| |_ _
+| | / _ \| '_ \ \ / / _ \ '__/ __|/ _ \ | | | |
+| |__| (_) | | | \ V / __/ | \__ \ __/ | |_| |_
+ \____\___/|_| |_|\_/ \___|_| |___/\___|_|\__, ( )
+ |___/|/
+ _ _ _ _ _ _
+ __ _| | | ___ ___ _ __ ___(_) __| | ___ _ __ __ _| |_(_) ___ _ __ ___
+ / _` | | | / __/ _ \| '_ \/ __| |/ _` |/ _ \ '__/ _` | __| |/ _ \| '_ \/ __|
+| (_| | | | | (_| (_) | | | \__ \ | (_| | __/ | | (_| | |_| | (_) | | | \__ \
+ \__,_|_|_| \___\___/|_| |_|___/_|\__,_|\___|_| \__,_|\__|_|\___/|_| |_|___/
+
+ __ _ _
+ ___ / _| ___ _____ __ __ _ ___(_) __| | ___ _ _ ___ _ _
+ / _ \| |_ / __|/ _ \ \/ / / _` / __| |/ _` |/ _ \ | | | |/ _ \| | | |
+| (_) | _| \__ \ __/> < | (_| \__ \ | (_| | __/_ | |_| | (_) | |_| |
+ \___/|_| |___/\___/_/\_\ \__,_|___/_|\__,_|\___( ) \__, |\___/ \__,_|
+ |/ |___/
+ _
+ ___ __ _ _ __ _ __ ___ ___ ___| |_ ___ ___ _ __ ___ ___
+ / __/ _` | '_ \ | '_ ` _ \ / _ \/ _ \ __| / __|/ _ \| '_ ` _ \ / _ \
+| (_| (_| | | | | | | | | | | __/ __/ |_ \__ \ (_) | | | | | | __/
+ \___\__,_|_| |_| |_| |_| |_|\___|\___|\__| |___/\___/|_| |_| |_|\___|
+
+ _ _ _
+ ___ | |_| |__ ___ _ __ _ __ ___ ___ _ __ | | ___
+ / _ \| __| '_ \ / _ \ '__| | '_ \ / _ \/ _ \| '_ \| |/ _ \
+| (_) | |_| | | | __/ | | |_) | __/ (_) | |_) | | __/
+ \___/ \__|_| |_|\___|_| | .__/ \___|\___/| .__/|_|\___|
+ |_| |_|
+ _ _
+ ___ _ __ ___ ___ ___ _ __ | |___ _(_) ___ ___
+ / _ \| '_ \ / __/ _ \ / _ \| '__| | __\ \ /\ / / |/ __/ _ \
+| (_) | | | | (_| __/ | (_) | | | |_ \ V V /| | (_| __/
+ \___/|_| |_|\___\___| \___/|_| \__| \_/\_/ |_|\___\___|
+
+ _ _ _ _
+ __ _ _ __ __| | | |_| |__ ___ _ _ _ __ ___ _ __ ___ __ _(_)_ __
+ / _` | '_ \ / _` | | __| '_ \ / _ \ | | | | '__/ _ \ '_ ` _ \ / _` | | '_ \
+| (_| | | | | (_| | | |_| | | | __/ |_| | | | | __/ | | | | | (_| | | | | |
+ \__,_|_| |_|\__,_| \__|_| |_|\___|\__, | |_| \___|_| |_| |_|\__,_|_|_| |_|
+ |___/
+ _
+ _ __ ___ _ __ _ __ ___ __ _ _ __ ___ _ __ | |_
+| '_ \ / _ \ '__| '_ ` _ \ / _` | '_ \ / _ \ '_ \| __|
+| |_) | __/ | | | | | | | (_| | | | | __/ | | | |_
+| .__/ \___|_| |_| |_| |_|\__,_|_| |_|\___|_| |_|\__|
+|_|
+ _ __ _
+(_)_ __ / _| |_ _ ___ _ __ ___ ___ ___ ___ _ __
+| | '_ \| |_| | | | |/ _ \ '_ \ / __/ _ \/ __| / _ \| '_ \
+| | | | | _| | |_| | __/ | | | (_| __/\__ \ | (_) | | | |
+|_|_| |_|_| |_|\__,_|\___|_| |_|\___\___||___/ \___/|_| |_|
+
+ _ _ __
+ _ _ ___ _ _ _ __ | (_)/ _| ___
+| | | |/ _ \| | | | '__| | | | |_ / _ \
+| |_| | (_) | |_| | | | | | _| __/_
+ \__, |\___/ \__,_|_| |_|_|_| \___(_)
+ |___/
+ _____ _
+ | ____|_ _____ _ __ _ _ ___ _ __ ___ (_)___
+ | _| \ \ / / _ \ '__| | | |/ _ \| '_ \ / _ \ | / __|
+ | |___ \ V / __/ | | |_| | (_) | | | | __/ | \__ \
+ |_____| \_/ \___|_| \__, |\___/|_| |_|\___| |_|___/
+ |___/
+ __ _ _ _
+ __ ___ ____ _ _ __ ___ ___ / _| | |_| |__ (_)___
+ / _` \ \ /\ / / _` | '__/ _ \ / _ \| |_ | __| '_ \| / __|
+| (_| |\ V V / (_| | | | __/ | (_) | _| | |_| | | | \__ \
+ \__,_| \_/\_/ \__,_|_| \___| \___/|_| \__|_| |_|_|___/
+
+ _ _
+ __| (_)___ ___ _ __ ___ _ __ __ _ _ __ ___ _ _
+ / _` | / __|/ __| '__/ _ \ '_ \ / _` | '_ \ / __| | | |
+| (_| | \__ \ (__| | | __/ |_) | (_| | | | | (__| |_| |
+ \__,_|_|___/\___|_| \___| .__/ \__,_|_| |_|\___|\__, |
+ |_| |___/
+ _ _ _ _
+| |__ ___| |___ _____ ___ _ __ | |_| |__ ___
+| '_ \ / _ \ __\ \ /\ / / _ \/ _ \ '_ \ | __| '_ \ / _ \
+| |_) | __/ |_ \ V V / __/ __/ | | | | |_| | | | __/
+|_.__/ \___|\__| \_/\_/ \___|\___|_| |_| \__|_| |_|\___|
+
+ _ _
+ __ _ ___ __ _ _ _ __ _(_)_ __ | |_ __ _ _ __ ___ ___
+ / _` |/ __/ _` | | | |/ _` | | '_ \| __/ _` | '_ \ / __/ _ \
+| (_| | (_| (_| | |_| | (_| | | | | | || (_| | | | | (_| __/
+ \__,_|\___\__, |\__,_|\__,_|_|_| |_|\__\__,_|_| |_|\___\___|
+ |_|
+
+ ___ ___ ___ _ __
+/ __|/ _ \/ _ \ '_ \
+\__ \ __/ __/ | | |
+|___/\___|\___|_| |_|
+
+ __ _ _ _
+ __ _ ___ / _| __ _ _ __ ___ (_) (_) __ _ _ __
+ / _` / __| | |_ / _` | '_ ` _ \| | | |/ _` | '__|
+| (_| \__ \ | _| (_| | | | | | | | | | (_| | |
+ \__,_|___/ |_| \__,_|_| |_| |_|_|_|_|\__,_|_|
+
+ _ _
+__ ____ _| | |_ __ __ _ _ __ ___ _ __ ___ _ __
+\ \ /\ / / _` | | | '_ \ / _` | '_ \ / _ \ '__| / _ \| '__|
+ \ V V / (_| | | | |_) | (_| | |_) | __/ | | (_) | |
+ \_/\_/ \__,_|_|_| .__/ \__,_| .__/ \___|_| \___/|_|
+ |_| |_|
+ _ _ _ __ _ _
+(_)_ __ ___| |_ __ _ _ __ | |_ / _|_ __(_) ___ _ __ __| |
+| | '_ \/ __| __/ _` | '_ \| __| | |_| '__| |/ _ \ '_ \ / _` |
+| | | | \__ \ || (_| | | | | |_ | _| | | | __/ | | | (_| |_
+|_|_| |_|___/\__\__,_|_| |_|\__| |_| |_| |_|\___|_| |_|\__,_(_)
+
+ _____ _ _ _ _
+|_ _| |__ ___ ___| |__ ___ _ __ ___ (_) ___ __ _| |
+ | | | '_ \ / _ \ / __| '_ \ / _ \ '_ ` _ \| |/ __/ _` | |
+ | | | | | | __/ | (__| | | | __/ | | | | | | (_| (_| | |
+ |_| |_| |_|\___| \___|_| |_|\___|_| |_| |_|_|\___\__,_|_|
+
+ _ _ _ _ _ _ _ _
+ __ _ ___| |_(_) ___ _ __ (_) |_ ___ _ __ | |_ __ _(_) |___ (_)___
+ / _` |/ __| __| |/ _ \| '_ \ | | __| / _ \ '_ \| __/ _` | | / __| | / __|
+| (_| | (__| |_| | (_) | | | | | | |_ | __/ | | | || (_| | | \__ \ | \__ \
+ \__,_|\___|\__|_|\___/|_| |_| |_|\__| \___|_| |_|\__\__,_|_|_|___/ |_|___/
+
+ _ _ _
+| | ___ ___ ___ __ _____ _ __| |_| |__
+| |/ _ \/ __/ __| \ \ /\ / / _ \| '__| __| '_ \
+| | __/\__ \__ \ \ V V / (_) | | | |_| | | |
+|_|\___||___/___/ \_/\_/ \___/|_| \__|_| |_|
+
+ _ _ _ _
+ __ _ _ __ __ _| |_ _ ___(_)_ __ __ _ | |_| |__ __ _ _ __
+ / _` | '_ \ / _` | | | | |_ / | '_ \ / _` | | __| '_ \ / _` | '_ \
+| (_| | | | | (_| | | |_| |/ /| | | | | (_| | | |_| | | | (_| | | | |
+ \__,_|_| |_|\__,_|_|\__, /___|_|_| |_|\__, | \__|_| |_|\__,_|_| |_|
+ |___/ |___/
+ _ _ _ _
+ ___ _ __ (_) ___ _ _(_)_ __ __ _ / \ | |_ __ _ _ __ _ _
+ / _ \ '_ \ | |/ _ \| | | | | '_ \ / _` | / _ \| __| / _` | '_ \| | | |
+| __/ | | || | (_) | |_| | | | | | (_| |_ / ___ \ |_ | (_| | | | | |_| |
+ \___|_| |_|/ |\___/ \__, |_|_| |_|\__, (_) /_/ \_\__| \__,_|_| |_|\__, |
+ |__/ |___/ |___/ |___/
+ _ _ _ _
+ _ __ __ _| |_ ___ | |_| |__ ___ ___ ___ ___(_)_ __
+| '__/ _` | __/ _ \ | __| '_ \ / _ \/ __|/ _ \ / __| \ \/ /
+| | | (_| | || __/_ | |_| | | | __/\__ \ __/ \__ \ |> <
+|_| \__,_|\__\___( ) \__|_| |_|\___||___/\___| |___/_/_/\_\
+ |/
+ _ _ _
+ _ __ (_) ___ ___ ___ ___ __ _ _ __ ___ __ _| |__ ___ _ _| |_
+| '_ \| |/ _ \/ __/ _ \/ __| / _` | '__/ _ \ / _` | '_ \ / _ \| | | | __|
+| |_) | | __/ (_| __/\__ \ | (_| | | | __/ | (_| | |_) | (_) | |_| | |_
+| .__/|_|\___|\___\___||___/ \__,_|_| \___| \__,_|_.__/ \___/ \__,_|\__|
+|_|
+ _ _ _ _
+ _ __ ___ ___ _ __ __ _(_) |_| |__ __ _| |__ ___ _ __ ___
+| '_ ` _ \ / _ \ '_ \ \ \ /\ / / | __| '_ \ \ \ /\ / / '_ \ / _ \| '_ ` _ \
+| | | | | | __/ | | | \ V V /| | |_| | | | \ V V /| | | | (_) | | | | | |
+|_| |_| |_|\___|_| |_| \_/\_/ |_|\__|_| |_| \_/\_/ |_| |_|\___/|_| |_| |_|
+
+ ___ __ _ _
+|_ _| / _| ___| | |_ __ _ _ __
+ | | | |_ / _ \ | __| / _` | '_ \
+ | | | _| __/ | |_ | (_| | | | |
+|___| |_| \___|_|\__| \__,_|_| |_|
+
+ _ _ _ _
+(_)_ __ ___ _ __ ___ ___ __| (_) __ _| |_ ___
+| | '_ ` _ \| '_ ` _ \ / _ \/ _` | |/ _` | __/ _ \
+| | | | | | | | | | | | __/ (_| | | (_| | || __/
+|_|_| |_| |_|_| |_| |_|\___|\__,_|_|\__,_|\__\___|
+
+ _ _
+ ___ _ _ _ __ ___ _ __ __ _| |_ | |_ ___ _ _ ___ ___
+/ __| | | | '_ ` _ \| '_ \ / _` | __| _____ | __/ _ \ | | | / __|/ _ \
+\__ \ |_| | | | | | | |_) | (_| | |_ |_____| | || (_) | | |_| \__ \ __/
+|___/\__, |_| |_| |_| .__/ \__,_|\__| \__\___/ \__,_|___/\___|
+ |___/ |_|
+ _ _ __ __ __
+ __ _ ___ ___ (_)_ __ (_)_ __ __ _ ___ / _| | \/ | __ ___ __
+ / _` | / __/ _ \| | '_ \| | '_ \ / _` | / _ \| |_ | |\/| |/ _` \ \/ /
+| (_| | | (_| (_) | | | | | | | | | (_| | | (_) | _| | | | | (_| |> <
+ \__,_| \___\___/|_|_| |_|_|_| |_|\__, | \___/|_| |_| |_|\__,_/_/\_\
+ |___/
+ ____ _ _ _
+| __ ) ___ ___ _ __| |__ ___ | |__ _ __ ___ ( )___
+| _ \ / _ \/ _ \ '__| '_ \ / _ \| '_ \| '_ ` _ \|// __|
+| |_) | __/ __/ | | |_) | (_) | | | | | | | | | \__ \
+|____/ \___|\___|_| |_.__/ \___/|_| |_|_| |_| |_| |___/
+
+
+ _ __ ___ ___ _ __ ___
+| '_ ` _ \ / _ \| '__/ _ \
+| | | | | | (_) | | | __/
+|_| |_| |_|\___/|_| \___|
+
+ _ _ __ _ _
+ ___ __ _| |_(_)___ / _| __ _ ___| |_ ___ _ __ _ _ | |_ ___
+/ __|/ _` | __| / __| |_ / _` |/ __| __/ _ \| '__| | | | | __/ _ \
+\__ \ (_| | |_| \__ \ _| (_| | (__| || (_) | | | |_| | | || (_) |
+|___/\__,_|\__|_|___/_| \__,_|\___|\__\___/|_| \__, | \__\___/
+ |___/
+ _ _ _ _
+ _ __ ___ ___ | |_| |__ __ _ _ __ | |_| |__ ___
+| '_ ` _ \ / _ \ | __| '_ \ / _` | '_ \ | __| '_ \ / _ \
+| | | | | | __/ | |_| | | | (_| | | | | | |_| | | | __/
+|_| |_| |_|\___| \__|_| |_|\__,_|_| |_| \__|_| |_|\___|
+
+
+ ___ _ __ __ _ __ _ _ _ ___ __ _____ __ _ _ _ ___
+ / _ \| '_ \ / _` |/ _` | | | |/ _ \ \ \ / / _ \ / _` | | | |/ _ \
+| (_) | |_) | (_| | (_| | |_| | __/ \ V / (_) | (_| | |_| | __/
+ \___/| .__/ \__,_|\__, |\__,_|\___| \_/ \___/ \__, |\__,_|\___|
+ |_| |_| |___/
+ _ _ _ _ _ _ _
+__ _____ _ __ __| | ( | )___ _ __ ___ _ __ __ _| |_| |__ _ _( | )
+\ \ /\ / / _ \| '__/ _` | V V/ _ \ '_ ` _ \| '_ \ / _` | __| '_ \| | | |V V
+ \ V V / (_) | | | (_| | | __/ | | | | | |_) | (_| | |_| | | | |_| | _
+ \_/\_/ \___/|_| \__,_| \___|_| |_| |_| .__/ \__,_|\__|_| |_|\__, | (_)
+ |_| |___/
+ _ _ _ _ _
+ / \ | (_)___| |_ __ _(_)_ __
+ _____ _____ / _ \ | | / __| __/ _` | | '__|
+ |_____|_____| / ___ \| | \__ \ || (_| | | |
+ /_/ \_\_|_|___/\__\__,_|_|_|
+
+ ____ _ _ _ ____ _ __ __ _ _
+ / ___|___ ___ | | _____ ( | ) ___|(_)_ __ | \/ | ___ _ __( | )
+| | / _ \ / _ \| |/ / _ \ V V\___ \| \ \/ / | |\/| |/ _ \ '_ \V V
+| |__| (_) | (_) | < __/_ ___) | |> < | | | | __/ | | |
+ \____\___/ \___/|_|\_\___( ) |____/|_/_/\_\ |_| |_|\___|_| |_|
+ |/
diff --git a/externals/figlet/tests/res004.txt b/externals/figlet/tests/res004.txt
new file mode 100644
index 000000000..8ece9309a
--- /dev/null
+++ b/externals/figlet/tests/res004.txt
@@ -0,0 +1,120 @@
+ __ _ _ _ __
+ / /(_) ___ ___| |__ | | __\ \
+/ / | |/ _ \/ __| '_ \| |/ / \ \
+\ \ | | (_) \__ \ | | | < / /
+ \_\/ |\___/|___/_| |_|_|\_\/_/
+ |__/
+ _ _ _ ____ _ __ _ __ _
+ (_) ___ ___| |__ | | __/ __ \(_)_ __ / _| |_ ___ ___ / /__| |_ ___
+ | |/ _ \/ __| '_ \| |/ / / _` | | '_ \| |_| | | | \ \/ (_) / / _ \ __/ __|
+ | | (_) \__ \ | | | < | (_| | | | | | _| | |_| |> < _ / / __/ || (__
+ _/ |\___/|___/_| |_|_|\_\ \__,_|_|_| |_|_| |_|\__,_/_/\_(_)_/ \___|\__\___|
+|__/ \____/
+ ___ _ _ ___ _
+ / / | ___ __ _ _ __ ___ | |_ __ _| |_ ___ __| \ \ ___| |__
+ / /| |/ _ \ / _` | '__/ _ \| __/ _` | __/ _ \ / _` |\ \ / __| '_ \
+ / / | | (_) | (_| | | | (_) | || (_| | || __/| (_| |/ / \__ \ | | |
+/_/ |_|\___/ \__, |_| \___/ \__\__,_|\__\___(_)__,_/_/ |___/_| |_|
+ |___/
+
+ _ __ __/\__
+ _____| '_ \ \ /
+|_____| | | | /_ _\
+ |_| |_| \/
+
+ __ _ _ _ __ _
+ / /(_) ___ ___| |__ | | __\ \ __ _ _ __ __ _ ___| |__ ___ _
+/ / | |/ _ \/ __| '_ \| |/ / \ \ / _` | '_ \ / _` |/ __| '_ \ / _ (_)
+\ \ | | (_) \__ \ | | | < / / | (_| | |_) | (_| | (__| | | | __/_
+ \_\/ |\___/|___/_| |_|_|\_\/_/ \__,_| .__/ \__,_|\___|_| |_|\___(_)
+ |__/ |_|
+ _ _ _ _ _ _
+| (_)_ __ ___ / | || | _ ___ _ _ _ __ | |_ __ ___ __
+| | | '_ \ / _ \ | | || |(_) / __| | | | '_ \| __/ _` \ \/ /
+| | | | | | __/ | |__ _| \__ \ |_| | | | | || (_| |> <
+|_|_|_| |_|\___| |_| |_|(_) |___/\__, |_| |_|\__\__,_/_/\_\
+ |___/
+
+ ___ _ __ _ __ ___ _ __ _ __ ___ __ _ _ __
+ / _ \ '__| '__/ _ \| '__| | '_ \ / _ \/ _` | '__|
+| __/ | | | | (_) | | | | | | __/ (_| | |
+ \___|_| |_| \___/|_| |_| |_|\___|\__,_|_|
+
+ _ _ _ _
+ _ _ _ __ _____ ___ __ ___ ___| |_ ___ __| | | |_ ___ | | _____ _ __
+| | | | '_ \ / _ \ \/ / '_ \ / _ \/ __| __/ _ \/ _` | | __/ _ \| |/ / _ \ '_ \
+| |_| | | | | __/> <| |_) | __/ (__| || __/ (_| | | || (_) | < __/ | | |
+ \__,_|_| |_|\___/_/\_\ .__/ \___|\___|\__\___|\__,_| \__\___/|_|\_\___|_| |_|
+ |_|
+ ___ _
+( ) \ ( )
+ \|| ||/
+ > >
+ | |
+ /_/
+ __ _ _ _ __ _
+ / /(_) ___ ___| |__ | | __\ \ __ _ _ __ __ _ ___| |__ ___ _
+/ / | |/ _ \/ __| '_ \| |/ / \ \ / _` | '_ \ / _` |/ __| '_ \ / _ (_)
+\ \ | | (_) \__ \ | | | < / / | (_| | |_) | (_| | (__| | | | __/_
+ \_\/ |\___/|___/_| |_|_|\_\/_/ \__,_| .__/ \__,_|\___|_| |_|\___(_)
+ |__/ |_|
+ _ _ _ _ _ ___ _
+| (_)_ __ ___ / | || | _ ( ) \ ( )
+| | | '_ \ / _ \ | | || |(_) \|| ||/
+| | | | | | __/ | |__ _| > >
+|_|_|_| |_|\___| |_| |_|(_) | |
+ /_/
+ __ _ _ _ __ _ _ _ _
+ / /(_) ___ ___| |__ | | __\ \ | |_| |__ ___ _ __ | | ___ | |_
+/ / | |/ _ \/ __| '_ \| |/ / \ \ | __| '_ \ / _ \ | '_ \| |/ _ \| __|
+\ \ | | (_) \__ \ | | | < / / | |_| | | | __/ | |_) | | (_) | |_
+ \_\/ |\___/|___/_| |_|_|\_\/_/ \__|_| |_|\___| | .__/|_|\___/ \__|
+ |__/ |_|
+ _ _ _ _
+| |_| |__ (_) ___| | _____ _ __ ___
+| __| '_ \| |/ __| |/ / _ \ '_ \/ __|
+| |_| | | | | (__| < __/ | | \__ \
+ \__|_| |_|_|\___|_|\_\___|_| |_|___/
+
+ __ __ __ _ _ ___ _ _
+ / /__ _ ___ _ _ / _|/ _(_) ___| | __| \ \ | |_| |__ ___ ___ ___
+/ // _` / __| | | | |_| |_| |/ _ \ |/ _` |\ \ | __| '_ \ / _ \/ __|/ _ \
+\ \ (_| \__ \ |_| | _| _| | __/ | (_| |/ / | |_| | | | (_) \__ \ __/
+ \_\__,_|___/\__,_|_| |_| |_|\___|_|\__,_/_/ \__|_| |_|\___/|___/\___|
+
+ _ _ _ _ _
+ __ _ _ __ ___ _ __ ( ) |_ ___| |__ ___| | |
+ / _` | '__/ _ \ '_ \|/| __| / __| '_ \ / _ \ | |
+| (_| | | | __/ | | | | |_ \__ \ | | | __/ | |
+ \__,_|_| \___|_| |_| \__| |___/_| |_|\___|_|_|
+
+ _ _
+ ___ ___ _ __(_)_ __ | |_ ___
+/ __|/ __| '__| | '_ \| __/ __|
+\__ \ (__| | | | |_) | |_\__ \
+|___/\___|_| |_| .__/ \__|___/
+ |_|
+ __ _ _ __ _ _ _ _ _
+ / /___ _ __(_) ___| |__ \ \ | |_| |__ (_)___ __ ____ _ ___ _ __ ( ) |_
+/ // _ \ '__| |/ __| '_ \ \ \ | __| '_ \| / __| \ \ /\ / / _` / __| '_ \|/| __|
+\ \ __/ | | | (__| | | |/ / | |_| | | | \__ \ \ V V / (_| \__ \ | | | | |_
+ \_\___|_| |_|\___|_| |_/_/ \__|_| |_|_|___/ \_/\_/ \__,_|___/_| |_| \__|
+
+ _ _ _
+ ___| |__ (_) ___| | _____ _ __
+ / __| '_ \| |/ __| |/ / _ \ '_ \
+| (__| | | | | (__| < __/ | | |_
+ \___|_| |_|_|\___|_|\_\___|_| |_(_)
+
+ _
+ (_)_ __
+ _____ _____ | | '_ \
+ |_____|_____| | | | | |
+ |_|_| |_|
+
+ _ _ _ _ _ _ _
+ _| || |_ __| | ___| |__ (_) __ _ _ __ __| | _____ _____| |
+|_ .. _|/ _` |/ _ \ '_ \| |/ _` | '_ \ _____ / _` |/ _ \ \ / / _ \ |
+|_ _| (_| | __/ |_) | | (_| | | | |_____| (_| | __/\ V / __/ |
+ |_||_| \__,_|\___|_.__/|_|\__,_|_| |_| \__,_|\___| \_/ \___|_|
+
diff --git a/externals/figlet/tests/res005.txt b/externals/figlet/tests/res005.txt
new file mode 100644
index 000000000..0e0921ef3
--- /dev/null
+++ b/externals/figlet/tests/res005.txt
@@ -0,0 +1,120 @@
+ __ _ _ _ __
+ \ \| | _| |__ ___ ___ (_)/ /
+ \ \ |/ / '_ \/ __|/ _ \| / /
+ / / <| | | \__ \ (_) | \ \
+ /_/|_|\_\_| |_|___/\___// |\_\
+ |__/
+ _ __ _ __ _ ____ _ _ _
+ ___| |_ ___ / /__ ___ _| |/ _|_ __ (_) / __ \| | _| |__ ___ ___ (_)
+ / __| __/ _ \ / (_) \/ / | | | | |_| '_ \| |/ / _` | |/ / '_ \/ __|/ _ \| |
+ | (__| || __// / _ > <| |_| | | _| | | | | | (_| | <| | | \__ \ (_) | |
+ \___|\__\___/_/ (_)_/\_\\__,_|_|_| |_| |_|_|\ \__,_|_|\_\_| |_|___/\___// |
+ \____/ |__/
+ _ __ _ _ _ _ __
+ | |__ ___ \ \ __| | ___| |_ __ _| |_ ___ _ __ __ _ ___ | | / /
+ | '_ \/ __| \ \/ _` | / _ \ __/ _` | __/ _ \| '__/ _` |/ _ \| | / /
+ | | | \__ \ / / (_| || __/ || (_| | || (_) | | | (_| | (_) | |/ /
+ |_| |_|___/ /_/ \__,_(_)___|\__\__,_|\__\___/|_| \__, |\___/|_/_/
+ |___/
+
+ __/\__ _ __
+ \ / | '_ \ _____
+ /_ _\ | | | |_____|
+ \/ |_| |_|
+
+ _ __ _ _ _ __
+ _ ___| |__ ___ __ _ _ __ __ _ \ \| | _| |__ ___ ___ (_)/ /
+ (_) _ \ '_ \ / __/ _` | '_ \ / _` | \ \ |/ / '_ \/ __|/ _ \| / /
+ | __/ | | | (_| (_| | |_) | (_| | / / <| | | \__ \ (_) | \ \
+ (_)___|_| |_|\___\__,_| .__/ \__,_| /_/|_|\_\_| |_|___/\___// |\_\
+ |_| |__/
+ _ _ _ _ _ _
+ __ ____ _| |_ _ __ _ _ ___ _| || | / | ___ _ __ (_) |
+ \ \/ / _` | __| '_ \| | | / __| (_) || |_| | / _ \ '_ \| | |
+ > < (_| | |_| | | | |_| \__ \ _|__ _| | | __/ | | | | |
+ /_/\_\__,_|\__|_| |_|\__, |___/ (_) |_| |_| \___|_| |_|_|_|
+ |___/
+
+ _ __ __ _ ___ _ __ _ __ ___ _ __ _ __ ___
+ | '__/ _` |/ _ \ '_ \ | '__/ _ \| '__| '__/ _ \
+ | | | (_| | __/ | | | | | | (_) | | | | | __/
+ |_| \__,_|\___|_| |_| |_| \___/|_| |_| \___|
+
+ _ _ _ _
+ _ __ ___| | _____ | |_ __| | ___| |_ ___ ___ _ ____ _____ _ __ _ _
+ | '_ \ / _ \ |/ / _ \| __| / _` |/ _ \ __/ __/ _ \ '_ \ \/ / _ \ '_ \| | | |
+ | | | | __/ < (_) | |_ | (_| | __/ || (_| __/ |_) > < __/ | | | |_| |
+ |_| |_|\___|_|\_\___/ \__| \__,_|\___|\__\___\___| .__/_/\_\___|_| |_|\__,_|
+ |_|
+ ___ _
+ ( ) \ ( )
+ |/ | | \|
+ > >
+ | |
+ /_/
+ _ __ _ _ _ __
+ _ ___| |__ ___ __ _ _ __ __ _ \ \| | _| |__ ___ ___ (_)/ /
+ (_) _ \ '_ \ / __/ _` | '_ \ / _` | \ \ |/ / '_ \/ __|/ _ \| / /
+ | __/ | | | (_| (_| | |_) | (_| | / / <| | | \__ \ (_) | \ \
+ (_)___|_| |_|\___\__,_| .__/ \__,_| /_/|_|\_\_| |_|___/\___// |\_\
+ |_| |__/
+ ___ _ _ _ _ _ _
+ ( ) \ ( ) _| || | / | ___ _ __ (_) |
+ |/ | | \| (_) || |_| | / _ \ '_ \| | |
+ > > _|__ _| | | __/ | | | | |
+ | | (_) |_| |_| \___|_| |_|_|_|
+ /_/
+ _ _ _ _ __ _ _ _ __
+ | |_ ___ | |_ __ ___| |__ | |_ \ \| | _| |__ ___ ___ (_)/ /
+ | __/ _ \| | '_ \ / _ \ '_ \| __| \ \ |/ / '_ \/ __|/ _ \| / /
+ | || (_) | | |_) | | __/ | | | |_ / / <| | | \__ \ (_) | \ \
+ \__\___/|_| .__/ \___|_| |_|\__| /_/|_|\_\_| |_|___/\___// |\_\
+ |_| |__/
+ _ _ _ _
+ ___ _ __ ___| | _____(_) |__ | |_
+ / __| '_ \ / _ \ |/ / __| | '_ \| __|
+ \__ \ | | | __/ < (__| | | | | |_
+ |___/_| |_|\___|_|\_\___|_|_| |_|\__|
+
+ _ _ __ _ _ _ __ __ __
+ ___ ___ ___ | |__ | |_ \ \ __| | | ___(_)/ _|/ _|_ _ ___ __ _ / /
+ / _ \/ __|/ _ \| '_ \| __| \ \/ _` | |/ _ \ | |_| |_| | | / __|/ _` / /
+ | __/\__ \ (_) | | | | |_ / / (_| | | __/ | _| _| |_| \__ \ (_| \ \
+ \___||___/\___/|_| |_|\__| /_/ \__,_|_|\___|_|_| |_| \__,_|___/\__,_|\_\
+
+ _ _ _ _ _
+ | | | ___| |__ ___ | |_( )_ __ ___ _ __ __ _
+ | | |/ _ \ '_ \/ __| | __|/| '_ \ / _ \ '__/ _` |
+ | | | __/ | | \__ \ | |_ | | | | __/ | | (_| |
+ |_|_|\___|_| |_|___/ \__| |_| |_|\___|_| \__,_|
+
+ _ _
+ ___| |_ _ __ (_)_ __ ___ ___
+ / __| __| '_ \| | '__/ __/ __|
+ \__ \ |_| |_) | | | | (__\__ \
+ |___/\__| .__/|_|_| \___|___/
+ |_|
+ _ _ _ __ _ _ __
+ ___(_) |__ | |_ \ \| |__ ___(_)_ __ ___ / /
+ / __| | '_ \| __| \ \ '_ \ / __| | '__/ _ \/ /
+ \__ \ | | | | |_ / / | | | (__| | | | __/\ \
+ |___/_|_| |_|\__| /_/|_| |_|\___|_|_| \___| \_\
+
+ _ _ _ _ _
+ _ __ ___| | _____(_) |__ ___ | |_( )_ __ ___ __ ___ __
+ | '_ \ / _ \ |/ / __| | '_ \ / __| | __|/| '_ \/ __|/ _` \ \ /\ / /
+ _| | | | __/ < (__| | | | | (__ | |_ | | | \__ \ (_| |\ V V /
+ (_)_| |_|\___|_|\_\___|_|_| |_|\___| \__| |_| |_|___/\__,_| \_/\_/
+
+ _
+ _ __ (_)
+ | '_ \| | _____ _____
+ | | | | | |_____|_____|
+ |_| |_|_|
+
+ _ _ _ _ _ _ _
+ | | _____ _____ __| | _ __ __ _(_) |__ ___ __| |_| || |_
+ | |/ _ \ \ / / _ \/ _` |_____| '_ \ / _` | | '_ \ / _ \/ _` |_ .. _|
+ | | __/\ V / __/ (_| |_____| | | | (_| | | |_) | __/ (_| |_ _|
+ |_|\___| \_/ \___|\__,_| |_| |_|\__,_|_|_.__/ \___|\__,_| |_||_|
+
diff --git a/externals/figlet/tests/res006.txt b/externals/figlet/tests/res006.txt
new file mode 100644
index 000000000..8ece9309a
--- /dev/null
+++ b/externals/figlet/tests/res006.txt
@@ -0,0 +1,120 @@
+ __ _ _ _ __
+ / /(_) ___ ___| |__ | | __\ \
+/ / | |/ _ \/ __| '_ \| |/ / \ \
+\ \ | | (_) \__ \ | | | < / /
+ \_\/ |\___/|___/_| |_|_|\_\/_/
+ |__/
+ _ _ _ ____ _ __ _ __ _
+ (_) ___ ___| |__ | | __/ __ \(_)_ __ / _| |_ ___ ___ / /__| |_ ___
+ | |/ _ \/ __| '_ \| |/ / / _` | | '_ \| |_| | | | \ \/ (_) / / _ \ __/ __|
+ | | (_) \__ \ | | | < | (_| | | | | | _| | |_| |> < _ / / __/ || (__
+ _/ |\___/|___/_| |_|_|\_\ \__,_|_|_| |_|_| |_|\__,_/_/\_(_)_/ \___|\__\___|
+|__/ \____/
+ ___ _ _ ___ _
+ / / | ___ __ _ _ __ ___ | |_ __ _| |_ ___ __| \ \ ___| |__
+ / /| |/ _ \ / _` | '__/ _ \| __/ _` | __/ _ \ / _` |\ \ / __| '_ \
+ / / | | (_) | (_| | | | (_) | || (_| | || __/| (_| |/ / \__ \ | | |
+/_/ |_|\___/ \__, |_| \___/ \__\__,_|\__\___(_)__,_/_/ |___/_| |_|
+ |___/
+
+ _ __ __/\__
+ _____| '_ \ \ /
+|_____| | | | /_ _\
+ |_| |_| \/
+
+ __ _ _ _ __ _
+ / /(_) ___ ___| |__ | | __\ \ __ _ _ __ __ _ ___| |__ ___ _
+/ / | |/ _ \/ __| '_ \| |/ / \ \ / _` | '_ \ / _` |/ __| '_ \ / _ (_)
+\ \ | | (_) \__ \ | | | < / / | (_| | |_) | (_| | (__| | | | __/_
+ \_\/ |\___/|___/_| |_|_|\_\/_/ \__,_| .__/ \__,_|\___|_| |_|\___(_)
+ |__/ |_|
+ _ _ _ _ _ _
+| (_)_ __ ___ / | || | _ ___ _ _ _ __ | |_ __ ___ __
+| | | '_ \ / _ \ | | || |(_) / __| | | | '_ \| __/ _` \ \/ /
+| | | | | | __/ | |__ _| \__ \ |_| | | | | || (_| |> <
+|_|_|_| |_|\___| |_| |_|(_) |___/\__, |_| |_|\__\__,_/_/\_\
+ |___/
+
+ ___ _ __ _ __ ___ _ __ _ __ ___ __ _ _ __
+ / _ \ '__| '__/ _ \| '__| | '_ \ / _ \/ _` | '__|
+| __/ | | | | (_) | | | | | | __/ (_| | |
+ \___|_| |_| \___/|_| |_| |_|\___|\__,_|_|
+
+ _ _ _ _
+ _ _ _ __ _____ ___ __ ___ ___| |_ ___ __| | | |_ ___ | | _____ _ __
+| | | | '_ \ / _ \ \/ / '_ \ / _ \/ __| __/ _ \/ _` | | __/ _ \| |/ / _ \ '_ \
+| |_| | | | | __/> <| |_) | __/ (__| || __/ (_| | | || (_) | < __/ | | |
+ \__,_|_| |_|\___/_/\_\ .__/ \___|\___|\__\___|\__,_| \__\___/|_|\_\___|_| |_|
+ |_|
+ ___ _
+( ) \ ( )
+ \|| ||/
+ > >
+ | |
+ /_/
+ __ _ _ _ __ _
+ / /(_) ___ ___| |__ | | __\ \ __ _ _ __ __ _ ___| |__ ___ _
+/ / | |/ _ \/ __| '_ \| |/ / \ \ / _` | '_ \ / _` |/ __| '_ \ / _ (_)
+\ \ | | (_) \__ \ | | | < / / | (_| | |_) | (_| | (__| | | | __/_
+ \_\/ |\___/|___/_| |_|_|\_\/_/ \__,_| .__/ \__,_|\___|_| |_|\___(_)
+ |__/ |_|
+ _ _ _ _ _ ___ _
+| (_)_ __ ___ / | || | _ ( ) \ ( )
+| | | '_ \ / _ \ | | || |(_) \|| ||/
+| | | | | | __/ | |__ _| > >
+|_|_|_| |_|\___| |_| |_|(_) | |
+ /_/
+ __ _ _ _ __ _ _ _ _
+ / /(_) ___ ___| |__ | | __\ \ | |_| |__ ___ _ __ | | ___ | |_
+/ / | |/ _ \/ __| '_ \| |/ / \ \ | __| '_ \ / _ \ | '_ \| |/ _ \| __|
+\ \ | | (_) \__ \ | | | < / / | |_| | | | __/ | |_) | | (_) | |_
+ \_\/ |\___/|___/_| |_|_|\_\/_/ \__|_| |_|\___| | .__/|_|\___/ \__|
+ |__/ |_|
+ _ _ _ _
+| |_| |__ (_) ___| | _____ _ __ ___
+| __| '_ \| |/ __| |/ / _ \ '_ \/ __|
+| |_| | | | | (__| < __/ | | \__ \
+ \__|_| |_|_|\___|_|\_\___|_| |_|___/
+
+ __ __ __ _ _ ___ _ _
+ / /__ _ ___ _ _ / _|/ _(_) ___| | __| \ \ | |_| |__ ___ ___ ___
+/ // _` / __| | | | |_| |_| |/ _ \ |/ _` |\ \ | __| '_ \ / _ \/ __|/ _ \
+\ \ (_| \__ \ |_| | _| _| | __/ | (_| |/ / | |_| | | | (_) \__ \ __/
+ \_\__,_|___/\__,_|_| |_| |_|\___|_|\__,_/_/ \__|_| |_|\___/|___/\___|
+
+ _ _ _ _ _
+ __ _ _ __ ___ _ __ ( ) |_ ___| |__ ___| | |
+ / _` | '__/ _ \ '_ \|/| __| / __| '_ \ / _ \ | |
+| (_| | | | __/ | | | | |_ \__ \ | | | __/ | |
+ \__,_|_| \___|_| |_| \__| |___/_| |_|\___|_|_|
+
+ _ _
+ ___ ___ _ __(_)_ __ | |_ ___
+/ __|/ __| '__| | '_ \| __/ __|
+\__ \ (__| | | | |_) | |_\__ \
+|___/\___|_| |_| .__/ \__|___/
+ |_|
+ __ _ _ __ _ _ _ _ _
+ / /___ _ __(_) ___| |__ \ \ | |_| |__ (_)___ __ ____ _ ___ _ __ ( ) |_
+/ // _ \ '__| |/ __| '_ \ \ \ | __| '_ \| / __| \ \ /\ / / _` / __| '_ \|/| __|
+\ \ __/ | | | (__| | | |/ / | |_| | | | \__ \ \ V V / (_| \__ \ | | | | |_
+ \_\___|_| |_|\___|_| |_/_/ \__|_| |_|_|___/ \_/\_/ \__,_|___/_| |_| \__|
+
+ _ _ _
+ ___| |__ (_) ___| | _____ _ __
+ / __| '_ \| |/ __| |/ / _ \ '_ \
+| (__| | | | | (__| < __/ | | |_
+ \___|_| |_|_|\___|_|\_\___|_| |_(_)
+
+ _
+ (_)_ __
+ _____ _____ | | '_ \
+ |_____|_____| | | | | |
+ |_|_| |_|
+
+ _ _ _ _ _ _ _
+ _| || |_ __| | ___| |__ (_) __ _ _ __ __| | _____ _____| |
+|_ .. _|/ _` |/ _ \ '_ \| |/ _` | '_ \ _____ / _` |/ _ \ \ / / _ \ |
+|_ _| (_| | __/ |_) | | (_| | | | |_____| (_| | __/\ V / __/ |
+ |_||_| \__,_|\___|_.__/|_|\__,_|_| |_| \__,_|\___| \_/ \___|_|
+
diff --git a/externals/figlet/tests/res007.txt b/externals/figlet/tests/res007.txt
new file mode 100644
index 000000000..3f467dc2f
--- /dev/null
+++ b/externals/figlet/tests/res007.txt
@@ -0,0 +1,120 @@
+ __ _ _ _ __
+ / /(_) ___ ___| |__ | | __\ \
+ / / | |/ _ \/ __| '_ \| |/ / \ \
+ \ \ | | (_) \__ \ | | | < / /
+ \_\/ |\___/|___/_| |_|_|\_\/_/
+ |__/
+ _ _ _ ____ _ __ _ __ _
+ (_) ___ ___| |__ | | __/ __ \(_)_ __ / _| |_ ___ ___ / /__| |_ ___
+ | |/ _ \/ __| '_ \| |/ / / _` | | '_ \| |_| | | | \ \/ (_) / / _ \ __/ __|
+ | | (_) \__ \ | | | < | (_| | | | | | _| | |_| |> < _ / / __/ || (__
+ _/ |\___/|___/_| |_|_|\_\ \__,_|_|_| |_|_| |_|\__,_/_/\_(_)_/ \___|\__\___|
+ |__/ \____/
+ ___ _ _ ___ _
+ / / | ___ __ _ _ __ ___ | |_ __ _| |_ ___ __| \ \ ___| |__
+ / /| |/ _ \ / _` | '__/ _ \| __/ _` | __/ _ \ / _` |\ \ / __| '_ \
+ / / | | (_) | (_| | | | (_) | || (_| | || __/| (_| |/ / \__ \ | | |
+ /_/ |_|\___/ \__, |_| \___/ \__\__,_|\__\___(_)__,_/_/ |___/_| |_|
+ |___/
+
+ _ __ __/\__
+ _____| '_ \ \ /
+ |_____| | | | /_ _\
+ |_| |_| \/
+
+ __ _ _ _ __ _
+ / /(_) ___ ___| |__ | | __\ \ __ _ _ __ __ _ ___| |__ ___ _
+ / / | |/ _ \/ __| '_ \| |/ / \ \ / _` | '_ \ / _` |/ __| '_ \ / _ (_)
+ \ \ | | (_) \__ \ | | | < / / | (_| | |_) | (_| | (__| | | | __/_
+ \_\/ |\___/|___/_| |_|_|\_\/_/ \__,_| .__/ \__,_|\___|_| |_|\___(_)
+ |__/ |_|
+ _ _ _ _ _ _
+ | (_)_ __ ___ / | || | _ ___ _ _ _ __ | |_ __ ___ __
+ | | | '_ \ / _ \ | | || |(_) / __| | | | '_ \| __/ _` \ \/ /
+ | | | | | | __/ | |__ _| \__ \ |_| | | | | || (_| |> <
+ |_|_|_| |_|\___| |_| |_|(_) |___/\__, |_| |_|\__\__,_/_/\_\
+ |___/
+
+ ___ _ __ _ __ ___ _ __ _ __ ___ __ _ _ __
+ / _ \ '__| '__/ _ \| '__| | '_ \ / _ \/ _` | '__|
+ | __/ | | | | (_) | | | | | | __/ (_| | |
+ \___|_| |_| \___/|_| |_| |_|\___|\__,_|_|
+
+ _ _ _ _
+ _ _ _ __ _____ ___ __ ___ ___| |_ ___ __| | | |_ ___ | | _____ _ __
+| | | | '_ \ / _ \ \/ / '_ \ / _ \/ __| __/ _ \/ _` | | __/ _ \| |/ / _ \ '_ \
+| |_| | | | | __/> <| |_) | __/ (__| || __/ (_| | | || (_) | < __/ | | |
+ \__,_|_| |_|\___/_/\_\ .__/ \___|\___|\__\___|\__,_| \__\___/|_|\_\___|_| |_|
+ |_|
+ ___ _
+ ( ) \ ( )
+ \|| ||/
+ > >
+ | |
+ /_/
+ __ _ _ _ __ _
+ / /(_) ___ ___| |__ | | __\ \ __ _ _ __ __ _ ___| |__ ___ _
+ / / | |/ _ \/ __| '_ \| |/ / \ \ / _` | '_ \ / _` |/ __| '_ \ / _ (_)
+ \ \ | | (_) \__ \ | | | < / / | (_| | |_) | (_| | (__| | | | __/_
+ \_\/ |\___/|___/_| |_|_|\_\/_/ \__,_| .__/ \__,_|\___|_| |_|\___(_)
+ |__/ |_|
+ _ _ _ _ _ ___ _
+ | (_)_ __ ___ / | || | _ ( ) \ ( )
+ | | | '_ \ / _ \ | | || |(_) \|| ||/
+ | | | | | | __/ | |__ _| > >
+ |_|_|_| |_|\___| |_| |_|(_) | |
+ /_/
+ __ _ _ _ __ _ _ _ _
+ / /(_) ___ ___| |__ | | __\ \ | |_| |__ ___ _ __ | | ___ | |_
+ / / | |/ _ \/ __| '_ \| |/ / \ \ | __| '_ \ / _ \ | '_ \| |/ _ \| __|
+ \ \ | | (_) \__ \ | | | < / / | |_| | | | __/ | |_) | | (_) | |_
+ \_\/ |\___/|___/_| |_|_|\_\/_/ \__|_| |_|\___| | .__/|_|\___/ \__|
+ |__/ |_|
+ _ _ _ _
+ | |_| |__ (_) ___| | _____ _ __ ___
+ | __| '_ \| |/ __| |/ / _ \ '_ \/ __|
+ | |_| | | | | (__| < __/ | | \__ \
+ \__|_| |_|_|\___|_|\_\___|_| |_|___/
+
+ __ __ __ _ _ ___ _ _
+ / /__ _ ___ _ _ / _|/ _(_) ___| | __| \ \ | |_| |__ ___ ___ ___
+ / // _` / __| | | | |_| |_| |/ _ \ |/ _` |\ \ | __| '_ \ / _ \/ __|/ _ \
+ \ \ (_| \__ \ |_| | _| _| | __/ | (_| |/ / | |_| | | | (_) \__ \ __/
+ \_\__,_|___/\__,_|_| |_| |_|\___|_|\__,_/_/ \__|_| |_|\___/|___/\___|
+
+ _ _ _ _ _
+ __ _ _ __ ___ _ __ ( ) |_ ___| |__ ___| | |
+ / _` | '__/ _ \ '_ \|/| __| / __| '_ \ / _ \ | |
+ | (_| | | | __/ | | | | |_ \__ \ | | | __/ | |
+ \__,_|_| \___|_| |_| \__| |___/_| |_|\___|_|_|
+
+ _ _
+ ___ ___ _ __(_)_ __ | |_ ___
+ / __|/ __| '__| | '_ \| __/ __|
+ \__ \ (__| | | | |_) | |_\__ \
+ |___/\___|_| |_| .__/ \__|___/
+ |_|
+ __ _ _ __ _ _ _ _ _
+ / /___ _ __(_) ___| |__ \ \ | |_| |__ (_)___ __ ____ _ ___ _ __ ( ) |_
+/ // _ \ '__| |/ __| '_ \ \ \ | __| '_ \| / __| \ \ /\ / / _` / __| '_ \|/| __|
+\ \ __/ | | | (__| | | |/ / | |_| | | | \__ \ \ V V / (_| \__ \ | | | | |_
+ \_\___|_| |_|\___|_| |_/_/ \__|_| |_|_|___/ \_/\_/ \__,_|___/_| |_| \__|
+
+ _ _ _
+ ___| |__ (_) ___| | _____ _ __
+ / __| '_ \| |/ __| |/ / _ \ '_ \
+ | (__| | | | | (__| < __/ | | |_
+ \___|_| |_|_|\___|_|\_\___|_| |_(_)
+
+ _
+ (_)_ __
+ _____ _____ | | '_ \
+ |_____|_____| | | | | |
+ |_|_| |_|
+
+ _ _ _ _ _ _ _
+ _| || |_ __| | ___| |__ (_) __ _ _ __ __| | _____ _____| |
+ |_ .. _|/ _` |/ _ \ '_ \| |/ _` | '_ \ _____ / _` |/ _ \ \ / / _ \ |
+ |_ _| (_| | __/ |_) | | (_| | | | |_____| (_| | __/\ V / __/ |
+ |_||_| \__,_|\___|_.__/|_|\__,_|_| |_| \__,_|\___| \_/ \___|_|
+
diff --git a/externals/figlet/tests/res008.txt b/externals/figlet/tests/res008.txt
new file mode 100644
index 000000000..3048a10cf
--- /dev/null
+++ b/externals/figlet/tests/res008.txt
@@ -0,0 +1,120 @@
+ __ _ _ _ __
+ / /(_) ___ ___| |__ | | __\ \
+ / / | |/ _ \/ __| '_ \| |/ / \ \
+ \ \ | | (_) \__ \ | | | < / /
+ \_\/ |\___/|___/_| |_|_|\_\/_/
+ |__/
+ _ _ _ ____ _ __ _ __ _
+ (_) ___ ___| |__ | | __/ __ \(_)_ __ / _| |_ ___ ___ / /__| |_ ___
+ | |/ _ \/ __| '_ \| |/ / / _` | | '_ \| |_| | | | \ \/ (_) / / _ \ __/ __|
+ | | (_) \__ \ | | | < | (_| | | | | | _| | |_| |> < _ / / __/ || (__
+ _/ |\___/|___/_| |_|_|\_\ \__,_|_|_| |_|_| |_|\__,_/_/\_(_)_/ \___|\__\___|
+ |__/ \____/
+ ___ _ _ ___ _
+ / / | ___ __ _ _ __ ___ | |_ __ _| |_ ___ __| \ \ ___| |__
+ / /| |/ _ \ / _` | '__/ _ \| __/ _` | __/ _ \ / _` |\ \ / __| '_ \
+ / / | | (_) | (_| | | | (_) | || (_| | || __/| (_| |/ / \__ \ | | |
+ /_/ |_|\___/ \__, |_| \___/ \__\__,_|\__\___(_)__,_/_/ |___/_| |_|
+ |___/
+
+ _ __ __/\__
+ _____| '_ \ \ /
+ |_____| | | | /_ _\
+ |_| |_| \/
+
+ __ _ _ _ __ _
+ / /(_) ___ ___| |__ | | __\ \ __ _ _ __ __ _ ___| |__ ___ _
+ / / | |/ _ \/ __| '_ \| |/ / \ \ / _` | '_ \ / _` |/ __| '_ \ / _ (_)
+ \ \ | | (_) \__ \ | | | < / / | (_| | |_) | (_| | (__| | | | __/_
+ \_\/ |\___/|___/_| |_|_|\_\/_/ \__,_| .__/ \__,_|\___|_| |_|\___(_)
+ |__/ |_|
+ _ _ _ _ _ _
+ | (_)_ __ ___ / | || | _ ___ _ _ _ __ | |_ __ ___ __
+ | | | '_ \ / _ \ | | || |(_) / __| | | | '_ \| __/ _` \ \/ /
+ | | | | | | __/ | |__ _| \__ \ |_| | | | | || (_| |> <
+ |_|_|_| |_|\___| |_| |_|(_) |___/\__, |_| |_|\__\__,_/_/\_\
+ |___/
+
+ ___ _ __ _ __ ___ _ __ _ __ ___ __ _ _ __
+ / _ \ '__| '__/ _ \| '__| | '_ \ / _ \/ _` | '__|
+ | __/ | | | | (_) | | | | | | __/ (_| | |
+ \___|_| |_| \___/|_| |_| |_|\___|\__,_|_|
+
+ _ _ _ _
+ _ _ _ __ _____ ___ __ ___ ___| |_ ___ __| | | |_ ___ | | _____ _ __
+| | | | '_ \ / _ \ \/ / '_ \ / _ \/ __| __/ _ \/ _` | | __/ _ \| |/ / _ \ '_ \
+| |_| | | | | __/> <| |_) | __/ (__| || __/ (_| | | || (_) | < __/ | | |
+ \__,_|_| |_|\___/_/\_\ .__/ \___|\___|\__\___|\__,_| \__\___/|_|\_\___|_| |_|
+ |_|
+ ___ _
+ ( ) \ ( )
+ \|| ||/
+ > >
+ | |
+ /_/
+ __ _ _ _ __ _
+ / /(_) ___ ___| |__ | | __\ \ __ _ _ __ __ _ ___| |__ ___ _
+ / / | |/ _ \/ __| '_ \| |/ / \ \ / _` | '_ \ / _` |/ __| '_ \ / _ (_)
+ \ \ | | (_) \__ \ | | | < / / | (_| | |_) | (_| | (__| | | | __/_
+ \_\/ |\___/|___/_| |_|_|\_\/_/ \__,_| .__/ \__,_|\___|_| |_|\___(_)
+ |__/ |_|
+ _ _ _ _ _ ___ _
+ | (_)_ __ ___ / | || | _ ( ) \ ( )
+ | | | '_ \ / _ \ | | || |(_) \|| ||/
+ | | | | | | __/ | |__ _| > >
+ |_|_|_| |_|\___| |_| |_|(_) | |
+ /_/
+ __ _ _ _ __ _ _ _ _
+ / /(_) ___ ___| |__ | | __\ \ | |_| |__ ___ _ __ | | ___ | |_
+ / / | |/ _ \/ __| '_ \| |/ / \ \ | __| '_ \ / _ \ | '_ \| |/ _ \| __|
+ \ \ | | (_) \__ \ | | | < / / | |_| | | | __/ | |_) | | (_) | |_
+ \_\/ |\___/|___/_| |_|_|\_\/_/ \__|_| |_|\___| | .__/|_|\___/ \__|
+ |__/ |_|
+ _ _ _ _
+ | |_| |__ (_) ___| | _____ _ __ ___
+ | __| '_ \| |/ __| |/ / _ \ '_ \/ __|
+ | |_| | | | | (__| < __/ | | \__ \
+ \__|_| |_|_|\___|_|\_\___|_| |_|___/
+
+ __ __ __ _ _ ___ _ _
+ / /__ _ ___ _ _ / _|/ _(_) ___| | __| \ \ | |_| |__ ___ ___ ___
+ / // _` / __| | | | |_| |_| |/ _ \ |/ _` |\ \ | __| '_ \ / _ \/ __|/ _ \
+ \ \ (_| \__ \ |_| | _| _| | __/ | (_| |/ / | |_| | | | (_) \__ \ __/
+ \_\__,_|___/\__,_|_| |_| |_|\___|_|\__,_/_/ \__|_| |_|\___/|___/\___|
+
+ _ _ _ _ _
+ __ _ _ __ ___ _ __ ( ) |_ ___| |__ ___| | |
+ / _` | '__/ _ \ '_ \|/| __| / __| '_ \ / _ \ | |
+ | (_| | | | __/ | | | | |_ \__ \ | | | __/ | |
+ \__,_|_| \___|_| |_| \__| |___/_| |_|\___|_|_|
+
+ _ _
+ ___ ___ _ __(_)_ __ | |_ ___
+ / __|/ __| '__| | '_ \| __/ __|
+ \__ \ (__| | | | |_) | |_\__ \
+ |___/\___|_| |_| .__/ \__|___/
+ |_|
+ __ _ _ __ _ _ _ _ _
+ / /___ _ __(_) ___| |__ \ \ | |_| |__ (_)___ __ ____ _ ___ _ __ ( ) |_
+/ // _ \ '__| |/ __| '_ \ \ \ | __| '_ \| / __| \ \ /\ / / _` / __| '_ \|/| __|
+\ \ __/ | | | (__| | | |/ / | |_| | | | \__ \ \ V V / (_| \__ \ | | | | |_
+ \_\___|_| |_|\___|_| |_/_/ \__|_| |_|_|___/ \_/\_/ \__,_|___/_| |_| \__|
+
+ _ _ _
+ ___| |__ (_) ___| | _____ _ __
+ / __| '_ \| |/ __| |/ / _ \ '_ \
+ | (__| | | | | (__| < __/ | | |_
+ \___|_| |_|_|\___|_|\_\___|_| |_(_)
+
+ _
+ (_)_ __
+ _____ _____ | | '_ \
+ |_____|_____| | | | | |
+ |_|_| |_|
+
+ _ _ _ _ _ _ _
+ _| || |_ __| | ___| |__ (_) __ _ _ __ __| | _____ _____| |
+ |_ .. _|/ _` |/ _ \ '_ \| |/ _` | '_ \ _____ / _` |/ _ \ \ / / _ \ |
+ |_ _| (_| | __/ |_) | | (_| | | | |_____| (_| | __/\ V / __/ |
+ |_||_| \__,_|\___|_.__/|_|\__,_|_| |_| \__,_|\___| \_/ \___|_|
+
diff --git a/externals/figlet/tests/res009.txt b/externals/figlet/tests/res009.txt
new file mode 100644
index 000000000..57f8690c8
--- /dev/null
+++ b/externals/figlet/tests/res009.txt
@@ -0,0 +1,138 @@
+ __ _ _ _ __
+ / / (_) ___ ___ | |__ | | __\ \
+/ / | | / _ \ / __|| '_ \ | |/ / \ \
+\ \ | || (_) |\__ \| | | || < / /
+ \_\_/ | \___/ |___/|_| |_||_|\_\/_/
+ |__/
+ _ _ _ ____ _ __ _ __
+ (_) ___ ___ | |__ | | __ / __ \ (_) _ __ / _|| | _ _ __ __ _ / /
+ | | / _ \ / __|| '_ \ | |/ // / _` || || '_ \ | |_ | || | | |\ \/ /(_) / /
+ | || (_) |\__ \| | | || <| | (_| || || | | || _|| || |_| | > < _ / /
+ _/ | \___/ |___/|_| |_||_|\_\\ \__,_||_||_| |_||_| |_| \__,_|/_/\_\(_)/_/
+|__/ \____/
+ _ __ _ _ _
+ ___ | |_ ___ / /| | ___ __ _ _ __ ___ | |_ __ _ | |_ ___
+ / _ \| __|/ __| / / | | / _ \ / _` || '__|/ _ \ | __|/ _` || __|/ _ \
+| __/| |_| (__ / / | || (_) || (_| || | | (_) || |_| (_| || |_| __/ _
+ \___| \__|\___|/_/ |_| \___/ \__, ||_| \___/ \__|\__,_| \__|\___|(_)
+ |___/
+ _ __ _
+ __| |\ \ ___ | |__ _ __ __/\__
+ / _` | \ \ / __|| '_ \ _____ | '_ \ \ /
+| (_| | / / \__ \| | | | |_____|| | | | /_ _\
+ \__,_|/_/ |___/|_| |_| |_| |_| \/
+
+ __ _ _ _ __
+ / / (_) ___ ___ | |__ | | __\ \
+/ / | | / _ \ / __|| '_ \ | |/ / \ \
+\ \ | || (_) |\__ \| | | || < / /
+ \_\_/ | \___/ |___/|_| |_||_|\_\/_/
+ |__/
+ _ _ _ _ _ _
+ __ _ _ __ __ _ ___ | |__ ___ _ | |(_) _ __ ___ / || || | _
+ / _` || '_ \ / _` | / __|| '_ \ / _ \(_) | || || '_ \ / _ \ | || || |_(_)
+| (_| || |_) || (_| || (__ | | | || __/ _ | || || | | || __/ | ||__ _|_
+ \__,_|| .__/ \__,_| \___||_| |_| \___|(_) |_||_||_| |_| \___| |_| |_| (_)
+ |_|
+ _
+ ___ _ _ _ __ | |_ __ _ __ __ ___ _ __ _ __ ___ _ __
+/ __|| | | || '_ \ | __|/ _` |\ \/ / / _ \| '__|| '__|/ _ \ | '__|
+\__ \| |_| || | | || |_| (_| | > < | __/| | | | | (_) || |
+|___/ \__, ||_| |_| \__|\__,_|/_/\_\ \___||_| |_| \___/ |_|
+ |___/
+
+ _ __ ___ __ _ _ __
+| '_ \ / _ \ / _` || '__|
+| | | || __/| (_| || |
+|_| |_| \___| \__,_||_|
+
+ _ _
+ _ _ _ __ ___ __ __ _ __ ___ ___ | |_ ___ __| |
+| | | || '_ \ / _ \\ \/ /| '_ \ / _ \ / __|| __|/ _ \ / _` |
+| |_| || | | || __/ > < | |_) || __/| (__ | |_| __/| (_| |
+ \__,_||_| |_| \___|/_/\_\| .__/ \___| \___| \__|\___| \__,_|
+ |_|
+ _ _ _ __ _
+| |_ ___ | | __ ___ _ __ ( )\ \ ( )
+| __|/ _ \ | |/ // _ \| '_ \ \| | ||/
+| |_| (_) || <| __/| | | | > >
+ \__|\___/ |_|\_\\___||_| |_| | |
+ /_/
+ __ _ _ _ __
+ / / (_) ___ ___ | |__ | | __\ \
+/ / | | / _ \ / __|| '_ \ | |/ / \ \
+\ \ | || (_) |\__ \| | | || < / /
+ \_\_/ | \___/ |___/|_| |_||_|\_\/_/
+ |__/
+ _ _ _ _ _ _
+ __ _ _ __ __ _ ___ | |__ ___ _ | |(_) _ __ ___ / || || | _
+ / _` || '_ \ / _` | / __|| '_ \ / _ \(_) | || || '_ \ / _ \ | || || |_(_)
+| (_| || |_) || (_| || (__ | | | || __/ _ | || || | | || __/ | ||__ _|_
+ \__,_|| .__/ \__,_| \___||_| |_| \___|(_) |_||_||_| |_| \___| |_| |_| (_)
+ |_|
+ _ __ _
+( )\ \ ( )
+ \| | ||/
+ > >
+ | |
+ /_/
+ __ _ _ _ __ _ _ _ _
+ / / (_) ___ ___ | |__ | | __\ \ | |_ | |__ ___ _ __ | | ___ | |_
+/ / | | / _ \ / __|| '_ \ | |/ / \ \ | __|| '_ \ / _ \ | '_ \ | | / _ \ | __|
+\ \ | || (_) |\__ \| | | || < / / | |_ | | | || __/ | |_) || || (_) || |_
+ \_\_/ | \___/ |___/|_| |_||_|\_\/_/ \__||_| |_| \___| | .__/ |_| \___/ \__|
+ |__/ |_|
+ _ _ _ _
+| |_ | |__ (_) ___ | | __ ___ _ __ ___
+| __|| '_ \ | | / __|| |/ // _ \| '_ \ / __|
+| |_ | | | || || (__ | <| __/| | | |\__ \
+ \__||_| |_||_| \___||_|\_\\___||_| |_||___/
+
+ __ __ __ _ _ _ __
+ / / __ _ ___ _ _ / _| / _|(_) ___ | | __| |\ \
+/ / / _` |/ __|| | | || |_ | |_ | | / _ \| | / _` | \ \
+\ \| (_| |\__ \| |_| || _|| _|| || __/| || (_| | / /
+ \_\\__,_||___/ \__,_||_| |_| |_| \___||_| \__,_|/_/
+
+ _ _ _ _
+| |_ | |__ ___ ___ ___ __ _ _ __ ___ _ __ ( )| |_
+| __|| '_ \ / _ \ / __| / _ \ / _` || '__|/ _ \| '_ \|/ | __|
+| |_ | | | || (_) |\__ \| __/ | (_| || | | __/| | | | | |_
+ \__||_| |_| \___/ |___/ \___| \__,_||_| \___||_| |_| \__|
+
+ _ _ _ _ _
+ ___ | |__ ___ | || | ___ ___ _ __ (_) _ __ | |_ ___
+/ __|| '_ \ / _ \| || | / __| / __|| '__|| || '_ \ | __|/ __|
+\__ \| | | || __/| || | \__ \| (__ | | | || |_) || |_ \__ \
+|___/|_| |_| \___||_||_| |___/ \___||_| |_|| .__/ \__||___/
+ |_|
+ __ _ _ __ _ _ _
+ / / ___ _ __ (_) ___ | |__ \ \ | |_ | |__ (_) ___
+/ / / _ \| '__|| | / __|| '_ \ \ \ | __|| '_ \ | |/ __|
+\ \| __/| | | || (__ | | | | / / | |_ | | | || |\__ \
+ \_\\___||_| |_| \___||_| |_|/_/ \__||_| |_||_||___/
+
+ _ _ _ _ _
+__ __ __ _ ___ _ __ ( )| |_ ___ | |__ (_) ___ | | __ ___ _ __
+\ \ /\ / // _` |/ __|| '_ \|/ | __| / __|| '_ \ | | / __|| |/ // _ \| '_ \
+ \ V V /| (_| |\__ \| | | | | |_ | (__ | | | || || (__ | <| __/| | | | _
+ \_/\_/ \__,_||___/|_| |_| \__| \___||_| |_||_| \___||_|\_\\___||_| |_|(_)
+
+ _
+ (_) _ __
+ _____ _____ | || '_ \
+ |_____||_____| | || | | |
+ |_||_| |_|
+
+ _ _ _ _ _ _
+ _| || |_ __| | ___ | |__ (_) __ _ _ __ __| | ___ __ __ ___
+|_ .. _| / _` | / _ \| '_ \ | | / _` || '_ \ _____ / _` | / _ \\ \ / // _ \
+|_ _|| (_| || __/| |_) || || (_| || | | ||_____|| (_| || __/ \ V /| __/
+ |_||_| \__,_| \___||_.__/ |_| \__,_||_| |_| \__,_| \___| \_/ \___|
+
+ _
+| |
+| |
+| |
+|_|
+
diff --git a/externals/figlet/tests/res010.txt b/externals/figlet/tests/res010.txt
new file mode 100644
index 000000000..43a252363
--- /dev/null
+++ b/externals/figlet/tests/res010.txt
@@ -0,0 +1,156 @@
+ __ _ _ _ __
+ / / (_) ___ ___ | |__ | | __ \ \
+ / / | | / _ \ / __| | '_ \ | |/ / \ \
+ \ \ | | | (_) | \__ \ | | | | | < / /
+ \_\ _/ | \___/ |___/ |_| |_| |_|\_\ /_/
+ |__/
+ _ _ _ ____ _ __ _
+ (_) ___ ___ | |__ | | __ / __ \ (_) _ __ / _| | | _ _
+ | | / _ \ / __| | '_ \ | |/ / / / _` | | | | '_ \ | |_ | | | | | |
+ | | | (_) | \__ \ | | | | | < | | (_| | | | | | | | | _| | | | |_| |
+ _/ | \___/ |___/ |_| |_| |_|\_\ \ \__,_| |_| |_| |_| |_| |_| \__,_|
+ |__/ \____/
+ __ _ __ _
+ __ __ _ / / ___ | |_ ___ / / | | ___ __ _ _ __
+ \ \/ / (_) / / / _ \ | __| / __| / / | | / _ \ / _` | | '__|
+ > < _ / / | __/ | |_ | (__ / / | | | (_) | | (_| | | |
+ /_/\_\ (_) /_/ \___| \__| \___| /_/ |_| \___/ \__, | |_|
+ |___/
+ _ _ _ __ _
+ ___ | |_ __ _ | |_ ___ __| | \ \ ___ | |__
+ / _ \ | __| / _` | | __| / _ \ / _` | \ \ / __| | '_ \
+ | (_) | | |_ | (_| | | |_ | __/ _ | (_| | / / \__ \ | | | |
+ \___/ \__| \__,_| \__| \___| (_) \__,_| /_/ |___/ |_| |_|
+
+
+ _ __ __/\__
+ _____ | '_ \ \ /
+ |_____| | | | | /_ _\
+ |_| |_| \/
+
+ __ _ _ _ __
+ / / (_) ___ ___ | |__ | | __ \ \
+ / / | | / _ \ / __| | '_ \ | |/ / \ \
+ \ \ | | | (_) | \__ \ | | | | | < / /
+ \_\ _/ | \___/ |___/ |_| |_| |_|\_\ /_/
+ |__/
+ _ _ _
+ __ _ _ __ __ _ ___ | |__ ___ _ | | (_) _ __ ___
+ / _` | | '_ \ / _` | / __| | '_ \ / _ \ (_) | | | | | '_ \ / _ \
+ | (_| | | |_) | | (_| | | (__ | | | | | __/ _ | | | | | | | | | __/
+ \__,_| | .__/ \__,_| \___| |_| |_| \___| (_) |_| |_| |_| |_| \___|
+ |_|
+ _ _ _ _
+ / | | || | _ ___ _ _ _ __ | |_ __ _ __ __
+ | | | || |_ (_) / __| | | | | | '_ \ | __| / _` | \ \/ /
+ | | |__ _| _ \__ \ | |_| | | | | | | |_ | (_| | > <
+ |_| |_| (_) |___/ \__, | |_| |_| \__| \__,_| /_/\_\
+ |___/
+
+ ___ _ __ _ __ ___ _ __ _ __ ___ __ _ _ __
+ / _ \ | '__| | '__| / _ \ | '__| | '_ \ / _ \ / _` | | '__|
+ | __/ | | | | | (_) | | | | | | | | __/ | (_| | | |
+ \___| |_| |_| \___/ |_| |_| |_| \___| \__,_| |_|
+
+ _ _
+ _ _ _ __ ___ __ __ _ __ ___ ___ | |_ ___ __| |
+ | | | | | '_ \ / _ \ \ \/ / | '_ \ / _ \ / __| | __| / _ \ / _` |
+ | |_| | | | | | | __/ > < | |_) | | __/ | (__ | |_ | __/ | (_| |
+ \__,_| |_| |_| \___| /_/\_\ | .__/ \___| \___| \__| \___| \__,_|
+ |_|
+ _ _ _ __ _
+ | |_ ___ | | __ ___ _ __ ( ) \ \ ( )
+ | __| / _ \ | |/ / / _ \ | '_ \ \| | | |/
+ | |_ | (_) | | < | __/ | | | | > >
+ \__| \___/ |_|\_\ \___| |_| |_| | |
+ /_/
+ __ _ _ _ __
+ / / (_) ___ ___ | |__ | | __ \ \
+ / / | | / _ \ / __| | '_ \ | |/ / \ \
+ \ \ | | | (_) | \__ \ | | | | | < / /
+ \_\ _/ | \___/ |___/ |_| |_| |_|\_\ /_/
+ |__/
+ _ _ _
+ __ _ _ __ __ _ ___ | |__ ___ _ | | (_) _ __ ___
+ / _` | | '_ \ / _` | / __| | '_ \ / _ \ (_) | | | | | '_ \ / _ \
+ | (_| | | |_) | | (_| | | (__ | | | | | __/ _ | | | | | | | | | __/
+ \__,_| | .__/ \__,_| \___| |_| |_| \___| (_) |_| |_| |_| |_| \___|
+ |_|
+ _ _ _ _ __ _
+ / | | || | _ ( ) \ \ ( )
+ | | | || |_ (_) \| | | |/
+ | | |__ _| _ > >
+ |_| |_| (_) | |
+ /_/
+ __ _ _ _ __ _ _
+ / / (_) ___ ___ | |__ | | __ \ \ | |_ | |__ ___
+ / / | | / _ \ / __| | '_ \ | |/ / \ \ | __| | '_ \ / _ \
+ \ \ | | | (_) | \__ \ | | | | | < / / | |_ | | | | | __/
+ \_\ _/ | \___/ |___/ |_| |_| |_|\_\ /_/ \__| |_| |_| \___|
+ |__/
+ _ _
+ _ __ | | ___ | |_
+ | '_ \ | | / _ \ | __|
+ | |_) | | | | (_) | | |_
+ | .__/ |_| \___/ \__|
+ |_|
+ _ _ _ _
+ | |_ | |__ (_) ___ | | __ ___ _ __ ___
+ | __| | '_ \ | | / __| | |/ / / _ \ | '_ \ / __|
+ | |_ | | | | | | | (__ | < | __/ | | | | \__ \
+ \__| |_| |_| |_| \___| |_|\_\ \___| |_| |_| |___/
+
+ __ __ __ _ _ _ __
+ / / __ _ ___ _ _ / _| / _| (_) ___ | | __| | \ \
+ / / / _` | / __| | | | | | |_ | |_ | | / _ \ | | / _` | \ \
+ \ \ | (_| | \__ \ | |_| | | _| | _| | | | __/ | | | (_| | / /
+ \_\ \__,_| |___/ \__,_| |_| |_| |_| \___| |_| \__,_| /_/
+
+ _ _ _ _
+ | |_ | |__ ___ ___ ___ __ _ _ __ ___ _ __ ( ) | |_
+ | __| | '_ \ / _ \ / __| / _ \ / _` | | '__| / _ \ | '_ \ |/ | __|
+ | |_ | | | | | (_) | \__ \ | __/ | (_| | | | | __/ | | | | | |_
+ \__| |_| |_| \___/ |___/ \___| \__,_| |_| \___| |_| |_| \__|
+
+ _ _ _ _ _
+ ___ | |__ ___ | | | | ___ ___ _ __ (_) _ __ | |_ ___
+ / __| | '_ \ / _ \ | | | | / __| / __| | '__| | | | '_ \ | __| / __|
+ \__ \ | | | | | __/ | | | | \__ \ | (__ | | | | | |_) | | |_ \__ \
+ |___/ |_| |_| \___| |_| |_| |___/ \___| |_| |_| | .__/ \__| |___/
+ |_|
+ __ _ _ __ _ _ _
+ / / ___ _ __ (_) ___ | |__ \ \ | |_ | |__ (_) ___
+ / / / _ \ | '__| | | / __| | '_ \ \ \ | __| | '_ \ | | / __|
+ \ \ | __/ | | | | | (__ | | | | / / | |_ | | | | | | \__ \
+ \_\ \___| |_| |_| \___| |_| |_| /_/ \__| |_| |_| |_| |___/
+
+ _ _
+ __ __ __ _ ___ _ __ ( ) | |_
+ \ \ /\ / / / _` | / __| | '_ \ |/ | __|
+ \ V V / | (_| | \__ \ | | | | | |_
+ \_/\_/ \__,_| |___/ |_| |_| \__|
+
+ _ _ _
+ ___ | |__ (_) ___ | | __ ___ _ __
+ / __| | '_ \ | | / __| | |/ / / _ \ | '_ \
+ | (__ | | | | | | | (__ | < | __/ | | | | _
+ \___| |_| |_| |_| \___| |_|\_\ \___| |_| |_| (_)
+
+ _
+ (_) _ __
+ _____ _____ | | | '_ \
+ |_____| |_____| | | | | | |
+ |_| |_| |_|
+
+ _ _ _ _ _ _
+ _| || |_ __| | ___ | |__ (_) __ _ _ __ __| | ___
+ |_ .. _| / _` | / _ \ | '_ \ | | / _` | | '_ \ _____ / _` | / _ \
+ |_ _| | (_| | | __/ | |_) | | | | (_| | | | | | |_____| | (_| | | __/
+ |_||_| \__,_| \___| |_.__/ |_| \__,_| |_| |_| \__,_| \___|
+
+ _
+ __ __ ___ | |
+ \ \ / / / _ \ | |
+ \ V / | __/ | |
+ \_/ \___| |_|
+
diff --git a/externals/figlet/tests/res011.txt b/externals/figlet/tests/res011.txt
new file mode 100644
index 000000000..3b669a139
--- /dev/null
+++ b/externals/figlet/tests/res011.txt
@@ -0,0 +1,114 @@
+ __ _ _ _ __
+ / /(_) ___ ___| |__ | | _\ \
+/ / | |/ _ \/ __| '_ \| |/ /\ \
+\ \ | | (_) \__ | | | | < / /
+ \__/ |\___/|___|_| |_|_|\_/_/
+ |__/
+ _ _ _ ____ _ __ _ __ _
+ (_) ___ ___| |__ | | __/ __ \(_)_ __ / _| |_ ___ ___ / ___| |_ ___
+ | |/ _ \/ __| '_ \| |/ / / _` | | '_ \| |_| | | | \ \/ (_) / / _ | __/ __|
+ | | (_) \__ | | | | | | (_| | | | | | _| | |_| |> < _ / | __| || (__
+ _/ |\___/|___|_| |_|_|\_\ \__,_|_|_| |_|_| |_|\__,_/_/\_(_/_/ \___|\__\___|
+|__/ \____/
+ ___ _ _ ___ _
+ / | | ___ __ _ _ __ ___ | |_ __ _| |_ ___ __| \ \ ___| |__ _ __
+ / /| |/ _ \ / _` | '__/ _ \| __/ _` | __/ _ \ / _` |\ / __| '_ \ _____| '_ \
+ / / | | (_) | (_| | | | (_) | || (_| | || __/| (_| |/ \__ | | | |_____| | | |
+/_/ |_|\___/ \__, |_| \___/ \__\__,_|\__\___(_\__,_/_/|___|_| |_| |_| |_|
+ |___/
+
+__/\__
+\ /
+/_ _\
+ \/
+
+ __ _ _ _ __ _
+ / /(_) ___ ___| |__ | | _\ \ __ _ _ __ __ _ ___| |__ ___ _
+/ / | |/ _ \/ __| '_ \| |/ /\ \/ _` | '_ \ / _` |/ __| '_ \ / _ (_)
+\ \ | | (_) \__ | | | | < / | (_| | |_) | (_| | (__| | | | __/_
+ \__/ |\___/|___|_| |_|_|\_/_/ \__,_| .__/ \__,_|\___|_| |_|\___(_)
+ |__/ |_|
+ _ _ _ _ _ _
+| (_)_ __ ___/ | || | _ ___ _ _ _ __ | |_ __ ___ __
+| | | '_ \ / _ | | || |(_/ __| | | | '_ \| __/ _` \ \/ /
+| | | | | | __| |__ __\__ | |_| | | | | || (_| |> <
+|_|_|_| |_|\___|_| |_|(_|___/\__, |_| |_|\__\__,_/_/\_\
+ |___/
+
+ ___ _ __ _ __ ___ _ __ _ __ ___ __ _ _ __
+ / _ | '__| '__/ _ \| '__| '_ \ / _ \/ _` | '__|
+| __| | | | | (_) | | | | | | __| (_| | |
+ \___|_| |_| \___/|_| |_| |_|\___|\__,_|_|
+
+ _ _ _ _
+ _ _ _ __ _____ ___ __ ___ ___| |_ ___ __| | |_ ___ | | _____ _ __
+| | | | '_ \ / _ \ \/ | '_ \ / _ \/ __| __/ _ \/ _` | __/ _ \| |/ / _ | '_ \
+| |_| | | | | __/> <| |_) | __| (__| || __| (_| | || (_) | | __| | | |
+ \__,_|_| |_|\___/_/\_| .__/ \___|\___|\__\___|\__,_|\__\___/|_|\_\___|_| |_|
+ |_|
+ ___ _
+( \ \( )
+ \|| |/
+ > >
+ | |
+ /_/
+ __ _ _ _ __ _
+ / /(_) ___ ___| |__ | | _\ \ __ _ _ __ __ _ ___| |__ ___ _
+/ / | |/ _ \/ __| '_ \| |/ /\ \/ _` | '_ \ / _` |/ __| '_ \ / _ (_)
+\ \ | | (_) \__ | | | | < / | (_| | |_) | (_| | (__| | | | __/_
+ \__/ |\___/|___|_| |_|_|\_/_/ \__,_| .__/ \__,_|\___|_| |_|\___(_)
+ |__/ |_|
+ _ _ _ _ _ ___ _
+| (_)_ __ ___/ | || | _( \ \( )
+| | | '_ \ / _ | | || |(_)\|| |/
+| | | | | | __| |__ __ > >
+|_|_|_| |_|\___|_| |_|(_) | |
+ /_/
+ __ _ _ _ __ _ _ _ _
+ / /(_) ___ ___| |__ | | _\ \| |_| |__ ___ _ __ | | ___ | |_
+/ / | |/ _ \/ __| '_ \| |/ /\ | __| '_ \ / _ | '_ \| |/ _ \| __|
+\ \ | | (_) \__ | | | | < / | |_| | | | __| |_) | | (_) | |_
+ \__/ |\___/|___|_| |_|_|\_/_/ \__|_| |_|\___| .__/|_|\___/ \__|
+ |__/ |_|
+ _ _ _ _
+| |_| |__ (_) ___| | _____ _ __ ___
+| __| '_ \| |/ __| |/ / _ | '_ \/ __|
+| |_| | | | | (__| | __| | | \__ \
+ \__|_| |_|_|\___|_|\_\___|_| |_|___/
+
+ __ __ __ _ _ ___ _ _
+ / /__ _ ___ _ _ / _|/ _(_) ___| | __| \ \| |_| |__ ___ ___ ___
+/ // _` / __| | | | |_| |_| |/ _ | |/ _` |\ | __| '_ \ / _ \/ __|/ _ \
+\ | (_| \__ | |_| | _| _| | __| | (_| |/ | |_| | | | (_) \__ | __/
+ \_\__,_|___/\__,_|_| |_| |_|\___|_|\__,_/_/ \__|_| |_|\___/|___/\___|
+
+ _ _ _ _ _ _ _
+ __ _ _ __ ___ _ __( | |_ ___| |__ ___| | |___ ___ _ __(_)_ __ | |_ ___
+ / _` | '__/ _ | '_ |/| __/ __| '_ \ / _ | | / __|/ __| '__| | '_ \| __/ __|
+| (_| | | | __| | | || |_\__ | | | | __| | \__ | (__| | | | |_) | |_\__ \
+ \__,_|_| \___|_| |_| \__|___|_| |_|\___|_|_|___/\___|_| |_| .__/ \__|___/
+ |_|
+ __ _ _ __ _ _ _ _ _
+ / /___ _ __(_) ___| |__ \ \| |_| |__ (_)_____ ____ _ ___ _ __( | |_
+/ // _ | '__| |/ __| '_ \ \ | __| '_ \| / __\ \ /\ / / _` / __| '_ |/| __|
+\ | __| | | | (__| | | |/ | |_| | | | \__ \\ V V | (_| \__ | | | || |_
+ \_\___|_| |_|\___|_| |_/_/ \__|_| |_|_|___/ \_/\_/ \__,_|___|_| |_| \__|
+
+ _ _ _
+ ___| |__ (_) ___| | _____ _ __
+ / __| '_ \| |/ __| |/ / _ | '_ \
+| (__| | | | | (__| | __| | | |_
+ \___|_| |_|_|\___|_|\_\___|_| |_(_)
+
+ _
+ (_)_ __
+ _____ _____| | '_ \
+|_____|_____| | | | |
+ |_|_| |_|
+
+ _ _ _ _ _ _ _
+ _| || |_ __| | ___| |__ (_) __ _ _ __ __| | _____ _____| |
+|_ .. _|/ _` |/ _ | '_ \| |/ _` | '_ \ _____ / _` |/ _ \ \ / / _ | |
+|_ _| (_| | __| |_) | | (_| | | | |_____| (_| | __/\ V | __| |
+ |_||_| \__,_|\___|_.__/|_|\__,_|_| |_| \__,_|\___| \_/ \___|_|
+
diff --git a/externals/figlet/tests/res012.txt b/externals/figlet/tests/res012.txt
new file mode 100644
index 000000000..3a25e2645
--- /dev/null
+++ b/externals/figlet/tests/res012.txt
@@ -0,0 +1,36 @@
+ ââââââââ ââ â
+ ââ âââââââââ
+<âââââââââ ââ â>
+ ââââââââ ââ âââââââ ââââ â ââ â ââââââââââ ââ ââââââââââââââââââââââââ
+ ââ âââââââââ âââââ âââââ â â â â â âââ â â â â â ââ âââââ â â âââ â âââ
+âââââââââ ââ ââââââ ââ âââââââ âââ âââ â ââââ ââââââââââ ââââ â â â â ââââ
+ââ ââââ â ââ â â
+â â ââââââ âââ â âââ
+ââ > ââââ â â â â â
+ ââââââââ ââ â âââââââââââââ ââââ â âââ âââ ââ â â ââââ âââ âââââââ â
+ ââ âââââââââ ââââââââââ âââââââ â ââ ââââ â ââââ âââââââ â â âââ â
+<âââââââââ ââ â> â ââ â âââââ âââââ âââââ ââââ âââ ââ âââ â â â â â ââ â
+âââââââââââââââ ââ âââââââââ â âââ ââââ ââââââââââââââââââ âââââââ ââââââ
+ââââââââââ ââââ â ââââââââââ â ââ ââââ â âââââââ â ââââ â â â âââ ââââ â
+ââââ ââ âââââ â â âââââ ââ â ââââ âââââ ââ ââââââ â âââââ â ââââ âââââ â
+â ââ â
+ â ââ
+ ââ
+ ââââââââ ââ â âââââââââââââ ââââ â âââ âââ ââ â â â ââ â
+ ââ âââââââââ ââââââââââ âââââââ â ââ ââââ â ââââ â ââ
+<âââââââââ ââ â> â ââ â âââââ âââââ âââââ ââââ âââ ââ ââ
+ ââââââââ ââ â ââââ ââââ ââââ ââââââ ââââ ââââââ ââââââ âââ
+ ââ âââââââââ â ââââââ ââââ â â â â âââââ ââ ââââ ââââ
+<âââââââââ ââ â> â â ââââ â ââââââ â â â ââââââ âââââ ââââ
+ âââââââ ââââââââââââ ââ ââââ ââââââââââ âââââââââââ ââââ ââââ âââââ â
+ âââââââ ââââââââââââ â â â ââââ âââââââ ââââââââââ â â ââââââââââ â
+<â ââââââââ â âââââââââ > â â ââââââââââ â ââ âââââ â â ââââ ââââââââââ
+âââââââââââââââââââ
+ââââ âââââââ â âââ
+âââââââ âââ â âââ
+ âââââââââââ â ââââ âââââ âââââââââââ ââââ ââââ ââââââ ââââââ
+ ââââââââ âââ â âââââââ ââââââââââ â â â âââââ ââ ââââ â
+<ââââ ââââââ â> â â âââââ ââââ âââââ â â ââââ ââââââ âââââ ââ
+ âââ ââ âââââ ââââââ ââ ââââ âââââ
+ ââââ ââ â â ââââââââââââ ââââ âââââ âââââ
+ ââ â #ââ âââââ ââ ââ â ââ âââ â ââââââ
diff --git a/externals/figlet/tests/res013.txt b/externals/figlet/tests/res013.txt
new file mode 100644
index 000000000..6983f2faa
--- /dev/null
+++ b/externals/figlet/tests/res013.txt
@@ -0,0 +1,132 @@
+ __ _ _ _ __
+ \ \ | | __| |__ ___ ___ (_) / /
+ \ \| |/ /| '_ \ / __| / _ \ | |/ /
+ / /| < | | | |\__ \| (_) || |\ \
+ /_/ |_|\_\|_| |_||___/ \___/_/ | \_\
+ |__/
+ __ _ __ _ ____ _ _ _
+ / /_ __ __ _ _ | | / _| _ __ (_) / __ \ | | __| |__ ___ ___ (_)
+ / /(_)\ \/ /| | | || || |_ | '_ \ | | / / _` || |/ /| '_ \ / __| / _ \ | |
+ / / _ > < | |_| || || _|| | | || || | (_| || < | | | |\__ \| (_) || |
+ /_/ (_)/_/\_\ \__,_||_||_| |_| |_||_| \ \__,_||_|\_\|_| |_||___/ \___/_/ |
+ \____/ |__/
+ _ _ _ __ _
+ ___ | |_ __ _ | |_ ___ _ __ __ _ ___ | | / /___ | |_ ___
+ / _ \| __|/ _` || __|/ _ \ | '__|/ _` | / _ \ | | / // __|| __|/ _ \
+ _| __/| |_| (_| || |_| (_) || | | (_| || (_) || | / /| (__ | |_| __/
+ (_)\___| \__|\__,_| \__|\___/ |_| \__, | \___/ |_|/_/ \___| \__|\___|
+ |___/
+ _ __ _
+ __/\__ _ __ | |__ ___ \ \ __| |
+ \ / | '_ \ _____ | '_ \ / __| \ \ / _` |
+ /_ _\ | | | ||_____| | | | |\__ \ / /| (_| |
+ \/ |_| |_| |_| |_||___/ /_/ \__,_|
+
+ _ __ _ _ _ __
+ _ ___ | |__ ___ __ _ _ __ __ _ \ \ | | __| |__ ___ ___ (_) / /
+ (_)/ _ \| '_ \ / __|/ _` || '_ \ / _` | \ \| |/ /| '_ \ / __| / _ \ | |/ /
+ _| __/| | | || (__| (_| || |_) || (_| | / /| < | | | |\__ \| (_) || |\ \
+ (_)\___||_| |_| \___|\__,_|| .__/ \__,_| /_/ |_|\_\|_| |_||___/ \___/_/ | \_\
+ |_| |__/
+ _ _ _ _ _ _
+ __ __ __ _ | |_ _ __ _ _ ___ _ | || | / | ___ _ __ (_)| |
+ \ \/ // _` || __|| '_ \ | | | |/ __| (_)| || |_ | | / _ \| '_ \ | || |
+ > <| (_| || |_ | | | || |_| |\__ \ _ |__ _|| | | __/| | | || || |
+ /_/\_\\__,_| \__||_| |_| \__, ||___/ (_) |_| |_| \___||_| |_||_||_|
+ |___/
+
+ _ __ __ _ ___ _ __ _ __ ___ _ __ _ __ ___
+ | '__|/ _` | / _ \| '_ \ | '__|/ _ \ | '__|| '__|/ _ \
+ | | | (_| || __/| | | | | | | (_) || | | | | __/
+ |_| \__,_| \___||_| |_| |_| \___/ |_| |_| \___|
+
+ _ _
+ __| | ___ | |_ ___ ___ _ __ __ __ ___ _ __ _ _
+ / _` | / _ \| __|/ __|/ _ \| '_ \\ \/ // _ \| '_ \ | | | |
+ | (_| || __/| |_| (__| __/| |_) |> <| __/| | | || |_| |
+ \__,_| \___| \__|\___|\___|| .__//_/\_\\___||_| |_| \__,_|
+ |_|
+ _ __ _ _ _
+ ( )\ \ ( ) _ __ ___ | | __ ___ | |_
+ |/ | | \| | '_ \ / _ \| |/ // _ \ | __|
+ > > | | | || __/| <| (_) || |_
+ | | |_| |_| \___||_|\_\\___/ \__|
+ /_/
+ _ __ _ _ _ __
+ _ ___ | |__ ___ __ _ _ __ __ _ \ \ | | __| |__ ___ ___ (_) / /
+ (_)/ _ \| '_ \ / __|/ _` || '_ \ / _` | \ \| |/ /| '_ \ / __| / _ \ | |/ /
+ _| __/| | | || (__| (_| || |_) || (_| | / /| < | | | |\__ \| (_) || |\ \
+ (_)\___||_| |_| \___|\__,_|| .__/ \__,_| /_/ |_|\_\|_| |_||___/ \___/_/ | \_\
+ |_| |__/
+ _ __ _ _ _ _ _ _
+ ( )\ \ ( ) _ | || | / | ___ _ __ (_)| |
+ |/ | | \| (_)| || |_ | | / _ \| '_ \ | || |
+ > > _ |__ _|| | | __/| | | || || |
+ | | (_) |_| |_| \___||_| |_||_||_|
+ /_/
+ _ _ _ _ __ _ _ _ __
+ | |_ ___ | | _ __ ___ | |__ | |_ \ \ | | __| |__ ___ ___ (_) / /
+ | __|/ _ \ | || '_ \ / _ \| '_ \ | __| \ \| |/ /| '_ \ / __| / _ \ | |/ /
+ | |_| (_) || || |_) | | __/| | | || |_ / /| < | | | |\__ \| (_) || |\ \
+ \__|\___/ |_|| .__/ \___||_| |_| \__| /_/ |_|\_\|_| |_||___/ \___/_/ | \_\
+ |_| |__/
+ _ _ _ _
+ ___ _ __ ___ | | __ ___ (_)| |__ | |_
+ / __|| '_ \ / _ \| |/ // __|| || '_ \ | __|
+ \__ \| | | || __/| <| (__ | || | | || |_
+ |___/|_| |_| \___||_|\_\\___||_||_| |_| \__|
+
+ __ _ _ _ __ __ __
+ \ \ __| || | ___ (_) / _| / _| _ _ ___ __ _ / /
+ \ \ / _` || | / _ \| || |_ | |_ | | | |/ __| / _` |/ /
+ / /| (_| || || __/| || _|| _|| |_| |\__ \| (_| |\ \
+ /_/ \__,_||_| \___||_||_| |_| \__,_||___/ \__,_| \_\
+
+ _ _ _ _
+ | |_ ( )_ __ ___ _ __ __ _ ___ ___ ___ | |__ | |_
+ | __||/| '_ \ / _ \| '__|/ _` | / _ \/ __| / _ \ | '_ \ | __|
+ | |_ | | | || __/| | | (_| | | __/\__ \| (_) || | | || |_
+ \__| |_| |_| \___||_| \__,_| \___||___/ \___/ |_| |_| \__|
+
+ _ _ _ _ _
+ ___ | |_ _ __ (_) _ __ ___ ___ | || | ___ | |__ ___
+ / __|| __|| '_ \ | || '__|/ __|/ __| | || | / _ \| '_ \ / __|
+ \__ \| |_ | |_) || || | | (__ \__ \ | || || __/| | | |\__ \
+ |___/ \__|| .__/ |_||_| \___||___/ |_||_| \___||_| |_||___/
+ |_|
+ _ _ _ __ _ _ __
+ ___ (_)| |__ | |_ \ \ | |__ ___ (_) _ __ ___ / /
+ / __|| || '_ \ | __| \ \| '_ \ / __|| || '__|/ _ \/ /
+ \__ \| || | | || |_ / /| | | || (__ | || | | __/\ \
+ |___/|_||_| |_| \__| /_/ |_| |_| \___||_||_| \___| \_\
+
+ _ _
+ | |_ ( )_ __ ___ __ _ __ __
+ | __||/| '_ \ / __| / _` |\ \ /\ / /
+ | |_ | | | |\__ \| (_| | \ V V /
+ \__| |_| |_||___/ \__,_| \_/\_/
+
+ _ _ _
+ _ __ ___ | | __ ___ (_)| |__ ___
+ | '_ \ / _ \| |/ // __|| || '_ \ / __|
+ _ | | | || __/| <| (__ | || | | || (__
+ (_)|_| |_| \___||_|\_\\___||_||_| |_| \___|
+
+ _
+ _ __ (_)
+ | '_ \ | | _____ _____
+ | | | || | |_____||_____|
+ |_| |_||_|
+
+ _ _ _ _ _ _
+ __ __ ___ __| | _ __ __ _ (_)| |__ ___ __| | _| || |_
+ \ \ / // _ \ / _` | _____ | '_ \ / _` || || '_ \ / _ \ / _` ||_ .. _|
+ \ V /| __/| (_| ||_____|| | | || (_| || || |_) || __/| (_| ||_ _|
+ \_/ \___| \__,_| |_| |_| \__,_||_||_.__/ \___| \__,_| |_||_|
+
+ _
+ | | ___
+ | | / _ \
+ | || __/
+ |_| \___|
+
diff --git a/externals/figlet/tests/res014.txt b/externals/figlet/tests/res014.txt
new file mode 100644
index 000000000..545bbce99
--- /dev/null
+++ b/externals/figlet/tests/res014.txt
@@ -0,0 +1,144 @@
+ __ __ __ _ __
+ \ \ / /__ / /_ _____ ____ (_)/ /
+ \ \ / //_// __ \ / ___// __ \ / // /
+ / // ,< / / / /(__ )/ /_/ / / / \ \
+ /_//_/|_|/_/ /_//____/ \____/__/ / \_\
+ /___/
+ __ ____ _ ______ __ __ _
+ _ _ __ __ __ / // __/____ (_)/ ____ \ / /__ / /_ _____ ____ (_)
+ (_)| |/_// / / // // /_ / __ \ / // / __ `// //_// __ \ / ___// __ \ / /
+ _ _> < / /_/ // // __// / / // // / /_/ // ,< / / / /(__ )/ /_/ / / /
+ (_)/_/|_| \__,_//_//_/ /_/ /_//_/ \ \__,_//_/|_|/_/ /_//____/ \____/__/ /
+ \____/ /___/
+ __ __ __ __ __ __
+ / /_ ____ _ / /_ ____ _____ ____ _ ____ / / _/_/_____ / /_ ___ _/_/
+ / __// __ `// __// __ \ / ___// __ `// __ \ / / _/_/ / ___// __// _ \ _/_/
+ / /_ / /_/ // /_ / /_/ // / / /_/ // /_/ // /_/_/ / /__ / /_ / __/_/_/
+ \__/ \__,_/ \__/ \____//_/ \__, / \____//_//_/ \___/ \__/ \___//_/
+ /____/
+ __ __ __
+ __/|_ ____ / /_ _____ \ \ ____/ / ___
+ | / / __ \ ______ / __ \ / ___/ \ \ / __ / / _ \
+ /_ __| / / / //_____/ / / / /(__ ) / // /_/ /_ / __/
+ |/ /_/ /_/ /_/ /_//____/ /_/ \__,_/(_)\___/
+
+ __ __ __ _ __
+ \ \ / /__ / /_ _____ ____ (_)/ /
+ \ \ / //_// __ \ / ___// __ \ / // /
+ / // ,< / / / /(__ )/ /_/ / / / \ \
+ /_//_/|_|/_/ /_//____/ \____/__/ / \_\
+ /___/
+ _ __ __
+ ___ ____ (_)/ / _ ___ / /_ _____ ____ _ ____ ____ _
+ / _ \ / __ \ / // / (_)/ _ \ / __ \ / ___// __ `// __ \ / __ `/
+ / __// / / // // / _ / __// / / // /__ / /_/ // /_/ // /_/ /
+ \___//_/ /_//_//_/ (_) \___//_/ /_/ \___/ \__,_// .___/ \__,_/
+ /_/
+ __ __ __ ___
+ _ __ ____ _ / /_ ____ __ __ _____ _ / // / < /
+ | |/_// __ `// __// __ \ / / / // ___/ (_)/ // /_ / /
+ _> < / /_/ // /_ / / / // /_/ /(__ ) _ /__ __// /
+ /_/|_| \__,_/ \__//_/ /_/ \__, //____/ (_) /_/ /_/
+ /____/
+
+ _____ ____ _ ___ ____ _____ ____ _____ _____ ___
+ / ___// __ `// _ \ / __ \ / ___// __ \ / ___// ___// _ \
+ / / / /_/ // __// / / / / / / /_/ // / / / / __/
+ /_/ \__,_/ \___//_/ /_/ /_/ \____//_/ /_/ \___/
+
+ __ __
+ ____/ /___ / /_ _____ ___ ____ _ __ ___ ____ __ __
+ / __ // _ \ / __// ___// _ \ / __ \ | |/_// _ \ / __ \ / / / /
+ / /_/ // __// /_ / /__ / __// /_/ /_> < / __// / / // /_/ /
+ \__,_/ \___/ \__/ \___/ \___// .___//_/|_| \___//_/ /_/ \__,_/
+ /_/
+ _ _ _ __ __
+ ( )| |( ) ____ ___ / /__ ____ / /_
+ |/ / / V / __ \ / _ \ / //_// __ \ / __/
+ _>_> / / / // __// ,< / /_/ // /_
+ _/_/ /_/ /_/ \___//_/|_| \____/ \__/
+ /_/
+ __ __ __ _ __
+ \ \ / /__ / /_ _____ ____ (_)/ /
+ \ \ / //_// __ \ / ___// __ \ / // /
+ / // ,< / / / /(__ )/ /_/ / / / \ \
+ /_//_/|_|/_/ /_//____/ \____/__/ / \_\
+ /___/
+ _ __ __
+ ___ ____ (_)/ / _ ___ / /_ _____ ____ _ ____ ____ _
+ / _ \ / __ \ / // / (_)/ _ \ / __ \ / ___// __ `// __ \ / __ `/
+ / __// / / // // / _ / __// / / // /__ / /_/ // /_/ // /_/ /
+ \___//_/ /_//_//_/ (_) \___//_/ /_/ \___/ \__,_// .___/ \__,_/
+ /_/
+ _ _ _ __ __ ___
+ ( )| |( ) _ / // / < /
+ |/ / / V (_)/ // /_ / /
+ _>_> _ /__ __// /
+ _/_/ (_) /_/ /_/
+ /_/
+ __ __ __ __ __ _ __
+ ___ / /_ / /_ \ \ / /__ / /_ _____ ____ (_)/ /
+ / _ \ / __ \ / __/ \ \ / //_// __ \ / ___// __ \ / // /
+ / __// / / // /_ / // ,< / / / /(__ )/ /_/ / / / \ \
+ \___//_/ /_/ \__/ /_//_/|_|/_/ /_//____/ \____/__/ / \_\
+ /___/
+ __ _ __ __ __ __
+ _____ ____ ___ / /__ _____ (_)/ /_ / /_ / /_ ____ / /____
+ / ___// __ \ / _ \ / //_// ___// // __ \ / __/ / __// __ \ / // __ \
+ (__ )/ / / // __// ,< / /__ / // / / // /_ / /_ / /_/ // // /_/ /
+ /____//_/ /_/ \___//_/|_| \___//_//_/ /_/ \__/ \__/ \____//_// .___/
+ /_/
+ __ __ __ _ ____ ____ __
+ \ \ ____/ // /___ (_)/ __// __/__ __ _____ ____ _ / /
+ \ \ / __ // // _ \ / // /_ / /_ / / / // ___// __ `// /
+ / // /_/ // // __// // __// __// /_/ /(__ )/ /_/ / \ \
+ /_/ \__,_//_/ \___//_//_/ /_/ \__,_//____/ \__,_/ \_\
+
+ __ _ __ __
+ / /_( )____ ___ _____ ____ _ ___ _____ ____ / /_ / /_
+ / __/|// __ \ / _ \ / ___// __ `/ / _ \ / ___// __ \ / __ \ / __/
+ / /_ / / / // __// / / /_/ / / __/(__ )/ /_/ // / / // /_
+ \__/ /_/ /_/ \___//_/ \__,_/ \___//____/ \____//_/ /_/ \__/
+
+ __ _ __ __ __
+ _____ / /_ ____ (_)_____ _____ _____ / // /___ / /_ _____
+ / ___// __// __ \ / // ___// ___// ___/ / // // _ \ / __ \ / ___/
+ (__ )/ /_ / /_/ // // / / /__ (__ ) / // // __// / / /(__ )
+ /____/ \__// .___//_//_/ \___//____/ /_//_/ \___//_/ /_//____/
+ /_/
+ _ __ __ __ __ _ __
+ _____ (_)/ /_ / /_ \ \ / /_ _____ (_)_____ ___ / /
+ / ___// // __ \ / __/ \ \ / __ \ / ___// // ___// _ \/ /
+ (__ )/ // / / // /_ / // / / // /__ / // / / __/\ \
+ /____//_//_/ /_/ \__/ /_//_/ /_/ \___//_//_/ \___/ \_\
+
+ __ _
+ / /_( )____ _____ ____ _ _ __
+ / __/|// __ \ / ___// __ `/| | /| / /
+ / /_ / / / /(__ )/ /_/ / | |/ |/ /
+ \__/ /_/ /_//____/ \__,_/ |__/|__/
+
+ __ _ __
+ ____ ___ / /__ _____ (_)/ /_ _____
+ / __ \ / _ \ / //_// ___// // __ \ / ___/
+ _ / / / // __// ,< / /__ / // / / // /__
+ (_)/_/ /_/ \___//_/|_| \___//_//_/ /_/ \___/
+
+ _
+ ____ (_)
+ / __ \ / / ______ ______
+ / / / // / /_____//_____/
+ /_/ /_//_/
+
+ __ _ __ __ __ __
+ _ __ ___ ____/ / ____ ____ _ (_)/ /_ ___ ____/ /__/ // /_
+ | | / // _ \ / __ /______ / __ \ / __ `// // __ \ / _ \ / __ //_ _ __/
+ | |/ // __// /_/ //_____// / / // /_/ // // /_/ // __// /_/ //_ _ __/
+ |___/ \___/ \__,_/ /_/ /_/ \__,_//_//_.___/ \___/ \__,_/ /_//_/
+
+ __
+ / /___
+ / // _ \
+ / // __/
+ /_/ \___/
+
diff --git a/externals/figlet/tests/res015.txt b/externals/figlet/tests/res015.txt
new file mode 100644
index 000000000..de7bcd457
--- /dev/null
+++ b/externals/figlet/tests/res015.txt
@@ -0,0 +1,156 @@
+ __ _ _ _ __
+ \ \ | | __ | |__ ___ ___ (_) / /
+ \ \ | |/ / | '_ \ / __| / _ \ | | / /
+ / / | < | | | | \__ \ | (_) | | | \ \
+ /_/ |_|\_\ |_| |_| |___/ \___/ _/ | \_\
+ |__/
+ _ __ _ ____ _ _ _
+ _ _ | | / _| _ __ (_) / __ \ | | __ | |__ ___ ___ (_)
+ | | | | | | | |_ | '_ \ | | / / _` | | |/ / | '_ \ / __| / _ \ | |
+ | |_| | | | | _| | | | | | | | | (_| | | < | | | | \__ \ | (_) | | |
+ \__,_| |_| |_| |_| |_| |_| \ \__,_| |_|\_\ |_| |_| |___/ \___/ _/ |
+ \____/ |__/
+ _ __ _ __
+ _ __ __ _ ___ | | / / ___ | |_ ___ / / _ __ __
+ | '__| / _` | / _ \ | | / / / __| | __| / _ \ / / (_) \ \/ /
+ | | | (_| | | (_) | | | / / | (__ | |_ | __/ / / _ > <
+ |_| \__, | \___/ |_| /_/ \___| \__| \___| /_/ (_) /_/\_\
+ |___/
+ _ __ _ _ _
+ | |__ ___ \ \ __| | ___ | |_ __ _ | |_ ___
+ | '_ \ / __| \ \ / _` | / _ \ | __| / _` | | __| / _ \
+ | | | | \__ \ / / | (_| | _ | __/ | |_ | (_| | | |_ | (_) |
+ |_| |_| |___/ /_/ \__,_| (_) \___| \__| \__,_| \__| \___/
+
+
+ __/\__ _ __
+ \ / | '_ \ _____
+ /_ _\ | | | | |_____|
+ \/ |_| |_|
+
+ __ _ _ _ __
+ \ \ | | __ | |__ ___ ___ (_) / /
+ \ \ | |/ / | '_ \ / __| / _ \ | | / /
+ / / | < | | | | \__ \ | (_) | | | \ \
+ /_/ |_|\_\ |_| |_| |___/ \___/ _/ | \_\
+ |__/
+ _ _ _
+ ___ _ __ (_) | | _ ___ | |__ ___ __ _ _ __ __ _
+ / _ \ | '_ \ | | | | (_) / _ \ | '_ \ / __| / _` | | '_ \ / _` |
+ | __/ | | | | | | | | _ | __/ | | | | | (__ | (_| | | |_) | | (_| |
+ \___| |_| |_| |_| |_| (_) \___| |_| |_| \___| \__,_| | .__/ \__,_|
+ |_|
+ _ _ _ _
+ __ __ __ _ | |_ _ __ _ _ ___ _ | || | / |
+ \ \/ / / _` | | __| | '_ \ | | | | / __| (_) | || |_ | |
+ > < | (_| | | |_ | | | | | |_| | \__ \ _ |__ _| | |
+ /_/\_\ \__,_| \__| |_| |_| \__, | |___/ (_) |_| |_|
+ |___/
+
+ _ __ __ _ ___ _ __ _ __ ___ _ __ _ __ ___
+ | '__| / _` | / _ \ | '_ \ | '__| / _ \ | '__| | '__| / _ \
+ | | | (_| | | __/ | | | | | | | (_) | | | | | | __/
+ |_| \__,_| \___| |_| |_| |_| \___/ |_| |_| \___|
+
+ _ _
+ __| | ___ | |_ ___ ___ _ __ __ __ ___ _ __ _ _
+ / _` | / _ \ | __| / __| / _ \ | '_ \ \ \/ / / _ \ | '_ \ | | | |
+ | (_| | | __/ | |_ | (__ | __/ | |_) | > < | __/ | | | | | |_| |
+ \__,_| \___| \__| \___| \___| | .__/ /_/\_\ \___| |_| |_| \__,_|
+ |_|
+ _ __ _ _ _
+ ( ) \ \ ( ) _ __ ___ | | __ ___ | |_
+ |/ | | \| | '_ \ / _ \ | |/ / / _ \ | __|
+ > > | | | | | __/ | < | (_) | | |_
+ | | |_| |_| \___| |_|\_\ \___/ \__|
+ /_/
+ __ _ _ _ __
+ \ \ | | __ | |__ ___ ___ (_) / /
+ \ \ | |/ / | '_ \ / __| / _ \ | | / /
+ / / | < | | | | \__ \ | (_) | | | \ \
+ /_/ |_|\_\ |_| |_| |___/ \___/ _/ | \_\
+ |__/
+ _ _ _
+ ___ _ __ (_) | | _ ___ | |__ ___ __ _ _ __ __ _
+ / _ \ | '_ \ | | | | (_) / _ \ | '_ \ / __| / _` | | '_ \ / _` |
+ | __/ | | | | | | | | _ | __/ | | | | | (__ | (_| | | |_) | | (_| |
+ \___| |_| |_| |_| |_| (_) \___| |_| |_| \___| \__,_| | .__/ \__,_|
+ |_|
+ _ __ _ _ _ _
+ ( ) \ \ ( ) _ | || | / |
+ |/ | | \| (_) | || |_ | |
+ > > _ |__ _| | |
+ | | (_) |_| |_|
+ /_/
+ _ _ __ _ _ _ __
+ ___ | |__ | |_ \ \ | | __ | |__ ___ ___ (_) / /
+ / _ \ | '_ \ | __| \ \ | |/ / | '_ \ / __| / _ \ | | / /
+ | __/ | | | | | |_ / / | < | | | | \__ \ | (_) | | | \ \
+ \___| |_| |_| \__| /_/ |_|\_\ |_| |_| |___/ \___/ _/ | \_\
+ |__/
+ _ _
+ | |_ ___ | | _ __
+ | __| / _ \ | | | '_ \
+ | |_ | (_) | | | | |_) |
+ \__| \___/ |_| | .__/
+ |_|
+ _ _ _ _
+ ___ _ __ ___ | | __ ___ (_) | |__ | |_
+ / __| | '_ \ / _ \ | |/ / / __| | | | '_ \ | __|
+ \__ \ | | | | | __/ | < | (__ | | | | | | | |_
+ |___/ |_| |_| \___| |_|\_\ \___| |_| |_| |_| \__|
+
+ __ _ _ _ __ __ __
+ \ \ __| | | | ___ (_) / _| / _| _ _ ___ __ _ / /
+ \ \ / _` | | | / _ \ | | | |_ | |_ | | | | / __| / _` | / /
+ / / | (_| | | | | __/ | | | _| | _| | |_| | \__ \ | (_| | \ \
+ /_/ \__,_| |_| \___| |_| |_| |_| \__,_| |___/ \__,_| \_\
+
+ _ _ _ _
+ | |_ ( ) _ __ ___ _ __ __ _ ___ ___ ___ | |__ | |_
+ | __| |/ | '_ \ / _ \ | '__| / _` | / _ \ / __| / _ \ | '_ \ | __|
+ | |_ | | | | | __/ | | | (_| | | __/ \__ \ | (_) | | | | | | |_
+ \__| |_| |_| \___| |_| \__,_| \___| |___/ \___/ |_| |_| \__|
+
+ _ _ _ _ _
+ ___ | |_ _ __ (_) _ __ ___ ___ | | | | ___ | |__ ___
+ / __| | __| | '_ \ | | | '__| / __| / __| | | | | / _ \ | '_ \ / __|
+ \__ \ | |_ | |_) | | | | | | (__ \__ \ | | | | | __/ | | | | \__ \
+ |___/ \__| | .__/ |_| |_| \___| |___/ |_| |_| \___| |_| |_| |___/
+ |_|
+ _ _ _ __ _ _ __
+ ___ (_) | |__ | |_ \ \ | |__ ___ (_) _ __ ___ / /
+ / __| | | | '_ \ | __| \ \ | '_ \ / __| | | | '__| / _ \ / /
+ \__ \ | | | | | | | |_ / / | | | | | (__ | | | | | __/ \ \
+ |___/ |_| |_| |_| \__| /_/ |_| |_| \___| |_| |_| \___| \_\
+
+ _ _
+ | |_ ( ) _ __ ___ __ _ __ __
+ | __| |/ | '_ \ / __| / _` | \ \ /\ / /
+ | |_ | | | | \__ \ | (_| | \ V V /
+ \__| |_| |_| |___/ \__,_| \_/\_/
+
+ _ _ _
+ _ __ ___ | | __ ___ (_) | |__ ___
+ | '_ \ / _ \ | |/ / / __| | | | '_ \ / __|
+ _ | | | | | __/ | < | (__ | | | | | | | (__
+ (_) |_| |_| \___| |_|\_\ \___| |_| |_| |_| \___|
+
+ _
+ _ __ (_)
+ | '_ \ | | _____ _____
+ | | | | | | |_____| |_____|
+ |_| |_| |_|
+
+ _ _ _ _ _ _
+ ___ __| | _ __ __ _ (_) | |__ ___ __| | _| || |_
+ / _ \ / _` | _____ | '_ \ / _` | | | | '_ \ / _ \ / _` | |_ .. _|
+ | __/ | (_| | |_____| | | | | | (_| | | | | |_) | | __/ | (_| | |_ _|
+ \___| \__,_| |_| |_| \__,_| |_| |_.__/ \___| \__,_| |_||_|
+
+ _
+ | | ___ __ __
+ | | / _ \ \ \ / /
+ | | | __/ \ V /
+ |_| \___| \_/
+
diff --git a/externals/figlet/tests/res016.txt b/externals/figlet/tests/res016.txt
new file mode 100644
index 000000000..cf70546d5
--- /dev/null
+++ b/externals/figlet/tests/res016.txt
@@ -0,0 +1,152 @@
+ ___ _ _ __
+ / (_) | | | | \ \
+ / / _ ___ ___| |__ | | __\ \
+ < < | |/ _ \/ __| '_ \| |/ / > >
+ \ \| | (_) \__ | | | | < / /
+ \_| |\___/|___|_| |_|_|\_/_/
+ _/ |
+ |__/
+ _ _ _ _ __ _ __ _
+ (_) | | | | ____ (_) / _| | _ / / | |
+ _ ___ ___| |__ | | __/ __ \ _ _ __ | |_| |_ ___ _(_) / ___| |_ ___
+ | |/ _ \/ __| '_ \| |/ / / _` | | '_ \| _| | | | \ \/ / / / _ | __/ __|
+ | | (_) \__ | | | | | | (_| | | | | | | | | |_| |> < _ / | __| || (__
+ | |\___/|___|_| |_|_|\_\ \__,_|_|_| |_|_| |_|\__,_/_/\_(_/_/ \___|\__\___|
+ _/ | \____/
+ |__/
+ ___ _ _ ___ _
+ / | | | | | | | \ \ | |
+ / /| | ___ __ _ _ __ ___ | |_ __ _| |_ ___ __| |\ \ ___| |__
+ / / | |/ _ \ / _` | '__/ _ \| __/ _` | __/ _ \ / _` | > / __| '_ \
+ / / | | (_) | (_| | | | (_) | || (_| | || __/| (_| |/ /\__ | | | |
+ /_/ |_|\___/ \__, |_| \___/ \__\__,_|\__\___(_\__,_/_/ |___|_| |_|
+ __/ |
+ |___/
+ _
+ /\| |/\
+ ______ _ __ \ ` ' /
+ |______| '_ \|_ _|
+ | | | |/ , . \
+ |_| |_|\/|_|\/
+
+
+ ___ _ _ __ _
+ / (_) | | | | \ \ | | _
+ / / _ ___ ___| |__ | | __\ \ __ _ _ __ __ _ ___| |__ ___(_)
+ < < | |/ _ \/ __| '_ \| |/ / > >/ _` | '_ \ / _` |/ __| '_ \ / _ \
+ \ \| | (_) \__ | | | | < / /| (_| | |_) | (_| | (__| | | | __/_
+ \_| |\___/|___|_| |_|_|\_/_/ \__,_| .__/ \__,_|\___|_| |_|\___(_)
+ _/ | | |
+ |__/ |_|
+ _ _ __ _ _ _
+ | (_) /_ | || | _ | |
+ | |_ _ __ ___ | | || |(_)___ _ _ _ __ | |_ __ ___ __
+ | | | '_ \ / _ \| |__ _|/ __| | | | '_ \| __/ _` \ \/ /
+ | | | | | | __/| | | | _\__ | |_| | | | | || (_| |> <
+ |_|_|_| |_|\___||_| |_|(_|___/\__, |_| |_|\__\__,_/_/\_\
+ __/ |
+ |___/
+
+
+ ___ _ __ _ __ ___ _ __ _ __ ___ __ _ _ __
+ / _ | '__| '__/ _ \| '__| '_ \ / _ \/ _` | '__|
+ | __| | | | | (_) | | | | | | __| (_| | |
+ \___|_| |_| \___/|_| |_| |_|\___|\__,_|_|
+
+
+ _ _ _ _
+ | | | | | | |
+ _ _ _ __ _____ ___ __ ___ ___| |_ ___ __| | |_ ___ | | _____ _ __
+ | | | | '_ \ / _ \ \/ | '_ \ / _ \/ __| __/ _ \/ _` | __/ _ \| |/ / _ | '_ \
+ | |_| | | | | __/> <| |_) | __| (__| || __| (_| | || (_) | | __| | | |
+ \__,_|_| |_|\___/_/\_| .__/ \___|\___|\__\___|\__,_|\__\___/|_|\_\___|_| |_|
+ | |
+ |_|
+ ___ _
+ ( \ \( )
+ \|| |/
+ \ \
+ / /
+ | |
+ /_/
+
+ ___ _ _ __ _
+ / (_) | | | | \ \ | | _
+ / / _ ___ ___| |__ | | __\ \ __ _ _ __ __ _ ___| |__ ___(_)
+ < < | |/ _ \/ __| '_ \| |/ / > >/ _` | '_ \ / _` |/ __| '_ \ / _ \
+ \ \| | (_) \__ | | | | < / /| (_| | |_) | (_| | (__| | | | __/_
+ \_| |\___/|___|_| |_|_|\_/_/ \__,_| .__/ \__,_|\___|_| |_|\___(_)
+ _/ | | |
+ |__/ |_|
+ _ _ __ _ _ ___ _
+ | (_) /_ | || | _( \ \( )
+ | |_ _ __ ___ | | || |(_)\|| |/
+ | | | '_ \ / _ \| |__ _| \ \
+ | | | | | | __/| | | | _ / /
+ |_|_|_| |_|\___||_| |_|(_) | |
+ /_/
+
+ ___ _ _ __ _ _ _ _
+ / (_) | | | | \ \ | | | | | | | |
+ / / _ ___ ___| |__ | | __\ \| |_| |__ ___ _ __ | | ___ | |_
+ < < | |/ _ \/ __| '_ \| |/ / > | __| '_ \ / _ | '_ \| |/ _ \| __|
+ \ \| | (_) \__ | | | | < / /| |_| | | | __| |_) | | (_) | |_
+ \_| |\___/|___|_| |_|_|\_/_/ \__|_| |_|\___| .__/|_|\___/ \__|
+ _/ | | |
+ |__/ |_|
+ _ _ _ _
+ | | | | (_) | |
+ | |_| |__ _ ___| | _____ _ __ ___
+ | __| '_ \| |/ __| |/ / _ | '_ \/ __|
+ | |_| | | | | (__| | __| | | \__ \
+ \__|_| |_|_|\___|_|\_\___|_| |_|___/
+
+
+ __ __ __ _ _ ___ _ _
+ / / / _|/ _(_) | | | \ \ | | | |
+ / / __ _ ___ _ _| |_| |_ _ ___| | __| |\ \| |_| |__ ___ ___ ___
+ < < / _` / __| | | | _| _| |/ _ | |/ _` | > | __| '_ \ / _ \/ __|/ _ \
+ \ | (_| \__ | |_| | | | | | | __| | (_| |/ /| |_| | | | (_) \__ | __/
+ \_\__,_|___/\__,_|_| |_| |_|\___|_|\__,_/_/ \__|_| |_|\___/|___/\___|
+
+
+ _ _ _ _ _ _ _
+ ( | | | | | | | (_) | |
+ __ _ _ __ ___ _ __|/| |_ ___| |__ ___| | |___ ___ _ __ _ _ __ | |_ ___
+ / _` | '__/ _ | '_ \ | __/ __| '_ \ / _ | | / __|/ __| '__| | '_ \| __/ __|
+ | (_| | | | __| | | || |_\__ | | | | __| | \__ | (__| | | | |_) | |_\__ \
+ \__,_|_| \___|_| |_| \__|___|_| |_|\___|_|_|___/\___|_| |_| .__/ \__|___/
+ | |
+ |_|
+ __ _ _ __ _ _ _ _ _
+ / / (_) | | \ \ | | | | (_) ( | |
+ / / ___ _ __ _ ___| |__ \ \| |_| |__ _ _____ ____ _ ___ _ __|/| |_
+ < < / _ | '__| |/ __| '_ \ > | __| '_ \| / __\ \ /\ / / _` / __| '_ \ | __|
+ \ | __| | | | (__| | | |/ /| |_| | | | \__ \\ V V | (_| \__ | | | || |_
+ \_\___|_| |_|\___|_| |_/_/ \__|_| |_|_|___/ \_/\_/ \__,_|___|_| |_| \__|
+
+
+ _ _ _
+ | | (_) | |
+ ___| |__ _ ___| | _____ _ __
+ / __| '_ \| |/ __| |/ / _ | '_ \
+ | (__| | | | | (__| | __| | | |_
+ \___|_| |_|_|\___|_|\_\___|_| |_(_)
+
+
+ _
+ (_)
+ ______ ______ _ _ __
+ |______|______| | '_ \
+ | | | | |
+ |_|_| |_|
+
+
+ _ _ _ _ _ _ _
+ _| || |_ | | | | (_) | | | |
+ |_ __ _| __| | ___| |__ _ __ _ _ __ ______ __| | _____ _____| |
+ _| || |_ / _` |/ _ | '_ \| |/ _` | '_ |______/ _` |/ _ \ \ / / _ | |
+ |_ __ _| (_| | __| |_) | | (_| | | | | | (_| | __/\ V | __| |
+ |_||_| \__,_|\___|_.__/|_|\__,_|_| |_| \__,_|\___| \_/ \___|_|
+
+
diff --git a/externals/figlet/tests/res017.txt b/externals/figlet/tests/res017.txt
new file mode 100644
index 000000000..3296f8c60
--- /dev/null
+++ b/externals/figlet/tests/res017.txt
@@ -0,0 +1,36 @@
+ ââââââââ ââ â
+ ââ âââââââââ
+ <âââââââââ ââ â>
+ ââââââââ ââ âââââââ ââââ â ââ â ââââââââââ ââ ââââââââââââââââââââââââ
+ ââ âââââââââ âââââ âââââ â â â â â âââ â â â â â ââ âââââ â â âââ â âââ
+ âââââââââ ââ ââââââ ââ âââââââ âââ âââ â ââââ ââââââââââ ââââ â â â â ââââ
+ ââ ââââ â ââ â â
+ â â ââââââ âââ â âââ
+ ââ> ââââ â â â â â
+ ââââââââ ââ â âââââââââââââ ââââ â âââ âââ âââ â ââââ ââââââââââ â
+ ââ âââââââââ ââââââââââ âââââââ â ââ ââââ âââââ âââââââ ââ âââ â
+ <âââââââââ ââ â> â ââ â âââââ âââââ âââââ ââââ âââ ââ âââ â â ââ â ââ â
+ âââââââââââââââ ââ âââââââââ â âââ ââââ ââââââââââââââââââ âââââââ ââââââ
+ ââââââââââ ââââ â ââââââââââ â ââ ââââ â âââââââ â ââââ â â â âââ ââââ â
+ ââââ ââ âââââ â â âââââ ââ â ââââ âââââ ââ ââââââ â âââââ â ââââ âââââ â
+ ââââ
+ âââ
+ ââ
+ ââââââââ ââ â âââââââââââââ ââââ â âââ âââ âââ â ââââ
+ ââ âââââââââ ââââââââââ âââââââ â ââ ââââ âââââ âââ
+ <âââââââââ ââ â> â ââ â âââââ âââââ âââââ ââââ âââ ââ ââ
+ ââââââââ ââ â ââââ ââââ ââââ ââââââ ââââ ââââââ ââââââ âââ
+ ââ âââââââââ â ââââââ ââââ â â â â âââââ ââ ââââ ââââ
+ <âââââââââ ââ â> â â ââââ â ââââââ â â â ââââââ âââââ ââââ
+ âââââââ ââââââââââââ ââ ââââ ââââââââââ âââââââââââââââ ââââ âââââ â
+ âââââââ ââââââââââââ â â â ââââ âââââââ ââââââââââ â â ââââââââââ â
+ <â ââââââââ â âââââââââ> â â ââââââââââ â ââ âââââ â â ââââ ââââââââââ
+ âââââââââââââââââââ
+ ââââ âââââââ â âââ
+ âââââââ âââ â âââ
+ âââââââââââ â ââââ âââââ âââââââââââââââ ââââ ââââââ ââââââ
+ ââââââââ âââ â âââââââ ââââââââââ â â â âââââ ââ ââââ â
+ <ââââ ââââââ â> â â âââââ ââââ âââââ â â ââââ ââââââ âââââ ââ
+ âââ ââ âââââ ââââââ ââ ââââ âââââ
+ ââââ ââ â â ââââââââââââ ââââ âââââ âââââ
+ ââ â #ââ âââââ ââ ââ â ââ âââ â ââââââ
diff --git a/externals/figlet/tests/res018.txt b/externals/figlet/tests/res018.txt
new file mode 100644
index 000000000..7551e081e
--- /dev/null
+++ b/externals/figlet/tests/res018.txt
@@ -0,0 +1,27 @@
+ âââââ â â âââââ â âââââââââ â â â âââââââ â âââââââââââââââââ ââ âââ âââ
+ â ââââââ â âââââââââââ âââ â ââ â ââââââ ââ â â âââ âââââââââ â âââââââ â
+ <ââââââ â â>ââââââ â âââââ â âââââ âââ âââââââ âââââââ âââââ ââââââââ>âââ ââ â
+ â â
+ âââ
+ â â
+ âââââ â â âââââââââ âââ â âââââââ â âââ ââââââ âââââââââââââââââââ
+ â ââââââ âââââââ âââââââ ââ ââââââââââââ ââââââââââââ âââ âââââââ
+ <ââââââ â â>â â â âââ âââââââââ ââââââââââââ ââ â âââ â âââ â âââ â â
+ â âââââ âââââââââââââââââ âââââââ
+ â â âââââââââ ââââ âââ âââââ âââ
+ âââ âââ â ââââââââââ ââââ âââ ââ
+ âââââ â â âââââââââ âââ â âââââââ â âââ
+ â ââââââ âââââââ âââââââ ââ âââââââ ââ
+ <ââââââ â â>â â â âââ âââââââââ âââââââââ
+ âââââ â â âââ âââââ âââââââ âââââ âââââââ
+ â ââââââ ââââââââ â ââ ââââââ âââââ âââ
+ <ââââââ â â> ââ âââ ââââââ ââ âââââ âââ âââ
+ âââââ âââââââââ ââ âââ ââââââââââââââââââââ âââ â âââââââââââââââ
+ âââââ âââââââââ â â ââââ âââââââââââ â ââââââââ â âââ âââââââââââ
+ <â âââââ â âââââââ> ââ âââââââ â âââ â ââââ âââââââââââ âââ ââââ
+ âââââââââ â âââ ââââââââââââââââââ âââââ ââââ
+ âââââââ âââ ââââââââââââââ â ââ âââââ âââââ â
+ <âââ âââââ â> ââ âââââââ âââ â ââââ âââââ âââ ââ
+ âââ ââââââ âââââ âââââ âââ
+ âââââ â â âââââââââ ââ âââ âââ
+ ââ â#ââââââ ââ â ââââââââââââ
diff --git a/externals/figlet/tests/res019.txt b/externals/figlet/tests/res019.txt
new file mode 100644
index 000000000..b1c4ee368
--- /dev/null
+++ b/externals/figlet/tests/res019.txt
@@ -0,0 +1,36 @@
+ â ââ âââââââ â
+ ââ âââââââ â â
+>â ââ âââââââââ<
+ âââââââââââââââââââââââââ ââââââââââ â â ââ ââ âââââ âââââ ââ âââââââ â
+ âââ â âââ â â âââââ ââ ââ â â â âââ â â â â ââ ââââ âââââââ âââââââ â â
+ââââ â â â â ââââ âââââââââââ âââ â ââââ ââ ââââââââ â ââââââ ââ âââââââââ
+â â ââ â ââââ ââ
+âââ â âââ ââââââ â â
+â â â â â ââââ >ââ
+â âââââââââ â ââââ â âââ âââââ ââ ââââ âââââââââââââ â ââ âââââââ â
+ â âââ â â âââââââ ââââ â ââââ âââ ââââââââ âââââââââ ââ âââââââ â â
+â ââ â â â â â âââ â ââââ ââââ âââââ âââââ âââââ ââ â â >â ââ âââââââââ<
+ââ ââââ âââââââ ââ ââââââââââââââââ ââââââ â â âââââââââââ âââââââââââââââ
+â ââââââ â â â â ââââ â â ââââââ â ââââ ââ â ââââââââââ â ââââ ââââââââââ
+â âââââ ââââ â ââ âââ â âââââââ â âââââ ââââ â ââ âââââ â â âââââ ââ ââââ
+âââ â
+ ââ â
+ ââ
+âââ â â âââ âââââ ââ ââââ âââââââââââââ â ââ âââââââ â
+ ââ â ââââ â ââââ âââ ââââââââ âââââââââ ââ âââââââ â â
+ ââ â ââââ ââââ âââââ âââââ âââââ ââ â â >â ââ âââââââââ<
+âââââ ââââ ââââââ ââââ âââââââ âââ ââââ ââââ â ââ âââââââ â
+ââââ ââââââ â ââââ â â â ââ âââ ââââââ â ââ âââââââ â â
+ââââ âââââ ââââââ â â â âââââââ ââââ â â >â ââ âââââââââ<
+â â ââââ ââââ ââââââ âââââââââ ââââââââââ ââââ ââ â âââââââââââ âââââââ
+â â âââââââââ â â ââââââââââ âââââââ ââââ â â ââ âââââââââââ âââââââ
+ââââââââââ ââââ â â âââââ ââ â ââââââââââ â â >ââ ââââââââ â âââââââ â<
+âââââââââââââââââââ
+âââ â ââââââââ âââ
+âââ â â ââ âââââââ
+ ââ ââââ ââââââ ââââ ââââââ âââââââââ âââââ ââââ â âââââââââââ
+ â ââââââ â âââââ â â ââââââââââ âââââââ â ââââ âââââââ
+ââ âââââ ââââââ ââââ â â âââââ ââââ âââââ â â >â ââââââ ââââ<
+â ââââ ââââââ ââ ââââââ âââââ ââ â
+â ââââ âââââ ââââ ââââââââââââ â â ââ ââââ
+ââââââ â âââââ â ââ ââââ âââââ # â ââ
diff --git a/externals/figlet/tests/res020.txt b/externals/figlet/tests/res020.txt
new file mode 100644
index 000000000..4de016c0e
--- /dev/null
+++ b/externals/figlet/tests/res020.txt
@@ -0,0 +1,140 @@
+ _ _
+ /o | | | | \
+/ __ , | | | | \
+\ | / \_/ \_|/ \ |/_) /
+ \|/\__/ \/ | |_/| \_//
+ /|
+ \|
+ _ _ _ _
+ o | | | | ____ o | | | | o /
+ __ , | | | | / __,\ _ _ | | | | /_ _|_ __
+ | / \_/ \_|/ \ |/_) | / | || / |/ | |/ |/ | | /\/ /|/ | /
+ |/\__/ \/ | |_/| \_/| \_/|/ |_/ | |_/|__/|__/ \_/|_/ /\_/o/ |__/|_/\___/
+/| \____/ |\
+\| |/
+ _ _
+ /| | | \ | |
+ / | | __ __, ,_ __ _|_ __, _|_ _ __| \ , | |
+ / |/ / \_/ | / | / \_| / | | |/ / | / / \_|/ \
+/ |__/\__/ \_/|/ |_/\__/ |_/\_/|_/|_/|__/o\_/|_// \/ | |_/
+ /|
+ \|
+
+
+ _ _ \|/
+-----/ |/ | --*--
+ | |_/ /|\
+
+
+ _ _ _
+ /o | | | | \ | | o
+/ __ , | | | | \ __, _ __, __ | | _
+\ | / \_/ \_|/ \ |/_) / / | |/ \_/ | / |/ \ |/
+ \|/\__/ \/ | |_/| \_// \_/|_/|__/ \_/|_/\___/| |_/|__/o
+ /| /|
+ \| \|
+ _ ,
+| | o /|| | o
+| | _ _ _ ||__|_ , _ _ _|_ __,
+|/ | / |/ | |/ | | / \_| | / |/ | | / | /\/
+|__/|_/ | |_/|__/ | | o \/ \_/|/ | |_/|_/\_/|_/ /\_/
+ /|
+ \|
+
+
+ _ ,_ ,_ __ ,_ _ _ _ __, ,_
+|/ / | / | / \_/ | / |/ | |/ / | / |
+|__/ |_/ |_/\__/ |_/ | |_/|__/\_/|_/ |_/
+
+
+ _
+ | | |
+ _ _ _ _ _ __ _|_ _ __| _|_ __ | | _ _ _
+| | / |/ | |/ /\/ |/ \_|/ / | |/ / | | / \_|/_) |/ / |/ |
+ \_/|_/ | |_/|__/ /\_/|__/ |__/\___/|_/|__/\_/|_/ |_/\__/ | \_/|__/ | |_/
+ /|
+ \|
+o o
+\\ /
+ |
+ >
+ |
+ /
+
+ _ _ _
+ /o | | | | \ | | o
+/ __ , | | | | \ __, _ __, __ | | _
+\ | / \_/ \_|/ \ |/_) / / | |/ \_/ | / |/ \ |/
+ \|/\__/ \/ | |_/| \_// \_/|_/|__/ \_/|_/\___/| |_/|__/o
+ /| /|
+ \| \|
+ _ , o o
+| | o /|| | o \\ /
+| | _ _ _ ||__|_ |
+|/ | / |/ | |/ | | >
+|__/|_/ | |_/|__/ | | o |
+ /
+
+ _ _ _ _
+ /o | | | | \ | | | |
+/ __ , | | | | \ _|_ | | _ _ | | __ _|_
+\ | / \_/ \_|/ \ |/_) / | |/ \ |/ |/ \_|/ / \_|
+ \|/\__/ \/ | |_/| \_// |_/| |_/|__/ |__/ |__/\__/ |_/
+ /| /|
+ \| \|
+ _ _
+ | | o | |
+_|_ | | __ | | _ _ _ ,
+ | |/ \ | / |/_) |/ / |/ | / \_
+ |_/| |_/|_/\___/| \_/|__/ | |_/ \/
+
+
+ _ _ _ _
+ / | | | | o | | | \ | |
+/ __, , | | | | _ | | __| \ _|_ | | __ , _
+\ / | / \_| | |/ |/ | |/ |/ / | / | |/ \ / \_/ \_|/
+ \\_/|_/ \/ \_/|_/|__/|__/|_/|__/|__/\_/|_// |_/| |_/\__/ \/ |__/
+ |\ |\
+ |/ |/
+ o _ _ _
+ / | | | | | |
+ __, ,_ _ _ _ _|_ , | | _ | | | |
+/ | / | |/ / |/ | | / \_|/ \ |/ |/ |/
+\_/|_/ |_/|__/ | |_/ |_/ \/ | |_/|__/|__/|__/
+
+
+
+ o
+ , __ ,_ _ _|_ ,
+/ \_/ / | | |/ \_| / \_
+ \/ \___/ |_/|_/|__/ |_/ \/
+ /|
+ \|
+ _ _
+ / o | | \ | | o
+/ _ ,_ __ | | \ _|_ | | ,
+\ |/ / | | / |/ \ / | |/ \ | / \_
+ \|__/ |_/|_/\___/| |_// |_/| |_/|_/ \/
+
+
+ o _ _
+ / | | o | |
+ __, , _ _ _|_ __ | | __ | | _ _ _
+| | |_/ | / \_/ |/ | | / |/ \ | / |/_) |/ / |/ |
+ \/ \/ \_/|_/ \/ | |_/ |_/ \___/| |_/|_/\___/| \_/|__/ | |_/o
+
+
+
+ o
+ _ _
+ ---------- | / |/ |
+ |_/ | |_/
+
+
+ _ _
+ | | | | | o | | |
+--+--+-- __| _ | | __, _ _ __| _ _ | |
+--+--+--/ | |/ |/ \_| / | / |/ |-----/ | |/ | |_|/ |/
+ | | \_/|_/|__/\_/ |_/\_/|_/ | |_/ \_/|_/|__/ \/ |__/|__/
+
+
diff --git a/externals/figlet/tests/res021.txt b/externals/figlet/tests/res021.txt
new file mode 100644
index 000000000..b083225db
--- /dev/null
+++ b/externals/figlet/tests/res021.txt
@@ -0,0 +1,36 @@
+ __ _ _ _ __ _ _ _ ____ _ __ _ __ _ ___ _ _ ___ _ __ _ _ _ __
+ / /(_) ___ ___| |__ | | __\ \ (_) ___ ___| |__ | | __/ __ \(_)_ __ / _| |_ ___ ___ / /__| |_ ___ / / | ___ __ _ _ __ ___ | |_ __ _| |_ ___ __| \ \ ___| |__ _ __ __/\__ / /(_) ___ ___| |__ | | __\ \
+/ / | |/ _ \/ __| '_ \| |/ / \ \ | |/ _ \/ __| '_ \| |/ / / _` | | '_ \| |_| | | | \ \/ (_) / / _ \ __/ __| / /| |/ _ \ / _` | '__/ _ \| __/ _` | __/ _ \ / _` |\ \ / __| '_ \ _____| '_ \ \ / / / | |/ _ \/ __| '_ \| |/ / \ \
+\ \ | | (_) \__ \ | | | < / / | | (_) \__ \ | | | < | (_| | | | | | _| | |_| |> < _ / / __/ || (__ / / | | (_) | (_| | | | (_) | || (_| | || __/| (_| |/ / \__ \ | | | |_____| | | | /_ _\ \ \ | | (_) \__ \ | | | < / /
+ \_\/ |\___/|___/_| |_|_|\_\/_/ _/ |\___/|___/_| |_|_|\_\ \__,_|_|_| |_|_| |_|\__,_/_/\_(_)_/ \___|\__\___/_/ |_|\___/ \__, |_| \___/ \__\__,_|\__\___(_)__,_/_/ |___/_| |_| |_| |_| \/ \_\/ |\___/|___/_| |_|_|\_\/_/
+ |__/ |__/ \____/ |___/ |__/
+ _ _ _ _ _ _ _ _ _ _ _ ___ _
+ __ _ _ __ __ _ ___| |__ ___ _ | (_)_ __ ___ / | || | _ ___ _ _ _ __ | |_ __ ___ __ ___ _ __ _ __ ___ _ __ _ __ ___ __ _ _ __ _ _ _ __ _____ ___ __ ___ ___| |_ ___ __| | | |_ ___ | | _____ _ __ ( ) \ ( )
+ / _` | '_ \ / _` |/ __| '_ \ / _ (_) | | | '_ \ / _ \ | | || |(_) / __| | | | '_ \| __/ _` \ \/ / / _ \ '__| '__/ _ \| '__| | '_ \ / _ \/ _` | '__| | | | | '_ \ / _ \ \/ / '_ \ / _ \/ __| __/ _ \/ _` | | __/ _ \| |/ / _ \ '_ \ \|| ||/
+| (_| | |_) | (_| | (__| | | | __/_ | | | | | | __/ | |__ _| \__ \ |_| | | | | || (_| |> < | __/ | | | | (_) | | | | | | __/ (_| | | | |_| | | | | __/> <| |_) | __/ (__| || __/ (_| | | || (_) | < __/ | | | > >
+ \__,_| .__/ \__,_|\___|_| |_|\___(_) |_|_|_| |_|\___| |_| |_|(_) |___/\__, |_| |_|\__\__,_/_/\_\ \___|_| |_| \___/|_| |_| |_|\___|\__,_|_| \__,_|_| |_|\___/_/\_\ .__/ \___|\___|\__\___|\__,_| \__\___/|_|\_\___|_| |_| | |
+ |_| |___/ |_| /_/
+ __ _ _ _ __ _ _ _ _ _ _ ___ _ __ _ _ _ __ _ _ _ _ _ _ _ _
+ / /(_) ___ ___| |__ | | __\ \ __ _ _ __ __ _ ___| |__ ___ _ | (_)_ __ ___ / | || | _ ( ) \ ( ) / /(_) ___ ___| |__ | | __\ \ | |_| |__ ___ _ __ | | ___ | |_ | |_| |__ (_) ___| | _____ _ __ ___
+/ / | |/ _ \/ __| '_ \| |/ / \ \ / _` | '_ \ / _` |/ __| '_ \ / _ (_) | | | '_ \ / _ \ | | || |(_) \|| ||/ / / | |/ _ \/ __| '_ \| |/ / \ \ | __| '_ \ / _ \ | '_ \| |/ _ \| __| | __| '_ \| |/ __| |/ / _ \ '_ \/ __|
+\ \ | | (_) \__ \ | | | < / / | (_| | |_) | (_| | (__| | | | __/_ | | | | | | __/ | |__ _| > > \ \ | | (_) \__ \ | | | < / / | |_| | | | __/ | |_) | | (_) | |_ | |_| | | | | (__| < __/ | | \__ \
+ \_\/ |\___/|___/_| |_|_|\_\/_/ \__,_| .__/ \__,_|\___|_| |_|\___(_) |_|_|_| |_|\___| |_| |_|(_) | | \_\/ |\___/|___/_| |_|_|\_\/_/ \__|_| |_|\___| | .__/|_|\___/ \__| \__|_| |_|_|\___|_|\_\___|_| |_|___/
+ |__/ |_| /_/ |__/ |_|
+ __ __ __ _ _ ___ _ _ _ _ _ _ _ _ _ __ _ _ __ _ _ _ _ _
+ / /__ _ ___ _ _ / _|/ _(_) ___| | __| \ \ | |_| |__ ___ ___ ___ __ _ _ __ ___ _ __ ( ) |_ ___| |__ ___| | | ___ ___ _ __(_)_ __ | |_ ___ / /___ _ __(_) ___| |__ \ \ | |_| |__ (_)___ __ ____ _ ___ _ __ ( ) |_
+/ // _` / __| | | | |_| |_| |/ _ \ |/ _` |\ \ | __| '_ \ / _ \/ __|/ _ \ / _` | '__/ _ \ '_ \|/| __| / __| '_ \ / _ \ | | / __|/ __| '__| | '_ \| __/ __| / // _ \ '__| |/ __| '_ \ \ \ | __| '_ \| / __| \ \ /\ / / _` / __| '_ \|/| __|
+\ \ (_| \__ \ |_| | _| _| | __/ | (_| |/ / | |_| | | | (_) \__ \ __/ | (_| | | | __/ | | | | |_ \__ \ | | | __/ | | \__ \ (__| | | | |_) | |_\__ \ \ \ __/ | | | (__| | | |/ / | |_| | | | \__ \ \ V V / (_| \__ \ | | | | |_
+ \_\__,_|___/\__,_|_| |_| |_|\___|_|\__,_/_/ \__|_| |_|\___/|___/\___| \__,_|_| \___|_| |_| \__| |___/_| |_|\___|_|_| |___/\___|_| |_| .__/ \__|___/ \_\___|_| |_|\___|_| |_/_/ \__|_| |_|_|___/ \_/\_/ \__,_|___/_| |_| \__|
+ |_|
+ _ _ _
+ ___| |__ (_) ___| | _____ _ __
+ / __| '_ \| |/ __| |/ / _ \ '_ \
+| (__| | | | | (__| < __/ | | |_
+ \___|_| |_|_|\___|_|\_\___|_| |_(_)
+
+ _ _ _ _ _ _ _ _
+ (_)_ __ _| || |_ __| | ___| |__ (_) __ _ _ __ __| | _____ _____| |
+ _____ _____ | | '_ \ |_ .. _|/ _` |/ _ \ '_ \| |/ _` | '_ \ _____ / _` |/ _ \ \ / / _ \ |
+ |_____|_____| | | | | | |_ _| (_| | __/ |_) | | (_| | | | |_____| (_| | __/\ V / __/ |
+ |_|_| |_| |_||_| \__,_|\___|_.__/|_|\__,_|_| |_| \__,_|\___| \_/ \___|_|
+
diff --git a/externals/figlet/tests/res022.txt b/externals/figlet/tests/res022.txt
new file mode 100644
index 000000000..fb6147b2d
--- /dev/null
+++ b/externals/figlet/tests/res022.txt
@@ -0,0 +1,1314 @@
+ __
+ / /
+/ /
+\ \
+ \_\
+
+
+ (
+ |
+ |
+ _/
+ |__
+
+ _
+ /
+ | (
+ \_
+
+
+ __
+ / _
+ \__
+ |__
+
+ _
+ | |
+ | '
+ | |
+ |_|
+
+ _
+ | |
+ | |
+ |
+ |_|
+
+__
+\ \
+ \ \
+ / /
+/_/
+
+
+ (
+ |
+ |
+ _/
+ |__
+
+ _
+ /
+ | (
+ \_
+
+
+ __
+ / _
+ \__
+ |__
+
+ _
+ | |
+ | '
+ | |
+ |_|
+
+ _
+ | |
+ | |
+ |
+ |_|
+
+
+ /
+ /
+ | |
+ \
+ \
+ _
+(_)
+| |
+| |
+|_|
+
+
+ _
+ | '
+ | |
+ |_|
+
+ _
+ /
+ | |
+ |
+ |_|
+
+ _
+| |
+| |
+| |
+|_|
+
+
+ _
+ | |
+ | |
+ \_
+
+
+ __
+ \ \
+ >
+ /_/
+
+
+ _
+(_)
+ _
+(_)
+
+
+
+ /
+ /
+ /_/
+
+
+ _
+ /
+ |
+ \_
+
+ _
+ | |
+ | _
+ | |
+ \_
+
+
+ _
+ /
+ | (
+ \_
+
+
+
+ /
+ /
+ /_/
+
+ _
+| |
+| |
+| |
+|_|
+
+
+ _
+ /
+ | (
+ \_
+
+
+ _
+ /
+ | (
+ \_
+ |_
+
+ _
+ | '
+ | |
+ |_|
+
+
+ _
+ /
+ | (
+ \_
+
+ _
+ | |
+ | _
+ | |
+ \_
+
+
+ _
+ /
+ | (
+ \_
+
+ _
+ | |
+ | _
+ | |
+ \_
+
+
+ _
+ /
+ |
+ \_
+
+
+
+
+ _
+(_)
+
+
+ _
+ /
+ | (
+ \_
+
+__
+\ \
+ \ \
+ / /
+/_/
+
+
+ __
+ / _
+ \__
+ |__
+
+ _
+ | |
+ | '
+ | |
+ |_|
+
+
+
+ __
+ |__
+
+
+
+ _
+ | '
+ | |
+ |_|
+
+
+ __/
+ \
+ /_
+ \
+
+ __
+ / /
+/ /
+\ \
+ \_\
+
+
+ (
+ |
+ |
+ _/
+ |__
+
+ _
+ /
+ | (
+ \_
+
+
+ __
+ / _
+ \__
+ |__
+
+ _
+ | |
+ | '
+ | |
+ |_|
+
+ _
+ | |
+ | |
+ |
+ |_|
+
+__
+\ \
+ \ \
+ / /
+/_/
+
+
+ _
+ /
+ | (
+ \_
+
+
+ _
+ | '
+ | |
+ | .
+ |_|
+
+ _
+ /
+ | (
+ \_
+
+
+ _
+ /
+ | (
+ \_
+
+ _
+ | |
+ | '
+ | |
+ |_|
+
+
+ _
+ /
+ |
+ \_
+
+
+ _
+(_)
+ _
+(_)
+
+ _
+| |
+| |
+| |
+|_|
+
+ _
+(_)
+| |
+| |
+|_|
+
+
+ _
+ | '
+ | |
+ |_|
+
+
+ _
+ /
+ |
+ \_
+
+ _
+/ |
+| |
+| |
+|_|
+
+ _
+ | |
+ | |
+ |__
+
+
+
+ _
+(_)
+ _
+(_)
+
+
+ __
+ / _
+ \__
+ |__
+
+
+ _
+ | |
+ | |
+ \_
+ |_
+
+ _
+ | '
+ | |
+ |_|
+
+ _
+ | |
+ | _
+ | |
+ \_
+
+
+ _
+ /
+ | (
+ \_
+
+
+ __
+ \ \
+ >
+ /_/
+
+
+ _
+ /
+ |
+ \_
+
+
+ _
+ | '
+ | |
+ |_|
+
+
+ _
+ | '
+ | |
+ |_|
+
+
+ _
+ /
+ | (
+ \_
+
+
+ _
+ | '
+ | |
+ |_|
+
+
+ _
+ | '
+ | |
+ |_|
+
+
+ _
+ /
+ |
+ \_
+
+
+ _
+ /
+ | (
+ \_
+
+
+ _
+ | '
+ | |
+ |_|
+
+
+ _
+ | |
+ | |
+ \_
+
+
+ _
+ | '
+ | |
+ |_|
+
+
+ _
+ /
+ |
+ \_
+
+
+ __
+ \ \
+ >
+ /_/
+
+
+ _
+ | '
+ | |
+ | .
+ |_|
+
+ _
+ /
+ |
+ \_
+
+
+ _
+ /
+ | (
+ \_
+
+ _
+ | |
+ | _
+ | |
+ \_
+
+
+ _
+ /
+ |
+ \_
+
+
+ _
+ /
+ | (
+ \_
+
+ _
+ | |
+ | _
+ | |
+ \_
+
+
+ _
+ /
+ | (
+ \_
+
+ _
+ | |
+ | |
+ |
+ |_|
+
+
+ _
+ /
+ |
+ \_
+
+
+ _
+ | '
+ | |
+ |_|
+
+ _
+( )
+ \|
+
+
+
+ __
+ \ \
+ |
+ >
+ |
+ /_/
+ _
+( )
+|/
+
+
+
+ __
+ / /
+/ /
+\ \
+ \_\
+
+
+ (
+ |
+ |
+ _/
+ |__
+
+ _
+ /
+ | (
+ \_
+
+
+ __
+ / _
+ \__
+ |__
+
+ _
+ | |
+ | '
+ | |
+ |_|
+
+ _
+ | |
+ | |
+ |
+ |_|
+
+__
+\ \
+ \ \
+ / /
+/_/
+
+
+ _
+ /
+ | (
+ \_
+
+
+ _
+ | '
+ | |
+ | .
+ |_|
+
+ _
+ /
+ | (
+ \_
+
+
+ _
+ /
+ | (
+ \_
+
+ _
+ | |
+ | '
+ | |
+ |_|
+
+
+ _
+ /
+ |
+ \_
+
+
+ _
+(_)
+ _
+(_)
+
+ _
+| |
+| |
+| |
+|_|
+
+ _
+(_)
+| |
+| |
+|_|
+
+
+ _
+ | '
+ | |
+ |_|
+
+
+ _
+ /
+ |
+ \_
+
+ _
+/ |
+| |
+| |
+|_|
+
+ _
+ | |
+ | |
+ |__
+
+
+
+ _
+(_)
+ _
+(_)
+
+ _
+( )
+ \|
+
+
+
+ __
+ \ \
+ |
+ >
+ |
+ /_/
+ _
+( )
+|/
+
+
+
+ __
+ / /
+/ /
+\ \
+ \_\
+
+
+ (
+ |
+ |
+ _/
+ |__
+
+ _
+ /
+ | (
+ \_
+
+
+ __
+ / _
+ \__
+ |__
+
+ _
+ | |
+ | '
+ | |
+ |_|
+
+ _
+ | |
+ | |
+ |
+ |_|
+
+__
+\ \
+ \ \
+ / /
+/_/
+
+ _
+ | |
+ | _
+ | |
+ \_
+
+ _
+ | |
+ | '
+ | |
+ |_|
+
+
+ _
+ /
+ |
+ \_
+
+
+ _
+ | '
+ | |
+ | .
+ |_|
+ _
+| |
+| |
+| |
+|_|
+
+
+ _
+ /
+ | (
+ \_
+
+ _
+ | |
+ | _
+ | |
+ \_
+
+ _
+ | |
+ | _
+ | |
+ \_
+
+ _
+ | |
+ | '
+ | |
+ |_|
+
+ _
+(_)
+| |
+| |
+|_|
+
+
+ _
+ /
+ | (
+ \_
+
+ _
+ | |
+ | |
+ |
+ |_|
+
+
+ _
+ /
+ |
+ \_
+
+
+ _
+ | '
+ | |
+ |_|
+
+
+ __
+ / _
+ \__
+ |__
+
+ __
+ / /
+/ /
+\ \
+ \_\
+
+
+ _
+ /
+ | (
+ \_
+
+
+ __
+ / _
+ \__
+ |__
+
+
+ _
+ | |
+ | |
+ \_
+
+ _
+ /
+ | |
+ |
+ |_|
+
+ _
+ /
+ | |
+ |
+ |_|
+
+ _
+(_)
+| |
+| |
+|_|
+
+
+ _
+ /
+ |
+ \_
+
+ _
+| |
+| |
+| |
+|_|
+
+
+ _
+ /
+ | (
+ \_
+
+__
+\ \
+ \ \
+ / /
+/_/
+
+ _
+ | |
+ | _
+ | |
+ \_
+
+ _
+ | |
+ | '
+ | |
+ |_|
+
+
+ _
+ /
+ | (
+ \_
+
+
+ __
+ / _
+ \__
+ |__
+
+
+ _
+ /
+ |
+ \_
+
+
+ _
+ /
+ | (
+ \_
+
+
+ _
+ | '
+ | |
+ |_|
+
+
+ _
+ /
+ |
+ \_
+
+
+ _
+ | '
+ | |
+ |_|
+
+ _
+( )
+|/
+
+
+
+ _
+ | |
+ | _
+ | |
+ \_
+
+
+ __
+ / _
+ \__
+ |__
+
+ _
+ | |
+ | '
+ | |
+ |_|
+
+
+ _
+ /
+ |
+ \_
+
+ _
+| |
+| |
+| |
+|_|
+
+ _
+| |
+| |
+| |
+|_|
+
+
+ __
+ / _
+ \__
+ |__
+
+
+ _
+ /
+ | (
+ \_
+
+
+ _
+ | '
+ | |
+ |_|
+
+ _
+(_)
+| |
+| |
+|_|
+
+
+ _
+ | '
+ | |
+ | .
+ |_|
+ _
+ | |
+ | _
+ | |
+ \_
+
+
+ __
+ / _
+ \__
+ |__
+
+ __
+ / /
+/ /
+\ \
+ \_\
+
+
+ _
+ /
+ |
+ \_
+
+
+ _
+ | '
+ | |
+ |_|
+
+ _
+(_)
+| |
+| |
+|_|
+
+
+ _
+ /
+ | (
+ \_
+
+ _
+ | |
+ | '
+ | |
+ |_|
+
+__
+\ \
+ \ \
+ / /
+/_/
+
+ _
+ | |
+ | _
+ | |
+ \_
+
+ _
+ | |
+ | '
+ | |
+ |_|
+
+ _
+(_)
+| |
+| |
+|_|
+
+
+ __
+ / _
+ \__
+ |__
+
+
+ __
+ \ \
+ \
+ \
+
+
+ _
+ /
+ | (
+ \_
+
+
+ __
+ / _
+ \__
+ |__
+
+
+ _
+ | '
+ | |
+ |_|
+
+ _
+( )
+|/
+
+
+
+ _
+ | |
+ | _
+ | |
+ \_
+
+
+ _
+ /
+ | (
+ \_
+
+ _
+ | |
+ | '
+ | |
+ |_|
+
+ _
+(_)
+| |
+| |
+|_|
+
+
+ _
+ /
+ | (
+ \_
+
+ _
+ | |
+ | |
+ |
+ |_|
+
+
+ _
+ /
+ |
+ \_
+
+
+ _
+ | '
+ | |
+ |_|
+
+
+
+
+ _
+(_)
+
+
+
+
+
+
+
+
+
+ __
+ |__
+
+
+
+
+ __
+ |__
+
+
+ _
+(_)
+| |
+| |
+|_|
+
+
+ _
+ | '
+ | |
+ |_|
+
+
+ _|
+ |_
+ |_
+ |
+
+
+ _
+ /
+ | (
+ \_
+
+
+ _
+ /
+ |
+ \_
+
+ _
+ | |
+ | '
+ | |
+ |_.
+
+ _
+(_)
+| |
+| |
+|_|
+
+
+ _
+ /
+ | (
+ \_
+
+
+ _
+ | '
+ | |
+ |_|
+
+
+
+ __
+ |__
+
+
+
+ _
+ /
+ | (
+ \_
+
+
+ _
+ /
+ |
+ \_
+
+
+ __
+ \ \
+ \
+ \
+
+
+ _
+ /
+ |
+ \_
+
+ _
+| |
+| |
+| |
+|_|
+
diff --git a/externals/figlet/tests/res023.txt b/externals/figlet/tests/res023.txt
new file mode 100644
index 000000000..d4d7a719d
--- /dev/null
+++ b/externals/figlet/tests/res023.txt
@@ -0,0 +1,90 @@
+ __ _ _ _ __
+ / / (_) ___ ___| |_ | |__\ \
+ < < | |/ _ \(_-<| ' \ | / / > >
+ \_\_/ |\___//__/|_||_||_\_\/_/
+ |__/
+ _ _ _ ____ _ __ _ _ __ _
+ (_) ___ ___| |_ | |__ / __ \ (_) _ _ / _|| | _ _ __ __(_) / /___ | |_
+ | |/ _ \(_-<| ' \ | / // / _` || || ' \ | _|| || || |\ \ / _ / // -_)| _|
+ _/ |\___//__/|_||_||_\_\\ \__,_||_||_||_||_| |_| \_,_|/_\_\(_)/_/ \___| \__|
+ |__/ \____/
+ __ _ _ _ _ __ _
+ __ / /| | ___ __ _ _ _ ___ | |_ __ _ | |_ ___ __| |\ \ ___| |_
+ / _| / / | |/ _ \/ _` || '_|/ _ \| _|/ _` || _|/ -_) _ / _` | > > (_-<| ' \
+ \__|/_/ |_|\___/\__, ||_| \___/ \__|\__,_| \__|\___|(_)\__,_|/_/ /__/|_||_|
+ |___/
+ __ _ _ _ __
+ ___ _ _ _/\_ / / (_) ___ ___| |_ | |__\ \
+ |___|| ' \ > < < < | |/ _ \(_-<| ' \ | / / > >
+ |_||_| \/ \_\_/ |\___//__/|_||_||_\_\/_/
+ |__/
+ _ _ _ _ _ _ _ _
+ __ _ _ __ __ _ __ | |_ ___ (_) | |(_) _ _ ___ / || | |(_)
+ / _` || '_ \/ _` |/ _|| ' \ / -_) _ | || || ' \ / -_) | ||_ _|_
+ \__,_|| .__/\__,_|\__||_||_|\___|(_) |_||_||_||_|\___| |_| |_|(_)
+ |_|
+ _
+ ___ _ _ _ _ | |_ __ _ __ __ ___ _ _ _ _ ___ _ _
+ (_-<| || || ' \| _|/ _` |\ \ / / -_)| '_|| '_|/ _ \| '_|
+ /__/ \_, ||_||_|\__|\__,_|/_\_\ \___||_| |_| \___/|_|
+ |__/
+ _ _
+ _ _ ___ __ _ _ _ _ _ _ _ ___ __ __ _ __ ___ __ | |_ ___ __| |
+ | ' \ / -_)/ _` || '_| | || || ' \ / -_)\ \ /| '_ \/ -_)/ _|| _|/ -_)/ _` |
+ |_||_|\___|\__,_||_| \_,_||_||_|\___|/_\_\| .__/\___|\__| \__|\___|\__,_|
+ |_|
+ _ _ _ __ _ __ _ _ _ __
+ | |_ ___ | |__ ___ _ _ ( )\ \ ( ) / / (_) ___ ___| |_ | |__\ \
+ | _|/ _ \| / // -_)| ' \ \| | |_|/ < < | |/ _ \(_-<| ' \ | / / > >
+ \__|\___/|_\_\\___||_||_| | | \_\_/ |\___//__/|_||_||_\_\/_/
+ /_/ |__/
+ _ _ _ _ _ _ _ _ _ __ _
+ __ _ _ __ __ _ __ | |_ ___ (_) | |(_) _ _ ___ / || | |(_) ( )\ \ ( )
+ / _` || '_ \/ _` |/ _|| ' \ / -_) _ | || || ' \ / -_) | ||_ _|_ \| | |_|/
+ \__,_|| .__/\__,_|\__||_||_|\___|(_) |_||_||_||_|\___| |_| |_|(_) | |
+ |_| /_/
+ __ _ _ _ __ _ _ _ _
+ / / (_) ___ ___| |_ | |__\ \ | |_ | |_ ___ _ __ | | ___ | |_
+ < < | |/ _ \(_-<| ' \ | / / > > | _|| ' \ / -_) | '_ \| |/ _ \| _|
+ \_\_/ |\___//__/|_||_||_\_\/_/ \__||_||_|\___| | .__/|_|\___/ \__|
+ |__/ |_|
+ _ _ _ _
+ | |_ | |_ (_) __ | |__ ___ _ _ ___
+ | _|| ' \ | |/ _|| / // -_)| ' \ (_-<
+ \__||_||_||_|\__||_\_\\___||_||_|/__/
+
+ __ __ __ _ _ _ __ _ _
+ / / __ _ ___ _ _ / _| / _|(_) ___ | | __| |\ \ | |_ | |_ ___ ___ ___
+ < < / _` |(_-<| || || _|| _|| |/ -_)| |/ _` | > > | _|| ' \ / _ \(_-</ -_)
+ \_\\__,_|/__/ \_,_||_| |_| |_|\___||_|\__,_|/_/ \__||_||_|\___//__/\___|
+
+ _ _ _ _ _
+ __ _ _ _ ___ _ _ ( )| |_ ___| |_ ___ | || |
+ / _` || '_|/ -_)| ' \|/ | _| (_-<| ' \ / -_)| || |
+ \__,_||_| \___||_||_| \__| /__/|_||_|\___||_||_|
+
+ _ _ __ _ _ __
+ ___ __ _ _ (_) _ __ | |_ ___ / / ___ _ _ (_) __ | |_ \ \
+ (_-</ _|| '_|| || '_ \| _|(_-< < < / -_)| '_|| |/ _|| ' \ > >
+ /__/\__||_| |_|| .__/ \__|/__/ \_\\___||_| |_|\__||_||_|/_/
+ |_|
+ _ _ _ _ _
+ | |_ | |_ (_) ___ __ __ __ __ _ ___ _ _ ( )| |_
+ | _|| ' \ | |(_-< \ V V // _` |(_-<| ' \|/ | _|
+ \__||_||_||_|/__/ \_/\_/ \__,_|/__/|_||_| \__|
+
+ _ _ _
+ __ | |_ (_) __ | |__ ___ _ _
+ / _|| ' \ | |/ _|| / // -_)| ' \ _
+ \__||_||_||_|\__||_\_\\___||_||_|(_)
+
+ _
+ ___ ___ (_) _ _
+ |___||___| | || ' \
+ |_||_||_|
+
+ _ _ _ _ _ _ _
+ _| | |_ __| | ___ | |__ (_) __ _ _ _ ___ __| | ___ __ __ ___ | |
+ |_ . _|/ _` |/ -_)| '_ \| |/ _` || ' \|___|/ _` |/ -_)\ V // -_)| |
+ |_ _|\__,_|\___||_.__/|_|\__,_||_||_| \__,_|\___| \_/ \___||_|
+ |_|_|
diff --git a/externals/figlet/tests/res024.txt b/externals/figlet/tests/res024.txt
new file mode 100644
index 000000000..8f1923cef
--- /dev/null
+++ b/externals/figlet/tests/res024.txt
@@ -0,0 +1,39 @@
+fonts/646-ca.flc
+fonts/646-ca2.flc
+fonts/646-cn.flc
+fonts/646-cu.flc
+fonts/646-de.flc
+fonts/646-dk.flc
+fonts/646-es.flc
+fonts/646-es2.flc
+fonts/646-fr.flc
+fonts/646-gb.flc
+fonts/646-hu.flc
+fonts/646-irv.flc
+fonts/646-it.flc
+fonts/646-jp.flc
+fonts/646-kr.flc
+fonts/646-no.flc
+fonts/646-no2.flc
+fonts/646-pt.flc
+fonts/646-pt2.flc
+fonts/646-se.flc
+fonts/646-se2.flc
+fonts/646-yu.flc
+fonts/8859-2.flc
+fonts/8859-3.flc
+fonts/8859-4.flc
+fonts/8859-5.flc
+fonts/8859-7.flc
+fonts/8859-8.flc
+fonts/8859-9.flc
+fonts/frango.flc
+fonts/hz.flc
+fonts/ilhebrew.flc
+fonts/jis0201.flc
+fonts/koi8r.flc
+fonts/moscow.flc
+fonts/upper.flc
+fonts/ushebrew.flc
+fonts/uskata.flc
+fonts/utf8.flc
diff --git a/externals/figlet/tests/res025.txt b/externals/figlet/tests/res025.txt
new file mode 100644
index 000000000..12b3f9549
--- /dev/null
+++ b/externals/figlet/tests/res025.txt
@@ -0,0 +1,8 @@
+########## ## # #
+ ### ## ########## ####### ##########
+ # ## # # # # ##
+ # ## # ## # ## #
+ # # ## # ## #
+ # # ## # ## ##
+ # # ## ########## #
+
diff --git a/externals/figlet/tests/res026.txt b/externals/figlet/tests/res026.txt
new file mode 100644
index 000000000..12b3f9549
--- /dev/null
+++ b/externals/figlet/tests/res026.txt
@@ -0,0 +1,8 @@
+########## ## # #
+ ### ## ########## ####### ##########
+ # ## # # # # ##
+ # ## # ## # ## #
+ # # ## # ## #
+ # # ## # ## ##
+ # # ## ########## #
+
diff --git a/externals/figlet/tests/res027.txt b/externals/figlet/tests/res027.txt
new file mode 100644
index 000000000..7f6545f86
--- /dev/null
+++ b/externals/figlet/tests/res027.txt
@@ -0,0 +1,430 @@
+ .--. .--. .---. .---. .-'''-. ,-----. .-./`)
+ | | _/ / | | |_ _| / _ \ .' .-, '. \ '_ .') _.--``)
+ | (`' ) / | | ( ' ) (`' )/`--' / ,-.| \ _ \ (_ (_) _)/_ _.-`
+ |(_ ()_) | '-(_{;}_)(_ o _). ; \ '_ / | : / . \/( ' )
+ | (_,_) __ | (_,_) (_,_). '. | _`,/ \ _/ | ___ |-'`|((_{;}_)
+ | |\ \ | || _ _--. | .---. \ :: ( '\_/ \ ;| | | ' \(_,_)
+ | | \ `' /|( ' ) | | \ `-' | \ `"/ \ ) / | `-' / \ `-.
+ | | \ / (_{;}_)| | \ / '. \_/``".' \ / `---._)
+ `--' `'-' '(_,_) '---' `-...-' '-----' `-..-'
+
+
+ (``--._
+ `-._ _\
+ ( ` )\
+ (_{;}_))
+ (_,_)/
+ .-' /
+ (_.---'
+
+
+ _-_'''-. .--. .--. .---. .---. .-'''-. ,-----. .-./`)
+ ( ' ) \ | | _/ / | | |_ _| / _ \ .' .-, '. \ '_ .')
+ (_{;}_) '| (`' ) / | | ( ' ) (`' )/`--' / ,-.| \ _ \ (_ (_) _)
+ .(_,_)--. ||(_ ()_) | '-(_{;}_)(_ o _). ; \ '_ / | : / . \
+ | | / || (_,_) __ | (_,_) (_,_). '. | _`,/ \ _/ | ___ |-'`|
+ ' | /| |\ \ | || _ _--. | .---. \ :: ( '\_/ \ ;| | | '
+ \ \____/ | | \ `' /|( ' ) | | \ `-' | \ `"/ \ ) / | `-' /
+ \ / | | \ / (_{;}_)| | \ / '. \_/``".' \ /
+ `'-...-' `--' `'-' '(_,_) '---' `-...-' '-----' `-..-'
+
+ _ _ _____ __ ___ _ .---. ________ ,---. .--..-./`)
+ ( ` ) \ _\ / /.' | | | | ,_| | || \ | |\ .-.')
+ (_{;}_).-./ ). / ' | .' | |,-./ ) | .----'| , \ | |/ `-' \
+ (_,_) \ '_ .') .' .' '_ | |\ '_ '`) | _|____ | |\_ \| | `-'`"`
+ (_ (_) _) ' ' ( \.-.| > (_) ) |_( )_ || _( )_\ | .---.
+ _ / \ \ ' (`. _` /|( . .-' (_ o._)__|| (_ o _) | | |
+ _( )_ `-'`-' \ | (_ (_) _) `-'`-'|___ |(_,_) | (_,_)\ | | |
+ (_ o _)/ / \ \ \ / . \ / | \| | | | | | | |
+ (_,_)'--' '----' ``-'`-'' `--------`'---' '--' '--' '---'
+
+ .---. _ _ _______ ,---------. .-''-. _ _
+ | ,_| ( ' ) / __ \\ \ .'_ _ \ ( ' )
+ ,-./ ) (_{;}_) | ,_/ \__)`--. ,---'/ ( ` ) ' (_{;}_)
+ \ '_ '`) (_,_),-./ ) | \ . (_ o _) | (_,_)
+ > (_) ) // \ '_ '`) :_ _: | (_,_)___| //
+ ( . .-' // > (_) ) __ (_I_) ' \ .---. //
+ `-'`-'|___ ,-'/ ( . .-'_/ ) (_(=)_) \ `-' /,-'/
+ | \) ( `-'`-' / (_I_) \ /) (
+ `--------``---' `._____.' '---' `'-..-' `---'
+
+ ____ ,---------. ,-----. .-------. .-_'''-. ,-----.
+ .' __ `.\ \ .' .-, '. | _ _ \ '_( )_ \ .' .-, '.
+ / ' \ \`--. ,---'/ ,-.| \ _ \ | ( ' ) | |(_ o _)| ' / ,-.| \ _ \
+ |___| / | | \ ; \ '_ / | :|(_ o _) / . (_,_)/___| ; \ '_ / | :
+ _.-` | :_ _: | _`,/ \ _/ || (_,_).' __ | | .-----.| _`,/ \ _/ |
+ .' _ | (_I_) : ( '\_/ \ ;| |\ \ | |' \ '- .': ( '\_/ \ ;
+ | _( )_ | (_(=)_) \ `"/ \ ) / | | \ `' / \ `-'` | \ `"/ \ ) /
+ \ (_ o _) / (_I_) '. \_/``".' | | \ / \ / '. \_/``".'
+ '.(_,_).' '---' '-----' ''-' `'-' `'-...-' '-----'
+
+ .---. .---. .-'''-. ______ .-''-. ,---------.
+ | | |_ _| / _ \ (``--._ | _ `''. .'_ _ \\ \
+ | | ( ' ) (`' )/`--' `-._ _\ | _ | ) _ \ / ( ` ) '`--. ,---'
+ | '-(_{;}_)(_ o _). ( ` )\ |( ''_' ) | . (_ o _) | | \
+ | (_,_) (_,_). '. (_{;}_))| . (_) `. | | (_,_)___| :_ _:
+ | _ _--. | .---. \ : (_,_)/ |(_ ._) '_ _' \ .---. (_I_)
+ |( ' ) | | \ `-' | .-' / | (_.\.' /( ` )\ `-' / (_(=)_)
+ (_{;}_)| | \ / (_.---' | .'(_{;}_)\ / (_I_)
+ '(_,_) '---' `-...-' '-----'` (_,_) `'-..-' '---'
+
+ ,---. .--.
+ .-, | \ | |
+ ,-.| \ _ | , \ | |
+ \ '_ / | | |\_ \| | _ _ _ _
+ _`,/ \ _/ | _( )_\ | ( ' )--( ' )
+ ( '\_/ \ | (_ o _) |(_{;}_)(_{;}_)
+ `"/ \ ) | (_,_)\ | (_,_)--(_,_)
+ \_/``" | | | |
+ '--' '--'
+
+ .--. .--. .---. .---. .-'''-. ,-----. .-./`)
+ | | _/ / | | |_ _| / _ \ .' .-, '. \ '_ .') _.--``)
+ | (`' ) / | | ( ' ) (`' )/`--' / ,-.| \ _ \ (_ (_) _)/_ _.-`
+ |(_ ()_) | '-(_{;}_)(_ o _). ; \ '_ / | : / . \/( ' )
+ | (_,_) __ | (_,_) (_,_). '. | _`,/ \ _/ | ___ |-'`|((_{;}_)
+ | |\ \ | || _ _--. | .---. \ :: ( '\_/ \ ;| | | ' \(_,_)
+ | | \ `' /|( ' ) | | \ `-' | \ `"/ \ ) / | `-' / \ `-.
+ | | \ / (_{;}_)| | \ / '. \_/``".' \ / `---._)
+ `--' `'-' '(_,_) '---' `-...-' '-----' `-..-'
+
+
+ (``--._
+ `-._ _\
+ ( ` )\
+ (_{;}_))
+ (_,_)/
+ .-' /
+ (_.---'
+
+
+ _ _ .-''-. .---. .---. _______ ____ .-------. ____
+ ( ` ) .'_ _ \ | | |_ _| / __ \ .' __ `. \ _(`)_ \ .' __ `.
+ (_{;}_)/ ( ` ) '| | ( ' ) | ,_/ \__) / ' \ \| (_ o._)|/ ' \ \
+ (_,_). (_ o _) || '-(_{;}_),-./ ) |___| / || (_,_) /|___| / |
+ | (_,_)___|| (_,_) \ '_ '`) _.-` || '-.-' _.-` |
+ _ ' \ .---.| _ _--. | > (_) ) __ .' _ || | .' _ |
+ _( )_ \ `-' /|( ' ) | | ( . .-'_/ )| _( )_ || | | _( )_ |
+ (_ o _) \ / (_{;}_)| | `-'`-' / \ (_ o _) // ) \ (_ o _) /
+ (_,_) `'-..-' '(_,_) '---' `._____.' '.(_,_).' `---' '.(_,_).'
+
+ _ _ ,---. ,---. .-''-. ,---. .--..-./`) .---.
+ ( ` ) /,--.| /_ | .'_ _ \ | \ | |\ .-.') | ,_|
+ (_{;}_) //_ || ,_ | / ( ` ) '| , \ | |/ `-' \,-./ )
+ (_,_) /_( )_|| ,-./ )| . (_ o _) || |\_ \| | `-'`"`\ '_ '`)
+ /(_ o _)| \ '_ '`) | (_,_)___|| _( )_\ | .---. > (_) )
+ _ / /(_,_)||_ > (_) ) ' \ .---.| (_ o _) | | | ( . .-'
+ _( )_ / `-----' ||( . .-' \ `-' /| (_,_)\ | | | `-'`-'|___
+ (_ o _)`-------|||-' `-'`-'| \ / | | | | | | | \
+ (_,_) '-' '---' `'-..-' '--' '--' '---' `--------`
+
+ _____ __ ____ ,---------. ,---. .--. ____ __ .-'''-.
+ \ _\ / / .' __ `.\ \| \ | | \ \ / // _ \
+ .-./ ). / ' / ' \ \`--. ,---'| , \ | | \ _. / '(`' )/`--'
+ \ '_ .') .' |___| / | | \ | |\_ \| | _( )_ .'(_ o _).
+ (_ (_) _) ' _.-` | :_ _: | _( )_\ | ___(_ o _)' (_,_). '.
+ / \ \ .' _ | (_I_) | (_ o _) || |(_,_)' .---. \ :
+ `-'`-' \ | _( )_ | (_(=)_) | (_,_)\ || `-' / \ `-' |
+ / / \ \\ (_ o _) / (_I_) | | | | \ / \ /
+ '--' '----''.(_,_).' '---' '--' '--' `-..-' `-...-'
+
+ .-------. ,-----. .-------. .-------. .-''-.
+ | _ _ \ .' .-, '. | _ _ \ | _ _ \ .'_ _ \
+ | ( ' ) | / ,-.| \ _ \ | ( ' ) | | ( ' ) | / ( ` ) '
+ |(_ o _) / ; \ '_ / | :|(_ o _) / |(_ o _) / . (_ o _) |
+ | (_,_).' __ | _`,/ \ _/ || (_,_).' __ | (_,_).' __ | (_,_)___|
+ | |\ \ | |: ( '\_/ \ ;| |\ \ | || |\ \ | |' \ .---.
+ | | \ `' / \ `"/ \ ) / | | \ `' /| | \ `' / \ `-' /
+ | | \ / '. \_/``".' | | \ / | | \ / \ /
+ ''-' `'-' '-----' ''-' `'-' ''-' `'-' `'-..-'
+
+ .-------. ____ .-''-. ,---. .--.
+ | _ _ \ .' __ `. .'_ _ \ | \ | |
+ | ( ' ) | / ' \ \ / ( ` ) '| , \ | |
+ |(_ o _) / |___| / |. (_ o _) || |\_ \| |
+ | (_,_).' __ _.-` || (_,_)___|| _( )_\ |
+ | |\ \ | |.' _ |' \ .---.| (_ o _) |
+ | | \ `' /| _( )_ | \ `-' /| (_,_)\ |
+ | | \ / \ (_ o _) / \ / | | | |
+ ''-' `'-' '.(_,_).' `'-..-' '--' '--'
+
+ .-''-. .-------. _____ __ .-''-. ,---. .--. ___ _
+ .'_ _ \ \ _(`)_ \\ _\ / /.'_ _ \ | \ | |.' | | |
+ / ( ` ) '| (_ o._)|.-./ ). / '/ ( ` ) '| , \ | || .' | |
+ . (_ o _) || (_,_) /\ '_ .') .'. (_ o _) || |\_ \| |.' '_ | |
+ | (_,_)___|| '-.-'(_ (_) _) ' | (_,_)___|| _( )_\ |' ( \.-.|
+ ' \ .---.| | / \ \' \ .---.| (_ o _) |' (`. _` /|
+ \ `-' /| | `-'`-' \\ `-' /| (_,_)\ || (_ (_) _)
+ \ / / ) / / \ \\ / | | | | \ / . \ /
+ `'-..-' `---' '--' '----'`'-..-' '--' '--' ``-'`-''
+
+ ______ .-''-. ,---------. _______
+ | _ `''. .'_ _ \\ \ / __ \
+ | _ | ) _ \ / ( ` ) '`--. ,---'| ,_/ \__)
+ |( ''_' ) |. (_ o _) | | \ ,-./ )
+ | . (_) `. || (_,_)___| :_ _: \ '_ '`)
+ |(_ ._) '' \ .---. (_I_) > (_) ) __
+ | (_.\.' / \ `-' / (_(=)_)( . .-'_/ )
+ | .' \ / (_I_) `-'`-' /
+ '-----'` `'-..-' '---' `._____.'
+
+ ,---. .--. .-''-. .--. .--. ,-----. ,---------.
+ | \ | | .'_ _ \ | | _/ / .' .-, '.\ \
+ | , \ | | / ( ` ) '| (`' ) / / ,-.| \ _ \`--. ,---'
+ | |\_ \| |. (_ o _) ||(_ ()_) ; \ '_ / | : | \
+ | _( )_\ || (_,_)___|| (_,_) __ | _`,/ \ _/ | :_ _:
+ | (_ o _) |' \ .---.| |\ \ | |: ( '\_/ \ ; (_I_)
+ | (_,_)\ | \ `-' /| | \ `' / \ `"/ \ ) / (_(=)_)
+ | | | | \ / | | \ / '. \_/``".' (_I_)
+ '--' '--' `'-..-' `--' `'-' '-----' '---'
+
+ _ _ .----, _ _
+ ( ' )`-, ( (_I_)
+ (_{;}_) _\_ \(_(=)_)
+ (_,_) ( ' ) \(_I_)
+ (_{;}_) ( )/
+ (_,_) /
+ / /
+ .-` (
+ '----`
+
+ .--. .--. .---. .---. .-'''-. ,-----. .-./`)
+ | | _/ / | | |_ _| / _ \ .' .-, '. \ '_ .') _.--``)
+ | (`' ) / | | ( ' ) (`' )/`--' / ,-.| \ _ \ (_ (_) _)/_ _.-`
+ |(_ ()_) | '-(_{;}_)(_ o _). ; \ '_ / | : / . \/( ' )
+ | (_,_) __ | (_,_) (_,_). '. | _`,/ \ _/ | ___ |-'`|((_{;}_)
+ | |\ \ | || _ _--. | .---. \ :: ( '\_/ \ ;| | | ' \(_,_)
+ | | \ `' /|( ' ) | | \ `-' | \ `"/ \ ) / | `-' / \ `-.
+ | | \ / (_{;}_)| | \ / '. \_/``".' \ / `---._)
+ `--' `'-' '(_,_) '---' `-...-' '-----' `-..-'
+
+
+ (``--._
+ `-._ _\
+ ( ` )\
+ (_{;}_))
+ (_,_)/
+ .-' /
+ (_.---'
+
+
+ _ _ .-''-. .---. .---. _______ ____ .-------. ____
+ ( ` ) .'_ _ \ | | |_ _| / __ \ .' __ `. \ _(`)_ \ .' __ `.
+ (_{;}_)/ ( ` ) '| | ( ' ) | ,_/ \__) / ' \ \| (_ o._)|/ ' \ \
+ (_,_). (_ o _) || '-(_{;}_),-./ ) |___| / || (_,_) /|___| / |
+ | (_,_)___|| (_,_) \ '_ '`) _.-` || '-.-' _.-` |
+ _ ' \ .---.| _ _--. | > (_) ) __ .' _ || | .' _ |
+ _( )_ \ `-' /|( ' ) | | ( . .-'_/ )| _( )_ || | | _( )_ |
+ (_ o _) \ / (_{;}_)| | `-'`-' / \ (_ o _) // ) \ (_ o _) /
+ (_,_) `'-..-' '(_,_) '---' `._____.' '.(_,_).' `---' '.(_,_).'
+
+ _ _ ,---. ,---. .-''-. ,---. .--..-./`) .---.
+ ( ` ) /,--.| /_ | .'_ _ \ | \ | |\ .-.') | ,_|
+ (_{;}_) //_ || ,_ | / ( ` ) '| , \ | |/ `-' \,-./ )
+ (_,_) /_( )_|| ,-./ )| . (_ o _) || |\_ \| | `-'`"`\ '_ '`)
+ /(_ o _)| \ '_ '`) | (_,_)___|| _( )_\ | .---. > (_) )
+ _ / /(_,_)||_ > (_) ) ' \ .---.| (_ o _) | | | ( . .-'
+ _( )_ / `-----' ||( . .-' \ `-' /| (_,_)\ | | | `-'`-'|___
+ (_ o _)`-------|||-' `-'`-'| \ / | | | | | | | \
+ (_,_) '-' '---' `'-..-' '--' '--' '---' `--------`
+
+ _ _ .----, _ _
+ ( ' )`-, ( (_I_)
+ (_{;}_) _\_ \(_(=)_)
+ (_,_) ( ' ) \(_I_)
+ (_{;}_) ( )/
+ (_,_) /
+ / /
+ .-` (
+ '----`
+
+ .--. .--. .---. .---. .-'''-. ,-----. .-./`)
+ | | _/ / | | |_ _| / _ \ .' .-, '. \ '_ .') _.--``)
+ | (`' ) / | | ( ' ) (`' )/`--' / ,-.| \ _ \ (_ (_) _)/_ _.-`
+ |(_ ()_) | '-(_{;}_)(_ o _). ; \ '_ / | : / . \/( ' )
+ | (_,_) __ | (_,_) (_,_). '. | _`,/ \ _/ | ___ |-'`|((_{;}_)
+ | |\ \ | || _ _--. | .---. \ :: ( '\_/ \ ;| | | ' \(_,_)
+ | | \ `' /|( ' ) | | \ `-' | \ `"/ \ ) / | `-' / \ `-.
+ | | \ / (_{;}_)| | \ / '. \_/``".' \ / `---._)
+ `--' `'-' '(_,_) '---' `-...-' '-----' `-..-'
+
+ .-''-. .---. .---.,---------.
+ .'_ _ \ | | |_ _|\ \ (``--._
+ / ( ` ) '| | ( ' ) `--. ,---' `-._ _\
+ . (_ o _) || '-(_{;}_) | \ ( ` )\
+ | (_,_)___|| (_,_) :_ _: (_{;}_))
+ ' \ .---.| _ _--. | (_I_) (_,_)/
+ \ `-' /|( ' ) | | (_(=)_) .-' /
+ \ / (_{;}_)| | (_I_) (_.---'
+ `'-..-' '(_,_) '---' '---'
+
+ ,---------. ,-----. .---. .-------.
+ \ \ .' .-, '. | ,_| \ _(`)_ \
+ `--. ,---'/ ,-.| \ _ \ ,-./ ) | (_ o._)|
+ | \ ; \ '_ / | :\ '_ '`) | (_,_) /
+ :_ _: | _`,/ \ _/ | > (_) ) | '-.-'
+ (_I_) : ( '\_/ \ ;( . .-' | |
+ (_(=)_) \ `"/ \ ) / `-'`-'|___ | |
+ (_I_) '. \_/``".' | \/ )
+ '---' '-----' `--------``---'
+
+ .-''-. .--. .--. _______ .-./`) .---. .---.,---------.
+ .'_ _ \ | | _/ / / __ \ \ .-.')| | |_ _|\ \
+ / ( ` ) '| (`' ) / | ,_/ \__)/ `-' \| | ( ' ) `--. ,---'
+ . (_ o _) ||(_ ()_) ,-./ ) `-'`"`| '-(_{;}_) | \
+ | (_,_)___|| (_,_) __ \ '_ '`) .---. | (_,_) :_ _:
+ ' \ .---.| |\ \ | | > (_) ) __ | | | _ _--. | (_I_)
+ \ `-' /| | \ `' /( . .-'_/ )| | |( ' ) | | (_(=)_)
+ \ / | | \ / `-'`-' / | | (_{;}_)| | (_I_)
+ `'-..-' `--' `'-' `._____.' '---' '(_,_) '---' '---'
+
+ .-'''-. ,---. .--.
+ / _ \| \ | |
+ (`' )/`--'| , \ | |
+ (_ o _). | |\_ \| |
+ (_,_). '. | _( )_\ |
+ .---. \ :| (_ o _) |
+ \ `-' || (_,_)\ |
+ \ / | | | |
+ `-...-' '--' '--'
+
+ .-./`) ________ ________ ___ _ .-'''-. ____
+ \ .-.')| || |.' | | | / _ \ .' __ `. _.--``)
+ / `-' \| .----'| .----'| .' | | (`' )/`--'/ ' \ \ /_ _.-`
+ `-'`"`| _|____ | _|____ .' '_ | |(_ o _). |___| / | /( ' )
+ .---. |_( )_ ||_( )_ |' ( \.-.| (_,_). '. _.-` |((_{;}_)
+ | | (_ o._)__|(_ o._)__|' (`. _` /|.---. \ :.' _ | \(_,_)
+ | | |(_,_) |(_,_) | (_ (_) _)\ `-' || _( )_ | \ `-.
+ | | | | | | \ / . \ / \ / \ (_ o _) / `---._)
+ '---' '---' '---' ``-'`-'' `-...-' '.(_,_).'
+
+ ______ .---. .-''-.
+ (``--._ | _ `''. | ,_| .'_ _ \
+ `-._ _\ | _ | ) _ \,-./ ) / ( ` ) '
+ ( ` )\ |( ''_' ) |\ '_ '`) . (_ o _) |
+ (_{;}_))| . (_) `. | > (_) ) | (_,_)___|
+ (_,_)/ |(_ ._) '( . .-' ' \ .---.
+ .-' / | (_.\.' / `-'`-'|___\ `-' /
+ (_.---' | .' | \\ /
+ '-----'` `--------` `'-..-'
+
+ .-''-. .-'''-. ,-----. .---. .---.,---------.
+ .'_ _ \ / _ \ .' .-, '. | | |_ _|\ \
+ / ( ` ) ' (`' )/`--' / ,-.| \ _ \ | | ( ' ) `--. ,---'
+ . (_ o _) |(_ o _). ; \ '_ / | :| '-(_{;}_) | \
+ | (_,_)___| (_,_). '. | _`,/ \ _/ || (_,_) :_ _:
+ ' \ .---..---. \ :: ( '\_/ \ ;| _ _--. | (_I_)
+ \ `-' /\ `-' | \ `"/ \ ) / |( ' ) | | (_(=)_)
+ \ / \ / '. \_/``".' (_{;}_)| | (_I_)
+ `'-..-' `-...-' '-----' '(_,_) '---' '---'
+
+ ,---------. _ _ ,---. .--. .-''-. .-------. ____
+ \ \ ( ' ) | \ | | .'_ _ \ | _ _ \ .' __ `.
+ `--. ,---'(_{;}_)| , \ | | / ( ` ) '| ( ' ) | / ' \ \
+ | \ (_,_) | |\_ \| |. (_ o _) ||(_ o _) / |___| / |
+ :_ _: | _( )_\ || (_,_)___|| (_,_).' __ _.-` |
+ (_I_) | (_ o _) |' \ .---.| |\ \ | |.' _ |
+ (_(=)_) | (_,_)\ | \ `-' /| | \ `' /| _( )_ |
+ (_I_) | | | | \ / | | \ / \ (_ o _) /
+ '---' '--' '--' `'-..-' ''-' `'-' '.(_,_).'
+
+ .---. .---. .-''-. .---. .---. .-'''-.
+ | ,_| | ,_| .'_ _ \ | | |_ _| / _ \
+ ,-./ ) ,-./ ) / ( ` ) '| | ( ' ) (`' )/`--'
+ \ '_ '`) \ '_ '`) . (_ o _) || '-(_{;}_)(_ o _).
+ > (_) ) > (_) ) | (_,_)___|| (_,_) (_,_). '.
+ ( . .-' ( . .-' ' \ .---.| _ _--. | .---. \ :
+ `-'`-'|___`-'`-'|___\ `-' /|( ' ) | | \ `-' |
+ | \| \\ / (_{;}_)| | \ /
+ `--------``--------` `'-..-' '(_,_) '---' `-...-'
+
+ .-'''-. ,---------. .-------. .-./`) .-------. _______ .-'''-.
+ / _ \\ \\ _(`)_ \\ .-.')| _ _ \ / __ \ / _ \
+ (`' )/`--' `--. ,---'| (_ o._)|/ `-' \| ( ' ) | | ,_/ \__) (`' )/`--'
+(_ o _). | \ | (_,_) / `-'`"`|(_ o _) / ,-./ ) (_ o _).
+ (_,_). '. :_ _: | '-.-' .---. | (_,_).' __ \ '_ '`) (_,_). '.
+.---. \ : (_I_) | | | | | |\ \ | | > (_) ) __ .---. \ :
+\ `-' | (_(=)_) | | | | | | \ `' /( . .-'_/ )\ `-' |
+ \ / (_I_) / ) | | | | \ / `-'`-' / \ /
+ `-...-' '---' `---' '---' ''-' `'-' `._____.' `-...-'
+
+ .---. .---. _______ .-./`) .-------. .-''-.
+(``--._ | | |_ _| / __ \ \ .-.')| _ _ \ .'_ _ \ _.--``)
+ `-._ _\ | | ( ' ) | ,_/ \__)/ `-' \| ( ' ) | / ( ` ) ' /_ _.-`
+ ( ` )\ | '-(_{;}_),-./ ) `-'`"`|(_ o _) / . (_ o _) | /( ' )
+ (_{;}_))| (_,_) \ '_ '`) .---. | (_,_).' __ | (_,_)___|((_{;}_)
+ (_,_)/ | _ _--. | > (_) ) __ | | | |\ \ | |' \ .---. \(_,_)
+ .-' / |( ' ) | | ( . .-'_/ )| | | | \ `' / \ `-' / \ `-.
+(_.---' (_{;}_)| | `-'`-' / | | | | \ / \ / `---._)
+ '(_,_) '---' `._____.' '---' ''-' `'-' `'-..-'
+
+ .-'''-. .-./`) .---. .---.,---------.
+ / _ \\ .-.')| | |_ _|\ \
+ (`' )/`--'/ `-' \| | ( ' ) `--. ,---'
+ (_ o _). `-'`"`| '-(_{;}_) | \
+ (_,_). '. .---. | (_,_) :_ _:
+ .---. \ : | | | _ _--. | (_I_)
+ \ `-' | | | |( ' ) | | (_(=)_)
+ \ / | | (_{;}_)| | (_I_)
+ `-...-' '---' '(_,_) '---' '---'
+
+ ,---------. _ _ ,---. .--. .-'''-. ____ .--. .--.
+ \ \ ( ' ) | \ | | / _ \ .' __ `. | |_ | |
+ `--. ,---'(_{;}_)| , \ | | (`' )/`--'/ ' \ \| _( )_ | |
+ | \ (_,_) | |\_ \| |(_ o _). |___| / ||(_ o _) | |
+ :_ _: | _( )_\ | (_,_). '. _.-` || (_,_) \ | |
+ (_I_) | (_ o _) |.---. \ :.' _ || |/ \| |
+ (_(=)_) | (_,_)\ |\ `-' || _( )_ || ' /\ ` |
+ (_I_) | | | | \ / \ (_ o _) /| / \ |
+ '---' '--' '--' `-...-' '.(_,_).' `---' `---`
+
+ .-''-. .--. .--. _______ .-./`) .---. .---. _______
+ .'_ _ \ | | _/ / / __ \ \ .-.')| | |_ _| / __ \
+ / ( ` ) '| (`' ) / | ,_/ \__)/ `-' \| | ( ' ) | ,_/ \__)
+ . (_ o _) ||(_ ()_) ,-./ ) `-'`"`| '-(_{;}_),-./ )
+ | (_,_)___|| (_,_) __ \ '_ '`) .---. | (_,_) \ '_ '`)
+ ' \ .---.| |\ \ | | > (_) ) __ | | | _ _--. | > (_) ) __
+ \ `-' /| | \ `' /( . .-'_/ )| | |( ' ) | | ( . .-'_/ )
+ \ / | | \ / `-'`-' / | | (_{;}_)| | `-'`-' /
+ `'-..-' `--' `'-' `._____.' '---' '(_,_) '---' `._____.'
+
+ ,---. .--.
+ | \ | |
+ | , \ | |
+ | |\_ \| |
+ | _( )_\ |
+ _ _ | (_ o _) |
+ ( ` ) | (_,_)\ |
+ (_{;}_)| | | |
+ (_,_) '--' '--'
+
+ ,---. .--..-./`)
+ | \ | |\ .-.')
+ | , \ | |/ `-' \
+ | |\_ \| | `-'`"` _ _ _ _ _ _ _ _
+ | _( )_\ | .---. ( ' )--( ' ) ( ' )--( ' )
+ | (_ o _) | | | (_{;}_)(_{;}_)(_{;}_)(_{;}_)
+ | (_,_)\ | | | (_,_)--(_,_) (_,_)--(_,_)
+ | | | | | |
+ '--' '--' '---'
+
+ ,---. .--. ____ .-./`) _______ .-''-. ______
+ | \ | | .' __ `. \ .-.')\ ____ \ .'_ _ \ | _ `''.
+ | , \ | |/ ' \ \/ `-' \| | \ | / ( ` ) '| _ | ) _ \
+ | |\_ \| ||___| / | `-'`"`| |____/ / . (_ o _) ||( ''_' ) |
+ | _( )_\ | _.-` | .---. | _ _ '. | (_,_)___|| . (_) `. |
+ | (_ o _) |.' _ | | | | ( ' ) \' \ .---.|(_ ._) '
+ | (_,_)\ || _( )_ | | | | (_{;}_) | \ `-' /| (_.\.' /
+ | | | |\ (_ o _) / | | | (_,_) / \ / | .'
+ '--' '--' '.(_,_).' '---' /_______.' `'-..-' '-----'`
+
+ .---. .-''-. ,---. ,---. .-''-. ______
+ | ,_| .'_ _ \ | / | | .'_ _ \ | _ `''.
+ ,-./ ) / ( ` ) '| | | .'/ ( ` ) '| _ | ) _ \
+ \ '_ '`) . (_ o _) || | _ | |. (_ o _) ||( ''_' ) | _ _ _ _
+ > (_) ) | (_,_)___|| _( )_ || (_,_)___|| . (_) `. | ( ' )--( ' )
+ ( . .-' ' \ .---.\ (_ o._) /' \ .---.|(_ ._) '(_{;}_)(_{;}_)
+ `-'`-'|___\ `-' / \ (_,_) / \ `-' /| (_.\.' / (_,_)--(_,_)
+ | \\ / \ / \ / | .'
+ `--------` `'-..-' `---` `'-..-' '-----'`
+
diff --git a/externals/figlet/utf8.c b/externals/figlet/utf8.c
new file mode 100644
index 000000000..b8338c1ea
--- /dev/null
+++ b/externals/figlet/utf8.c
@@ -0,0 +1,326 @@
+#ifdef TLF_FONTS
+/*
+ * Copyright (c) 2007 Alexey Vatchenko <av@bsdua.org>
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+#include <sys/types.h>
+
+#include <wchar.h>
+#include <arpa/inet.h> /* for htonl() */
+
+#include "utf8.h"
+
+#define _NXT 0x80
+#define _SEQ2 0xc0
+#define _SEQ3 0xe0
+#define _SEQ4 0xf0
+#define _SEQ5 0xf8
+#define _SEQ6 0xfc
+
+#define _BOM 0xfeff
+
+static int __wchar_forbitten(wchar_t sym);
+static int __utf8_forbitten(u_char octet);
+
+static int
+__wchar_forbitten(wchar_t sym)
+{
+
+ /* Surrogate pairs */
+ if (sym >= 0xd800 && sym <= 0xdfff)
+ return (-1);
+
+ return (0);
+}
+
+static int
+__utf8_forbitten(u_char octet)
+{
+
+ switch (octet) {
+ case 0xc0:
+ case 0xc1:
+ case 0xf5:
+ case 0xff:
+ return (-1);
+ }
+
+ return (0);
+}
+
+/*
+ * DESCRIPTION
+ * This function translates UTF-8 string into UCS-4 string (all symbols
+ * will be in local machine byte order).
+ *
+ * It takes the following arguments:
+ * in - input UTF-8 string. It can be null-terminated.
+ * insize - size of input string in bytes.
+ * out - result buffer for UCS-4 string. If out is NULL,
+ * function returns size of result buffer.
+ * outsize - size of out buffer in wide characters.
+ *
+ * RETURN VALUES
+ * The function returns size of result buffer (in wide characters).
+ * Zero is returned in case of error.
+ *
+ * CAVEATS
+ * 1. If UTF-8 string contains zero symbols, they will be translated
+ * as regular symbols.
+ * 2. If UTF8_IGNORE_ERROR or UTF8_SKIP_BOM flag is set, sizes may vary
+ * when `out' is NULL and not NULL. It's because of special UTF-8
+ * sequences which may result in forbitten (by RFC3629) UNICODE
+ * characters. So, the caller must check return value every time and
+ * not prepare buffer in advance (\0 terminate) but after calling this
+ * function.
+ */
+size_t
+utf8_to_wchar(const char *in, size_t insize, wchar_t *out, size_t outsize,
+ int flags)
+{
+ u_char *p, *lim;
+ wchar_t *wlim, high;
+ size_t n, total, i, n_bits;
+
+ if (in == NULL || insize == 0 || (outsize == 0 && out != NULL))
+ return (0);
+
+ total = 0;
+ p = (u_char *)in;
+ lim = p + insize;
+ wlim = out + outsize;
+
+ for (; p < lim; p += n) {
+ if (__utf8_forbitten(*p) != 0 &&
+ (flags & UTF8_IGNORE_ERROR) == 0)
+ return (0);
+
+ /*
+ * Get number of bytes for one wide character.
+ */
+ n = 1; /* default: 1 byte. Used when skipping bytes. */
+ if ((*p & 0x80) == 0)
+ high = (wchar_t)*p;
+ else if ((*p & 0xe0) == _SEQ2) {
+ n = 2;
+ high = (wchar_t)(*p & 0x1f);
+ } else if ((*p & 0xf0) == _SEQ3) {
+ n = 3;
+ high = (wchar_t)(*p & 0x0f);
+ } else if ((*p & 0xf8) == _SEQ4) {
+ n = 4;
+ high = (wchar_t)(*p & 0x07);
+ } else if ((*p & 0xfc) == _SEQ5) {
+ n = 5;
+ high = (wchar_t)(*p & 0x03);
+ } else if ((*p & 0xfe) == _SEQ6) {
+ n = 6;
+ high = (wchar_t)(*p & 0x01);
+ } else {
+ if ((flags & UTF8_IGNORE_ERROR) == 0)
+ return (0);
+ continue;
+ }
+
+ /* does the sequence header tell us truth about length? */
+ if (lim - p <= n - 1) {
+ if ((flags & UTF8_IGNORE_ERROR) == 0)
+ return (0);
+ n = 1;
+ continue; /* skip */
+ }
+
+ /*
+ * Validate sequence.
+ * All symbols must have higher bits set to 10xxxxxx
+ */
+ if (n > 1) {
+ for (i = 1; i < n; i++) {
+ if ((p[i] & 0xc0) != _NXT)
+ break;
+ }
+ if (i != n) {
+ if ((flags & UTF8_IGNORE_ERROR) == 0)
+ return (0);
+ n = 1;
+ continue; /* skip */
+ }
+ }
+
+ total++;
+
+ if (out == NULL)
+ continue;
+
+ if (out >= wlim)
+ return (0); /* no space left */
+
+ *out = 0;
+ n_bits = 0;
+ for (i = 1; i < n; i++) {
+ *out |= (wchar_t)(p[n - i] & 0x3f) << n_bits;
+ n_bits += 6; /* 6 low bits in every byte */
+ }
+ *out |= high << n_bits;
+
+ if (*out == 0) /* return at end of string */
+ break;
+
+ if (__wchar_forbitten(*out) != 0) {
+ if ((flags & UTF8_IGNORE_ERROR) == 0)
+ return (0); /* forbitten character */
+ else {
+ total--;
+ out--;
+ }
+ } else if (*out == _BOM && (flags & UTF8_SKIP_BOM) != 0) {
+ total--;
+ out--;
+ }
+
+ out++;
+ }
+
+ return (total);
+}
+
+/*
+ * DESCRIPTION
+ * This function translates UCS-4 symbols (given in local machine
+ * byte order) into UTF-8 string.
+ *
+ * It takes the following arguments:
+ * in - input unicode string. It can be null-terminated.
+ * insize - size of input string in wide characters.
+ * out - result buffer for utf8 string. If out is NULL,
+ * function returns size of result buffer.
+ * outsize - size of result buffer.
+ *
+ * RETURN VALUES
+ * The function returns size of result buffer (in bytes). Zero is returned
+ * in case of error.
+ *
+ * CAVEATS
+ * If UCS-4 string contains zero symbols, they will be translated
+ * as regular symbols.
+ */
+size_t
+wchar_to_utf8(const wchar_t *in, size_t insize, char *out, size_t outsize,
+ int flags)
+{
+ wchar_t *w, *wlim, ch;
+ u_char *p, *lim, *oc;
+ size_t total, n;
+
+ if (in == NULL || insize == 0 || (outsize == 0 && out != NULL))
+ return (0);
+
+ w = (wchar_t *)in;
+ wlim = w + insize;
+ p = (u_char *)out;
+ lim = p + outsize;
+ total = 0;
+ for (; w < wlim; w++) {
+ if (__wchar_forbitten(*w) != 0) {
+ if ((flags & UTF8_IGNORE_ERROR) == 0)
+ return (0);
+ else
+ continue;
+ }
+
+ if (*w == _BOM && (flags & UTF8_SKIP_BOM) != 0)
+ continue;
+
+ if (*w < 0) {
+ if ((flags & UTF8_IGNORE_ERROR) == 0)
+ return (0);
+ continue;
+ } else if (*w <= 0x0000007f)
+ n = 1;
+ else if (*w <= 0x000007ff)
+ n = 2;
+ else if (*w <= 0x0000ffff)
+ n = 3;
+ else if (*w <= 0x001fffff)
+ n = 4;
+ else if (*w <= 0x03ffffff)
+ n = 5;
+ else /* if (*w <= 0x7fffffff) */
+ n = 6;
+
+ total += n;
+
+ if (out == NULL)
+ continue;
+
+ if (lim - p <= n - 1)
+ return (0); /* no space left */
+
+ /* make it work under different endians */
+ ch = htonl(*w);
+ oc = (u_char *)&ch;
+ switch (n) {
+ case 1:
+ *p = oc[3];
+ break;
+
+ case 2:
+ p[1] = _NXT | (oc[3] & 0x3f);
+ p[0] = _SEQ2 | (oc[3] >> 6) | ((oc[2] & 0x07) << 2);
+ break;
+
+ case 3:
+ p[2] = _NXT | (oc[3] & 0x3f);
+ p[1] = _NXT | (oc[3] >> 6) | ((oc[2] & 0x0f) << 2);
+ p[0] = _SEQ3 | ((oc[2] & 0xf0) >> 4);
+ break;
+
+ case 4:
+ p[3] = _NXT | (oc[3] & 0x3f);
+ p[2] = _NXT | (oc[3] >> 6) | ((oc[2] & 0x0f) << 2);
+ p[1] = _NXT | ((oc[2] & 0xf0) >> 4) |
+ ((oc[1] & 0x03) << 4);
+ p[0] = _SEQ4 | ((oc[1] & 0x1f) >> 2);
+ break;
+
+ case 5:
+ p[4] = _NXT | (oc[3] & 0x3f);
+ p[3] = _NXT | (oc[3] >> 6) | ((oc[2] & 0x0f) << 2);
+ p[2] = _NXT | ((oc[2] & 0xf0) >> 4) |
+ ((oc[1] & 0x03) << 4);
+ p[1] = _NXT | (oc[1] >> 2);
+ p[0] = _SEQ5 | (oc[0] & 0x03);
+ break;
+
+ case 6:
+ p[5] = _NXT | (oc[3] & 0x3f);
+ p[4] = _NXT | (oc[3] >> 6) | ((oc[2] & 0x0f) << 2);
+ p[3] = _NXT | (oc[2] >> 4) | ((oc[1] & 0x03) << 4);
+ p[2] = _NXT | (oc[1] >> 2);
+ p[1] = _NXT | (oc[0] & 0x3f);
+ p[0] = _SEQ6 | ((oc[0] & 0x40) >> 6);
+ break;
+ }
+
+ /*
+ * NOTE: do not check here for forbitten UTF-8 characters.
+ * They cannot appear here because we do proper convertion.
+ */
+
+ p += n;
+ }
+
+ return (total);
+}
+#endif /* TLF_FONTS */
diff --git a/externals/figlet/utf8.h b/externals/figlet/utf8.h
new file mode 100644
index 000000000..a3e09bdee
--- /dev/null
+++ b/externals/figlet/utf8.h
@@ -0,0 +1,43 @@
+/*
+ * Copyright (c) 2007 Alexey Vatchenko <av@bsdua.org>
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+
+/*
+ * utf8: implementation of UTF-8 charset encoding (RFC3629).
+ */
+#ifndef _UTF8_H_
+#define _UTF8_H_
+
+#include <sys/types.h>
+
+#include <wchar.h>
+
+#define UTF8_IGNORE_ERROR 0x01
+#define UTF8_SKIP_BOM 0x02
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+size_t utf8_to_wchar(const char *in, size_t insize, wchar_t *out,
+ size_t outsize, int flags);
+size_t wchar_to_utf8(const wchar_t *in, size_t insize, char *out,
+ size_t outsize, int flags);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* !_UTF8_H_ */
diff --git a/externals/figlet/zipio.c b/externals/figlet/zipio.c
new file mode 100644
index 000000000..f7406d952
--- /dev/null
+++ b/externals/figlet/zipio.c
@@ -0,0 +1,818 @@
+/*
+ * zipio.c - stdio emulation library for reading zip files
+ *
+ * Version 1.1.2
+ */
+
+/*
+ * Copyright (C) 1995, Edward B. Hamrick
+ *
+ * Permission to use, copy, modify, and distribute this software and
+ * its documentation for any purpose and without fee is hereby granted,
+ * provided that the above copyright notice appear in all copies and
+ * that both that copyright notice and this permission notice appear in
+ * supporting documentation, and that the name of the copyright holders
+ * not be used in advertising or publicity pertaining to distribution of
+ * the software without specific, written prior permission. The copyright
+ * holders makes no representations about the suitability of this software
+ * for any purpose. It is provided "as is" without express or implied warranty.
+ *
+ * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS
+ * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS,
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT
+ * OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF
+ * USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
+ * OF THIS SOFTWARE.
+ */
+
+/*
+ * Changes from 1.1 to 1.1.1:
+ * Changed "z*" functions to "Z*" to avoid namespace pollution.
+ * Added "zungetc" macro.
+ * Added definitions of SEEK_SET, SEEK_CUR, SEEK_END for the Posixly challenged
+ * John Cowan <cowan@ccil.org>
+ *
+ * Changes from 1.1.1 to 1.1.2:
+ * Relicensed under the MIT license, with consent of the copyright holders.
+ * Avoid usage of unitialized "length" variable in _Zgetc
+ * Claudio Matsuoka (Jan 11 2011)
+ */
+
+/*
+ * Refer to zipio.h for a description of this package.
+ */
+
+/*
+ * The .zip file header is described below. It consists of
+ * 30 fixed bytes, followed by two variable length fields
+ * whose length is contained in the first 30 bytes. After this
+ * header, the data is stored (in deflate format if the compression
+ * method is 8).
+ *
+ * The crc-32 field is the crc on the uncompressed data.
+ *
+ * .zip file header:
+ *
+ * local file header signature 4 bytes (0x04034b50)
+ * version needed to extract 2 bytes
+ * general purpose bit flag 2 bytes
+ * compression method 2 bytes
+ * last mod file time 2 bytes
+ * last mod file date 2 bytes
+ * crc-32 4 bytes
+ * compressed size 4 bytes
+ * uncompressed size 4 bytes
+ * filename length 2 bytes
+ * extra field length 2 bytes
+ *
+ * filename (variable size)
+ * extra field (variable size)
+ *
+ * These fields are described in more detail in appnote.txt
+ * in the pkzip 1.93 distribution.
+ */
+
+#include <stdlib.h>
+#ifdef MEMCPY
+#include <mem.h>
+#endif
+
+#include "zipio.h"
+#include "inflate.h"
+#include "crc.h"
+
+/*
+ * Macros for constants
+ */
+
+#ifndef NULL
+#define NULL ((void *) 0)
+#endif
+
+#ifndef TRUE
+#define TRUE 1
+#endif
+
+#ifndef FALSE
+#define FALSE 0
+#endif
+
+#ifndef ZIPSIGNATURE
+#define ZIPSIGNATURE 0x04034b50L
+#endif
+
+#ifndef SEEK_SET
+#define SEEK_SET 0
+#endif
+
+#ifndef SEEK_CUR
+#define SEEK_CUR 1
+#endif
+
+#ifndef SEEK_END
+#define SEEK_END 2
+#endif
+
+
+/*
+ * Buffer size macros
+ *
+ * The following constants are optimized for large-model
+ * (but not flat model) Windows with virtual memory. It
+ * will work fine on unix and flat model Windows as well.
+ *
+ * The constant BUFFERTHRESHOLD determines when memory
+ * buffering changes to file buffering.
+ *
+ * Assumptions:
+ *
+ * 1) INPBUFSIZE + OUTBUFSIZE + sizeof(void *) * PTRBUFSIZE + delta < 64K
+ *
+ * 2) OUTBUFSIZE = 32K * N (related to inflate's 32K window size)
+ *
+ * 2) Max in-memory file size is OUTBUFSIZE * PTRBUFSIZE
+ * which is 64 MBytes by default (32K * 2K).
+ *
+ */
+
+#ifndef BUFFERTHRESHOLD
+#define BUFFERTHRESHOLD (256 * 1024L)
+#endif
+
+#ifndef INPBUFSIZE
+#define INPBUFSIZE ( 8 * 1024 )
+#endif
+
+#ifndef PTRBUFSIZE
+#define PTRBUFSIZE ( 2 * 1024 )
+#endif
+
+#ifndef OUTBUFSIZE
+#define OUTBUFSIZE ((unsigned int) ( 32 * 1024L))
+#endif
+
+#define MAXFILESIZE (OUTBUFSIZE * (long) PTRBUFSIZE)
+
+/*
+ * Macro for short-hand reference to ZipioState (from ZFILE *)
+ */
+
+#define ZS ((struct ZipioState *) stream)
+
+/*
+ * Macro to manipulate Zgetc() cache
+ */
+
+#define CACHEINIT \
+ zs->ptr = NULL; \
+ zs->len = 0;
+
+#define CACHEUPDATE \
+ if (ZS->ptr) \
+ { \
+ ZS->fileposition &= ~((long) (OUTBUFSIZE-1)); \
+ ZS->fileposition += ZS->ptr - ZS->getbuf; \
+ ZS->ptr = NULL; \
+ } \
+ ZS->len = 0;
+
+/*
+ * Macros for run-time type identification
+ */
+
+#ifndef RUNTIMEENABLE
+#define RUNTIMEENABLE 0
+#endif
+
+#if RUNTIMEENABLE
+#define ZIPIOSTATETYPE 0x0110f00fL
+#define RUNTIMEINIT \
+ zs->runtimetypeid1 = ZIPIOSTATETYPE; \
+ zs->runtimetypeid2 = ZIPIOSTATETYPE;
+
+#define RUNTIMECHECK \
+ if (!ZS || (ZS->runtimetypeid1 != ZIPIOSTATETYPE) \
+ || (ZS->runtimetypeid2 != ZIPIOSTATETYPE)) return -1;
+#else
+#define RUNTIMEINIT
+#define RUNTIMECHECK
+#endif
+
+/*
+ * Macros for converting bytes to unsigned integers
+ */
+
+#define GETUINT4(ptr, i4) \
+ { \
+ i4 = (((unsigned long) *(((unsigned char *) (ptr)) + 0)) ) | \
+ (((unsigned long) *(((unsigned char *) (ptr)) + 1)) << 8) | \
+ (((unsigned long) *(((unsigned char *) (ptr)) + 2)) << 16) | \
+ (((unsigned long) *(((unsigned char *) (ptr)) + 3)) << 24) ; \
+ }
+
+#define GETUINT2(ptr, i2) \
+ { \
+ i2 = (((unsigned int) *(((unsigned char *) (ptr)) + 0)) ) | \
+ (((unsigned int) *(((unsigned char *) (ptr)) + 1)) << 8) ; \
+ }
+
+/* Structure to hold state for decoding zip files */
+struct ZipioState {
+
+ /* Fields overlaid with ZFILE structure */
+ int len; /* length of Zgetc cache */
+ unsigned char *ptr; /* pointer to Zgetc cache */
+
+ /* Fields invisible to users of ZFILE structure */
+
+ unsigned long runtimetypeid1; /* to detect run-time errors */
+ int errorencountered; /* error encountered flag */
+
+ /* Buffering state */
+ unsigned char inpbuf[INPBUFSIZE]; /* inp buffer from zip file */
+ unsigned char *ptrbuf[PTRBUFSIZE]; /* pointers to in-memory bufs */
+
+ unsigned char getbuf[OUTBUFSIZE]; /* buffer for use by Zgetc */
+ long getoff; /* starting offset of getbuf */
+
+ FILE *tmpfil; /* file ptr to temp file */
+
+ /* Amount of input data inflated */
+ unsigned long inpinf;
+ unsigned long outinf;
+
+ /* Zip file header */
+ unsigned long sign; /* local file header signature (0x04034b50) */
+ unsigned int vers; /* version needed to extract 2 bytes */
+ unsigned int flag; /* general purpose bit flag 2 bytes */
+ unsigned int comp; /* compression method 2 bytes */
+ unsigned int mtim; /* last mod file time 2 bytes */
+ unsigned int mdat; /* last mod file date 2 bytes */
+ unsigned long crc3; /* crc-32 4 bytes */
+ unsigned long csiz; /* compressed size 4 bytes */
+ unsigned long usiz; /* uncompressed size 4 bytes */
+ unsigned int flen; /* filename length 2 bytes */
+ unsigned int elen; /* extra field length 2 bytes */
+
+ /* Application state */
+ FILE *OpenFile; /* currently open file */
+
+ void *inflatestate; /* current state for inflate */
+
+ unsigned long fileposition; /* current file position */
+
+ unsigned long filecrc; /* current crc */
+
+ unsigned long runtimetypeid2; /* to detect run-time errors */
+};
+
+/*
+ * Utility routines to handle uncompressed file buffers
+ */
+
+/* Initialize buffering */
+static void BufferInitialize(
+ struct ZipioState *zs,
+ int doinflate
+)
+{
+ zs->getoff = -1;
+ zs->tmpfil = NULL;
+
+ /*
+ * If not inflating, use the input file
+ */
+
+ if (!doinflate)
+ {
+ zs->tmpfil = zs->OpenFile;
+
+ /* Get the uncompressed file size */
+ fseek(zs->tmpfil, 0, SEEK_END);
+ zs->usiz = ftell(zs->tmpfil);
+ zs->outinf = zs->usiz;
+
+ /* Start at the beginning */
+ fseek(zs->tmpfil, 0, SEEK_SET);
+ }
+
+ /* If there's no file open, see if it's big enough for temp file */
+ if (!zs->tmpfil)
+ {
+ if (zs->usiz >= BUFFERTHRESHOLD)
+ zs->tmpfil = tmpfile();
+ }
+
+ /* If there's no file open, then use memory buffering */
+ if (!zs->tmpfil)
+ {
+ int i;
+
+ for (i=0; i<PTRBUFSIZE; i++)
+ zs->ptrbuf[i] = NULL;
+ }
+}
+
+/* pump data till length bytes of file are inflated or error encountered */
+static int BufferPump(struct ZipioState *zs, long length)
+{
+ size_t inplen, ret;
+
+ /* Check to see if the length is valid */
+ if (length > zs->usiz) return TRUE;
+
+ /* Loop till enough data is pumped */
+ while (!zs->errorencountered && (zs->outinf < length))
+ {
+ /* Compute how much data to read */
+ if ((zs->csiz - zs->inpinf) < INPBUFSIZE)
+ inplen = (size_t) (zs->csiz - zs->inpinf);
+ else
+ inplen = INPBUFSIZE;
+
+ if (inplen <= 0) return TRUE;
+
+ /* Read some data from the file */
+ ret = fread(zs->inpbuf, 1, inplen, zs->OpenFile);
+ if (ret != inplen) return TRUE;
+
+ /* Update how much data has been read from the file */
+ zs->inpinf += inplen;
+
+ /* Pump this data into the decompressor */
+ if (InflatePutBuffer(zs->inflatestate, zs->inpbuf, inplen)) return TRUE;
+ }
+
+ return FALSE;
+}
+
+/* Read from the buffer */
+static int BufferRead(
+ struct ZipioState *zs,
+ long offset,
+ unsigned char *buffer,
+ long length
+)
+{
+ /*
+ * Make sure enough bytes have been inflated
+ * Note that the correction for reading past EOF has to
+ * be done before calling this routine
+ */
+
+ if (BufferPump(zs, offset+length)) return TRUE;
+
+ /* If using file buffering, just get the data from the file */
+ if (zs->tmpfil)
+ {
+ if (fseek(zs->tmpfil, offset, SEEK_SET)) return TRUE;
+ if (fread(buffer, 1, (size_t) length, zs->tmpfil) != length) return TRUE;
+ }
+ /* If no temp file, use memory buffering */
+ else
+ {
+ unsigned int i;
+ unsigned int off, len;
+ unsigned char *ptr;
+
+ long tmpoff;
+ unsigned char *tmpbuf;
+ long tmplen;
+
+ /* Save copies of offset, buffer and length for the loop */
+ tmpoff = offset;
+ tmpbuf = buffer;
+ tmplen = length;
+
+ /* Validate the transfer */
+ if (tmpoff+tmplen > MAXFILESIZE) return TRUE;
+
+ /* Loop till done */
+ while (tmplen)
+ {
+ /* Get a pointer to the next block */
+ i = (unsigned int) (tmpoff / OUTBUFSIZE);
+ ptr = zs->ptrbuf[i];
+ if (!ptr) return TRUE;
+
+ /* Get the offset,length for this block */
+ off = (unsigned int) (tmpoff & (OUTBUFSIZE-1));
+ len = OUTBUFSIZE - off;
+ if (len > tmplen) len = (unsigned int) tmplen;
+
+ /* Get the starting pointer for the transfer */
+ ptr += off;
+
+ /* Copy the data for this block */
+#ifdef MEMCPY
+ memcpy(tmpbuf, ptr, len);
+#else
+ for (i=0; i<len; i++)
+ tmpbuf[i] = ptr[i];
+#endif
+
+ /* Update the offset, buffer, and length */
+ tmpoff += len;
+ tmpbuf += len;
+ tmplen -= len;
+ }
+ }
+
+ /* return success */
+ return FALSE;
+}
+
+/* Append to the buffer */
+static int BufferAppend(
+ struct ZipioState *zs,
+ unsigned char *buffer,
+ long length
+)
+{
+ /* If using file buffering, just append the data from the file */
+ if (zs->tmpfil)
+ {
+ if (fseek(zs->tmpfil, zs->outinf, SEEK_SET)) return TRUE;
+ if (fwrite(buffer, 1, (size_t) length, zs->tmpfil) != length) return TRUE;
+ }
+ /* If no temp file, use memory buffering */
+ else
+ {
+ unsigned int i;
+ unsigned int off, len;
+ unsigned char *ptr;
+
+ long tmpoff;
+ unsigned char *tmpbuf;
+ long tmplen;
+
+ /* Save copies of outinf, buffer and length for the loop */
+ tmpoff = zs->outinf;
+ tmpbuf = buffer;
+ tmplen = length;
+
+ /* Validate the transfer */
+ if (tmpoff+tmplen > MAXFILESIZE) return TRUE;
+
+ /* Loop till done */
+ while (tmplen)
+ {
+ /* Get a pointer to the next block */
+ i = (unsigned int) (tmpoff / OUTBUFSIZE);
+ ptr = zs->ptrbuf[i];
+ if (!ptr)
+ {
+ ptr = (unsigned char *) malloc(OUTBUFSIZE);
+ if (!ptr) return TRUE;
+ zs->ptrbuf[i] = ptr;
+ }
+
+ /* Get the offset,length for this block */
+ off = (unsigned int) (tmpoff & (OUTBUFSIZE-1));
+ len = OUTBUFSIZE - off;
+ if (len > tmplen) len = (unsigned int) tmplen;
+
+ /* Get the starting pointer for the transfer */
+ ptr += off;
+
+ /* Copy the data for this block */
+#ifdef MEMCPY
+ memcpy(ptr, tmpbuf, len);
+#else
+ for (i=0; i<len; i++)
+ ptr[i] = tmpbuf[i];
+#endif
+
+ /* Update the offset, buffer, and length */
+ tmpoff += len;
+ tmpbuf += len;
+ tmplen -= len;
+ }
+ }
+
+ /* Update the output buffer length */
+ zs->outinf += length;
+
+ /* return success */
+ return FALSE;
+}
+
+/* Terminate buffering */
+static void BufferTerminate(
+ struct ZipioState *zs
+)
+{
+ /* If reading directly from the uncompressed file, just mark with NULL */
+ if (zs->tmpfil == zs->OpenFile)
+ {
+ zs->tmpfil = NULL;
+ }
+ /* If using the a temporary file, close it */
+ else if (zs->tmpfil)
+ {
+ fclose(zs->tmpfil);
+ zs->tmpfil = NULL;
+ }
+ /* If doing memory buffering, free the buffers */
+ else
+ {
+ int i;
+
+ for (i=0; i<PTRBUFSIZE; i++)
+ if (zs->ptrbuf[i]) free(zs->ptrbuf[i]);
+ }
+}
+
+/*
+ * callout routines for InflateInitialize
+ */
+
+static int inflate_putbuffer( /* returns 0 on success */
+ void *stream, /* opaque ptr from Initialize */
+ unsigned char *buffer, /* buffer to put */
+ long length /* length of buffer */
+)
+{
+ RUNTIMECHECK;
+
+ /* If the write will go past the end of file, return an error */
+ if (ZS->outinf + length > ZS->usiz) return TRUE;
+
+ /* Update the CRC */
+ ZS->filecrc = CrcUpdate(ZS->filecrc, buffer, length);
+
+ /* Append to the buffer */
+ if (BufferAppend(ZS, buffer, length)) return TRUE;
+
+ /* Return success */
+ return FALSE;
+}
+
+static void *inflate_malloc(long length)
+{
+ return malloc((size_t) length);
+}
+
+static void inflate_free(void *buffer)
+{
+ free(buffer);
+}
+
+ZFILE *Zopen(const char *path, const char *mode)
+{
+ struct ZipioState *zs;
+
+ long inplen;
+
+ /* Allocate the ZipioState memory area */
+ zs = (struct ZipioState *) malloc(sizeof(struct ZipioState));
+ if (!zs) return NULL;
+
+ /* Set up the initial values of the inflate state */
+
+ CACHEINIT;
+
+ RUNTIMEINIT;
+
+ zs->errorencountered = FALSE;
+
+ zs->inpinf = 0;
+ zs->outinf = 0;
+
+ zs->fileposition = 0;
+
+ zs->filecrc = 0xffffffffL;
+
+ /* Open the real file */
+ zs->OpenFile = fopen(path, mode);
+ if (!zs->OpenFile)
+ {
+ free(zs);
+ return NULL;
+ }
+
+ /* Read the first input buffer */
+ if ((inplen = (long) fread(zs->inpbuf, 1, INPBUFSIZE, zs->OpenFile)) >= 30)
+ {
+ GETUINT4(zs->inpbuf+ 0, zs->sign);
+ GETUINT2(zs->inpbuf+ 4, zs->vers);
+ GETUINT2(zs->inpbuf+ 6, zs->flag);
+ GETUINT2(zs->inpbuf+ 8, zs->comp);
+ GETUINT2(zs->inpbuf+10, zs->mtim);
+ GETUINT2(zs->inpbuf+12, zs->mdat);
+ GETUINT4(zs->inpbuf+14, zs->crc3);
+ GETUINT4(zs->inpbuf+18, zs->csiz);
+ GETUINT4(zs->inpbuf+22, zs->usiz);
+ GETUINT2(zs->inpbuf+26, zs->flen);
+ GETUINT2(zs->inpbuf+28, zs->elen);
+
+#ifdef PRINTZIPHEADER
+ fprintf(stderr, "local file header signature hex %8lx\n", zs->sign);
+ fprintf(stderr, "version needed to extract %8d\n" , zs->vers);
+ fprintf(stderr, "general purpose bit flag hex %8x\n" , zs->flag);
+ fprintf(stderr, "compression method %8d\n" , zs->comp);
+ fprintf(stderr, "last mod file time %8d\n" , zs->mtim);
+ fprintf(stderr, "last mod file date %8d\n" , zs->mdat);
+ fprintf(stderr, "crc-32 hex %8lx\n", zs->crc3);
+ fprintf(stderr, "compressed size %8ld\n", zs->csiz);
+ fprintf(stderr, "uncompressed size %8ld\n", zs->usiz);
+ fprintf(stderr, "filename length %8d\n" , zs->flen);
+ fprintf(stderr, "extra field length %8d\n" , zs->elen);
+#endif
+ }
+ else
+ {
+ zs->sign = 0;
+ }
+
+ /*
+ * If the file isn't a zip file, set up to read it normally
+ */
+ if ((zs->sign != ZIPSIGNATURE) ||
+ (zs->flag & 1) ||
+ (zs->comp != 8) ||
+ (inplen <= 30 + zs->flen + zs->elen) )
+ {
+ /* Initialize buffering */
+ BufferInitialize(zs, FALSE);
+
+ zs->inflatestate = NULL;
+ }
+ else
+ {
+ /* Initialize buffering */
+ BufferInitialize(zs, TRUE);
+
+ zs->inflatestate = InflateInitialize(
+ (void *) zs,
+ inflate_putbuffer,
+ inflate_malloc,
+ inflate_free
+ );
+
+ if (InflatePutBuffer(zs->inflatestate,
+ zs->inpbuf+30+zs->flen+zs->elen,
+ inplen-30-zs->flen-zs->elen
+ )
+ )
+ zs->errorencountered = TRUE;
+
+ zs->inpinf += inplen-30-zs->flen-zs->elen;
+ }
+
+ /* Return this state info to the caller */
+ return (ZFILE *) zs;
+}
+
+int _Zgetc(ZFILE *stream)
+{
+ long offset, length;
+
+ int off;
+
+ RUNTIMECHECK;
+
+ if (ZS->errorencountered) return -1;
+
+ CACHEUPDATE;
+
+ /* If already at EOF, return */
+ if (ZS->fileposition >= ZS->usiz) return -1;
+
+ /* If data isn't in current outbuf, get it */
+ offset = ZS->fileposition & ~((long) (OUTBUFSIZE-1));
+ length = ZS->usiz - offset;
+ if (length > OUTBUFSIZE) length = OUTBUFSIZE;
+
+ if (ZS->getoff != offset)
+ {
+ if (BufferRead(ZS, offset, ZS->getbuf, length)) return -1;
+
+ ZS->getoff = offset;
+ }
+
+ /* Set up the cache */
+ off = (int) (ZS->fileposition & (OUTBUFSIZE-1));
+ ZS->len = (int) (length - off);
+ ZS->ptr = ZS->getbuf + off;
+
+ /* Return the character */
+ ZS->len--;
+ return *(ZS->ptr++);
+}
+
+size_t Zread(void *ptr, size_t size, size_t n, ZFILE *stream)
+{
+ long length;
+
+ RUNTIMECHECK;
+
+ if (ZS->errorencountered) return 0;
+
+ CACHEUPDATE;
+
+ /* Compute the length requested */
+ length = size * (long) n;
+
+ /* Adjust the length to account for premature EOF */
+ if (ZS->fileposition+length > ZS->usiz)
+ length = ZS->usiz - ZS->fileposition;
+
+ /* If the length is zero, then just return an EOF error */
+ if (length <= 0) return 0;
+
+ /* Make the length a multiple of size */
+ length /= size;
+ length *= size;
+
+ /* If the length is zero, then just return an EOF error */
+ if (length <= 0) return 0;
+
+ /* Read from the buffer */
+ if (BufferRead(ZS, ZS->fileposition, (unsigned char *) ptr, length))
+ return 0;
+
+ /* Update the file position */
+ ZS->fileposition += length;
+
+ /* Return the number of items transferred */
+ return (size_t) (length / size);
+}
+
+int Zseek(ZFILE *stream, long offset, int whence)
+{
+ long newoffset;
+
+ RUNTIMECHECK;
+
+ if (ZS->errorencountered) return -1;
+
+ CACHEUPDATE;
+
+ if (whence == SEEK_SET)
+ {
+ newoffset = offset;
+ }
+ else if (whence == SEEK_CUR)
+ {
+ newoffset = ZS->fileposition + offset;
+ }
+ else if (whence == SEEK_END)
+ {
+ newoffset = ZS->fileposition + ZS->usiz;
+ }
+ else
+ {
+ return -1;
+ }
+
+ if ((newoffset < 0) || (newoffset > ZS->usiz)) return -1;
+
+ ZS->fileposition = newoffset;
+
+ return 0;
+}
+
+long Ztell(ZFILE *stream)
+{
+ RUNTIMECHECK;
+
+ if (ZS->errorencountered) return -1;
+
+ CACHEUPDATE;
+
+ return ZS->fileposition;
+}
+
+int Zclose(ZFILE *stream)
+{
+ int ret;
+
+ RUNTIMECHECK;
+
+ CACHEUPDATE;
+
+ /* terminate the inflate routines, and check for errors */
+ if (ZS->inflatestate)
+ {
+ if (InflateTerminate(ZS->inflatestate))
+ ZS->errorencountered = TRUE;
+
+ /* Check that the CRC is OK */
+ if (ZS->filecrc != (ZS->crc3 ^ 0xffffffffL))
+ ZS->errorencountered = TRUE;
+ }
+
+ /* save the final error status */
+ ret = ZS->errorencountered;
+
+ /* terminate the buffering */
+ BufferTerminate(ZS);
+
+ /* free the ZipioState structure */
+ free(ZS);
+
+ /* return the final error status */
+ return ret;
+}
diff --git a/externals/figlet/zipio.h b/externals/figlet/zipio.h
new file mode 100644
index 000000000..12289d658
--- /dev/null
+++ b/externals/figlet/zipio.h
@@ -0,0 +1,104 @@
+/*
+ * zipio.h - stdio emulation library for reading zip files
+ *
+ * Version 1.1.2
+ */
+
+/*
+ * Copyright (C) 1995, Edward B. Hamrick
+ *
+ * Permission to use, copy, modify, and distribute this software and
+ * its documentation for any purpose and without fee is hereby granted,
+ * provided that the above copyright notice appear in all copies and
+ * that both that copyright notice and this permission notice appear in
+ * supporting documentation, and that the name of the copyright holders
+ * not be used in advertising or publicity pertaining to distribution of
+ * the software without specific, written prior permission. The copyright
+ * holders makes no representations about the suitability of this software
+ * for any purpose. It is provided "as is" without express or implied warranty.
+ *
+ * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS
+ * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS,
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT
+ * OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF
+ * USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
+ * OF THIS SOFTWARE.
+ */
+
+/*
+ * Changes from 1.1 to 1.1.1:
+ * Changed "z*" functions to "Z*" to avoid namespace pollution.
+ * Added "zungetc" macro.
+ * John Cowan <cowan@ccil.org>
+ *
+ * Changes from 1.1.1 to 1.1.2:
+ * Relicensed under the MIT license, with consent of the copyright holders.
+ * Claudio Matsuoka (Jan 11 2011)
+ */
+
+/*
+ * This library of routines has the same calling sequence as
+ * the stdio.h routines for reading files. If these routines
+ * detect that they are reading from a zip file, they transparently
+ * unzip the file and make the application think they're reading
+ * from the uncompressed file.
+ *
+ * Note that this library is designed to work for zip files that
+ * use the deflate compression method, and to read the first file
+ * within the zip archive.
+ *
+ * There are a number of tunable parameters in the reference
+ * implementation relating to in-memory decompression and the
+ * use of temporary files.
+ *
+ * Particular care was taken to make the Zgetc() macro work
+ * as efficiently as possible. When reading an uncompressed
+ * file with Zgetc(), it has exactly the same performance as
+ * when using getc(). WHen reading a compressed file with
+ * Zgetc(), it has the same performance as fread(). The total
+ * CPU overhead for decompression is about 50 cycles per byte.
+ *
+ * The Zungetc() macro is quite limited. It ignores the character
+ * specified for pushback, and essentially just forces the last
+ * character read to be re-read. This is essential when parsing
+ * numbers and such. (1.1.1)
+ *
+ * There are a few stdio routines that aren't represented here, but
+ * they can be layered on top of these routines if needed.
+ */
+
+#ifndef __ZIPIO_H
+#define __ZIPIO_H
+
+#include <stdio.h>
+
+typedef struct {
+ int len;
+ unsigned char *ptr;
+} ZFILE;
+
+#define Zgetc(f) \
+ ((--((f)->len) >= 0) \
+ ? (unsigned char)(*(f)->ptr++) \
+ : _Zgetc (f))
+
+#define Zungetc(c,f) \
+ ((f)->ptr--, (f)->len++, (c))
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+ZFILE *Zopen(const char *path, const char *mode);
+int _Zgetc(ZFILE *stream);
+size_t Zread(void *ptr, size_t size, size_t n, ZFILE *stream);
+int Zseek(ZFILE *stream, long offset, int whence);
+long Ztell(ZFILE *stream);
+int Zclose(ZFILE *stream);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/externals/pear-figlet/Text/Figlet.php b/externals/pear-figlet/Text/Figlet.php
new file mode 100644
index 000000000..cc121facb
--- /dev/null
+++ b/externals/pear-figlet/Text/Figlet.php
@@ -0,0 +1,500 @@
+<?php
+/* vim: set expandtab tabstop=4 softtabstop=4 shiftwidth=4: */
+/**
+* ASCII art text creation
+*
+* Project home page (Russian): http://bolknote.ru/files/figlet/
+*
+* PHP Version 4
+*
+* @category Text
+* @package Text_Figlet
+* @author Evgeny Stepanischev <imbolk@gmail.com>
+* @author Christian Weiske <cweiske@php.net>
+* @license http://www.php.net/license PHP License
+* @version CVS: $Id$
+* @link http://pear.php.net/package/Text_Figlet
+*/
+
+/**
+* ASCII art text creation
+*
+* Project home page (Russian): http://bolknote.ru/files/figlet/
+*
+* PHP Version 4
+*
+* @category Text
+* @package Text_Figlet
+* @author Evgeny Stepanischev <imbolk@gmail.com>
+* @author Christian Weiske <cweiske@php.net>
+* @license http://www.php.net/license PHP License
+* @link http://pear.php.net/package/Text_Figlet
+*/
+class Text_Figlet
+{
+ /**
+ * Height of a letter
+ *
+ * @var integer
+ *
+ * @access protected
+ */
+ var $height;
+
+ /**
+ * Letter baseline
+ *
+ * @var integer
+ *
+ * @access protected
+ */
+ var $oldlayout;
+
+ /**
+ * Flag - RTL (right to left) or LTR (left to right) text direction
+ *
+ * @var integer
+ *
+ * @access protected
+ */
+ var $rtol;
+
+ /**
+ * Information about special 'hardblank' character
+ *
+ * @var integer
+ *
+ * @access protected
+ */
+ var $hardblank;
+
+ /**
+ * Is used for keeping font
+ *
+ * @var array
+ *
+ * @access protected
+ */
+ var $font;
+
+ /**
+ * Flag is true if smushing occured in letters printing cycle
+ *
+ * @var integer
+ *
+ * @access protected
+ */
+ var $smush_flag;
+
+ /**
+ * Comment lines buffer
+ *
+ * @var string
+ *
+ * @access public
+ */
+
+ var $font_comment;
+
+
+ /**
+ * Load user font. Must be invoked first.
+ * Automatically tries the Text_Figlet font data directory
+ * as long as no path separator is in the filename.
+ *
+ * @param string $filename font file name
+ * @param bool $loadgerman (optional) load German character set or not
+ *
+ * @access public
+ * @return mixed PEAR_Error or true for success
+ */
+ function loadFont($filename, $loadgerman = true)
+ {
+ $this->font = array();
+ if (!file_exists($filename)) {
+ return self::raiseError('Figlet font file "'
+ . $filename
+ . '" cannot be found', 1);
+ }
+
+ $this->font_comment = '';
+
+ // If Gzip compressed font
+ if (substr($filename, -3, 3) == '.gz') {
+ $filename = 'compress.zlib://' . $filename;
+ $compressed = true;
+
+ if (!function_exists('gzcompress')) {
+ return self::raiseError('Cannot load gzip compressed fonts since'
+ . ' gzcompress() is not available.',
+ 3);
+ }
+ } else {
+ $compressed = false;
+ }
+
+ if (!($fp = fopen($filename, 'rb'))) {
+ return self::raiseError('Cannot open figlet font file ' . $filename, 2);
+ }
+
+ if (!$compressed) {
+ /* ZIPed font */
+ if (fread($fp, 2) == 'PK') {
+ if (!function_exists('zip_open')) {
+ return self::raiseError('Cannot load ZIP compressed fonts since'
+ . ' ZIP PHP extension is not available.',
+ 5);
+ }
+
+ fclose($fp);
+
+ if (!($fp = zip_open($filename))) {
+ return self::raiseError('Cannot open figlet font file ' . $filename, 2);
+ }
+
+ $name = zip_entry_name(zip_read($fp));
+ zip_close($fp);
+
+ if (!($fp = fopen('zip://' . realpath($filename) . '#' . $name, 'rb'))) {
+ return self::raiseError('Cannot open figlet font file ' . $filename, 2);
+ }
+
+ $compressed = true;
+ } else {
+ flock($fp, LOCK_SH);
+ rewind($fp);
+ }
+ }
+
+ // flf2a$ 6 5 20 15 3 0 143 229
+ // | | | | | | | | | |
+ // / / | | | | | | | \
+ // Signature / / | | | | | \ Codetag_Count
+ // Hardblank / / | | | \ Full_Layout
+ // Height / | | \ Print_Direction
+ // Baseline / \ Comment_Lines
+ // Max_Length Old_Layout
+
+
+ $header = explode(' ', fgets($fp, 2048));
+
+ if (substr($header[0], 0, 5) <> 'flf2a') {
+ return self::raiseError('Unknown FIGlet font format.', 4);
+ }
+
+ @list ($this->hardblank, $this->height,,,
+ $this->oldlayout, $cmt_count, $this->rtol) = $header;
+
+ $this->hardblank = substr($this->hardblank, -1, 1);
+
+ for ($i = 0; $i < $cmt_count; $i++) {
+ $this->font_comment .= fgets($fp, 2048);
+ }
+
+ // ASCII charcters
+ for ($i = 32; $i < 127; $i++) {
+ $this->font[$i] = $this->_char($fp);
+ }
+
+ foreach (array(196, 214, 220, 228, 246, 252, 223) as $i) {
+ if ($loadgerman) {
+ $letter = $this->_char($fp);
+
+ // Invalid character but main font is loaded and I can use it
+ if ($letter === false) {
+ fclose($fp);
+ return true;
+ }
+
+ // Load if it is not blank only
+ if (trim(implode('', $letter)) <> '') {
+ $this->font[$i] = $letter;
+ }
+ } else {
+ $this->_skip($fp);
+ }
+ }
+
+ // Extented characters
+ for ($n = 0; !feof($fp); $n++) {
+ list ($i) = explode(' ', rtrim(fgets($fp, 1024)), 2);
+ if ($i == '') {
+ continue;
+ }
+
+ // If comment
+ if (preg_match('/^\-0x/i', $i)) {
+ $this->_skip($fp);
+ } else {
+ // If Unicode
+ if (preg_match('/^0x/i', $i)) {
+ $i = hexdec(substr($i, 2));
+ } else {
+ // If octal
+ if ($i{0} === '0' && $i !== '0' || substr($i, 0, 2) == '-0') {
+ $i = octdec($i);
+ }
+ }
+
+ $letter = $this->_char($fp);
+
+ // Invalid character but main font is loaded and I can use it
+ if ($letter === false) {
+ fclose($fp);
+ return true;
+ }
+
+ $this->font[$i] = $letter;
+ }
+ }
+
+ fclose($fp);
+ return true;
+ }
+
+
+
+ /**
+ * Print string using font loaded by LoadFont method
+ *
+ * @param string $str string for printing
+ * @param bool $inhtml (optional) output mode
+ * - HTML (true) or plain text (false)
+ *
+ * @access public
+ * @return string contains
+ */
+ function lineEcho($str, $inhtml = false)
+ {
+ $out = array();
+
+ for ($i = 0; $i<strlen($str); $i++) {
+ // Pseudo Unicode support
+ if (substr($str, $i, 2) == '%u') {
+ $lt = hexdec(substr($str, $i+2, 4));
+ $i += 5;
+ } else {
+ $lt = ord($str{$i});
+ }
+
+ $hb = preg_quote($this->hardblank, '/');
+ $sp = "$hb\\x00\\s";
+
+ // If chosen character not found try to use default
+ // If default character is not defined skip it
+
+ if (!isset($this->font[$lt])) {
+ if (isset($this->font[0])) {
+ $lt = 0;
+ } else {
+ continue;
+ }
+ }
+
+ for ($j = 0; $j < $this->height; $j++) {
+ $line = $this->font[$lt][$j];
+
+ // Replace hardblanks
+ if (isset($out[$j])) {
+ if ($this->rtol) {
+ $out[$j] = $line . $out[$j];
+ } else {
+ $out[$j] .= $line;
+ }
+ } else {
+ $out[$j] = $line;
+ }
+ }
+
+ if ($this->oldlayout > -1 && $i) {
+ // Calculate minimal distance between two last letters
+
+ $mindiff = -1;
+
+ for ($j = 0; $j < $this->height; $j++) {
+ if (preg_match("/\S(\s*\\x00\s*)\S/", $out[$j], $r)) {
+ if ($mindiff == -1) {
+ $mindiff = strlen($r[1]);
+ } else {
+ $mindiff = min($mindiff, strlen($r[1]));
+ }
+ }
+ }
+
+ // Remove spaces between two last letter
+ // dec mindiff for exclude \x00 symbol
+
+ if (--$mindiff > 0) {
+ for ($j = 0; $j < $this->height; $j++) {
+ if (preg_match("/\\x00(\s{0,{$mindiff}})/", $out[$j], $r)) {
+ $l = strlen($r[1]);
+ $b = $mindiff - $l;
+ $out[$j] = preg_replace("/\s{0,$b}\\x00\s{{$l}}/",
+ "\0",
+ $out[$j],
+ 1);
+ }
+ }
+ }
+ // Smushing
+
+ $this->smush_flag = 0;
+
+ for ($j = 0; $j < $this->height; $j++) {
+ $out[$j] = preg_replace_callback("#([^$sp])\\x00([^$sp])#",
+ array(&$this, '_rep'),
+ $out[$j]);
+ }
+
+ // Remove one space if smushing
+ // and remove all \x00 except tail whenever
+
+ if ($this->smush_flag) {
+ $pat = array("/\s\\x00(?!$)|\\x00\s/", "/\\x00(?!$)/");
+ $rep = array('', '');
+ } else {
+ $pat = "/\\x00(?!$)/";
+ $rep = '';
+ }
+
+ for ($j = 0; $j<$this->height; $j++) {
+ $out[$j] = preg_replace($pat, $rep, $out[$j]);
+ }
+ }
+ }
+
+ $trans = array("\0" => '', $this->hardblank => ' ');
+ $str = strtr(implode("\n", $out), $trans);
+
+ if ($inhtml) {
+ self::raiseError(
+ 'Do not use the HTML escaping provided by this class in '.
+ 'a Phabricator context.');
+ }
+
+ return $str;
+ }
+
+
+
+ /**
+ * It is preg_replace callback function that makes horizontal letter smushing
+ *
+ * @param array $r preg_replace matches array
+ *
+ * @return string
+ * @access private
+ */
+ function _rep($r)
+ {
+ if ($this->oldlayout & 1 && $r[1] == $r[2]) {
+ $this->smush_flag = 1;
+ return $r[1];
+ }
+
+ if ($this->oldlayout & 2) {
+ $symb = '|/\\[]{}()<>';
+
+ if ($r[1] == '_' && strpos($symb, $r[2]) !== false ||
+ $r[2] == '_' && strpos($symb, $r[1]) !== false) {
+ $this->smush_flag = 1;
+ return $r[1];
+ }
+ }
+
+ if ($this->oldlayout & 4) {
+ $classes = '|/\\[]{}()<>';
+
+ if (($left = strpos($classes, $r[1])) !== false) {
+ if (($right = strpos($classes, $r[2])) !== false) {
+ $this->smush_flag = 1;
+ return $right > $left ? $r[2] : $r[1];
+ }
+ }
+ }
+
+ if ($this->oldlayout & 8) {
+ $t = array('[' => ']', ']' => '[', '{' => '}', '}' => '{',
+ '(' => ')', ')' => '(');
+
+ if (isset($t[$r[2]]) && $r[1] == $t[$r[2]]) {
+ $this->smush_flag = 1;
+ return '|';
+ }
+ }
+
+ if ($this->oldlayout & 16) {
+ $t = array("/\\" => '|', "\\/" => 'Y', '><' => 'X');
+
+ if (isset($t[$r[1].$r[2]])) {
+ $this->smush_flag = 1;
+ return $t[$r[1].$r[2]];
+ }
+ }
+
+ if ($this->oldlayout & 32) {
+ if ($r[1] == $r[2] && $r[1] == $this->hardblank) {
+ $this->smush_flag = 1;
+ return $this->hardblank;
+ }
+ }
+
+ return $r[1]."\00".$r[2];
+ }
+
+
+
+ /**
+ * Function loads one character in the internal array from file
+ *
+ * @param resource &$fp handle of font file
+ *
+ * @return mixed lines of the character or false if foef occured
+ * @access private
+ */
+ function _char(&$fp)
+ {
+ $out = array();
+
+ for ($i = 0; $i < $this->height; $i++) {
+ if (feof($fp)) {
+ return false;
+ }
+
+ $line = rtrim(fgets($fp, 2048), "\r\n");
+ if (preg_match('/(.){1,2}$/', $line, $r)) {
+ $line = str_replace($r[1], '', $line);
+ }
+
+ $line .= "\x00";
+
+ $out[] = $line;
+ }
+
+ return $out;
+ }
+
+
+
+ /**
+ * Function for skipping one character in a font file
+ *
+ * @param resource &$fp handle of font file
+ *
+ * @return boolean always return true
+ * @access private
+ */
+ function _skip(&$fp)
+ {
+ for ($i = 0; $i<$this->height && !feof($fp); $i++) {
+ fgets($fp, 2048);
+ }
+
+ return true;
+ }
+
+
+ private static function raiseError($message, $code = 1) {
+ throw new Exception($message);
+ }
+}
diff --git a/externals/pear-figlet/docs/README.TXT b/externals/pear-figlet/docs/README.TXT
new file mode 100644
index 000000000..544a5259a
--- /dev/null
+++ b/externals/pear-figlet/docs/README.TXT
@@ -0,0 +1,26 @@
+FIGlet project home page: http://www.figlet.org/
+You can download FIGlet fonts from: ftp://ftp.figlet.org/pub/figlet/fonts/
+Project home page (Russian): http://bolknote.ru/files/figlet/
+
+Notes:
+1. There are no support flc and vertical smushing.
+2. But horizontal smushing is supported.
+3. Default character (0x00) is supported.
+4. German symbols are supported.
+5. It is supported Unicode as %uHHHH, HHHH - a hex code of a character (UCS-2).
+7. RTL and LTR text directions are suppoted.
+8. Windows and Unix font formats are supported.
+9. Incomplete fonts are supported (for example dwhistled.flf).
+10. Gzipped fonts supported as .flf.gz (zlib PHP extension required)
+11. ZIPed fonts supported (ZIP PHP extension required)
+ `
+Usage:
+
+ include_once 'Text/Figlet.php';
+
+ $figlet = new Text_Figlet();
+ if (PEAR::isError($error = $figlet->LoadFont('slant.flf'))) {
+ echo 'Error: ', $error->getMessage();
+ } else {
+ echo $figlet->LineEcho("Hello, world!");
+ }
\ No newline at end of file
diff --git a/externals/pear-figlet/docs/examples/hello_world.php b/externals/pear-figlet/docs/examples/hello_world.php
new file mode 100644
index 000000000..849c997fb
--- /dev/null
+++ b/externals/pear-figlet/docs/examples/hello_world.php
@@ -0,0 +1,35 @@
+<?php
+
+/* UTF-8 convert to FIGlet Unicode */
+/* iconv PHP module required */
+function utf8tofiglet($str)
+{
+ // escape %u
+ $str = str_replace('%u', sprintf('%%%%u%04X', ord('u')), $str);
+
+ if (function_exists('iconv')) {
+ $str = iconv('utf-8', 'ucs-2be', $str);
+ $out = '';
+
+ for ($i = 0, $len = strlen($str); $i<$len; $i++) {
+ $code = ord($str[$i++]) * 256 + ord($str[$i]);
+
+ $out .= $code < 128 ? $str[$i] : sprintf('%%u%04X', $code);
+ }
+
+ return $out;
+ }
+
+ return $str;
+}
+
+require_once 'Text/Figlet.php';
+
+$figlet = new Text_Figlet();
+$error = $figlet->LoadFont('makisupa.flf');
+if (PEAR::isError($error)) {
+ echo 'Error: ' . $error->getMessage() . "\n";
+} else {
+ echo $figlet->LineEcho(utf8tofiglet('Hello, world!')) . "\n";
+}
+?>
\ No newline at end of file
diff --git a/externals/pear-figlet/fonts/makisupa.flf b/externals/pear-figlet/fonts/makisupa.flf
new file mode 100644
index 000000000..6ed7e1e6d
--- /dev/null
+++ b/externals/pear-figlet/fonts/makisupa.flf
@@ -0,0 +1,2877 @@
+flf2a_ 16 16 100 -1 3 0 0 73
+Converted Makisupa (http://www.greywolfwebworks.com/fonts.html)
+by Evgeny Stepanischev http://bolknote.ru/ 2010.07.08
+GPL and OFL license.
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_@@
+_##* _@
+_##* _@
+_##* _@
+_##* _@
+_##* _@
+_##* _@
+_##* _@
+_##* _@
+_##* _@
+_##* _@
+_ _@
+_** _@
+_##* _@
+_##* _@
+_ _@
+_@@
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_##**## _@
+_##**## _@
+_##**## _@
+_##**## _@
+_ _@
+_@@
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_ ##* ##* _@
+_*##**##** _@
+_######### _@
+_######### _@
+_ ##* ##* _@
+_*##**##** _@
+_######### _@
+_######### _@
+_ ##* ##* _@
+_ _@
+_@@
+_ *## _@
+_ *##* _@
+_*#####* _@
+_#######* _@
+_###**##* _@
+_###* ##* _@
+_######* _@
+_*###### _@
+_ ***##* _@
+_###**##* _@
+_#######* _@
+_*#####* _@
+_ *###* _@
+_ *## _@
+_ _@
+_@@
+_*##* #** _@
+_#### *### _@
+_#### #### _@
+_####*###* _@
+_######## _@
+_*######* _@
+_ **###* _@
+_ *###* _@
+_ *###* _@
+_ *######* _@
+_*######## _@
+_*##*##*## _@
+_###*##### _@
+_*#* *###* _@
+_ _@
+_@@
+_ _@
+_ _@
+_ _@
+_ *####* _@
+_ ######* _@
+_ ###*##* _@
+_ ###*##* _@
+_ *####* _@
+_*#####*##* _@
+_#########* _@
+_##* ####* _@
+_###*#####* _@
+_*######### _@
+_ *####**#* _@
+_ _@
+_@@
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_##* _@
+_##* _@
+_##* _@
+_##* _@
+_ _@
+_@@
+_##* _@
+_##* _@
+_##* _@
+_##* _@
+_##* _@
+_##* _@
+_##* _@
+_##* _@
+_##* _@
+_##* _@
+_###** _@
+_*#### _@
+_ *### _@
+_ _@
+_ _@
+_@@
+_ ##* _@
+_ ##* _@
+_ ##* _@
+_ ##* _@
+_ ##* _@
+_ ##* _@
+_ ##* _@
+_ ##* _@
+_ ##* _@
+_ *##* _@
+_*###* _@
+_###* _@
+_##* _@
+_ _@
+_ _@
+_@@
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_ *# _@
+_#### _@
+_*### _@
+_#### _@
+_ *# _@
+_ _@
+_@@
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_ ##* _@
+_ ##* _@
+_ ##* _@
+_***##**** _@
+_######### _@
+_######### _@
+_ ##* _@
+_ ##* _@
+_ ##* _@
+_ _@
+_@@
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_##* _@
+_##* _@
+_*# _@
+_** _@
+_#* _@
+_ _@
+_ _@
+_@@
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_********* _@
+_######### _@
+_######### _@
+_ _@
+_@@
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_** _@
+_##* _@
+_##* _@
+_ _@
+_@@
+_ *#* _@
+_ *### _@
+_ *##* _@
+_ *###* _@
+_ *##* _@
+_ *### _@
+_ ###* _@
+_ *### _@
+_ ###* _@
+_ *##* _@
+_*###* _@
+_*##* _@
+_###* _@
+_*#* _@
+_ _@
+_@@
+_ *#####* _@
+_*#######* _@
+_###***### _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##*## *## _@
+_##*## *## _@
+_##*** *## _@
+_##* *## _@
+_##* *## _@
+_###***### _@
+_*#######* _@
+_ *#####* _@
+_ _@
+_@@
+_*###* _@
+_####* _@
+_**##* _@
+_ ##* _@
+_ ##* _@
+_ ##* _@
+_ ##* _@
+_ ##* _@
+_ ##* _@
+_ ##* _@
+_ ##* _@
+_**###** _@
+_####### _@
+_####### _@
+_ _@
+_@@
+_ *#####* _@
+_*#######* _@
+_###***### _@
+_##* *## _@
+_##* *## _@
+_ *### _@
+_ *######* _@
+_*######* _@
+_###**** _@
+_##* _@
+_##* _@
+_###****** _@
+_######### _@
+_######### _@
+_ _@
+_@@
+_ *#####* _@
+_*#######* _@
+_###***### _@
+_##* *## _@
+_##* *## _@
+_ *### _@
+_ #####* _@
+_ #####* _@
+_ ***### _@
+_##* *## _@
+_##* *## _@
+_###***### _@
+_*#######* _@
+_ *#####* _@
+_ _@
+_@@
+_ *##* _@
+_ *###* _@
+_ *####* _@
+_ *#####* _@
+_ *######* _@
+_ *####*##* _@
+_ ####**##* _@
+_*########* _@
+_*########* _@
+_ *##* _@
+_ ##* _@
+_ ##* _@
+_ ##* _@
+_ ##* _@
+_ _@
+_@@
+_######### _@
+_######### _@
+_###****** _@
+_##* _@
+_##* _@
+_#######* _@
+_########* _@
+_******### _@
+_ *## _@
+_##* *## _@
+_##* *## _@
+_###***### _@
+_*#######* _@
+_ *#####* _@
+_ _@
+_@@
+_ *#* _@
+_ *## _@
+_ ### _@
+_ *##* _@
+_ *## _@
+_ ##* _@
+_*######* _@
+_########* _@
+_######### _@
+_##* *### _@
+_##* *## _@
+_###***### _@
+_*#######* _@
+_ *#####* _@
+_ _@
+_@@
+_######### _@
+_######### _@
+_******### _@
+_ ###* _@
+_ *### _@
+_ *##* _@
+_ ###* _@
+_ *##* _@
+_ *##* _@
+_ ### _@
+_ *##* _@
+_ ### _@
+_ ##* _@
+_ ##* _@
+_ _@
+_@@
+_ *#####* _@
+_*#######* _@
+_###***### _@
+_##* *## _@
+_##* *## _@
+_###* *### _@
+_*#######* _@
+_*#######* _@
+_###***### _@
+_##* *## _@
+_##* *## _@
+_###***### _@
+_*#######* _@
+_ *#####* _@
+_ _@
+_@@
+_ *#####* _@
+_*#######* _@
+_###***### _@
+_##* *## _@
+_##* *## _@
+_###**#### _@
+_*######## _@
+_ *######* _@
+_ *### _@
+_ *##* _@
+_ *###* _@
+_ *### _@
+_ ###* _@
+_ *## _@
+_ _@
+_@@
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_##* _@
+_##* _@
+_** _@
+_ _@
+_ _@
+_ _@
+_** _@
+_##* _@
+_##* _@
+_ _@
+_@@
+_ _@
+_** _@
+_##* _@
+_##* _@
+_ _@
+_ _@
+_ _@
+_ _@
+_##* _@
+_##* _@
+_*# _@
+_** _@
+_#* _@
+_ _@
+_ _@
+_@@
+_ _@
+_ _@
+_ _@
+_ _@
+_ *#* _@
+_ *### _@
+_ *###* _@
+_*###* _@
+_###* _@
+_###* _@
+_*###* _@
+_ *###* _@
+_ *### _@
+_ *#* _@
+_ _@
+_@@
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_********* _@
+_######### _@
+_######### _@
+_ _@
+_********* _@
+_######### _@
+_######### _@
+_ _@
+_@@
+_ _@
+_ _@
+_ _@
+_ _@
+_*#* _@
+_###* _@
+_*###* _@
+_ *###* _@
+_ *### _@
+_ *### _@
+_ *###* _@
+_*###* _@
+_###* _@
+_*#* _@
+_ _@
+_@@
+_ *#####* _@
+_*#######* _@
+_###***### _@
+_##* *## _@
+_##* *## _@
+_ *### _@
+_ *####* _@
+_ *####* _@
+_ *###** _@
+_ *##* _@
+_ ** _@
+_ ** _@
+_ *## _@
+_ *## _@
+_ _@
+_@@
+_ _@
+_ _@
+_ _@
+_ _@
+_ *####** _@
+_ *##*#*##* _@
+_ ##**#**#* _@
+_*#* #*# *# _@
+_*# ### *# _@
+_*#* #*# *# _@
+_ ## # #*## _@
+_ *### ###* _@
+_ *#####* _@
+_ *** _@
+_ _@
+_@@
+_ *###* _@
+_ *#####* _@
+_*###*###* _@
+_###* *### _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_###***### _@
+_######### _@
+_######### _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_ _@
+_@@
+_#######* _@
+_########* _@
+_###***### _@
+_##* *## _@
+_##* *## _@
+_##* *### _@
+_########* _@
+_########* _@
+_###***### _@
+_##* *## _@
+_##* *## _@
+_###***### _@
+_########* _@
+_#######* _@
+_ _@
+_@@
+_ *#####* _@
+_*#######* _@
+_###***### _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* _@
+_##* _@
+_##* _@
+_##* *## _@
+_##* *## _@
+_###***### _@
+_*#######* _@
+_ *#####* _@
+_ _@
+_@@
+_######* _@
+_#######* _@
+_###*####* _@
+_##* *### _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *### _@
+_###*####* _@
+_#######* _@
+_######* _@
+_ _@
+_@@
+_######### _@
+_######### _@
+_###****** _@
+_##* _@
+_##* _@
+_##* _@
+_#######* _@
+_#######* _@
+_###**** _@
+_##* _@
+_##* _@
+_###****** _@
+_######### _@
+_######### _@
+_ _@
+_@@
+_######### _@
+_######### _@
+_###****** _@
+_##* _@
+_##* _@
+_##* _@
+_#######* _@
+_#######* _@
+_###**** _@
+_##* _@
+_##* _@
+_##* _@
+_##* _@
+_##* _@
+_ _@
+_@@
+_ *#####* _@
+_*#######* _@
+_###***### _@
+_##* *## _@
+_##* *## _@
+_##* _@
+_##* ##### _@
+_##* ##### _@
+_##* **### _@
+_##* *## _@
+_##* *## _@
+_###***### _@
+_*######## _@
+_ *####### _@
+_ _@
+_@@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_######### _@
+_######### _@
+_###***### _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_ _@
+_@@
+_######### _@
+_######### _@
+_***###*** _@
+_ ##* _@
+_ ##* _@
+_ ##* _@
+_ ##* _@
+_ ##* _@
+_ ##* _@
+_ ##* _@
+_ ##* _@
+_***###*** _@
+_######### _@
+_######### _@
+_ _@
+_@@
+_ *##### _@
+_ *##### _@
+_ **### _@
+_ *## _@
+_ *## _@
+_ *## _@
+_ *## _@
+_ *## _@
+_ *## _@
+_##* *## _@
+_##* *## _@
+_###***### _@
+_*#######* _@
+_ *#####* _@
+_ _@
+_@@
+_##* *## _@
+_##* *## _@
+_##* ### _@
+_##* *##* _@
+_##* ###* _@
+_##* *##* _@
+_#######* _@
+_####### _@
+_###*###* _@
+_##* *### _@
+_##* *##* _@
+_##* ### _@
+_##* *## _@
+_##* *## _@
+_ _@
+_@@
+_##* _@
+_##* _@
+_##* _@
+_##* _@
+_##* _@
+_##* _@
+_##* _@
+_##* _@
+_##* _@
+_##* _@
+_##* _@
+_###****** _@
+_######### _@
+_######### _@
+_ _@
+_@@
+_##* *## _@
+_### ### _@
+_###* *### _@
+_####*#### _@
+_######### _@
+_######### _@
+_##*###*## _@
+_##*###*## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_ _@
+_@@
+_##* *## _@
+_### *## _@
+_###* *## _@
+_####* *## _@
+_####* *## _@
+_#####**## _@
+_######*## _@
+_##*###### _@
+_##**##### _@
+_##* *#### _@
+_##* *#### _@
+_##* *### _@
+_##* ### _@
+_##* *## _@
+_ _@
+_@@
+_ *#####* _@
+_*#######* _@
+_###***### _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_###***### _@
+_*#######* _@
+_ *#####* _@
+_ _@
+_@@
+_#######* _@
+_########* _@
+_###***### _@
+_##* *## _@
+_##* *## _@
+_##* *### _@
+_########* _@
+_#######* _@
+_###**** _@
+_##* _@
+_##* _@
+_##* _@
+_##* _@
+_##* _@
+_ _@
+_@@
+_ *#####* _@
+_*#######* _@
+_###***### _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *#### _@
+_##* ##### _@
+_####*#### _@
+_*######## _@
+_ *######* _@
+_ _@
+_@@
+_#######* _@
+_########* _@
+_###***### _@
+_##* *## _@
+_##* *## _@
+_##* *### _@
+_########* _@
+_########* _@
+_###***### _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_ _@
+_@@
+_ *#####* _@
+_ *#######* _@
+_ ###***### _@
+_ ##* *## _@
+_ ##* *## _@
+_ ###* _@
+_ *######* _@
+_ *######* _@
+_ ****### _@
+_ ##* *## _@
+_ ##* *## _@
+_ ###***### _@
+_ *#######* _@
+_ *#####* _@
+_ _@
+_@@
+_######### _@
+_######### _@
+_***###*** _@
+_ ##* _@
+_ ##* _@
+_ ##* _@
+_ ##* _@
+_ ##* _@
+_ ##* _@
+_ ##* _@
+_ ##* _@
+_ ##* _@
+_ ##* _@
+_ ##* _@
+_ _@
+_@@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_###***### _@
+_*#######* _@
+_ *#####* _@
+_ _@
+_@@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_### ### _@
+_*##* *##* _@
+_ ###*### _@
+_ *#####* _@
+_ ##### _@
+_ *###* _@
+_ ##* _@
+_ _@
+_@@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##*###*## _@
+_##*###*## _@
+_######### _@
+_######### _@
+_####*#### _@
+_###* *### _@
+_### ### _@
+_##* *## _@
+_ _@
+_@@
+_##* *## _@
+_### ### _@
+_###* *### _@
+_*### ###* _@
+_ ###*### _@
+_ *#####* _@
+_ ##### _@
+_ ##### _@
+_ *#####* _@
+_ ###*### _@
+_*### ###* _@
+_###* *### _@
+_### ### _@
+_##* *## _@
+_ _@
+_@@
+_##* ##* _@
+_##* ##* _@
+_##* ##* _@
+_##* *##* _@
+_### *##* _@
+_###**###* _@
+_*######* _@
+_ *####* _@
+_ *##* _@
+_ ##* _@
+_ ##* _@
+_ ##* _@
+_ ##* _@
+_ ##* _@
+_ _@
+_@@
+_######### _@
+_######### _@
+_*****###* _@
+_ *###* _@
+_ ###* _@
+_ *### _@
+_ ###* _@
+_ *### _@
+_ ###* _@
+_ *### _@
+_*###* _@
+_*###***** _@
+_######### _@
+_######### _@
+_ _@
+_@@
+_##* _@
+_##* _@
+_##* _@
+_##* _@
+_##* _@
+_##* _@
+_##* _@
+_##* _@
+_##* _@
+_##* _@
+_###** _@
+_#####* _@
+_#####* _@
+_ _@
+_ _@
+_@@
+_*#* _@
+_###* _@
+_*##* _@
+_*###* _@
+_ *##* _@
+_ ###* _@
+_ *### _@
+_ ###* _@
+_ *### _@
+_ *##* _@
+_ *###* _@
+_ *##* _@
+_ *### _@
+_ *#* _@
+_ _@
+_@@
+_ ##* _@
+_ ##* _@
+_ ##* _@
+_ ##* _@
+_ ##* _@
+_ ##* _@
+_ ##* _@
+_ ##* _@
+_ ##* _@
+_ ##* _@
+_***##* _@
+_#####* _@
+_#####* _@
+_ _@
+_ _@
+_@@
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_ *#* _@
+_*###* _@
+_##*## _@
+_ _@
+_@@
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_********** _@
+_########## _@
+_########## _@
+_ _@
+_ _@
+_@@
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_*#* _@
+_###* _@
+_ *## _@
+_ _@
+_@@
+_ _@
+_ _@
+_ _@
+_ *###* _@
+_*#####* _@
+_###*### _@
+_##* *## _@
+_##* *## _@
+_##***## _@
+_####### _@
+_####### _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_ _@
+_@@
+_ _@
+_ _@
+_ _@
+_#####* _@
+_######* _@
+_##**### _@
+_##* *## _@
+_####### _@
+_######* _@
+_##**### _@
+_##* *## _@
+_##**### _@
+_######* _@
+_#####* _@
+_ _@
+_@@
+_ _@
+_ _@
+_ _@
+_ *###* _@
+_*#####* _@
+_###*### _@
+_##* *## _@
+_##* *## _@
+_##* _@
+_##* _@
+_##* *## _@
+_###*### _@
+_*#####* _@
+_ *###* _@
+_ _@
+_@@
+_ _@
+_ _@
+_ _@
+_#####* _@
+_######* _@
+_##*#### _@
+_##* ### _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* ### _@
+_##*#### _@
+_######* _@
+_#####* _@
+_ _@
+_@@
+_ _@
+_ _@
+_ _@
+_####### _@
+_#######* _@
+_##***** _@
+_##* _@
+_###### _@
+_###### _@
+_##**** _@
+_##* _@
+_##***** _@
+_#######* _@
+_####### _@
+_ _@
+_@@
+_ _@
+_ _@
+_ _@
+_####### _@
+_#######* _@
+_##***** _@
+_##* _@
+_###### _@
+_###### _@
+_##**** _@
+_##* _@
+_##* _@
+_##* _@
+_##* _@
+_ _@
+_@@
+_ _@
+_ _@
+_ _@
+_ *###* _@
+_*#####* _@
+_###*### _@
+_##* *## _@
+_##*#### _@
+_##*#### _@
+_##***## _@
+_##* *## _@
+_###*### _@
+_*###### _@
+_ *##### _@
+_ _@
+_@@
+_ _@
+_ _@
+_ _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_####### _@
+_####### _@
+_##***## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_ _@
+_@@
+_ _@
+_ _@
+_ _@
+_####### _@
+_####### _@
+_***##** _@
+_ *## _@
+_ *## _@
+_ *## _@
+_ *## _@
+_ *## _@
+_***##** _@
+_####### _@
+_####### _@
+_ _@
+_@@
+_ _@
+_ _@
+_ _@
+_ *#### _@
+_ *#### _@
+_ ***## _@
+_ *## _@
+_ *## _@
+_ *## _@
+_ *## _@
+_##* *## _@
+_###*### _@
+_*#####* _@
+_ *###* _@
+_ _@
+_@@
+_ _@
+_ _@
+_ _@
+_##* *## _@
+_##* *## _@
+_##**### _@
+_##**##* _@
+_#####* _@
+_#####* _@
+_##*### _@
+_##**##* _@
+_##* ### _@
+_##* *## _@
+_##* *## _@
+_ _@
+_@@
+_ _@
+_ _@
+_ _@
+_##* _@
+_##* _@
+_##* _@
+_##* _@
+_##* _@
+_##* _@
+_##* _@
+_##* _@
+_##***** _@
+_#######* _@
+_####### _@
+_ _@
+_@@
+_ _@
+_ _@
+_ _@
+_##* *## _@
+_### ### _@
+_###*### _@
+_####### _@
+_####### _@
+_####### _@
+_####### _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_ _@
+_@@
+_ _@
+_ _@
+_ _@
+_##* *## _@
+_### *## _@
+_###**## _@
+_####*## _@
+_####*## _@
+_####### _@
+_##*#### _@
+_##*#### _@
+_##**### _@
+_##* ### _@
+_##* *## _@
+_ _@
+_@@
+_ _@
+_ _@
+_ _@
+_ *###* _@
+_*#####* _@
+_###*### _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_###*### _@
+_*#####* _@
+_ *###* _@
+_ _@
+_@@
+_ _@
+_ _@
+_ _@
+_#####* _@
+_######* _@
+_##**### _@
+_##* *## _@
+_####### _@
+_######* _@
+_##**** _@
+_##* _@
+_##* _@
+_##* _@
+_##* _@
+_ _@
+_@@
+_ _@
+_ _@
+_ _@
+_ *###* _@
+_*#####* _@
+_###*### _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##***## _@
+_##*#### _@
+_####### _@
+_*###### _@
+_ *####* _@
+_ _@
+_@@
+_ _@
+_ _@
+_ _@
+_#####* _@
+_######* _@
+_##**### _@
+_##* *## _@
+_####### _@
+_######* _@
+_##**### _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_ _@
+_@@
+_ _@
+_ _@
+_ _@
+_ *###* _@
+_*#####* _@
+_###*### _@
+_##* *## _@
+_#####* _@
+_*#####* _@
+_ ***### _@
+_##* *## _@
+_###*### _@
+_*#####* _@
+_ *###* _@
+_ _@
+_@@
+_ _@
+_ _@
+_ _@
+_####### _@
+_####### _@
+_***##** _@
+_ *## _@
+_ *## _@
+_ *## _@
+_ *## _@
+_ *## _@
+_ *## _@
+_ *## _@
+_ *## _@
+_ _@
+_@@
+_ _@
+_ _@
+_ _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_###*### _@
+_*#####* _@
+_ *###* _@
+_ _@
+_@@
+_ _@
+_ _@
+_ _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_###*### _@
+_*#####* _@
+_ ##### _@
+_ *###* _@
+_ *#* _@
+_ _@
+_@@
+_ _@
+_ _@
+_ _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_####### _@
+_####### _@
+_####### _@
+_####### _@
+_###*### _@
+_### ### _@
+_##* *## _@
+_ _@
+_@@
+_ _@
+_ _@
+_ _@
+_##* *## _@
+_##* *## _@
+_*##*##* _@
+_*#####* _@
+_ ##### _@
+_ *###* _@
+_ ##### _@
+_*#####* _@
+_*##*##* _@
+_##* *## _@
+_##* *## _@
+_ _@
+_@@
+_ _@
+_ _@
+_ _@
+_### ##* _@
+_### ##* _@
+_### *##* _@
+_###**##* _@
+_*###### _@
+_ *####* _@
+_ *##* _@
+_ *## _@
+_ *## _@
+_ *## _@
+_ *## _@
+_ _@
+_@@
+_ _@
+_ _@
+_ _@
+_####### _@
+_####### _@
+_****##* _@
+_ ###* _@
+_ *##* _@
+_ ### _@
+_ *##* _@
+_*### _@
+_*##**** _@
+_####### _@
+_####### _@
+_ _@
+_@@
+_ ##* _@
+_ *##* _@
+_*###* _@
+_*###* _@
+_ *##* _@
+_ ##* _@
+_ ##* _@
+_ ##* _@
+_ ##* _@
+_ ##* _@
+_ ####* _@
+_ *#### _@
+_ *### _@
+_ _@
+_ _@
+_@@
+_##* _@
+_##* _@
+_##* _@
+_##* _@
+_##* _@
+_##* _@
+_##* _@
+_##* _@
+_##* _@
+_##* _@
+_##* _@
+_##* _@
+_##* _@
+_ _@
+_ _@
+_@@
+_ ##* _@
+_ ##* _@
+_ ###* _@
+_ ###* _@
+_ ##* _@
+_ ##* _@
+_ ##* _@
+_ ##* _@
+_ ##* _@
+_ *##* _@
+_*###* _@
+_###* _@
+_##* _@
+_ _@
+_ _@
+_@@
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_ **** _@
+_*#####*#* _@
+_######### _@
+_*****###* _@
+_ _@
+_@@
+_ *##* _@
+_ *####* _@
+_*######* _@
+_#### ###* _@
+_###* *##* _@
+_### *##* _@
+_### *##* _@
+_###***##* _@
+_########* _@
+_########* _@
+_###* *##* _@
+_### *##* _@
+_### *##* _@
+_### ##* _@
+_ _@
+_@@
+_ *####* _@
+_*######* _@
+_####*###* _@
+_###* *##* _@
+_### *##* _@
+_### *##* _@
+_### *##* _@
+_### *##* _@
+_### *##* _@
+_### *##* _@
+_###* *##* _@
+_####*###* _@
+_*######* _@
+_ *####* _@
+_ _@
+_@@
+_### ##* _@
+_### *##* _@
+_### *##* _@
+_### *##* _@
+_### *##* _@
+_### *##* _@
+_### *##* _@
+_### *##* _@
+_### *##* _@
+_### *##* _@
+_###* *##* _@
+_####*###* _@
+_*######* _@
+_ *####* _@
+_ _@
+_@@
+_ _@
+_ *# *# _@
+_ * * _@
+_ *###* _@
+_*#####* _@
+_####### _@
+_### *## _@
+_##* *## _@
+_##***## _@
+_####### _@
+_####### _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_ _@
+_@@
+_ _@
+_ *# *# _@
+_ * * _@
+_ *####* _@
+_*###### _@
+_###*### _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_###*### _@
+_*###### _@
+_ *####* _@
+_ _@
+_@@
+_ _@
+_ *# *# _@
+_ * * _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_###*### _@
+_*###### _@
+_ *####* _@
+_ _@
+_@@
+_##* *## _@
+_##* *### _@
+_########* _@
+_########* _@
+_###***### _@
+_##* *## _@
+_##* *## _@
+_##* *### _@
+_##* *###* _@
+_##**###* _@
+_ *###* _@
+_ ###* _@
+_ *#* _@
+_ _@
+_ _@
+_@@
+0x45e EXT
+_ *## _@
+_ *## _@
+_ *####* _@
+_#######* _@
+_###**##* _@
+_### ##* _@
+_### _@
+_### _@
+_### ##* _@
+_###**##* _@
+_#######* _@
+_*#####* _@
+_ *#### _@
+_ *## _@
+_ _@
+_@@
+0x408 EXT
+_ *#####* _@
+_ *#######* _@
+_ ###***### _@
+_ ##* *## _@
+_ ##* *## _@
+_*##* _@
+_####### _@
+_####### _@
+_*###*** _@
+_ ##* _@
+_ ##* _@
+_*###*** _@
+_####### _@
+_####### _@
+_ _@
+_@@
+0x490 EXT
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_### *### _@
+_###**#### _@
+_*####### _@
+_ *##### _@
+_ *### _@
+_ ###### _@
+_ ###### _@
+_ **##** _@
+_ ###### _@
+_ ###### _@
+_ **##** _@
+_ _@
+_@@
+0xa4 EXT
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_##**## _@
+_###### _@
+_*#**#* _@
+_*#**#* _@
+_###### _@
+_##**## _@
+_ _@
+_@@
+0x2030 EXT
+_ # *# _@
+_ # *# _@
+_ # *# _@
+_ # *# _@
+_ # *# _@
+_ # *# _@
+_ # *# _@
+_ # *# _@
+_ # *# _@
+_ # *# _@
+_ # *# _@
+_ # *# _@
+_ #****# _@
+_ ###### _@
+_ _@
+_@@
+0x457 EXT
+_ ##* _@
+_ ##* _@
+_ ** _@
+_ *** _@
+_ *##* _@
+_ *###* _@
+_ *##### _@
+_*#####* _@
+_###*** _@
+_##* *## _@
+_##* *## _@
+_####*#### _@
+_*#######* _@
+_ *#####* _@
+_ _@
+_@@
+0x40e EXT
+_##* _@
+_##* _@
+_** _@
+_ _@
+_##* _@
+_##* _@
+_##* _@
+_##* _@
+_##* _@
+_##* _@
+_##* _@
+_##* _@
+_##* _@
+_##* _@
+_ _@
+_@@
+0xa7 EXT
+_### *## _@
+_####* _@
+_*#####* _@
+_####### _@
+_##***## _@
+_##***## _@
+_####### _@
+_*#####* _@
+_ *#### _@
+_##**### _@
+_###*### _@
+_*#####* _@
+_ *####* _@
+_ _@
+_ _@
+_@@
+0xb6 EXT
+_ *############# _@
+_ *############## _@
+_*########***###* _@
+_*########* ##* _@
+_*########* ##* _@
+_*########* ##* _@
+_ *#######* ##* _@
+_ *######* ##* _@
+_ *##* ##* _@
+_ ##* ##* _@
+_ ##* ##* _@
+_ ##* ##* _@
+_ ##* ##* _@
+_ ##* ##* _@
+_ _@
+_@@
+0xb5 EXT
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_###***### _@
+_######### _@
+_########* _@
+_##* _@
+_##* _@
+_##* _@
+_ _@
+_ _@
+_@@
+0xa9 EXT
+_ _@
+_ _@
+_ _@
+_ _@
+_ *####** _@
+_ *#######* _@
+_ ##*#####* _@
+_*#**#**#*# _@
+_*# *# ***# _@
+_*#**#**#*# _@
+_ ## ###*## _@
+_ *##***##* _@
+_ *#####* _@
+_ *** _@
+_ _@
+_@@
+0xae EXT
+_ _@
+_ _@
+_ _@
+_ _@
+_ *####** _@
+_ *##***##* _@
+_ ##*###*#* _@
+_*#* #*# *# _@
+_*# ### *# _@
+_*#* #*# *# _@
+_ ## # #*## _@
+_ *##* ###* _@
+_ *#####* _@
+_ *** _@
+_ _@
+_@@
+0x45b EXT
+_ # *# _@
+_ # *# _@
+_ # *# _@
+_ # *# _@
+_ # *# _@
+_ # *# _@
+_ # *# _@
+_ # *# _@
+_ # *# _@
+_ # *# _@
+_ # *# _@
+_ # *# _@
+_ #****# _@
+_ ###### _@
+_ _@
+_@@
+0x40a EXT
+_ # *# _@
+_ # *# _@
+_ # *# _@
+_ # *# _@
+_ # *# _@
+_ # *# _@
+_ # *# _@
+_ # *# _@
+_ # *# _@
+_ # *# _@
+_ # *# _@
+_ # *# _@
+_ #****# _@
+_ ###### _@
+_ _@
+_@@
+0x42f EXT
+_##* *## _@
+_##* *### _@
+_########* _@
+_########* _@
+_###***### _@
+_##* *## _@
+_##* *## _@
+_##* *### _@
+_##* *###* _@
+_##**###* _@
+_ *###* _@
+_ ###* _@
+_ *#* _@
+_ _@
+_ _@
+_@@
+0x410 EXT
+_ *###* _@
+_ *#####* _@
+_*###*###* _@
+_###* *### _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_###***### _@
+_######### _@
+_######### _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_ _@
+_@@
+0x411 EXT
+_ *###* _@
+_ *#####* _@
+_*###*###* _@
+_###* *### _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_###***### _@
+_######### _@
+_######### _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_ _@
+_@@
+0x412 EXT
+_ *###* _@
+_ *#####* _@
+_*###*###* _@
+_###* *### _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_###***### _@
+_######### _@
+_######### _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_ _@
+_@@
+0x413 EXT
+_ *###* _@
+_ *#####* _@
+_*###*###* _@
+_###* *### _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_###***### _@
+_######### _@
+_######### _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_ _@
+_@@
+0x414 EXT
+_ *##* _@
+_ *####* _@
+_*######* _@
+_#### ###* _@
+_###* *##* _@
+_### *##* _@
+_### *##* _@
+_###***##* _@
+_########* _@
+_########* _@
+_###* *##* _@
+_### *##* _@
+_### *##* _@
+_### ##* _@
+_ _@
+_@@
+0x415 EXT
+_ *###* _@
+_ *#####* _@
+_*###*###* _@
+_###* *### _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_###***### _@
+_######### _@
+_######### _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_ _@
+_@@
+0x416 EXT
+_ *###*######### _@
+_ *############## _@
+_*###*####******* _@
+_###* *### _@
+_##* *## _@
+_##* *##* _@
+_##* *####### _@
+_###***######## _@
+_#########***** _@
+_######### _@
+_##* *## _@
+_##* *##******* _@
+_##* *######### _@
+_##* *######### _@
+_ _@
+_@@
+0x417 EXT
+_##* *##* _@
+_##* ##* _@
+_##* ##* _@
+_##* _@
+_##* _@
+_##* _@
+_##* ##* _@
+_##* *##* _@
+_###**###* _@
+_*######* _@
+_ *####* _@
+_ ##* _@
+_ ##* _@
+_ _@
+_ _@
+_@@
+0x418 EXT
+_######### _@
+_######### _@
+_###****** _@
+_##* _@
+_##* _@
+_##* _@
+_#######* _@
+_#######* _@
+_###**** _@
+_##* _@
+_##* _@
+_###****** _@
+_######### _@
+_######### _@
+_ _@
+_@@
+0x419 EXT
+_######### _@
+_######### _@
+_###****** _@
+_##* _@
+_##* _@
+_##* _@
+_#######* _@
+_#######* _@
+_###**** _@
+_##* _@
+_##* _@
+_###****** _@
+_######### _@
+_######### _@
+_ _@
+_@@
+0x41a EXT
+_######### _@
+_######### _@
+_###****** _@
+_##* _@
+_##* _@
+_##* _@
+_####### _@
+_####### _@
+_###**** _@
+_##* _@
+_##* _@
+_###****** _@
+_######### _@
+_######### _@
+_ _@
+_@@
+0x41b EXT
+_#########* _@
+_#########* _@
+_###******* _@
+_### _@
+_### _@
+_###* _@
+_######## _@
+_######## _@
+_###***** _@
+_### _@
+_### _@
+_###******* _@
+_#########* _@
+_#########* _@
+_ _@
+_@@
+0x41c EXT
+_######### _@
+_######### _@
+_***###*** _@
+_ ##* _@
+_ ##* _@
+_ ##* _@
+_ ##* _@
+_ ##* _@
+_ ##* _@
+_ ##* _@
+_ ##* _@
+_***###*** _@
+_######### _@
+_######### _@
+_ _@
+_@@
+0x41d EXT
+_######### _@
+_######### _@
+_***###*** _@
+_ ##* _@
+_ ##* _@
+_ ##* _@
+_ ##* _@
+_ ##* _@
+_ ##* _@
+_ ##* _@
+_ ##* _@
+_***###*** _@
+_######### _@
+_######### _@
+_ _@
+_@@
+0x41e EXT
+_######### _@
+_######### _@
+_***###*** _@
+_ ##* _@
+_ ##* _@
+_ ##* _@
+_ ##* _@
+_ ##* _@
+_ ##* _@
+_ ##* _@
+_ ##* _@
+_***###*** _@
+_######### _@
+_######### _@
+_ _@
+_@@
+0x41f EXT
+_######### _@
+_######### _@
+_***###*** _@
+_ ##* _@
+_ ##* _@
+_ ##* _@
+_ ##* _@
+_ ##* _@
+_ ##* _@
+_ ##* _@
+_ ##* _@
+_***###*** _@
+_######### _@
+_######### _@
+_ _@
+_@@
+0x420 EXT
+_ *#####* _@
+_ *######* _@
+_ *##**###* _@
+_ *## *###* _@
+_ *## *##* _@
+_ *## ##* _@
+_###### ##* _@
+_###### ##* _@
+_**##** ##* _@
+_ *## *##* _@
+_ *## *###* _@
+_ *##**###* _@
+_ *######* _@
+_ *#####* _@
+_ _@
+_@@
+0x421 EXT
+_##* *## _@
+_### *## _@
+_###* *## _@
+_####* *## _@
+_####* *## _@
+_#####**## _@
+_######*## _@
+_##*###### _@
+_##**##### _@
+_##* ##### _@
+_##* *#### _@
+_##* *### _@
+_##* ### _@
+_##* *## _@
+_ _@
+_@@
+0x422 EXT
+_ *#####* _@
+_*#######* _@
+_###***### _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_####*#### _@
+_*#######* _@
+_ *#####* _@
+_ _@
+_@@
+0x423 EXT
+_ *#####* _@
+_*#######* _@
+_###***### _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_####*#### _@
+_*#######* _@
+_ *#####* _@
+_ _@
+_@@
+0x424 EXT
+_ *#####* _@
+_*#######* _@
+_###***### _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_###***### _@
+_*#######* _@
+_ *#####* _@
+_ _@
+_@@
+0x425 EXT
+_ *#####* _@
+_*#######* _@
+_###***### _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_###***### _@
+_*#######* _@
+_ *#####* _@
+_ _@
+_@@
+0x426 EXT
+_ *####* _@
+_*######* _@
+_####*###* _@
+_###* *##* _@
+_### *##* _@
+_### *##* _@
+_### *##* _@
+_### *##* _@
+_### *##* _@
+_### *##* _@
+_###* *##* _@
+_####*###* _@
+_*######* _@
+_ *####* _@
+_ _@
+_@@
+0x427 EXT
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_*#* *#* _@
+_###*### _@
+_*#####* _@
+_ *###* _@
+_*#####* _@
+_###*### _@
+_*#* *#* _@
+_ _@
+_@@
+0x428 EXT
+_ *######* _@
+_*######## _@
+_###**#### _@
+_##* *#### _@
+_##* ##### _@
+_##**##### _@
+_##*###### _@
+_######*## _@
+_#####**## _@
+_##### *## _@
+_####* *## _@
+_####**### _@
+_########* _@
+_*######* _@
+_ _@
+_@@
+0x429 EXT
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_####*#### _@
+_*#######* _@
+_ *#####* _@
+_ _@
+_@@
+0x42a EXT
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_####*#### _@
+_*#######* _@
+_ *#####* _@
+_ _@
+_@@
+0x42b EXT
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_###***### _@
+_*#######* _@
+_ *#####* _@
+_ _@
+_@@
+0x42c EXT
+_### ##* _@
+_### *##* _@
+_### *##* _@
+_### *##* _@
+_### *##* _@
+_### *##* _@
+_### *##* _@
+_### *##* _@
+_### *##* _@
+_### *##* _@
+_###* *##* _@
+_####*###* _@
+_*######* _@
+_ *####* _@
+_ _@
+_@@
+0x430 EXT
+_ ##* _@
+_ ### _@
+_ ** _@
+_ *###* _@
+_*#####* _@
+_####### _@
+_##* *## _@
+_##* *## _@
+_##***## _@
+_####### _@
+_####### _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_ _@
+_@@
+0x431 EXT
+_ *## _@
+_ ### _@
+_ ** _@
+_ *###* _@
+_*#####* _@
+_####### _@
+_##* *## _@
+_##* *## _@
+_##***## _@
+_####### _@
+_####### _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_ _@
+_@@
+0x432 EXT
+_ *##* _@
+_ #*## _@
+_ _@
+_ *###* _@
+_*#####* _@
+_###*### _@
+_##* *## _@
+_##* *## _@
+_##***## _@
+_####### _@
+_####### _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_ _@
+_@@
+0x433 EXT
+_####### _@
+_*#*#### _@
+_ *** _@
+_ *###* _@
+_*#####* _@
+_###*### _@
+_##* *## _@
+_##* *## _@
+_##***## _@
+_####### _@
+_####### _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_ _@
+_@@
+0x434 EXT
+_ _@
+_ *# *# _@
+_ * * _@
+_ *###* _@
+_*#####* _@
+_####### _@
+_### *## _@
+_##* *## _@
+_##***## _@
+_####### _@
+_####### _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_ _@
+_@@
+0x435 EXT
+_ *## _@
+_ *## _@
+_ _@
+_ *###* _@
+_*#####* _@
+_###*### _@
+_##* *## _@
+_##* ## _@
+_##***## _@
+_####### _@
+_####### _@
+_##* *## _@
+_##* ## _@
+_##* ## _@
+_ _@
+_@@
+0x436 EXT
+_ _@
+_ _@
+_ _@
+_ *##########* _@
+_*###########* _@
+_###*###***** _@
+_##* *##* _@
+_##* ###### _@
+_##***###### _@
+_#######**** _@
+_#######* _@
+_##* *##***** _@
+_##* #######* _@
+_##* #######* _@
+_ _@
+_@@
+0x437 EXT
+_ *####* _@
+_*###### _@
+_###*###* _@
+_### *##* _@
+_### ##* _@
+_### _@
+_### _@
+_### ##* _@
+_###**##* _@
+_#######* _@
+_ *####* _@
+_ *## _@
+_ *## _@
+_ _@
+_ _@
+_@@
+0x438 EXT
+_ ##* _@
+_ *## _@
+_ ** _@
+_####### _@
+_#######* _@
+_##***** _@
+_##* _@
+_###### _@
+_###### _@
+_##**** _@
+_##* _@
+_##***** _@
+_#######* _@
+_####### _@
+_ _@
+_@@
+0x439 EXT
+_ *## _@
+_ ##* _@
+_ ** _@
+_####### _@
+_#######* _@
+_##***** _@
+_##* _@
+_###### _@
+_###### _@
+_##**** _@
+_##* _@
+_##***** _@
+_#######* _@
+_####### _@
+_ _@
+_@@
+0x43a EXT
+_ *##* _@
+_ #*## _@
+_ _@
+_####### _@
+_#######* _@
+_##***** _@
+_##* _@
+_###### _@
+_###### _@
+_##**** _@
+_##* _@
+_##***** _@
+_#######* _@
+_####### _@
+_ _@
+_@@
+0x43b EXT
+_ _@
+_ *# *# _@
+_ * * _@
+_####### _@
+_#######* _@
+_##***** _@
+_##* _@
+_###### _@
+_###### _@
+_##**** _@
+_##* _@
+_##***** _@
+_#######* _@
+_####### _@
+_ _@
+_@@
+0x43c EXT
+_ ##* _@
+_ *## _@
+_ ** _@
+_####### _@
+_####### _@
+_***##** _@
+_ *## _@
+_ *## _@
+_ *## _@
+_ *## _@
+_ *## _@
+_***##** _@
+_####### _@
+_####### _@
+_ _@
+_@@
+0x43d EXT
+_ *## _@
+_ ##* _@
+_ ** _@
+_####### _@
+_####### _@
+_***##** _@
+_ *## _@
+_ *## _@
+_ *## _@
+_ *## _@
+_ *## _@
+_***##** _@
+_####### _@
+_####### _@
+_ _@
+_@@
+0x43e EXT
+_ *##* _@
+_ #*## _@
+_ _@
+_####### _@
+_####### _@
+_***##** _@
+_ *## _@
+_ *## _@
+_ *## _@
+_ *## _@
+_ *## _@
+_***##** _@
+_####### _@
+_####### _@
+_ _@
+_@@
+0x43f EXT
+_ _@
+_ *# *# _@
+_ * * _@
+_####### _@
+_####### _@
+_***##** _@
+_ *## _@
+_ *## _@
+_ *## _@
+_ *## _@
+_ *## _@
+_***##** _@
+_####### _@
+_####### _@
+_ _@
+_@@
+0x440 EXT
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_ ## * _@
+_ *# ** _@
+_*#**#*#*# * _@
+_ #**#####*# _@
+_ # ######## _@
+_ ##*##**### _@
+_ *### _@
+_ _@
+_ _@
+_@@
+0x441 EXT
+_####### _@
+_*#*#### _@
+_ *** _@
+_##* *## _@
+_### *## _@
+_###**## _@
+_####*## _@
+_####*## _@
+_####### _@
+_##*#### _@
+_##*#### _@
+_##**### _@
+_##* ### _@
+_##* *## _@
+_ _@
+_@@
+0x442 EXT
+_ ##* _@
+_ *## _@
+_ ** _@
+_ *###* _@
+_*#####* _@
+_###*### _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_###*### _@
+_*#####* _@
+_ *###* _@
+_ _@
+_@@
+0x443 EXT
+_ *## _@
+_ ##* _@
+_ ** _@
+_ *###* _@
+_*#####* _@
+_###*### _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_###*### _@
+_*#####* _@
+_ *###* _@
+_ _@
+_@@
+0x444 EXT
+_ *##* _@
+_ #*## _@
+_ _@
+_ *#### _@
+_*###### _@
+_###*### _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_###*### _@
+_*###### _@
+_ *#### _@
+_ _@
+_@@
+0x445 EXT
+_####### _@
+_*#*#### _@
+_ *** _@
+_ *###* _@
+_*#####* _@
+_###*### _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_###*### _@
+_*#####* _@
+_ *###* _@
+_ _@
+_@@
+0x446 EXT
+_ _@
+_ *# *# _@
+_ * * _@
+_ *####* _@
+_*###### _@
+_###*### _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_###*### _@
+_*###### _@
+_ *####* _@
+_ _@
+_@@
+0x447 EXT
+_ _@
+_ _@
+_ _@
+_ _@
+_ _@
+_ ##* _@
+_ ##* _@
+_ *** _@
+_********* _@
+_######### _@
+_######### _@
+_ *** _@
+_ ##* _@
+_ ##* _@
+_ _@
+_@@
+0x448 EXT
+_ _@
+_ _@
+_ _@
+_ *##### _@
+_*###### _@
+_###*### _@
+_##*#### _@
+_##*#### _@
+_####### _@
+_####*## _@
+_####*## _@
+_###*### _@
+_######* _@
+_#####* _@
+_ _@
+_@@
+0x449 EXT
+_ ##* _@
+_ *## _@
+_ ** _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_###*### _@
+_*#####* _@
+_ *###* _@
+_ _@
+_@@
+0x44a EXT
+_ *## _@
+_ ##* _@
+_ ** _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_###*### _@
+_*#####* _@
+_ *###* _@
+_ _@
+_@@
+0x44b EXT
+_ *##* _@
+_ #*## _@
+_ _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_###*### _@
+_*###### _@
+_ *#### _@
+_ _@
+_@@
+0x44c EXT
+_ _@
+_ *# *# _@
+_ * * _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_###*### _@
+_*###### _@
+_ *####* _@
+_ _@
+_@@
diff --git a/resources/celerity/map.php b/resources/celerity/map.php
index 8875583e9..f1a20bf00 100644
--- a/resources/celerity/map.php
+++ b/resources/celerity/map.php
@@ -1,2238 +1,2238 @@
<?php
/**
* This file is automatically generated. Use 'bin/celerity map' to rebuild it.
*
* @generated
*/
return array(
'names' => array(
- 'core.pkg.css' => 'a2cf2f6c',
+ 'core.pkg.css' => '5eabac59',
'core.pkg.js' => '47dc9ebb',
'darkconsole.pkg.js' => 'e7393ebb',
'differential.pkg.css' => '2de124c9',
'differential.pkg.js' => '6223dd9d',
'diffusion.pkg.css' => 'f45955ed',
'diffusion.pkg.js' => '0115b37c',
'maniphest.pkg.css' => '4845691a',
'maniphest.pkg.js' => '3ec6a6d5',
'rsrc/css/aphront/aphront-bars.css' => '231ac33c',
'rsrc/css/aphront/dark-console.css' => '6378ef3d',
'rsrc/css/aphront/dialog-view.css' => 'fe58b18d',
'rsrc/css/aphront/lightbox-attachment.css' => '7acac05d',
'rsrc/css/aphront/list-filter-view.css' => '5d6f0526',
'rsrc/css/aphront/multi-column.css' => 'fd18389d',
'rsrc/css/aphront/notification.css' => '9c279160',
'rsrc/css/aphront/panel-view.css' => '8427b78d',
'rsrc/css/aphront/phabricator-nav-view.css' => 'a24cb589',
'rsrc/css/aphront/table-view.css' => '34ee903e',
'rsrc/css/aphront/tokenizer.css' => '04875312',
'rsrc/css/aphront/tooltip.css' => '7672b60f',
'rsrc/css/aphront/typeahead-browse.css' => 'd8581d2c',
'rsrc/css/aphront/typeahead.css' => '0e403212',
'rsrc/css/application/almanac/almanac.css' => 'dbb9b3af',
'rsrc/css/application/auth/auth.css' => '0877ed6e',
'rsrc/css/application/base/main-menu-view.css' => '2f670a96',
'rsrc/css/application/base/notification-menu.css' => 'f31c0bde',
'rsrc/css/application/base/phabricator-application-launch-view.css' => '95351601',
'rsrc/css/application/base/phui-theme.css' => '6b451f24',
'rsrc/css/application/base/standard-page-view.css' => '1f53d056',
'rsrc/css/application/calendar/calendar-icon.css' => 'c69aa59f',
'rsrc/css/application/chatlog/chatlog.css' => 'd295b020',
'rsrc/css/application/conduit/conduit-api.css' => '7bc725c4',
'rsrc/css/application/config/config-options.css' => '0ede4c9b',
'rsrc/css/application/config/config-template.css' => '8e6c6fcd',
'rsrc/css/application/config/config-welcome.css' => '6abd79be',
'rsrc/css/application/config/setup-issue.css' => 'db7e9c40',
'rsrc/css/application/config/unhandled-exception.css' => '4c96257a',
'rsrc/css/application/conpherence/durable-column.css' => '86396117',
'rsrc/css/application/conpherence/menu.css' => 'f99fee4c',
'rsrc/css/application/conpherence/message-pane.css' => '5897d3ac',
'rsrc/css/application/conpherence/notification.css' => '6cdcc253',
'rsrc/css/application/conpherence/transaction.css' => '85d0974c',
'rsrc/css/application/conpherence/update.css' => 'faf6be09',
'rsrc/css/application/conpherence/widget-pane.css' => '775eaaba',
'rsrc/css/application/contentsource/content-source-view.css' => '4b8b05d4',
'rsrc/css/application/countdown/timer.css' => 'e7544472',
'rsrc/css/application/daemon/bulk-job.css' => 'df9c1d4a',
'rsrc/css/application/dashboard/dashboard.css' => 'eb458607',
'rsrc/css/application/diff/inline-comment-summary.css' => '51efda3a',
'rsrc/css/application/differential/add-comment.css' => 'c47f8c40',
'rsrc/css/application/differential/changeset-view.css' => 'b6b0d1bb',
'rsrc/css/application/differential/core.css' => '7ac3cabc',
'rsrc/css/application/differential/phui-inline-comment.css' => '0fdb3667',
'rsrc/css/application/differential/revision-comment.css' => '14b8565a',
'rsrc/css/application/differential/revision-history.css' => '0e8eb855',
'rsrc/css/application/differential/revision-list.css' => 'f3c47d33',
'rsrc/css/application/differential/table-of-contents.css' => 'ae4b7a55',
'rsrc/css/application/diffusion/diffusion-icons.css' => '2941baf1',
'rsrc/css/application/diffusion/diffusion-readme.css' => '2106ea08',
'rsrc/css/application/diffusion/diffusion-source.css' => '66fdf661',
'rsrc/css/application/feed/feed.css' => 'ecd4ec57',
'rsrc/css/application/files/global-drag-and-drop.css' => '697324ad',
'rsrc/css/application/flag/flag.css' => '5337623f',
'rsrc/css/application/harbormaster/harbormaster.css' => '49d64eb4',
'rsrc/css/application/herald/herald-test.css' => 'a52e323e',
'rsrc/css/application/herald/herald.css' => '826075fa',
'rsrc/css/application/maniphest/batch-editor.css' => 'b0f0b6d5',
'rsrc/css/application/maniphest/report.css' => 'f6931fdf',
'rsrc/css/application/maniphest/task-edit.css' => 'fda62a9b',
'rsrc/css/application/maniphest/task-summary.css' => '11cc5344',
'rsrc/css/application/objectselector/object-selector.css' => '85ee8ce6',
'rsrc/css/application/owners/owners-path-editor.css' => '2f00933b',
- 'rsrc/css/application/paste/paste.css' => '1898e534',
+ 'rsrc/css/application/paste/paste.css' => 'b2f5a543',
'rsrc/css/application/people/people-profile.css' => '25970776',
'rsrc/css/application/phame/phame.css' => 'bb147387',
'rsrc/css/application/pholio/pholio-edit.css' => '3ad9d1ee',
'rsrc/css/application/pholio/pholio-inline-comments.css' => '8e545e49',
'rsrc/css/application/pholio/pholio.css' => '95174bdd',
'rsrc/css/application/phortune/phortune-credit-card-form.css' => '8391eb02',
'rsrc/css/application/phortune/phortune.css' => '9149f103',
'rsrc/css/application/phrequent/phrequent.css' => 'ffc185ad',
'rsrc/css/application/phriction/phriction-document-css.css' => 'd1861e06',
'rsrc/css/application/policy/policy-edit.css' => '815c66f7',
'rsrc/css/application/policy/policy-transaction-detail.css' => '82100a43',
'rsrc/css/application/policy/policy.css' => '957ea14c',
'rsrc/css/application/ponder/ponder-view.css' => '7b0df4da',
'rsrc/css/application/projects/project-icon.css' => '4e3eaa5a',
'rsrc/css/application/releeph/releeph-core.css' => '9b3c5733',
'rsrc/css/application/releeph/releeph-preview-branch.css' => 'b7a6f4a5',
'rsrc/css/application/releeph/releeph-request-differential-create-dialog.css' => '8d8b92cd',
'rsrc/css/application/releeph/releeph-request-typeahead.css' => '667a48ae',
'rsrc/css/application/search/search-results.css' => '7dea472c',
'rsrc/css/application/slowvote/slowvote.css' => '475b4bd2',
'rsrc/css/application/tokens/tokens.css' => '3d0f239e',
'rsrc/css/application/uiexample/example.css' => '528b19de',
'rsrc/css/core/core.css' => 'a76cefc9',
- 'rsrc/css/core/remarkup.css' => '1c4ac273',
+ 'rsrc/css/core/remarkup.css' => 'e27a26b2',
'rsrc/css/core/syntax.css' => '9fd11da8',
'rsrc/css/core/z-index.css' => '57ddcaa2',
'rsrc/css/diviner/diviner-shared.css' => '5a337049',
'rsrc/css/font/font-awesome.css' => 'd2fc4e8d',
'rsrc/css/font/font-lato.css' => '5ab1a46a',
'rsrc/css/font/font-roboto-slab.css' => 'f24a53cb',
'rsrc/css/font/phui-font-icon-base.css' => 'ecbbb4c2',
'rsrc/css/layout/phabricator-filetree-view.css' => 'fccf9f82',
'rsrc/css/layout/phabricator-hovercard-view.css' => '1239cd52',
'rsrc/css/layout/phabricator-side-menu-view.css' => 'bec2458e',
- 'rsrc/css/layout/phabricator-source-code-view.css' => '5e0178de',
+ 'rsrc/css/layout/phabricator-source-code-view.css' => 'cbeef983',
'rsrc/css/phui/calendar/phui-calendar-day.css' => 'd1cf6f93',
'rsrc/css/phui/calendar/phui-calendar-list.css' => 'c1c7f338',
'rsrc/css/phui/calendar/phui-calendar-month.css' => '476be7e0',
'rsrc/css/phui/calendar/phui-calendar.css' => 'ccabe893',
'rsrc/css/phui/phui-action-list.css' => 'c5eba19d',
- 'rsrc/css/phui/phui-action-panel.css' => '3ee9afd5',
+ 'rsrc/css/phui/phui-action-panel.css' => '91c7b835',
'rsrc/css/phui/phui-badge.css' => 'f25c3476',
'rsrc/css/phui/phui-box.css' => 'a5bb366d',
'rsrc/css/phui/phui-button.css' => '16020a60',
'rsrc/css/phui/phui-crumbs-view.css' => 'd842f867',
'rsrc/css/phui/phui-document.css' => '0267054b',
'rsrc/css/phui/phui-feed-story.css' => 'b7b26d23',
'rsrc/css/phui/phui-fontkit.css' => 'cb8ae7ad',
'rsrc/css/phui/phui-form-view.css' => '621b21c5',
'rsrc/css/phui/phui-form.css' => 'afdb2c6e',
'rsrc/css/phui/phui-header-view.css' => '55bb32dd',
'rsrc/css/phui/phui-icon.css' => 'b0a6b1b6',
'rsrc/css/phui/phui-image-mask.css' => '5a8b09c8',
'rsrc/css/phui/phui-info-panel.css' => '27ea50a1',
'rsrc/css/phui/phui-info-view.css' => '5b16bac6',
'rsrc/css/phui/phui-list.css' => '125599df',
'rsrc/css/phui/phui-object-box.css' => '407eaf5a',
'rsrc/css/phui/phui-object-item-list-view.css' => '26c30d3f',
'rsrc/css/phui/phui-pager.css' => 'bea33d23',
'rsrc/css/phui/phui-pinboard-view.css' => '2495140e',
'rsrc/css/phui/phui-property-list-view.css' => '03904f6b',
'rsrc/css/phui/phui-remarkup-preview.css' => '867f85b3',
'rsrc/css/phui/phui-spacing.css' => '042804d6',
'rsrc/css/phui/phui-status.css' => '888cedb8',
'rsrc/css/phui/phui-tag-view.css' => '402691cc',
'rsrc/css/phui/phui-text.css' => 'cf019f54',
'rsrc/css/phui/phui-timeline-view.css' => 'f1bccf73',
'rsrc/css/phui/phui-two-column-view.css' => '39ecafb1',
'rsrc/css/phui/phui-workboard-view.css' => '6704d68d',
'rsrc/css/phui/phui-workpanel-view.css' => 'adec7699',
'rsrc/css/sprite-login.css' => '1ebb9bf9',
'rsrc/css/sprite-main-header.css' => 'f07bbb87',
'rsrc/css/sprite-menu.css' => '9dd65b92',
'rsrc/css/sprite-projects.css' => 'e5ad842a',
'rsrc/css/sprite-tokens.css' => '4f399012',
'rsrc/externals/font/fontawesome/fontawesome-webfont.eot' => '7d5a4653',
'rsrc/externals/font/fontawesome/fontawesome-webfont.ttf' => '531835e8',
'rsrc/externals/font/fontawesome/fontawesome-webfont.woff' => '427fe363',
'rsrc/externals/font/fontawesome/fontawesome-webfont.woff2' => 'a9897054',
'rsrc/externals/font/lato/lato-bold.eot' => '99fbcf8c',
'rsrc/externals/font/lato/lato-bold.ttf' => '0a7141f7',
'rsrc/externals/font/lato/lato-bold.woff' => 'f5db2061',
'rsrc/externals/font/lato/lato-bold.woff2' => '37a94ecd',
'rsrc/externals/font/lato/lato-bolditalic.eot' => 'b93389d0',
'rsrc/externals/font/lato/lato-bolditalic.ttf' => 'dad31252',
'rsrc/externals/font/lato/lato-bolditalic.woff' => 'e53bcf47',
'rsrc/externals/font/lato/lato-bolditalic.woff2' => 'd035007f',
'rsrc/externals/font/lato/lato-italic.eot' => '6a903f5d',
'rsrc/externals/font/lato/lato-italic.ttf' => '629f64f0',
'rsrc/externals/font/lato/lato-italic.woff' => '678dc4bb',
'rsrc/externals/font/lato/lato-italic.woff2' => '7c8dd650',
'rsrc/externals/font/lato/lato-regular.eot' => '848dfb1e',
'rsrc/externals/font/lato/lato-regular.ttf' => 'e270165b',
'rsrc/externals/font/lato/lato-regular.woff' => '13d39fe2',
'rsrc/externals/font/lato/lato-regular.woff2' => '57a9f742',
'rsrc/externals/font/robotoslab/robotoslab-regular.eot' => 'eaefe21c',
'rsrc/externals/font/robotoslab/robotoslab-regular.ttf' => '4bfef7d5',
'rsrc/externals/font/robotoslab/robotoslab-regular.woff' => '7f0552f9',
'rsrc/externals/font/robotoslab/robotoslab-regular.woff2' => '23bdd43c',
'rsrc/externals/javelin/core/Event.js' => '85ea0626',
'rsrc/externals/javelin/core/Stratcom.js' => '6c53634d',
'rsrc/externals/javelin/core/__tests__/event-stop-and-kill.js' => '717554e4',
'rsrc/externals/javelin/core/__tests__/install.js' => 'c432ee85',
'rsrc/externals/javelin/core/__tests__/stratcom.js' => '88bf7313',
'rsrc/externals/javelin/core/__tests__/util.js' => 'e251703d',
'rsrc/externals/javelin/core/init.js' => '3010e992',
'rsrc/externals/javelin/core/init_node.js' => 'c234aded',
'rsrc/externals/javelin/core/install.js' => '05270951',
'rsrc/externals/javelin/core/util.js' => '93cc50d6',
'rsrc/externals/javelin/docs/Base.js' => '74676256',
'rsrc/externals/javelin/docs/onload.js' => 'e819c479',
'rsrc/externals/javelin/ext/fx/Color.js' => '7e41274a',
'rsrc/externals/javelin/ext/fx/FX.js' => '54b612ba',
'rsrc/externals/javelin/ext/reactor/core/DynVal.js' => 'f6555212',
'rsrc/externals/javelin/ext/reactor/core/Reactor.js' => '2b8de964',
'rsrc/externals/javelin/ext/reactor/core/ReactorNode.js' => '1ad0a787',
'rsrc/externals/javelin/ext/reactor/core/ReactorNodeCalmer.js' => '76f4ebed',
'rsrc/externals/javelin/ext/reactor/dom/RDOM.js' => 'c90a04fc',
'rsrc/externals/javelin/ext/view/HTMLView.js' => 'fe287620',
'rsrc/externals/javelin/ext/view/View.js' => '0f764c35',
'rsrc/externals/javelin/ext/view/ViewInterpreter.js' => 'f829edb3',
'rsrc/externals/javelin/ext/view/ViewPlaceholder.js' => '47830651',
'rsrc/externals/javelin/ext/view/ViewRenderer.js' => '6c2b09a2',
'rsrc/externals/javelin/ext/view/ViewVisitor.js' => 'efe49472',
'rsrc/externals/javelin/ext/view/__tests__/HTMLView.js' => 'f92d7bcb',
'rsrc/externals/javelin/ext/view/__tests__/View.js' => '6450b38b',
'rsrc/externals/javelin/ext/view/__tests__/ViewInterpreter.js' => '7a94d6a5',
'rsrc/externals/javelin/ext/view/__tests__/ViewRenderer.js' => '6ea96ac9',
'rsrc/externals/javelin/lib/Cookie.js' => '62dfea03',
'rsrc/externals/javelin/lib/DOM.js' => '805b806a',
'rsrc/externals/javelin/lib/History.js' => 'd4505101',
'rsrc/externals/javelin/lib/JSON.js' => '69adf288',
'rsrc/externals/javelin/lib/Leader.js' => '331b1611',
'rsrc/externals/javelin/lib/Mask.js' => '8a41885b',
'rsrc/externals/javelin/lib/Quicksand.js' => '4cebc641',
'rsrc/externals/javelin/lib/Request.js' => '94b750d2',
'rsrc/externals/javelin/lib/Resource.js' => '44959b73',
'rsrc/externals/javelin/lib/Routable.js' => 'b3e7d692',
'rsrc/externals/javelin/lib/Router.js' => '29274e2b',
'rsrc/externals/javelin/lib/Scrollbar.js' => '087e919c',
'rsrc/externals/javelin/lib/Sound.js' => '949c0fe5',
'rsrc/externals/javelin/lib/URI.js' => '6eff08aa',
'rsrc/externals/javelin/lib/Vector.js' => '2caa8fb8',
'rsrc/externals/javelin/lib/WebSocket.js' => 'e292eaf4',
'rsrc/externals/javelin/lib/Workflow.js' => '5b2e3e2b',
'rsrc/externals/javelin/lib/__tests__/Cookie.js' => '5ed109e8',
'rsrc/externals/javelin/lib/__tests__/DOM.js' => 'c984504b',
'rsrc/externals/javelin/lib/__tests__/JSON.js' => '837a7d68',
'rsrc/externals/javelin/lib/__tests__/URI.js' => '1e45fda9',
'rsrc/externals/javelin/lib/__tests__/behavior.js' => '1ea62783',
'rsrc/externals/javelin/lib/behavior.js' => '61cbc29a',
'rsrc/externals/javelin/lib/control/tokenizer/Tokenizer.js' => 'ab5f468d',
'rsrc/externals/javelin/lib/control/typeahead/Typeahead.js' => '70baed2f',
'rsrc/externals/javelin/lib/control/typeahead/normalizer/TypeaheadNormalizer.js' => 'e6e25838',
'rsrc/externals/javelin/lib/control/typeahead/source/TypeaheadCompositeSource.js' => '503e17fd',
'rsrc/externals/javelin/lib/control/typeahead/source/TypeaheadOnDemandSource.js' => '8b3fd187',
'rsrc/externals/javelin/lib/control/typeahead/source/TypeaheadPreloadedSource.js' => '54f314a0',
'rsrc/externals/javelin/lib/control/typeahead/source/TypeaheadSource.js' => '2818f5ce',
'rsrc/externals/javelin/lib/control/typeahead/source/TypeaheadStaticSource.js' => '6c0e62fa',
'rsrc/externals/raphael/g.raphael.js' => '40dde778',
'rsrc/externals/raphael/g.raphael.line.js' => '40da039e',
'rsrc/externals/raphael/raphael.js' => '51ee6b43',
'rsrc/favicons/apple-touch-icon-120x120.png' => '43742962',
'rsrc/favicons/apple-touch-icon-152x152.png' => '669eaec3',
'rsrc/favicons/apple-touch-icon-76x76.png' => 'ecdef672',
'rsrc/favicons/favicon-128.png' => '47cdff03',
'rsrc/favicons/favicon-16x16.png' => 'ee2523ac',
'rsrc/favicons/favicon-32x32.png' => 'b6a8150e',
'rsrc/favicons/favicon-96x96.png' => '8f7ea177',
'rsrc/image/BFCFDA.png' => 'd5ec91f4',
'rsrc/image/actions/edit.png' => '2fc41442',
'rsrc/image/avatar.png' => '3eb28cd9',
'rsrc/image/checker_dark.png' => 'd8e65881',
'rsrc/image/checker_light.png' => 'a0155918',
'rsrc/image/checker_lighter.png' => 'd5da91b6',
'rsrc/image/darkload.gif' => '1ffd3ec6',
'rsrc/image/divot.png' => '94dded62',
'rsrc/image/examples/hero.png' => '979a86ae',
'rsrc/image/grippy_texture.png' => 'aca81e2f',
'rsrc/image/icon/fatcow/arrow_branch.png' => '2537c01c',
'rsrc/image/icon/fatcow/arrow_merge.png' => '21b660e0',
'rsrc/image/icon/fatcow/bullet_black.png' => 'ff190031',
'rsrc/image/icon/fatcow/bullet_orange.png' => 'e273e5bb',
'rsrc/image/icon/fatcow/bullet_red.png' => 'c0b75434',
'rsrc/image/icon/fatcow/calendar_edit.png' => '24632275',
'rsrc/image/icon/fatcow/document_black.png' => '45fe1c60',
'rsrc/image/icon/fatcow/flag_blue.png' => 'a01abb1d',
'rsrc/image/icon/fatcow/flag_finish.png' => '67825cee',
'rsrc/image/icon/fatcow/flag_ghost.png' => '20ca8783',
'rsrc/image/icon/fatcow/flag_green.png' => '7e0eaa7a',
'rsrc/image/icon/fatcow/flag_orange.png' => '9e73df66',
'rsrc/image/icon/fatcow/flag_pink.png' => '7e92f3b2',
'rsrc/image/icon/fatcow/flag_purple.png' => 'cc517522',
'rsrc/image/icon/fatcow/flag_red.png' => '04ec726f',
'rsrc/image/icon/fatcow/flag_yellow.png' => '73946fd4',
'rsrc/image/icon/fatcow/key_question.png' => '52a0c26a',
'rsrc/image/icon/fatcow/link.png' => '7afd4d5e',
'rsrc/image/icon/fatcow/page_white_edit.png' => '39a2eed8',
'rsrc/image/icon/fatcow/page_white_put.png' => '08c95a0c',
'rsrc/image/icon/fatcow/source/conduit.png' => '4ea01d2f',
'rsrc/image/icon/fatcow/source/email.png' => '9bab3239',
'rsrc/image/icon/fatcow/source/fax.png' => '04195e68',
'rsrc/image/icon/fatcow/source/mobile.png' => 'f1321264',
'rsrc/image/icon/fatcow/source/tablet.png' => '49396799',
'rsrc/image/icon/fatcow/source/web.png' => '136ccb5d',
'rsrc/image/icon/lightbox/close-2.png' => 'cc40e7c8',
'rsrc/image/icon/lightbox/close-hover-2.png' => 'fb5d6d9e',
'rsrc/image/icon/lightbox/left-arrow-2.png' => '8426133b',
'rsrc/image/icon/lightbox/left-arrow-hover-2.png' => '701e5ee3',
'rsrc/image/icon/lightbox/right-arrow-2.png' => '6d5519a0',
'rsrc/image/icon/lightbox/right-arrow-hover-2.png' => '3a04aa21',
'rsrc/image/icon/subscribe.png' => 'd03ed5a5',
'rsrc/image/icon/tango/attachment.png' => 'ecc8022e',
'rsrc/image/icon/tango/edit.png' => '929a1363',
'rsrc/image/icon/tango/go-down.png' => '96d95e43',
'rsrc/image/icon/tango/log.png' => 'b08cc63a',
'rsrc/image/icon/tango/upload.png' => '7bbb7984',
'rsrc/image/icon/unsubscribe.png' => '25725013',
'rsrc/image/lightblue-header.png' => '5c168b6d',
'rsrc/image/main_texture.png' => '29a2c5ad',
'rsrc/image/menu_texture.png' => '5a17580d',
'rsrc/image/people/harding.png' => '45aa614e',
'rsrc/image/people/jefferson.png' => 'afca0e53',
'rsrc/image/people/lincoln.png' => '9369126d',
'rsrc/image/people/mckinley.png' => 'fb8f16ce',
'rsrc/image/people/taft.png' => 'd7bc402c',
'rsrc/image/people/washington.png' => '40dd301c',
'rsrc/image/phrequent_active.png' => 'a466a8ed',
'rsrc/image/phrequent_inactive.png' => 'bfc15a69',
'rsrc/image/sprite-login-X2.png' => 'a4bf0a98',
'rsrc/image/sprite-login.png' => '5f4d0069',
'rsrc/image/sprite-main-header.png' => '3673af44',
'rsrc/image/sprite-menu-X2.png' => 'cfd8fca5',
'rsrc/image/sprite-menu.png' => 'd7a99faa',
'rsrc/image/sprite-projects-X2.png' => '853552c7',
'rsrc/image/sprite-projects.png' => 'b9dd74b8',
'rsrc/image/sprite-tokens-X2.png' => '348f1745',
'rsrc/image/sprite-tokens.png' => 'ce0b62be',
'rsrc/image/texture/card-gradient.png' => '815f26e8',
'rsrc/image/texture/dark-menu-hover.png' => '5fa7ece8',
'rsrc/image/texture/dark-menu.png' => '7e22296e',
'rsrc/image/texture/grip.png' => '719404f3',
'rsrc/image/texture/panel-header-gradient.png' => 'e3b8dcfe',
'rsrc/image/texture/phlnx-bg.png' => '8d819209',
'rsrc/image/texture/pholio-background.gif' => 'ba29239c',
'rsrc/image/texture/table_header.png' => '5c433037',
'rsrc/image/texture/table_header_hover.png' => '038ec3b9',
'rsrc/image/texture/table_header_tall.png' => 'd56b434f',
'rsrc/js/application/aphlict/Aphlict.js' => '5359e785',
'rsrc/js/application/aphlict/behavior-aphlict-dropdown.js' => '031cee25',
'rsrc/js/application/aphlict/behavior-aphlict-listen.js' => 'fb20ac8d',
'rsrc/js/application/aphlict/behavior-aphlict-status.js' => 'ea681761',
'rsrc/js/application/aphlict/behavior-desktop-notifications-control.js' => 'edd1ba66',
'rsrc/js/application/auth/behavior-persona-login.js' => '9414ff18',
'rsrc/js/application/calendar/behavior-day-view.js' => '5c46cff2',
'rsrc/js/application/calendar/behavior-event-all-day.js' => '38dcf3c8',
'rsrc/js/application/calendar/behavior-recurring-edit.js' => '5f1c4d5f',
'rsrc/js/application/config/behavior-reorder-fields.js' => 'b6993408',
'rsrc/js/application/conpherence/ConpherenceThreadManager.js' => '01774ab2',
'rsrc/js/application/conpherence/behavior-drag-and-drop-photo.js' => 'cf86d16a',
'rsrc/js/application/conpherence/behavior-durable-column.js' => 'c72aa091',
'rsrc/js/application/conpherence/behavior-menu.js' => '1d45c74d',
'rsrc/js/application/conpherence/behavior-pontificate.js' => '21ba5861',
'rsrc/js/application/conpherence/behavior-quicksand-blacklist.js' => '7927a7d3',
'rsrc/js/application/conpherence/behavior-widget-pane.js' => 'a8458711',
'rsrc/js/application/countdown/timer.js' => 'e4cc26b3',
'rsrc/js/application/daemon/behavior-bulk-job-reload.js' => 'edf8a145',
'rsrc/js/application/dashboard/behavior-dashboard-async-panel.js' => '469c0d9e',
'rsrc/js/application/dashboard/behavior-dashboard-move-panels.js' => '82439934',
'rsrc/js/application/dashboard/behavior-dashboard-query-panel-select.js' => '453c5375',
'rsrc/js/application/dashboard/behavior-dashboard-tab-panel.js' => 'd4eecc63',
'rsrc/js/application/differential/ChangesetViewManager.js' => '58562350',
'rsrc/js/application/differential/DifferentialInlineCommentEditor.js' => '64a5550f',
'rsrc/js/application/differential/behavior-add-reviewers-and-ccs.js' => 'e10f8e18',
'rsrc/js/application/differential/behavior-comment-jump.js' => '4fdb476d',
'rsrc/js/application/differential/behavior-comment-preview.js' => 'b064af76',
'rsrc/js/application/differential/behavior-diff-radios.js' => 'e1ff79b1',
'rsrc/js/application/differential/behavior-dropdown-menus.js' => '2035b9cb',
'rsrc/js/application/differential/behavior-edit-inline-comments.js' => '65ef6074',
'rsrc/js/application/differential/behavior-keyboard-nav.js' => '2c426492',
'rsrc/js/application/differential/behavior-populate.js' => '8694b1df',
'rsrc/js/application/differential/behavior-toggle-files.js' => 'ca3f91eb',
'rsrc/js/application/differential/behavior-user-select.js' => 'a8d8459d',
'rsrc/js/application/diffusion/DiffusionLocateFileSource.js' => 'b42eddc7',
'rsrc/js/application/diffusion/behavior-audit-preview.js' => 'd835b03a',
'rsrc/js/application/diffusion/behavior-commit-branches.js' => 'bdaf4d04',
'rsrc/js/application/diffusion/behavior-commit-graph.js' => '9007c197',
'rsrc/js/application/diffusion/behavior-jump-to.js' => '73d09eef',
'rsrc/js/application/diffusion/behavior-load-blame.js' => '42126667',
'rsrc/js/application/diffusion/behavior-locate-file.js' => '6d3e1947',
'rsrc/js/application/diffusion/behavior-pull-lastmodified.js' => '2b228192',
'rsrc/js/application/doorkeeper/behavior-doorkeeper-tag.js' => 'e5822781',
'rsrc/js/application/files/behavior-icon-composer.js' => '8ef9ab58',
'rsrc/js/application/files/behavior-launch-icon-composer.js' => '48086888',
'rsrc/js/application/herald/HeraldRuleEditor.js' => '91a6031b',
'rsrc/js/application/herald/PathTypeahead.js' => 'f7fc67ec',
'rsrc/js/application/herald/herald-rule-editor.js' => '7ebaeed3',
'rsrc/js/application/maniphest/behavior-batch-editor.js' => '782ab6e7',
'rsrc/js/application/maniphest/behavior-batch-selector.js' => '7b98d7c5',
'rsrc/js/application/maniphest/behavior-line-chart.js' => '88f0c5b3',
'rsrc/js/application/maniphest/behavior-list-edit.js' => 'a9f88de2',
'rsrc/js/application/maniphest/behavior-subpriorityeditor.js' => '71237763',
'rsrc/js/application/maniphest/behavior-transaction-controls.js' => '44168bad',
'rsrc/js/application/maniphest/behavior-transaction-expand.js' => '5fefb143',
'rsrc/js/application/maniphest/behavior-transaction-preview.js' => '4c95d29e',
'rsrc/js/application/owners/OwnersPathEditor.js' => 'aa1733d0',
'rsrc/js/application/owners/owners-path-editor.js' => '7a68dda3',
'rsrc/js/application/passphrase/passphrase-credential-control.js' => '3cb0b2fc',
'rsrc/js/application/phame/phame-post-preview.js' => 'be807912',
'rsrc/js/application/pholio/behavior-pholio-mock-edit.js' => '246dc085',
'rsrc/js/application/pholio/behavior-pholio-mock-view.js' => 'fbe497e7',
'rsrc/js/application/phortune/behavior-stripe-payment-form.js' => '3f5d6dbf',
'rsrc/js/application/phortune/behavior-test-payment-form.js' => 'fc91ab6c',
'rsrc/js/application/phortune/phortune-credit-card-form.js' => '2290aeef',
'rsrc/js/application/policy/behavior-policy-control.js' => '7d470398',
'rsrc/js/application/policy/behavior-policy-rule-editor.js' => '5e9f347c',
'rsrc/js/application/projects/behavior-project-boards.js' => 'ba4fa35c',
'rsrc/js/application/projects/behavior-project-create.js' => '065227cc',
'rsrc/js/application/projects/behavior-reorder-columns.js' => 'e1d25dfb',
'rsrc/js/application/releeph/releeph-preview-branch.js' => 'b2b4fbaf',
'rsrc/js/application/releeph/releeph-request-state-change.js' => 'a0b57eb8',
'rsrc/js/application/releeph/releeph-request-typeahead.js' => 'de2e896f',
'rsrc/js/application/repository/repository-crossreference.js' => 'e5339c43',
'rsrc/js/application/search/behavior-reorder-queries.js' => 'e9581f08',
'rsrc/js/application/slowvote/behavior-slowvote-embed.js' => '887ad43f',
'rsrc/js/application/transactions/behavior-show-older-transactions.js' => 'dbbf48b6',
'rsrc/js/application/transactions/behavior-transaction-comment-form.js' => 'b23b49e6',
'rsrc/js/application/transactions/behavior-transaction-list.js' => '13c739ea',
'rsrc/js/application/typeahead/behavior-typeahead-browse.js' => '635de1ec',
'rsrc/js/application/typeahead/behavior-typeahead-search.js' => '93d0c9e3',
'rsrc/js/application/uiexample/JavelinViewExample.js' => 'd4a14807',
'rsrc/js/application/uiexample/ReactorButtonExample.js' => 'd19198c8',
'rsrc/js/application/uiexample/ReactorCheckboxExample.js' => '519705ea',
'rsrc/js/application/uiexample/ReactorFocusExample.js' => '40a6a403',
'rsrc/js/application/uiexample/ReactorInputExample.js' => '886fd850',
'rsrc/js/application/uiexample/ReactorMouseoverExample.js' => '47c794d8',
'rsrc/js/application/uiexample/ReactorRadioExample.js' => '988040b4',
'rsrc/js/application/uiexample/ReactorSelectExample.js' => 'a155550f',
'rsrc/js/application/uiexample/ReactorSendClassExample.js' => '1def2711',
'rsrc/js/application/uiexample/ReactorSendPropertiesExample.js' => 'b1f0ccee',
'rsrc/js/application/uiexample/busy-example.js' => '60479091',
'rsrc/js/application/uiexample/gesture-example.js' => '558829c2',
'rsrc/js/application/uiexample/notification-example.js' => '8ce821c5',
'rsrc/js/core/Busy.js' => '59a7976a',
'rsrc/js/core/DragAndDropFileUpload.js' => 'ad10aeac',
'rsrc/js/core/DraggableList.js' => 'a16ec1c6',
'rsrc/js/core/FileUpload.js' => '477359c8',
'rsrc/js/core/Hovercard.js' => '14ac66f5',
'rsrc/js/core/KeyboardShortcut.js' => '1ae869f2',
'rsrc/js/core/KeyboardShortcutManager.js' => 'c1700f6f',
'rsrc/js/core/MultirowRowManager.js' => 'b5d57730',
'rsrc/js/core/Notification.js' => 'ccf1cbf8',
'rsrc/js/core/Prefab.js' => '6920d200',
'rsrc/js/core/ShapedRequest.js' => '7cbe244b',
'rsrc/js/core/TextAreaUtils.js' => '5c93c52c',
'rsrc/js/core/Title.js' => 'df5e11d2',
'rsrc/js/core/ToolTip.js' => '1d298e3a',
'rsrc/js/core/behavior-active-nav.js' => 'e379b58e',
'rsrc/js/core/behavior-audio-source.js' => '59b251eb',
'rsrc/js/core/behavior-autofocus.js' => '7319e029',
'rsrc/js/core/behavior-choose-control.js' => '6153c708',
'rsrc/js/core/behavior-crop.js' => 'fa0f4fc2',
'rsrc/js/core/behavior-dark-console.js' => 'f411b6ae',
'rsrc/js/core/behavior-device.js' => 'a205cf28',
'rsrc/js/core/behavior-drag-and-drop-textarea.js' => '6d49590e',
'rsrc/js/core/behavior-error-log.js' => '6882e80a',
'rsrc/js/core/behavior-fancy-datepicker.js' => '665cf6ac',
'rsrc/js/core/behavior-file-tree.js' => '88236f00',
'rsrc/js/core/behavior-form.js' => '5c54cbf3',
'rsrc/js/core/behavior-gesture.js' => '3ab51e2c',
'rsrc/js/core/behavior-global-drag-and-drop.js' => 'c8e57404',
'rsrc/js/core/behavior-high-security-warning.js' => 'a464fe03',
'rsrc/js/core/behavior-history-install.js' => '7ee2b591',
'rsrc/js/core/behavior-hovercard.js' => 'f36e01af',
'rsrc/js/core/behavior-keyboard-pager.js' => 'a8da01f0',
'rsrc/js/core/behavior-keyboard-shortcuts.js' => 'd75709e6',
'rsrc/js/core/behavior-lightbox-attachments.js' => 'f8ba29d7',
'rsrc/js/core/behavior-line-linker.js' => '1499a8cb',
'rsrc/js/core/behavior-more.js' => 'a80d0378',
'rsrc/js/core/behavior-object-selector.js' => '49b73b36',
'rsrc/js/core/behavior-oncopy.js' => '2926fff2',
'rsrc/js/core/behavior-phabricator-nav.js' => '56a1ca03',
'rsrc/js/core/behavior-phabricator-remarkup-assist.js' => 'eeaa9e5a',
'rsrc/js/core/behavior-refresh-csrf.js' => '7814b593',
'rsrc/js/core/behavior-remarkup-preview.js' => 'f7379f45',
'rsrc/js/core/behavior-reorder-applications.js' => '76b9fc3e',
'rsrc/js/core/behavior-reveal-content.js' => '60821bc7',
'rsrc/js/core/behavior-scrollbar.js' => '834a1173',
'rsrc/js/core/behavior-search-typeahead.js' => '048330fa',
'rsrc/js/core/behavior-select-on-click.js' => '4e3e79a6',
'rsrc/js/core/behavior-time-typeahead.js' => 'f80d6bf0',
'rsrc/js/core/behavior-toggle-class.js' => '5d7c9f33',
'rsrc/js/core/behavior-tokenizer.js' => 'b3a4b884',
'rsrc/js/core/behavior-tooltip.js' => '3ee3408b',
'rsrc/js/core/behavior-watch-anchor.js' => '9f36c42d',
'rsrc/js/core/behavior-workflow.js' => '0a3f3021',
'rsrc/js/core/phtize.js' => 'd254d646',
'rsrc/js/phui/behavior-phui-dropdown-menu.js' => '54733475',
'rsrc/js/phui/behavior-phui-object-box-tabs.js' => '2bfa2836',
'rsrc/js/phuix/PHUIXActionListView.js' => 'b5c256b8',
'rsrc/js/phuix/PHUIXActionView.js' => '8cf6d262',
'rsrc/js/phuix/PHUIXDropdownMenu.js' => 'bd4c8dca',
),
'symbols' => array(
'almanac-css' => 'dbb9b3af',
'aphront-bars' => '231ac33c',
'aphront-dark-console-css' => '6378ef3d',
'aphront-dialog-view-css' => 'fe58b18d',
'aphront-list-filter-view-css' => '5d6f0526',
'aphront-multi-column-view-css' => 'fd18389d',
'aphront-panel-view-css' => '8427b78d',
'aphront-table-view-css' => '34ee903e',
'aphront-tokenizer-control-css' => '04875312',
'aphront-tooltip-css' => '7672b60f',
'aphront-typeahead-control-css' => '0e403212',
'auth-css' => '0877ed6e',
'bulk-job-css' => 'df9c1d4a',
'calendar-icon-css' => 'c69aa59f',
'changeset-view-manager' => '58562350',
'conduit-api-css' => '7bc725c4',
'config-options-css' => '0ede4c9b',
'config-welcome-css' => '6abd79be',
'conpherence-durable-column-view' => '86396117',
'conpherence-menu-css' => 'f99fee4c',
'conpherence-message-pane-css' => '5897d3ac',
'conpherence-notification-css' => '6cdcc253',
'conpherence-thread-manager' => '01774ab2',
'conpherence-transaction-css' => '85d0974c',
'conpherence-update-css' => 'faf6be09',
'conpherence-widget-pane-css' => '775eaaba',
'differential-changeset-view-css' => 'b6b0d1bb',
'differential-core-view-css' => '7ac3cabc',
'differential-inline-comment-editor' => '64a5550f',
'differential-revision-add-comment-css' => 'c47f8c40',
'differential-revision-comment-css' => '14b8565a',
'differential-revision-history-css' => '0e8eb855',
'differential-revision-list-css' => 'f3c47d33',
'differential-table-of-contents-css' => 'ae4b7a55',
'diffusion-icons-css' => '2941baf1',
'diffusion-readme-css' => '2106ea08',
'diffusion-source-css' => '66fdf661',
'diviner-shared-css' => '5a337049',
'font-fontawesome' => 'd2fc4e8d',
'font-lato' => '5ab1a46a',
'font-roboto-slab' => 'f24a53cb',
'global-drag-and-drop-css' => '697324ad',
'harbormaster-css' => '49d64eb4',
'herald-css' => '826075fa',
'herald-rule-editor' => '91a6031b',
'herald-test-css' => 'a52e323e',
'inline-comment-summary-css' => '51efda3a',
'javelin-aphlict' => '5359e785',
'javelin-behavior' => '61cbc29a',
'javelin-behavior-aphlict-dropdown' => '031cee25',
'javelin-behavior-aphlict-listen' => 'fb20ac8d',
'javelin-behavior-aphlict-status' => 'ea681761',
'javelin-behavior-aphront-basic-tokenizer' => 'b3a4b884',
'javelin-behavior-aphront-crop' => 'fa0f4fc2',
'javelin-behavior-aphront-drag-and-drop-textarea' => '6d49590e',
'javelin-behavior-aphront-form-disable-on-submit' => '5c54cbf3',
'javelin-behavior-aphront-more' => 'a80d0378',
'javelin-behavior-audio-source' => '59b251eb',
'javelin-behavior-audit-preview' => 'd835b03a',
'javelin-behavior-bulk-job-reload' => 'edf8a145',
'javelin-behavior-choose-control' => '6153c708',
'javelin-behavior-config-reorder-fields' => 'b6993408',
'javelin-behavior-conpherence-drag-and-drop-photo' => 'cf86d16a',
'javelin-behavior-conpherence-menu' => '1d45c74d',
'javelin-behavior-conpherence-pontificate' => '21ba5861',
'javelin-behavior-conpherence-widget-pane' => 'a8458711',
'javelin-behavior-countdown-timer' => 'e4cc26b3',
'javelin-behavior-dark-console' => 'f411b6ae',
'javelin-behavior-dashboard-async-panel' => '469c0d9e',
'javelin-behavior-dashboard-move-panels' => '82439934',
'javelin-behavior-dashboard-query-panel-select' => '453c5375',
'javelin-behavior-dashboard-tab-panel' => 'd4eecc63',
'javelin-behavior-day-view' => '5c46cff2',
'javelin-behavior-desktop-notifications-control' => 'edd1ba66',
'javelin-behavior-device' => 'a205cf28',
'javelin-behavior-differential-add-reviewers-and-ccs' => 'e10f8e18',
'javelin-behavior-differential-comment-jump' => '4fdb476d',
'javelin-behavior-differential-diff-radios' => 'e1ff79b1',
'javelin-behavior-differential-dropdown-menus' => '2035b9cb',
'javelin-behavior-differential-edit-inline-comments' => '65ef6074',
'javelin-behavior-differential-feedback-preview' => 'b064af76',
'javelin-behavior-differential-keyboard-navigation' => '2c426492',
'javelin-behavior-differential-populate' => '8694b1df',
'javelin-behavior-differential-toggle-files' => 'ca3f91eb',
'javelin-behavior-differential-user-select' => 'a8d8459d',
'javelin-behavior-diffusion-commit-branches' => 'bdaf4d04',
'javelin-behavior-diffusion-commit-graph' => '9007c197',
'javelin-behavior-diffusion-jump-to' => '73d09eef',
'javelin-behavior-diffusion-locate-file' => '6d3e1947',
'javelin-behavior-diffusion-pull-lastmodified' => '2b228192',
'javelin-behavior-doorkeeper-tag' => 'e5822781',
'javelin-behavior-durable-column' => 'c72aa091',
'javelin-behavior-error-log' => '6882e80a',
'javelin-behavior-event-all-day' => '38dcf3c8',
'javelin-behavior-fancy-datepicker' => '665cf6ac',
'javelin-behavior-global-drag-and-drop' => 'c8e57404',
'javelin-behavior-herald-rule-editor' => '7ebaeed3',
'javelin-behavior-high-security-warning' => 'a464fe03',
'javelin-behavior-history-install' => '7ee2b591',
'javelin-behavior-icon-composer' => '8ef9ab58',
'javelin-behavior-launch-icon-composer' => '48086888',
'javelin-behavior-lightbox-attachments' => 'f8ba29d7',
'javelin-behavior-line-chart' => '88f0c5b3',
'javelin-behavior-load-blame' => '42126667',
'javelin-behavior-maniphest-batch-editor' => '782ab6e7',
'javelin-behavior-maniphest-batch-selector' => '7b98d7c5',
'javelin-behavior-maniphest-list-editor' => 'a9f88de2',
'javelin-behavior-maniphest-subpriority-editor' => '71237763',
'javelin-behavior-maniphest-transaction-controls' => '44168bad',
'javelin-behavior-maniphest-transaction-expand' => '5fefb143',
'javelin-behavior-maniphest-transaction-preview' => '4c95d29e',
'javelin-behavior-owners-path-editor' => '7a68dda3',
'javelin-behavior-passphrase-credential-control' => '3cb0b2fc',
'javelin-behavior-persona-login' => '9414ff18',
'javelin-behavior-phabricator-active-nav' => 'e379b58e',
'javelin-behavior-phabricator-autofocus' => '7319e029',
'javelin-behavior-phabricator-busy-example' => '60479091',
'javelin-behavior-phabricator-file-tree' => '88236f00',
'javelin-behavior-phabricator-gesture' => '3ab51e2c',
'javelin-behavior-phabricator-gesture-example' => '558829c2',
'javelin-behavior-phabricator-hovercards' => 'f36e01af',
'javelin-behavior-phabricator-keyboard-pager' => 'a8da01f0',
'javelin-behavior-phabricator-keyboard-shortcuts' => 'd75709e6',
'javelin-behavior-phabricator-line-linker' => '1499a8cb',
'javelin-behavior-phabricator-nav' => '56a1ca03',
'javelin-behavior-phabricator-notification-example' => '8ce821c5',
'javelin-behavior-phabricator-object-selector' => '49b73b36',
'javelin-behavior-phabricator-oncopy' => '2926fff2',
'javelin-behavior-phabricator-remarkup-assist' => 'eeaa9e5a',
'javelin-behavior-phabricator-reveal-content' => '60821bc7',
'javelin-behavior-phabricator-search-typeahead' => '048330fa',
'javelin-behavior-phabricator-show-older-transactions' => 'dbbf48b6',
'javelin-behavior-phabricator-tooltips' => '3ee3408b',
'javelin-behavior-phabricator-transaction-comment-form' => 'b23b49e6',
'javelin-behavior-phabricator-transaction-list' => '13c739ea',
'javelin-behavior-phabricator-watch-anchor' => '9f36c42d',
'javelin-behavior-phame-post-preview' => 'be807912',
'javelin-behavior-pholio-mock-edit' => '246dc085',
'javelin-behavior-pholio-mock-view' => 'fbe497e7',
'javelin-behavior-phui-dropdown-menu' => '54733475',
'javelin-behavior-phui-object-box-tabs' => '2bfa2836',
'javelin-behavior-policy-control' => '7d470398',
'javelin-behavior-policy-rule-editor' => '5e9f347c',
'javelin-behavior-project-boards' => 'ba4fa35c',
'javelin-behavior-project-create' => '065227cc',
'javelin-behavior-quicksand-blacklist' => '7927a7d3',
'javelin-behavior-recurring-edit' => '5f1c4d5f',
'javelin-behavior-refresh-csrf' => '7814b593',
'javelin-behavior-releeph-preview-branch' => 'b2b4fbaf',
'javelin-behavior-releeph-request-state-change' => 'a0b57eb8',
'javelin-behavior-releeph-request-typeahead' => 'de2e896f',
'javelin-behavior-remarkup-preview' => 'f7379f45',
'javelin-behavior-reorder-applications' => '76b9fc3e',
'javelin-behavior-reorder-columns' => 'e1d25dfb',
'javelin-behavior-repository-crossreference' => 'e5339c43',
'javelin-behavior-scrollbar' => '834a1173',
'javelin-behavior-search-reorder-queries' => 'e9581f08',
'javelin-behavior-select-on-click' => '4e3e79a6',
'javelin-behavior-slowvote-embed' => '887ad43f',
'javelin-behavior-stripe-payment-form' => '3f5d6dbf',
'javelin-behavior-test-payment-form' => 'fc91ab6c',
'javelin-behavior-time-typeahead' => 'f80d6bf0',
'javelin-behavior-toggle-class' => '5d7c9f33',
'javelin-behavior-typeahead-browse' => '635de1ec',
'javelin-behavior-typeahead-search' => '93d0c9e3',
'javelin-behavior-view-placeholder' => '47830651',
'javelin-behavior-workflow' => '0a3f3021',
'javelin-color' => '7e41274a',
'javelin-cookie' => '62dfea03',
'javelin-diffusion-locate-file-source' => 'b42eddc7',
'javelin-dom' => '805b806a',
'javelin-dynval' => 'f6555212',
'javelin-event' => '85ea0626',
'javelin-fx' => '54b612ba',
'javelin-history' => 'd4505101',
'javelin-install' => '05270951',
'javelin-json' => '69adf288',
'javelin-leader' => '331b1611',
'javelin-magical-init' => '3010e992',
'javelin-mask' => '8a41885b',
'javelin-quicksand' => '4cebc641',
'javelin-reactor' => '2b8de964',
'javelin-reactor-dom' => 'c90a04fc',
'javelin-reactor-node-calmer' => '76f4ebed',
'javelin-reactornode' => '1ad0a787',
'javelin-request' => '94b750d2',
'javelin-resource' => '44959b73',
'javelin-routable' => 'b3e7d692',
'javelin-router' => '29274e2b',
'javelin-scrollbar' => '087e919c',
'javelin-sound' => '949c0fe5',
'javelin-stratcom' => '6c53634d',
'javelin-tokenizer' => 'ab5f468d',
'javelin-typeahead' => '70baed2f',
'javelin-typeahead-composite-source' => '503e17fd',
'javelin-typeahead-normalizer' => 'e6e25838',
'javelin-typeahead-ondemand-source' => '8b3fd187',
'javelin-typeahead-preloaded-source' => '54f314a0',
'javelin-typeahead-source' => '2818f5ce',
'javelin-typeahead-static-source' => '6c0e62fa',
'javelin-uri' => '6eff08aa',
'javelin-util' => '93cc50d6',
'javelin-vector' => '2caa8fb8',
'javelin-view' => '0f764c35',
'javelin-view-html' => 'fe287620',
'javelin-view-interpreter' => 'f829edb3',
'javelin-view-renderer' => '6c2b09a2',
'javelin-view-visitor' => 'efe49472',
'javelin-websocket' => 'e292eaf4',
'javelin-workflow' => '5b2e3e2b',
'lightbox-attachment-css' => '7acac05d',
'maniphest-batch-editor' => 'b0f0b6d5',
'maniphest-report-css' => 'f6931fdf',
'maniphest-task-edit-css' => 'fda62a9b',
'maniphest-task-summary-css' => '11cc5344',
'multirow-row-manager' => 'b5d57730',
'owners-path-editor' => 'aa1733d0',
'owners-path-editor-css' => '2f00933b',
- 'paste-css' => '1898e534',
+ 'paste-css' => 'b2f5a543',
'path-typeahead' => 'f7fc67ec',
'people-profile-css' => '25970776',
'phabricator-action-list-view-css' => 'c5eba19d',
'phabricator-application-launch-view-css' => '95351601',
'phabricator-busy' => '59a7976a',
'phabricator-chatlog-css' => 'd295b020',
'phabricator-content-source-view-css' => '4b8b05d4',
'phabricator-core-css' => 'a76cefc9',
'phabricator-countdown-css' => 'e7544472',
'phabricator-dashboard-css' => 'eb458607',
'phabricator-drag-and-drop-file-upload' => 'ad10aeac',
'phabricator-draggable-list' => 'a16ec1c6',
'phabricator-fatal-config-template-css' => '8e6c6fcd',
'phabricator-feed-css' => 'ecd4ec57',
'phabricator-file-upload' => '477359c8',
'phabricator-filetree-view-css' => 'fccf9f82',
'phabricator-flag-css' => '5337623f',
'phabricator-hovercard' => '14ac66f5',
'phabricator-hovercard-view-css' => '1239cd52',
'phabricator-keyboard-shortcut' => '1ae869f2',
'phabricator-keyboard-shortcut-manager' => 'c1700f6f',
'phabricator-main-menu-view' => '2f670a96',
'phabricator-nav-view-css' => 'a24cb589',
'phabricator-notification' => 'ccf1cbf8',
'phabricator-notification-css' => '9c279160',
'phabricator-notification-menu-css' => 'f31c0bde',
'phabricator-object-selector-css' => '85ee8ce6',
'phabricator-phtize' => 'd254d646',
'phabricator-prefab' => '6920d200',
- 'phabricator-remarkup-css' => '1c4ac273',
+ 'phabricator-remarkup-css' => 'e27a26b2',
'phabricator-search-results-css' => '7dea472c',
'phabricator-shaped-request' => '7cbe244b',
'phabricator-side-menu-view-css' => 'bec2458e',
'phabricator-slowvote-css' => '475b4bd2',
- 'phabricator-source-code-view-css' => '5e0178de',
+ 'phabricator-source-code-view-css' => 'cbeef983',
'phabricator-standard-page-view' => '1f53d056',
'phabricator-textareautils' => '5c93c52c',
'phabricator-title' => 'df5e11d2',
'phabricator-tooltip' => '1d298e3a',
'phabricator-ui-example-css' => '528b19de',
'phabricator-uiexample-javelin-view' => 'd4a14807',
'phabricator-uiexample-reactor-button' => 'd19198c8',
'phabricator-uiexample-reactor-checkbox' => '519705ea',
'phabricator-uiexample-reactor-focus' => '40a6a403',
'phabricator-uiexample-reactor-input' => '886fd850',
'phabricator-uiexample-reactor-mouseover' => '47c794d8',
'phabricator-uiexample-reactor-radio' => '988040b4',
'phabricator-uiexample-reactor-select' => 'a155550f',
'phabricator-uiexample-reactor-sendclass' => '1def2711',
'phabricator-uiexample-reactor-sendproperties' => 'b1f0ccee',
'phabricator-zindex-css' => '57ddcaa2',
'phame-css' => 'bb147387',
'pholio-css' => '95174bdd',
'pholio-edit-css' => '3ad9d1ee',
'pholio-inline-comments-css' => '8e545e49',
'phortune-credit-card-form' => '2290aeef',
'phortune-credit-card-form-css' => '8391eb02',
'phortune-css' => '9149f103',
'phrequent-css' => 'ffc185ad',
'phriction-document-css' => 'd1861e06',
- 'phui-action-panel-css' => '3ee9afd5',
+ 'phui-action-panel-css' => '91c7b835',
'phui-badge-view-css' => 'f25c3476',
'phui-box-css' => 'a5bb366d',
'phui-button-css' => '16020a60',
'phui-calendar-css' => 'ccabe893',
'phui-calendar-day-css' => 'd1cf6f93',
'phui-calendar-list-css' => 'c1c7f338',
'phui-calendar-month-css' => '476be7e0',
'phui-crumbs-view-css' => 'd842f867',
'phui-document-view-css' => '0267054b',
'phui-feed-story-css' => 'b7b26d23',
'phui-font-icon-base-css' => 'ecbbb4c2',
'phui-fontkit-css' => 'cb8ae7ad',
'phui-form-css' => 'afdb2c6e',
'phui-form-view-css' => '621b21c5',
'phui-header-view-css' => '55bb32dd',
'phui-icon-view-css' => 'b0a6b1b6',
'phui-image-mask-css' => '5a8b09c8',
'phui-info-panel-css' => '27ea50a1',
'phui-info-view-css' => '5b16bac6',
'phui-inline-comment-view-css' => '0fdb3667',
'phui-list-view-css' => '125599df',
'phui-object-box-css' => '407eaf5a',
'phui-object-item-list-view-css' => '26c30d3f',
'phui-pager-css' => 'bea33d23',
'phui-pinboard-view-css' => '2495140e',
'phui-property-list-view-css' => '03904f6b',
'phui-remarkup-preview-css' => '867f85b3',
'phui-spacing-css' => '042804d6',
'phui-status-list-view-css' => '888cedb8',
'phui-tag-view-css' => '402691cc',
'phui-text-css' => 'cf019f54',
'phui-theme-css' => '6b451f24',
'phui-timeline-view-css' => 'f1bccf73',
'phui-two-column-view-css' => '39ecafb1',
'phui-workboard-view-css' => '6704d68d',
'phui-workpanel-view-css' => 'adec7699',
'phuix-action-list-view' => 'b5c256b8',
'phuix-action-view' => '8cf6d262',
'phuix-dropdown-menu' => 'bd4c8dca',
'policy-css' => '957ea14c',
'policy-edit-css' => '815c66f7',
'policy-transaction-detail-css' => '82100a43',
'ponder-view-css' => '7b0df4da',
'project-icon-css' => '4e3eaa5a',
'raphael-core' => '51ee6b43',
'raphael-g' => '40dde778',
'raphael-g-line' => '40da039e',
'releeph-core' => '9b3c5733',
'releeph-preview-branch' => 'b7a6f4a5',
'releeph-request-differential-create-dialog' => '8d8b92cd',
'releeph-request-typeahead-css' => '667a48ae',
'setup-issue-css' => 'db7e9c40',
'sprite-login-css' => '1ebb9bf9',
'sprite-main-header-css' => 'f07bbb87',
'sprite-menu-css' => '9dd65b92',
'sprite-projects-css' => 'e5ad842a',
'sprite-tokens-css' => '4f399012',
'syntax-highlighting-css' => '9fd11da8',
'tokens-css' => '3d0f239e',
'typeahead-browse-css' => 'd8581d2c',
'unhandled-exception-css' => '4c96257a',
),
'requires' => array(
'01774ab2' => array(
'javelin-dom',
'javelin-util',
'javelin-stratcom',
'javelin-install',
'javelin-aphlict',
'javelin-workflow',
'javelin-router',
'javelin-behavior-device',
'javelin-vector',
),
'031cee25' => array(
'javelin-behavior',
'javelin-request',
'javelin-stratcom',
'javelin-vector',
'javelin-dom',
'javelin-uri',
'javelin-behavior-device',
'phabricator-title',
),
'048330fa' => array(
'javelin-behavior',
'javelin-typeahead-ondemand-source',
'javelin-typeahead',
'javelin-dom',
'javelin-uri',
'javelin-util',
'javelin-stratcom',
'phabricator-prefab',
),
'04875312' => array(
'aphront-typeahead-control-css',
'phui-tag-view-css',
),
'05270951' => array(
'javelin-util',
'javelin-magical-init',
),
'065227cc' => array(
'javelin-behavior',
'javelin-dom',
'javelin-stratcom',
'javelin-workflow',
),
'087e919c' => array(
'javelin-install',
'javelin-dom',
'javelin-stratcom',
'javelin-vector',
),
'0a3f3021' => array(
'javelin-behavior',
'javelin-stratcom',
'javelin-workflow',
'javelin-dom',
'javelin-router',
),
'0f764c35' => array(
'javelin-install',
'javelin-util',
),
'13c739ea' => array(
'javelin-behavior',
'javelin-stratcom',
'javelin-workflow',
'javelin-dom',
'javelin-uri',
'phabricator-textareautils',
),
'1499a8cb' => array(
'javelin-behavior',
'javelin-stratcom',
'javelin-dom',
'javelin-history',
),
'14ac66f5' => array(
'javelin-install',
'javelin-dom',
'javelin-vector',
'javelin-request',
'javelin-uri',
),
'1ad0a787' => array(
'javelin-install',
'javelin-reactor',
'javelin-util',
'javelin-reactor-node-calmer',
),
'1ae869f2' => array(
'javelin-install',
'javelin-util',
'phabricator-keyboard-shortcut-manager',
),
'1d298e3a' => array(
'javelin-install',
'javelin-util',
'javelin-dom',
'javelin-vector',
),
'1d45c74d' => array(
'javelin-behavior',
'javelin-dom',
'javelin-util',
'javelin-stratcom',
'javelin-workflow',
'javelin-behavior-device',
'javelin-history',
'javelin-vector',
'javelin-scrollbar',
'phabricator-title',
'phabricator-shaped-request',
'conpherence-thread-manager',
),
'1def2711' => array(
'javelin-install',
'javelin-dom',
'javelin-reactor-dom',
),
'2035b9cb' => array(
'javelin-behavior',
'javelin-dom',
'javelin-util',
'javelin-stratcom',
'javelin-workflow',
'phuix-dropdown-menu',
'phuix-action-list-view',
'phuix-action-view',
'phabricator-phtize',
'changeset-view-manager',
),
'21ba5861' => array(
'javelin-behavior',
'javelin-dom',
'javelin-util',
'javelin-workflow',
'javelin-stratcom',
'conpherence-thread-manager',
),
'2290aeef' => array(
'javelin-install',
'javelin-dom',
'javelin-json',
'javelin-workflow',
'javelin-util',
),
'246dc085' => array(
'javelin-behavior',
'javelin-stratcom',
'javelin-dom',
'javelin-workflow',
'javelin-quicksand',
'phabricator-phtize',
'phabricator-drag-and-drop-file-upload',
'phabricator-draggable-list',
),
'2818f5ce' => array(
'javelin-install',
'javelin-util',
'javelin-dom',
'javelin-typeahead-normalizer',
),
'2926fff2' => array(
'javelin-behavior',
'javelin-dom',
),
'29274e2b' => array(
'javelin-install',
'javelin-util',
),
'2b228192' => array(
'javelin-behavior',
'javelin-dom',
'javelin-util',
'javelin-workflow',
'javelin-json',
),
'2b8de964' => array(
'javelin-install',
'javelin-util',
),
'2bfa2836' => array(
'javelin-behavior',
'javelin-stratcom',
'javelin-dom',
),
'2c426492' => array(
'javelin-behavior',
'javelin-dom',
'javelin-stratcom',
'phabricator-keyboard-shortcut',
),
'2caa8fb8' => array(
'javelin-install',
'javelin-event',
),
'2f670a96' => array(
'phui-theme-css',
),
'331b1611' => array(
'javelin-install',
),
'3ab51e2c' => array(
'javelin-behavior',
'javelin-behavior-device',
'javelin-stratcom',
'javelin-vector',
'javelin-dom',
'javelin-magical-init',
),
'3cb0b2fc' => array(
'javelin-behavior',
'javelin-dom',
'javelin-stratcom',
'javelin-workflow',
'javelin-util',
'javelin-uri',
),
'3ee3408b' => array(
'javelin-behavior',
'javelin-behavior-device',
'javelin-stratcom',
'phabricator-tooltip',
),
'3f5d6dbf' => array(
'javelin-behavior',
'javelin-dom',
'phortune-credit-card-form',
),
'40a6a403' => array(
'javelin-install',
'javelin-dom',
'javelin-reactor-dom',
),
42126667 => array(
'javelin-behavior',
'javelin-dom',
'javelin-request',
),
'44168bad' => array(
'javelin-behavior',
'javelin-dom',
'phabricator-prefab',
),
'44959b73' => array(
'javelin-util',
'javelin-uri',
'javelin-install',
),
'453c5375' => array(
'javelin-behavior',
'javelin-dom',
),
'469c0d9e' => array(
'javelin-behavior',
'javelin-dom',
'javelin-workflow',
),
'477359c8' => array(
'javelin-install',
'javelin-dom',
'phabricator-notification',
),
47830651 => array(
'javelin-behavior',
'javelin-dom',
'javelin-view-renderer',
'javelin-install',
),
'47c794d8' => array(
'javelin-install',
'javelin-dom',
'javelin-reactor-dom',
),
48086888 => array(
'javelin-behavior',
'javelin-dom',
'javelin-workflow',
),
'49b73b36' => array(
'javelin-behavior',
'javelin-dom',
'javelin-request',
'javelin-util',
),
'4c95d29e' => array(
'javelin-behavior',
'javelin-dom',
'javelin-util',
'javelin-json',
'javelin-stratcom',
'phabricator-shaped-request',
),
'4cebc641' => array(
'javelin-install',
),
'4e3e79a6' => array(
'javelin-behavior',
'javelin-stratcom',
'javelin-dom',
),
'4fdb476d' => array(
'javelin-behavior',
'javelin-stratcom',
'javelin-dom',
),
'503e17fd' => array(
'javelin-install',
'javelin-typeahead-source',
'javelin-util',
),
'519705ea' => array(
'javelin-install',
'javelin-dom',
'javelin-reactor-dom',
),
'5359e785' => array(
'javelin-install',
'javelin-util',
'javelin-websocket',
'javelin-leader',
'javelin-json',
),
54733475 => array(
'javelin-behavior',
'javelin-stratcom',
'javelin-dom',
'phuix-dropdown-menu',
),
'54b612ba' => array(
'javelin-color',
'javelin-install',
'javelin-util',
),
'54f314a0' => array(
'javelin-install',
'javelin-util',
'javelin-request',
'javelin-typeahead-source',
),
'558829c2' => array(
'javelin-stratcom',
'javelin-behavior',
'javelin-vector',
'javelin-dom',
),
'56a1ca03' => array(
'javelin-behavior',
'javelin-behavior-device',
'javelin-stratcom',
'javelin-dom',
'javelin-magical-init',
'javelin-vector',
'javelin-request',
'javelin-util',
),
58562350 => array(
'javelin-dom',
'javelin-util',
'javelin-stratcom',
'javelin-install',
'javelin-workflow',
'javelin-router',
'javelin-behavior-device',
'javelin-vector',
),
'59a7976a' => array(
'javelin-install',
'javelin-dom',
'javelin-fx',
),
'59b251eb' => array(
'javelin-behavior',
'javelin-stratcom',
'javelin-vector',
'javelin-dom',
),
'5ab1a46a' => array(
'phui-fontkit-css',
),
'5b2e3e2b' => array(
'javelin-stratcom',
'javelin-request',
'javelin-dom',
'javelin-vector',
'javelin-install',
'javelin-util',
'javelin-mask',
'javelin-uri',
'javelin-routable',
),
'5c54cbf3' => array(
'javelin-behavior',
'javelin-stratcom',
'javelin-dom',
),
'5c93c52c' => array(
'javelin-install',
'javelin-dom',
'javelin-vector',
),
'5d7c9f33' => array(
'javelin-behavior',
'javelin-stratcom',
'javelin-dom',
),
'5e9f347c' => array(
'javelin-behavior',
'multirow-row-manager',
'javelin-dom',
'javelin-util',
'phabricator-prefab',
'javelin-json',
),
'5fefb143' => array(
'javelin-behavior',
'javelin-dom',
'javelin-workflow',
'javelin-stratcom',
),
60479091 => array(
'phabricator-busy',
'javelin-behavior',
),
'60821bc7' => array(
'javelin-behavior',
'javelin-stratcom',
'javelin-dom',
),
'6153c708' => array(
'javelin-behavior',
'javelin-stratcom',
'javelin-dom',
'javelin-workflow',
),
'61cbc29a' => array(
'javelin-magical-init',
'javelin-util',
),
'62dfea03' => array(
'javelin-install',
'javelin-util',
),
'635de1ec' => array(
'javelin-behavior',
'javelin-stratcom',
'javelin-workflow',
'javelin-dom',
),
'64a5550f' => array(
'javelin-dom',
'javelin-util',
'javelin-stratcom',
'javelin-install',
'javelin-request',
'javelin-workflow',
),
'65ef6074' => array(
'javelin-behavior',
'javelin-stratcom',
'javelin-dom',
'javelin-util',
'javelin-vector',
'differential-inline-comment-editor',
),
'665cf6ac' => array(
'javelin-behavior',
'javelin-util',
'javelin-dom',
'javelin-stratcom',
'javelin-vector',
),
'6882e80a' => array(
'javelin-dom',
),
'6920d200' => array(
'javelin-install',
'javelin-util',
'javelin-dom',
'javelin-typeahead',
'javelin-tokenizer',
'javelin-typeahead-preloaded-source',
'javelin-typeahead-ondemand-source',
'javelin-dom',
'javelin-stratcom',
'javelin-util',
),
'69adf288' => array(
'javelin-install',
),
'6c0e62fa' => array(
'javelin-install',
'javelin-typeahead-source',
),
'6c2b09a2' => array(
'javelin-install',
'javelin-util',
),
'6c53634d' => array(
'javelin-install',
'javelin-event',
'javelin-util',
'javelin-magical-init',
),
'6d3e1947' => array(
'javelin-behavior',
'javelin-diffusion-locate-file-source',
'javelin-dom',
'javelin-typeahead',
'javelin-uri',
),
'6d49590e' => array(
'javelin-behavior',
'javelin-dom',
'phabricator-drag-and-drop-file-upload',
'phabricator-textareautils',
),
'6eff08aa' => array(
'javelin-install',
'javelin-util',
'javelin-stratcom',
),
'70baed2f' => array(
'javelin-install',
'javelin-dom',
'javelin-vector',
'javelin-util',
),
71237763 => array(
'javelin-behavior',
'javelin-dom',
'javelin-stratcom',
'javelin-workflow',
'phabricator-draggable-list',
),
'7319e029' => array(
'javelin-behavior',
'javelin-dom',
),
'73d09eef' => array(
'javelin-behavior',
'javelin-vector',
'javelin-dom',
),
'76b9fc3e' => array(
'javelin-behavior',
'javelin-stratcom',
'javelin-workflow',
'javelin-dom',
'phabricator-draggable-list',
),
'76f4ebed' => array(
'javelin-install',
'javelin-reactor',
'javelin-util',
),
'7814b593' => array(
'javelin-request',
'javelin-behavior',
'javelin-dom',
'javelin-router',
'javelin-util',
'phabricator-busy',
),
'782ab6e7' => array(
'javelin-behavior',
'javelin-dom',
'javelin-util',
'phabricator-prefab',
'multirow-row-manager',
'javelin-json',
),
'7927a7d3' => array(
'javelin-behavior',
'javelin-quicksand',
),
'7a68dda3' => array(
'owners-path-editor',
'javelin-behavior',
),
'7b98d7c5' => array(
'javelin-behavior',
'javelin-dom',
'javelin-stratcom',
'javelin-util',
),
'7cbe244b' => array(
'javelin-install',
'javelin-util',
'javelin-request',
'javelin-router',
),
'7d470398' => array(
'javelin-behavior',
'javelin-dom',
'javelin-util',
'phuix-dropdown-menu',
'phuix-action-list-view',
'phuix-action-view',
'javelin-workflow',
),
'7e41274a' => array(
'javelin-install',
),
'7ebaeed3' => array(
'herald-rule-editor',
'javelin-behavior',
),
'7ee2b591' => array(
'javelin-behavior',
'javelin-history',
),
'805b806a' => array(
'javelin-magical-init',
'javelin-install',
'javelin-util',
'javelin-vector',
'javelin-stratcom',
),
82439934 => array(
'javelin-behavior',
'javelin-dom',
'javelin-util',
'javelin-stratcom',
'javelin-workflow',
'phabricator-draggable-list',
),
'834a1173' => array(
'javelin-behavior',
'javelin-scrollbar',
),
'85ea0626' => array(
'javelin-install',
),
'85ee8ce6' => array(
'aphront-dialog-view-css',
),
'8694b1df' => array(
'javelin-behavior',
'javelin-dom',
'javelin-stratcom',
'phabricator-tooltip',
'changeset-view-manager',
),
'88236f00' => array(
'javelin-behavior',
'phabricator-keyboard-shortcut',
'javelin-stratcom',
),
'886fd850' => array(
'javelin-install',
'javelin-reactor-dom',
'javelin-view-html',
'javelin-view-interpreter',
'javelin-view-renderer',
),
'887ad43f' => array(
'javelin-behavior',
'javelin-request',
'javelin-stratcom',
'javelin-dom',
),
'88f0c5b3' => array(
'javelin-behavior',
'javelin-dom',
'javelin-vector',
),
'8a41885b' => array(
'javelin-install',
'javelin-dom',
),
'8b3fd187' => array(
'javelin-install',
'javelin-util',
'javelin-request',
'javelin-typeahead-source',
),
'8ce821c5' => array(
'phabricator-notification',
'javelin-stratcom',
'javelin-behavior',
),
'8cf6d262' => array(
'javelin-install',
'javelin-dom',
'javelin-util',
),
'8ef9ab58' => array(
'javelin-behavior',
'javelin-dom',
'javelin-stratcom',
),
'9007c197' => array(
'javelin-behavior',
'javelin-dom',
'javelin-stratcom',
),
'91a6031b' => array(
'multirow-row-manager',
'javelin-install',
'javelin-util',
'javelin-dom',
'javelin-stratcom',
'javelin-json',
'phabricator-prefab',
),
'93d0c9e3' => array(
'javelin-behavior',
'javelin-stratcom',
'javelin-workflow',
'javelin-dom',
),
'9414ff18' => array(
'javelin-behavior',
'javelin-resource',
'javelin-stratcom',
'javelin-workflow',
'javelin-util',
),
'949c0fe5' => array(
'javelin-install',
),
'94b750d2' => array(
'javelin-install',
'javelin-stratcom',
'javelin-util',
'javelin-behavior',
'javelin-json',
'javelin-dom',
'javelin-resource',
'javelin-routable',
),
'988040b4' => array(
'javelin-install',
'javelin-dom',
'javelin-reactor-dom',
),
'9f36c42d' => array(
'javelin-behavior',
'javelin-stratcom',
'javelin-dom',
'javelin-vector',
),
'a0b57eb8' => array(
'javelin-behavior',
'javelin-dom',
'javelin-stratcom',
'javelin-workflow',
'javelin-util',
'phabricator-keyboard-shortcut',
),
'a155550f' => array(
'javelin-install',
'javelin-dom',
'javelin-reactor-dom',
),
'a16ec1c6' => array(
'javelin-install',
'javelin-dom',
'javelin-stratcom',
'javelin-util',
'javelin-vector',
'javelin-magical-init',
),
'a205cf28' => array(
'javelin-behavior',
'javelin-stratcom',
'javelin-dom',
'javelin-vector',
'javelin-install',
),
'a464fe03' => array(
'javelin-behavior',
'javelin-uri',
'phabricator-notification',
),
'a80d0378' => array(
'javelin-behavior',
'javelin-stratcom',
'javelin-dom',
),
'a8458711' => array(
'javelin-behavior',
'javelin-dom',
'javelin-stratcom',
'javelin-workflow',
'javelin-util',
'phabricator-notification',
'javelin-behavior-device',
'phuix-dropdown-menu',
'phuix-action-list-view',
'phuix-action-view',
'conpherence-thread-manager',
),
'a8d8459d' => array(
'javelin-behavior',
'javelin-dom',
'javelin-stratcom',
),
'a8da01f0' => array(
'javelin-behavior',
'javelin-uri',
'phabricator-keyboard-shortcut',
),
'a9f88de2' => array(
'javelin-behavior',
'javelin-dom',
'javelin-stratcom',
'javelin-workflow',
'javelin-fx',
'javelin-util',
),
'aa1733d0' => array(
'multirow-row-manager',
'javelin-install',
'path-typeahead',
'javelin-dom',
'javelin-util',
'phabricator-prefab',
),
'ab5f468d' => array(
'javelin-dom',
'javelin-util',
'javelin-stratcom',
'javelin-install',
),
'ad10aeac' => array(
'javelin-install',
'javelin-util',
'javelin-request',
'javelin-dom',
'javelin-uri',
'phabricator-file-upload',
),
'b064af76' => array(
'javelin-behavior',
'javelin-stratcom',
'javelin-dom',
'javelin-request',
'javelin-util',
'phabricator-shaped-request',
),
'b1f0ccee' => array(
'javelin-install',
'javelin-dom',
'javelin-reactor-dom',
),
'b23b49e6' => array(
'javelin-behavior',
'javelin-dom',
'javelin-util',
'javelin-request',
'phabricator-shaped-request',
),
'b2b4fbaf' => array(
'javelin-behavior',
'javelin-dom',
'javelin-uri',
'javelin-request',
),
'b3a4b884' => array(
'javelin-behavior',
'phabricator-prefab',
),
'b3e7d692' => array(
'javelin-install',
),
'b42eddc7' => array(
'javelin-install',
'javelin-dom',
'javelin-typeahead-preloaded-source',
'javelin-util',
),
'b5c256b8' => array(
'javelin-install',
'javelin-dom',
),
'b5d57730' => array(
'javelin-install',
'javelin-stratcom',
'javelin-dom',
'javelin-util',
),
'b6993408' => array(
'javelin-behavior',
'javelin-stratcom',
'javelin-dom',
'javelin-json',
'phabricator-draggable-list',
),
'b6b0d1bb' => array(
'phui-inline-comment-view-css',
),
'ba4fa35c' => array(
'javelin-behavior',
'javelin-dom',
'javelin-util',
'javelin-vector',
'javelin-stratcom',
'javelin-workflow',
'phabricator-draggable-list',
),
'bd4c8dca' => array(
'javelin-install',
'javelin-util',
'javelin-dom',
'javelin-vector',
'javelin-stratcom',
),
'bdaf4d04' => array(
'javelin-behavior',
'javelin-dom',
'javelin-util',
'javelin-request',
),
'be807912' => array(
'javelin-behavior',
'javelin-dom',
'javelin-util',
'phabricator-shaped-request',
),
'c1700f6f' => array(
'javelin-install',
'javelin-util',
'javelin-stratcom',
'javelin-dom',
'javelin-vector',
),
'c72aa091' => array(
'javelin-behavior',
'javelin-dom',
'javelin-stratcom',
'javelin-behavior-device',
'javelin-scrollbar',
'javelin-quicksand',
'phabricator-keyboard-shortcut',
'conpherence-thread-manager',
),
'c8e57404' => array(
'javelin-behavior',
'javelin-dom',
'javelin-uri',
'javelin-mask',
'phabricator-drag-and-drop-file-upload',
),
'c90a04fc' => array(
'javelin-dom',
'javelin-dynval',
'javelin-reactor',
'javelin-reactornode',
'javelin-install',
'javelin-util',
),
'ca3f91eb' => array(
'javelin-behavior',
'javelin-dom',
'javelin-stratcom',
'phabricator-phtize',
),
'ccf1cbf8' => array(
'javelin-install',
'javelin-dom',
'javelin-stratcom',
'javelin-util',
'phabricator-notification-css',
),
'cf86d16a' => array(
'javelin-behavior',
'javelin-dom',
'javelin-workflow',
'phabricator-drag-and-drop-file-upload',
),
'd19198c8' => array(
'javelin-install',
'javelin-dom',
'javelin-util',
'javelin-dynval',
'javelin-reactor-dom',
),
'd254d646' => array(
'javelin-util',
),
'd4505101' => array(
'javelin-stratcom',
'javelin-install',
'javelin-uri',
'javelin-util',
),
'd4a14807' => array(
'javelin-install',
'javelin-dom',
'javelin-view',
),
'd4eecc63' => array(
'javelin-behavior',
'javelin-dom',
'javelin-stratcom',
),
'd75709e6' => array(
'javelin-behavior',
'javelin-workflow',
'javelin-json',
'javelin-dom',
'phabricator-keyboard-shortcut',
),
'd835b03a' => array(
'javelin-behavior',
'javelin-dom',
'javelin-util',
'phabricator-shaped-request',
),
'dbbf48b6' => array(
'javelin-behavior',
'javelin-stratcom',
'javelin-dom',
'phabricator-busy',
),
'de2e896f' => array(
'javelin-behavior',
'javelin-dom',
'javelin-typeahead',
'javelin-typeahead-ondemand-source',
'javelin-dom',
),
'df5e11d2' => array(
'javelin-install',
),
'e10f8e18' => array(
'javelin-behavior',
'javelin-dom',
'phabricator-prefab',
),
'e1d25dfb' => array(
'javelin-behavior',
'javelin-stratcom',
'javelin-workflow',
'javelin-dom',
'phabricator-draggable-list',
),
'e1ff79b1' => array(
'javelin-behavior',
'javelin-stratcom',
'javelin-dom',
),
'e292eaf4' => array(
'javelin-install',
),
'e379b58e' => array(
'javelin-behavior',
'javelin-stratcom',
'javelin-vector',
'javelin-dom',
'javelin-uri',
),
'e4cc26b3' => array(
'javelin-behavior',
'javelin-dom',
),
'e5339c43' => array(
'javelin-behavior',
'javelin-dom',
'javelin-stratcom',
'javelin-uri',
),
'e5822781' => array(
'javelin-behavior',
'javelin-dom',
'javelin-json',
'javelin-workflow',
'javelin-magical-init',
),
'e6e25838' => array(
'javelin-install',
),
'e9581f08' => array(
'javelin-behavior',
'javelin-stratcom',
'javelin-workflow',
'javelin-dom',
'phabricator-draggable-list',
),
'ea681761' => array(
'javelin-behavior',
'javelin-aphlict',
'phabricator-phtize',
'javelin-dom',
),
'edd1ba66' => array(
'javelin-behavior',
'javelin-stratcom',
'javelin-dom',
'javelin-uri',
'phabricator-notification',
),
'edf8a145' => array(
'javelin-behavior',
'javelin-uri',
),
'eeaa9e5a' => array(
'javelin-behavior',
'javelin-stratcom',
'javelin-dom',
'phabricator-phtize',
'phabricator-textareautils',
'javelin-workflow',
'javelin-vector',
),
'efe49472' => array(
'javelin-install',
'javelin-util',
),
'f24a53cb' => array(
'phui-fontkit-css',
),
'f36e01af' => array(
'javelin-behavior',
'javelin-behavior-device',
'javelin-stratcom',
'javelin-vector',
'phabricator-hovercard',
),
'f411b6ae' => array(
'javelin-behavior',
'javelin-stratcom',
'javelin-util',
'javelin-dom',
'javelin-request',
'phabricator-keyboard-shortcut',
),
'f6555212' => array(
'javelin-install',
'javelin-reactornode',
'javelin-util',
'javelin-reactor',
),
'f7379f45' => array(
'javelin-behavior',
'javelin-dom',
'javelin-util',
'phabricator-shaped-request',
),
'f7fc67ec' => array(
'javelin-install',
'javelin-typeahead',
'javelin-dom',
'javelin-request',
'javelin-typeahead-ondemand-source',
'javelin-util',
),
'f80d6bf0' => array(
'javelin-behavior',
'javelin-util',
'javelin-dom',
'javelin-stratcom',
'javelin-vector',
'javelin-typeahead-static-source',
),
'f829edb3' => array(
'javelin-view',
'javelin-install',
'javelin-dom',
),
'f8ba29d7' => array(
'javelin-behavior',
'javelin-stratcom',
'javelin-dom',
'javelin-mask',
'javelin-util',
'phabricator-busy',
),
'fa0f4fc2' => array(
'javelin-behavior',
'javelin-dom',
'javelin-vector',
'javelin-magical-init',
),
'fb20ac8d' => array(
'javelin-behavior',
'javelin-aphlict',
'javelin-stratcom',
'javelin-request',
'javelin-uri',
'javelin-dom',
'javelin-json',
'javelin-router',
'javelin-util',
'javelin-leader',
'javelin-sound',
'phabricator-notification',
),
'fbe497e7' => array(
'javelin-behavior',
'javelin-util',
'javelin-stratcom',
'javelin-dom',
'javelin-vector',
'javelin-magical-init',
'javelin-request',
'javelin-history',
'javelin-workflow',
'javelin-mask',
'javelin-behavior-device',
'phabricator-keyboard-shortcut',
),
'fc91ab6c' => array(
'javelin-behavior',
'javelin-dom',
'phortune-credit-card-form',
),
'fe287620' => array(
'javelin-install',
'javelin-dom',
'javelin-view-visitor',
'javelin-util',
),
),
'packages' => array(
'core.pkg.css' => array(
'phabricator-core-css',
'phabricator-zindex-css',
'phui-button-css',
'phabricator-standard-page-view',
'aphront-dialog-view-css',
'phui-form-view-css',
'aphront-panel-view-css',
'aphront-table-view-css',
'aphront-tokenizer-control-css',
'aphront-typeahead-control-css',
'aphront-list-filter-view-css',
'phabricator-remarkup-css',
'syntax-highlighting-css',
'phui-pager-css',
'aphront-tooltip-css',
'phabricator-flag-css',
'phui-info-view-css',
'sprite-menu-css',
'phabricator-main-menu-view',
'phabricator-notification-css',
'phabricator-notification-menu-css',
'lightbox-attachment-css',
'phui-header-view-css',
'phabricator-filetree-view-css',
'phabricator-nav-view-css',
'phabricator-side-menu-view-css',
'phui-crumbs-view-css',
'phui-object-item-list-view-css',
'global-drag-and-drop-css',
'phui-spacing-css',
'phui-form-css',
'phui-icon-view-css',
'phabricator-application-launch-view-css',
'phabricator-action-list-view-css',
'phui-property-list-view-css',
'phui-tag-view-css',
'phui-list-view-css',
'font-fontawesome',
'phui-font-icon-base-css',
'phui-box-css',
'phui-object-box-css',
'phui-timeline-view-css',
'sprite-tokens-css',
'tokens-css',
'phui-status-list-view-css',
'phui-feed-story-css',
'phabricator-feed-css',
'phabricator-dashboard-css',
'aphront-multi-column-view-css',
'conpherence-durable-column-view',
),
'core.pkg.js' => array(
'javelin-util',
'javelin-install',
'javelin-event',
'javelin-stratcom',
'javelin-behavior',
'javelin-resource',
'javelin-request',
'javelin-vector',
'javelin-dom',
'javelin-json',
'javelin-uri',
'javelin-workflow',
'javelin-mask',
'javelin-typeahead',
'javelin-typeahead-normalizer',
'javelin-typeahead-source',
'javelin-typeahead-preloaded-source',
'javelin-typeahead-ondemand-source',
'javelin-tokenizer',
'javelin-history',
'javelin-router',
'javelin-routable',
'javelin-behavior-aphront-basic-tokenizer',
'javelin-behavior-workflow',
'javelin-behavior-aphront-form-disable-on-submit',
'phabricator-keyboard-shortcut-manager',
'phabricator-keyboard-shortcut',
'javelin-behavior-phabricator-keyboard-shortcuts',
'javelin-behavior-refresh-csrf',
'javelin-behavior-phabricator-watch-anchor',
'javelin-behavior-phabricator-autofocus',
'phuix-dropdown-menu',
'phuix-action-list-view',
'phuix-action-view',
'phabricator-phtize',
'javelin-behavior-phabricator-oncopy',
'phabricator-tooltip',
'javelin-behavior-phabricator-tooltips',
'phabricator-prefab',
'javelin-behavior-device',
'javelin-behavior-toggle-class',
'javelin-behavior-lightbox-attachments',
'phabricator-busy',
'javelin-aphlict',
'phabricator-notification',
'javelin-behavior-aphlict-listen',
'javelin-behavior-phabricator-search-typeahead',
'javelin-behavior-aphlict-dropdown',
'javelin-behavior-history-install',
'javelin-behavior-phabricator-gesture',
'javelin-behavior-phabricator-active-nav',
'javelin-behavior-phabricator-nav',
'javelin-behavior-phabricator-remarkup-assist',
'phabricator-textareautils',
'phabricator-file-upload',
'javelin-behavior-global-drag-and-drop',
'javelin-behavior-phabricator-reveal-content',
'phabricator-hovercard',
'javelin-behavior-phabricator-hovercards',
'javelin-color',
'javelin-fx',
'phabricator-draggable-list',
'javelin-behavior-phabricator-transaction-list',
'javelin-behavior-phabricator-show-older-transactions',
'javelin-behavior-phui-dropdown-menu',
'javelin-behavior-doorkeeper-tag',
'phabricator-title',
'javelin-leader',
'javelin-websocket',
'javelin-behavior-dashboard-async-panel',
'javelin-behavior-dashboard-tab-panel',
'javelin-quicksand',
'javelin-behavior-quicksand-blacklist',
'javelin-behavior-high-security-warning',
'javelin-scrollbar',
'javelin-behavior-scrollbar',
'javelin-behavior-durable-column',
'conpherence-thread-manager',
),
'darkconsole.pkg.js' => array(
'javelin-behavior-dark-console',
'javelin-behavior-error-log',
),
'differential.pkg.css' => array(
'differential-core-view-css',
'differential-changeset-view-css',
'differential-revision-history-css',
'differential-revision-list-css',
'differential-table-of-contents-css',
'differential-revision-comment-css',
'differential-revision-add-comment-css',
'phabricator-object-selector-css',
'phabricator-content-source-view-css',
'inline-comment-summary-css',
'phui-inline-comment-view-css',
),
'differential.pkg.js' => array(
'phabricator-drag-and-drop-file-upload',
'phabricator-shaped-request',
'javelin-behavior-differential-feedback-preview',
'javelin-behavior-differential-edit-inline-comments',
'javelin-behavior-differential-populate',
'javelin-behavior-differential-diff-radios',
'javelin-behavior-differential-comment-jump',
'javelin-behavior-differential-add-reviewers-and-ccs',
'javelin-behavior-differential-keyboard-navigation',
'javelin-behavior-aphront-drag-and-drop-textarea',
'javelin-behavior-phabricator-object-selector',
'javelin-behavior-repository-crossreference',
'javelin-behavior-load-blame',
'differential-inline-comment-editor',
'javelin-behavior-differential-dropdown-menus',
'javelin-behavior-differential-toggle-files',
'javelin-behavior-differential-user-select',
'javelin-behavior-aphront-more',
'changeset-view-manager',
),
'diffusion.pkg.css' => array(
'diffusion-icons-css',
),
'diffusion.pkg.js' => array(
'javelin-behavior-diffusion-pull-lastmodified',
'javelin-behavior-diffusion-commit-graph',
'javelin-behavior-audit-preview',
),
'maniphest.pkg.css' => array(
'maniphest-task-summary-css',
),
'maniphest.pkg.js' => array(
'javelin-behavior-maniphest-batch-selector',
'javelin-behavior-maniphest-transaction-controls',
'javelin-behavior-maniphest-transaction-preview',
'javelin-behavior-maniphest-transaction-expand',
'javelin-behavior-maniphest-subpriority-editor',
'javelin-behavior-maniphest-list-editor',
),
),
);
diff --git a/resources/cows/builtin/companion.cow b/resources/cows/builtin/companion.cow
new file mode 100644
index 000000000..e3514cda6
--- /dev/null
+++ b/resources/cows/builtin/companion.cow
@@ -0,0 +1,9 @@
+ $thoughts
+ $thoughts
+ /---\__/---\\
+ | / .... \ ||
+ \ ..--.. //
+ |..($eyes). ||
+ / ..--.. \\
+ | \ .... / ||
+ \---/--\---//
diff --git a/resources/cows/custom/README b/resources/cows/custom/README
new file mode 100644
index 000000000..d0c28b6a5
--- /dev/null
+++ b/resources/cows/custom/README
@@ -0,0 +1,2 @@
+You can add custom ".cow" files here to make them available to the "cowsay"
+interpreter in Remarkup.
diff --git a/resources/figlet/custom/README b/resources/figlet/custom/README
new file mode 100644
index 000000000..c667bb20e
--- /dev/null
+++ b/resources/figlet/custom/README
@@ -0,0 +1,2 @@
+Add Figlet ".flf" font files here to make them available to the "figlet"
+Remarkup interpreter.
diff --git a/src/__phutil_library_map__.php b/src/__phutil_library_map__.php
index c9db433f4..6fba6e6dc 100644
--- a/src/__phutil_library_map__.php
+++ b/src/__phutil_library_map__.php
@@ -1,7863 +1,7863 @@
<?php
/**
* This file is automatically generated. Use 'arc liberate' to rebuild it.
*
* @generated
* @phutil-library-version 2
*/
phutil_register_library_map(array(
'__library_version__' => 2,
'class' => array(
'AlmanacAddress' => 'applications/almanac/util/AlmanacAddress.php',
'AlmanacBinding' => 'applications/almanac/storage/AlmanacBinding.php',
'AlmanacBindingEditController' => 'applications/almanac/controller/AlmanacBindingEditController.php',
'AlmanacBindingEditor' => 'applications/almanac/editor/AlmanacBindingEditor.php',
'AlmanacBindingPHIDType' => 'applications/almanac/phid/AlmanacBindingPHIDType.php',
'AlmanacBindingQuery' => 'applications/almanac/query/AlmanacBindingQuery.php',
'AlmanacBindingTableView' => 'applications/almanac/view/AlmanacBindingTableView.php',
'AlmanacBindingTransaction' => 'applications/almanac/storage/AlmanacBindingTransaction.php',
'AlmanacBindingTransactionQuery' => 'applications/almanac/query/AlmanacBindingTransactionQuery.php',
'AlmanacBindingViewController' => 'applications/almanac/controller/AlmanacBindingViewController.php',
'AlmanacClusterDatabaseServiceType' => 'applications/almanac/servicetype/AlmanacClusterDatabaseServiceType.php',
'AlmanacClusterRepositoryServiceType' => 'applications/almanac/servicetype/AlmanacClusterRepositoryServiceType.php',
'AlmanacClusterServiceType' => 'applications/almanac/servicetype/AlmanacClusterServiceType.php',
'AlmanacConduitAPIMethod' => 'applications/almanac/conduit/AlmanacConduitAPIMethod.php',
'AlmanacConsoleController' => 'applications/almanac/controller/AlmanacConsoleController.php',
'AlmanacController' => 'applications/almanac/controller/AlmanacController.php',
'AlmanacCoreCustomField' => 'applications/almanac/customfield/AlmanacCoreCustomField.php',
'AlmanacCreateClusterServicesCapability' => 'applications/almanac/capability/AlmanacCreateClusterServicesCapability.php',
'AlmanacCreateDevicesCapability' => 'applications/almanac/capability/AlmanacCreateDevicesCapability.php',
'AlmanacCreateNetworksCapability' => 'applications/almanac/capability/AlmanacCreateNetworksCapability.php',
'AlmanacCreateServicesCapability' => 'applications/almanac/capability/AlmanacCreateServicesCapability.php',
'AlmanacCustomField' => 'applications/almanac/customfield/AlmanacCustomField.php',
'AlmanacCustomServiceType' => 'applications/almanac/servicetype/AlmanacCustomServiceType.php',
'AlmanacDAO' => 'applications/almanac/storage/AlmanacDAO.php',
'AlmanacDevice' => 'applications/almanac/storage/AlmanacDevice.php',
'AlmanacDeviceController' => 'applications/almanac/controller/AlmanacDeviceController.php',
'AlmanacDeviceEditController' => 'applications/almanac/controller/AlmanacDeviceEditController.php',
'AlmanacDeviceEditor' => 'applications/almanac/editor/AlmanacDeviceEditor.php',
'AlmanacDeviceListController' => 'applications/almanac/controller/AlmanacDeviceListController.php',
'AlmanacDevicePHIDType' => 'applications/almanac/phid/AlmanacDevicePHIDType.php',
'AlmanacDeviceQuery' => 'applications/almanac/query/AlmanacDeviceQuery.php',
'AlmanacDeviceSearchEngine' => 'applications/almanac/query/AlmanacDeviceSearchEngine.php',
'AlmanacDeviceTransaction' => 'applications/almanac/storage/AlmanacDeviceTransaction.php',
'AlmanacDeviceTransactionQuery' => 'applications/almanac/query/AlmanacDeviceTransactionQuery.php',
'AlmanacDeviceViewController' => 'applications/almanac/controller/AlmanacDeviceViewController.php',
'AlmanacInterface' => 'applications/almanac/storage/AlmanacInterface.php',
'AlmanacInterfaceDatasource' => 'applications/almanac/typeahead/AlmanacInterfaceDatasource.php',
'AlmanacInterfaceEditController' => 'applications/almanac/controller/AlmanacInterfaceEditController.php',
'AlmanacInterfacePHIDType' => 'applications/almanac/phid/AlmanacInterfacePHIDType.php',
'AlmanacInterfaceQuery' => 'applications/almanac/query/AlmanacInterfaceQuery.php',
'AlmanacInterfaceTableView' => 'applications/almanac/view/AlmanacInterfaceTableView.php',
'AlmanacKeys' => 'applications/almanac/util/AlmanacKeys.php',
'AlmanacManagementLockWorkflow' => 'applications/almanac/management/AlmanacManagementLockWorkflow.php',
'AlmanacManagementRegisterWorkflow' => 'applications/almanac/management/AlmanacManagementRegisterWorkflow.php',
'AlmanacManagementTrustKeyWorkflow' => 'applications/almanac/management/AlmanacManagementTrustKeyWorkflow.php',
'AlmanacManagementUnlockWorkflow' => 'applications/almanac/management/AlmanacManagementUnlockWorkflow.php',
'AlmanacManagementUntrustKeyWorkflow' => 'applications/almanac/management/AlmanacManagementUntrustKeyWorkflow.php',
'AlmanacManagementWorkflow' => 'applications/almanac/management/AlmanacManagementWorkflow.php',
'AlmanacNames' => 'applications/almanac/util/AlmanacNames.php',
'AlmanacNamesTestCase' => 'applications/almanac/util/__tests__/AlmanacNamesTestCase.php',
'AlmanacNetwork' => 'applications/almanac/storage/AlmanacNetwork.php',
'AlmanacNetworkController' => 'applications/almanac/controller/AlmanacNetworkController.php',
'AlmanacNetworkEditController' => 'applications/almanac/controller/AlmanacNetworkEditController.php',
'AlmanacNetworkEditor' => 'applications/almanac/editor/AlmanacNetworkEditor.php',
'AlmanacNetworkListController' => 'applications/almanac/controller/AlmanacNetworkListController.php',
'AlmanacNetworkPHIDType' => 'applications/almanac/phid/AlmanacNetworkPHIDType.php',
'AlmanacNetworkQuery' => 'applications/almanac/query/AlmanacNetworkQuery.php',
'AlmanacNetworkSearchEngine' => 'applications/almanac/query/AlmanacNetworkSearchEngine.php',
'AlmanacNetworkTransaction' => 'applications/almanac/storage/AlmanacNetworkTransaction.php',
'AlmanacNetworkTransactionQuery' => 'applications/almanac/query/AlmanacNetworkTransactionQuery.php',
'AlmanacNetworkViewController' => 'applications/almanac/controller/AlmanacNetworkViewController.php',
'AlmanacProperty' => 'applications/almanac/storage/AlmanacProperty.php',
'AlmanacPropertyController' => 'applications/almanac/controller/AlmanacPropertyController.php',
'AlmanacPropertyDeleteController' => 'applications/almanac/controller/AlmanacPropertyDeleteController.php',
'AlmanacPropertyEditController' => 'applications/almanac/controller/AlmanacPropertyEditController.php',
'AlmanacPropertyInterface' => 'applications/almanac/property/AlmanacPropertyInterface.php',
'AlmanacPropertyQuery' => 'applications/almanac/query/AlmanacPropertyQuery.php',
'AlmanacQuery' => 'applications/almanac/query/AlmanacQuery.php',
'AlmanacQueryDevicesConduitAPIMethod' => 'applications/almanac/conduit/AlmanacQueryDevicesConduitAPIMethod.php',
'AlmanacQueryServicesConduitAPIMethod' => 'applications/almanac/conduit/AlmanacQueryServicesConduitAPIMethod.php',
'AlmanacSchemaSpec' => 'applications/almanac/storage/AlmanacSchemaSpec.php',
'AlmanacService' => 'applications/almanac/storage/AlmanacService.php',
'AlmanacServiceController' => 'applications/almanac/controller/AlmanacServiceController.php',
'AlmanacServiceDatasource' => 'applications/almanac/typeahead/AlmanacServiceDatasource.php',
'AlmanacServiceEditController' => 'applications/almanac/controller/AlmanacServiceEditController.php',
'AlmanacServiceEditor' => 'applications/almanac/editor/AlmanacServiceEditor.php',
'AlmanacServiceListController' => 'applications/almanac/controller/AlmanacServiceListController.php',
'AlmanacServicePHIDType' => 'applications/almanac/phid/AlmanacServicePHIDType.php',
'AlmanacServiceQuery' => 'applications/almanac/query/AlmanacServiceQuery.php',
'AlmanacServiceSearchEngine' => 'applications/almanac/query/AlmanacServiceSearchEngine.php',
'AlmanacServiceTransaction' => 'applications/almanac/storage/AlmanacServiceTransaction.php',
'AlmanacServiceTransactionQuery' => 'applications/almanac/query/AlmanacServiceTransactionQuery.php',
'AlmanacServiceType' => 'applications/almanac/servicetype/AlmanacServiceType.php',
'AlmanacServiceTypeTestCase' => 'applications/almanac/servicetype/__tests__/AlmanacServiceTypeTestCase.php',
'AlmanacServiceViewController' => 'applications/almanac/controller/AlmanacServiceViewController.php',
'AphlictDropdownDataQuery' => 'applications/aphlict/query/AphlictDropdownDataQuery.php',
'Aphront304Response' => 'aphront/response/Aphront304Response.php',
'Aphront400Response' => 'aphront/response/Aphront400Response.php',
'Aphront403Response' => 'aphront/response/Aphront403Response.php',
'Aphront404Response' => 'aphront/response/Aphront404Response.php',
'AphrontAjaxResponse' => 'aphront/response/AphrontAjaxResponse.php',
'AphrontApplicationConfiguration' => 'aphront/configuration/AphrontApplicationConfiguration.php',
'AphrontBarView' => 'view/widget/bars/AphrontBarView.php',
'AphrontCSRFException' => 'aphront/exception/AphrontCSRFException.php',
'AphrontCalendarEventView' => 'applications/calendar/view/AphrontCalendarEventView.php',
'AphrontController' => 'aphront/AphrontController.php',
'AphrontCursorPagerView' => 'view/control/AphrontCursorPagerView.php',
'AphrontDefaultApplicationConfiguration' => 'aphront/configuration/AphrontDefaultApplicationConfiguration.php',
'AphrontDialogResponse' => 'aphront/response/AphrontDialogResponse.php',
'AphrontDialogView' => 'view/AphrontDialogView.php',
'AphrontException' => 'aphront/exception/AphrontException.php',
'AphrontFileResponse' => 'aphront/response/AphrontFileResponse.php',
'AphrontFormCheckboxControl' => 'view/form/control/AphrontFormCheckboxControl.php',
'AphrontFormChooseButtonControl' => 'view/form/control/AphrontFormChooseButtonControl.php',
'AphrontFormControl' => 'view/form/control/AphrontFormControl.php',
'AphrontFormDateControl' => 'view/form/control/AphrontFormDateControl.php',
'AphrontFormDateControlValue' => 'view/form/control/AphrontFormDateControlValue.php',
'AphrontFormDividerControl' => 'view/form/control/AphrontFormDividerControl.php',
'AphrontFormFileControl' => 'view/form/control/AphrontFormFileControl.php',
'AphrontFormMarkupControl' => 'view/form/control/AphrontFormMarkupControl.php',
'AphrontFormPasswordControl' => 'view/form/control/AphrontFormPasswordControl.php',
'AphrontFormPolicyControl' => 'view/form/control/AphrontFormPolicyControl.php',
'AphrontFormRadioButtonControl' => 'view/form/control/AphrontFormRadioButtonControl.php',
'AphrontFormRecaptchaControl' => 'view/form/control/AphrontFormRecaptchaControl.php',
'AphrontFormSelectControl' => 'view/form/control/AphrontFormSelectControl.php',
'AphrontFormStaticControl' => 'view/form/control/AphrontFormStaticControl.php',
'AphrontFormSubmitControl' => 'view/form/control/AphrontFormSubmitControl.php',
'AphrontFormTextAreaControl' => 'view/form/control/AphrontFormTextAreaControl.php',
'AphrontFormTextControl' => 'view/form/control/AphrontFormTextControl.php',
'AphrontFormTextWithSubmitControl' => 'view/form/control/AphrontFormTextWithSubmitControl.php',
'AphrontFormTokenizerControl' => 'view/form/control/AphrontFormTokenizerControl.php',
'AphrontFormTypeaheadControl' => 'view/form/control/AphrontFormTypeaheadControl.php',
'AphrontFormView' => 'view/form/AphrontFormView.php',
'AphrontGlyphBarView' => 'view/widget/bars/AphrontGlyphBarView.php',
'AphrontHTMLResponse' => 'aphront/response/AphrontHTMLResponse.php',
'AphrontHTTPProxyResponse' => 'aphront/response/AphrontHTTPProxyResponse.php',
'AphrontHTTPSink' => 'aphront/sink/AphrontHTTPSink.php',
'AphrontHTTPSinkTestCase' => 'aphront/sink/__tests__/AphrontHTTPSinkTestCase.php',
'AphrontIsolatedDatabaseConnectionTestCase' => 'infrastructure/storage/__tests__/AphrontIsolatedDatabaseConnectionTestCase.php',
'AphrontIsolatedHTTPSink' => 'aphront/sink/AphrontIsolatedHTTPSink.php',
'AphrontJSONResponse' => 'aphront/response/AphrontJSONResponse.php',
'AphrontJavelinView' => 'view/AphrontJavelinView.php',
'AphrontKeyboardShortcutsAvailableView' => 'view/widget/AphrontKeyboardShortcutsAvailableView.php',
'AphrontListFilterView' => 'view/layout/AphrontListFilterView.php',
'AphrontMalformedRequestException' => 'aphront/exception/AphrontMalformedRequestException.php',
'AphrontMoreView' => 'view/layout/AphrontMoreView.php',
'AphrontMultiColumnView' => 'view/layout/AphrontMultiColumnView.php',
'AphrontMySQLDatabaseConnectionTestCase' => 'infrastructure/storage/__tests__/AphrontMySQLDatabaseConnectionTestCase.php',
'AphrontNullView' => 'view/AphrontNullView.php',
'AphrontPHPHTTPSink' => 'aphront/sink/AphrontPHPHTTPSink.php',
'AphrontPageView' => 'view/page/AphrontPageView.php',
'AphrontPlainTextResponse' => 'aphront/response/AphrontPlainTextResponse.php',
'AphrontProgressBarView' => 'view/widget/bars/AphrontProgressBarView.php',
'AphrontProxyResponse' => 'aphront/response/AphrontProxyResponse.php',
'AphrontRedirectResponse' => 'aphront/response/AphrontRedirectResponse.php',
'AphrontRedirectResponseTestCase' => 'aphront/response/__tests__/AphrontRedirectResponseTestCase.php',
'AphrontReloadResponse' => 'aphront/response/AphrontReloadResponse.php',
'AphrontRequest' => 'aphront/AphrontRequest.php',
'AphrontRequestExceptionHandler' => 'aphront/handler/AphrontRequestExceptionHandler.php',
'AphrontRequestTestCase' => 'aphront/__tests__/AphrontRequestTestCase.php',
'AphrontResponse' => 'aphront/response/AphrontResponse.php',
'AphrontResponseProducerInterface' => 'aphront/interface/AphrontResponseProducerInterface.php',
'AphrontRoutingMap' => 'aphront/site/AphrontRoutingMap.php',
'AphrontRoutingResult' => 'aphront/site/AphrontRoutingResult.php',
'AphrontSideNavFilterView' => 'view/layout/AphrontSideNavFilterView.php',
'AphrontSite' => 'aphront/site/AphrontSite.php',
'AphrontStackTraceView' => 'view/widget/AphrontStackTraceView.php',
'AphrontStandaloneHTMLResponse' => 'aphront/response/AphrontStandaloneHTMLResponse.php',
'AphrontTableView' => 'view/control/AphrontTableView.php',
'AphrontTagView' => 'view/AphrontTagView.php',
'AphrontTokenizerTemplateView' => 'view/control/AphrontTokenizerTemplateView.php',
'AphrontTypeaheadTemplateView' => 'view/control/AphrontTypeaheadTemplateView.php',
'AphrontUnhandledExceptionResponse' => 'aphront/response/AphrontUnhandledExceptionResponse.php',
'AphrontView' => 'view/AphrontView.php',
'AphrontWebpageResponse' => 'aphront/response/AphrontWebpageResponse.php',
'ArcanistConduitAPIMethod' => 'applications/arcanist/conduit/ArcanistConduitAPIMethod.php',
'AuditConduitAPIMethod' => 'applications/audit/conduit/AuditConduitAPIMethod.php',
'AuditQueryConduitAPIMethod' => 'applications/audit/conduit/AuditQueryConduitAPIMethod.php',
'AuthManageProvidersCapability' => 'applications/auth/capability/AuthManageProvidersCapability.php',
'CalendarTimeUtil' => 'applications/calendar/util/CalendarTimeUtil.php',
'CalendarTimeUtilTestCase' => 'applications/calendar/__tests__/CalendarTimeUtilTestCase.php',
'CelerityAPI' => 'applications/celerity/CelerityAPI.php',
'CelerityDefaultPostprocessor' => 'applications/celerity/postprocessor/CelerityDefaultPostprocessor.php',
'CelerityHighContrastPostprocessor' => 'applications/celerity/postprocessor/CelerityHighContrastPostprocessor.php',
'CelerityLargeFontPostprocessor' => 'applications/celerity/postprocessor/CelerityLargeFontPostprocessor.php',
'CelerityManagementMapWorkflow' => 'applications/celerity/management/CelerityManagementMapWorkflow.php',
'CelerityManagementWorkflow' => 'applications/celerity/management/CelerityManagementWorkflow.php',
'CelerityPhabricatorResourceController' => 'applications/celerity/controller/CelerityPhabricatorResourceController.php',
'CelerityPhabricatorResources' => 'applications/celerity/resources/CelerityPhabricatorResources.php',
'CelerityPhysicalResources' => 'applications/celerity/resources/CelerityPhysicalResources.php',
'CelerityPhysicalResourcesTestCase' => 'applications/celerity/resources/__tests__/CelerityPhysicalResourcesTestCase.php',
'CelerityPostprocessor' => 'applications/celerity/postprocessor/CelerityPostprocessor.php',
'CelerityPostprocessorTestCase' => 'applications/celerity/__tests__/CelerityPostprocessorTestCase.php',
'CelerityResourceController' => 'applications/celerity/controller/CelerityResourceController.php',
'CelerityResourceGraph' => 'applications/celerity/CelerityResourceGraph.php',
'CelerityResourceMap' => 'applications/celerity/CelerityResourceMap.php',
'CelerityResourceMapGenerator' => 'applications/celerity/CelerityResourceMapGenerator.php',
'CelerityResourceTransformer' => 'applications/celerity/CelerityResourceTransformer.php',
'CelerityResourceTransformerTestCase' => 'applications/celerity/__tests__/CelerityResourceTransformerTestCase.php',
'CelerityResources' => 'applications/celerity/resources/CelerityResources.php',
'CelerityResourcesOnDisk' => 'applications/celerity/resources/CelerityResourcesOnDisk.php',
'CeleritySpriteGenerator' => 'applications/celerity/CeleritySpriteGenerator.php',
'CelerityStaticResourceResponse' => 'applications/celerity/CelerityStaticResourceResponse.php',
'ChatLogConduitAPIMethod' => 'applications/chatlog/conduit/ChatLogConduitAPIMethod.php',
'ChatLogQueryConduitAPIMethod' => 'applications/chatlog/conduit/ChatLogQueryConduitAPIMethod.php',
'ChatLogRecordConduitAPIMethod' => 'applications/chatlog/conduit/ChatLogRecordConduitAPIMethod.php',
'ConduitAPIMethod' => 'applications/conduit/method/ConduitAPIMethod.php',
'ConduitAPIMethodTestCase' => 'applications/conduit/method/__tests__/ConduitAPIMethodTestCase.php',
'ConduitAPIRequest' => 'applications/conduit/protocol/ConduitAPIRequest.php',
'ConduitAPIResponse' => 'applications/conduit/protocol/ConduitAPIResponse.php',
'ConduitApplicationNotInstalledException' => 'applications/conduit/protocol/exception/ConduitApplicationNotInstalledException.php',
'ConduitCall' => 'applications/conduit/call/ConduitCall.php',
'ConduitCallTestCase' => 'applications/conduit/call/__tests__/ConduitCallTestCase.php',
'ConduitConnectConduitAPIMethod' => 'applications/conduit/method/ConduitConnectConduitAPIMethod.php',
'ConduitConnectionGarbageCollector' => 'applications/conduit/garbagecollector/ConduitConnectionGarbageCollector.php',
'ConduitDeprecatedCallSetupCheck' => 'applications/conduit/check/ConduitDeprecatedCallSetupCheck.php',
'ConduitException' => 'applications/conduit/protocol/exception/ConduitException.php',
'ConduitGetCapabilitiesConduitAPIMethod' => 'applications/conduit/method/ConduitGetCapabilitiesConduitAPIMethod.php',
'ConduitGetCertificateConduitAPIMethod' => 'applications/conduit/method/ConduitGetCertificateConduitAPIMethod.php',
'ConduitLogGarbageCollector' => 'applications/conduit/garbagecollector/ConduitLogGarbageCollector.php',
'ConduitMethodDoesNotExistException' => 'applications/conduit/protocol/exception/ConduitMethodDoesNotExistException.php',
'ConduitMethodNotFoundException' => 'applications/conduit/protocol/exception/ConduitMethodNotFoundException.php',
'ConduitPingConduitAPIMethod' => 'applications/conduit/method/ConduitPingConduitAPIMethod.php',
'ConduitQueryConduitAPIMethod' => 'applications/conduit/method/ConduitQueryConduitAPIMethod.php',
'ConduitSSHWorkflow' => 'applications/conduit/ssh/ConduitSSHWorkflow.php',
'ConduitTokenGarbageCollector' => 'applications/conduit/garbagecollector/ConduitTokenGarbageCollector.php',
'ConpherenceColumnViewController' => 'applications/conpherence/controller/ConpherenceColumnViewController.php',
'ConpherenceConduitAPIMethod' => 'applications/conpherence/conduit/ConpherenceConduitAPIMethod.php',
'ConpherenceConfigOptions' => 'applications/conpherence/config/ConpherenceConfigOptions.php',
'ConpherenceConstants' => 'applications/conpherence/constants/ConpherenceConstants.php',
'ConpherenceController' => 'applications/conpherence/controller/ConpherenceController.php',
'ConpherenceCreateThreadConduitAPIMethod' => 'applications/conpherence/conduit/ConpherenceCreateThreadConduitAPIMethod.php',
'ConpherenceCreateThreadMailReceiver' => 'applications/conpherence/mail/ConpherenceCreateThreadMailReceiver.php',
'ConpherenceDAO' => 'applications/conpherence/storage/ConpherenceDAO.php',
'ConpherenceDurableColumnView' => 'applications/conpherence/view/ConpherenceDurableColumnView.php',
'ConpherenceEditor' => 'applications/conpherence/editor/ConpherenceEditor.php',
'ConpherenceFormDragAndDropUploadControl' => 'applications/conpherence/view/ConpherenceFormDragAndDropUploadControl.php',
'ConpherenceFulltextQuery' => 'applications/conpherence/query/ConpherenceFulltextQuery.php',
'ConpherenceHovercardEventListener' => 'applications/conpherence/events/ConpherenceHovercardEventListener.php',
'ConpherenceImageData' => 'applications/conpherence/constants/ConpherenceImageData.php',
'ConpherenceIndex' => 'applications/conpherence/storage/ConpherenceIndex.php',
'ConpherenceLayoutView' => 'applications/conpherence/view/ConpherenceLayoutView.php',
'ConpherenceListController' => 'applications/conpherence/controller/ConpherenceListController.php',
'ConpherenceMenuItemView' => 'applications/conpherence/view/ConpherenceMenuItemView.php',
'ConpherenceNewRoomController' => 'applications/conpherence/controller/ConpherenceNewRoomController.php',
'ConpherenceNotificationPanelController' => 'applications/conpherence/controller/ConpherenceNotificationPanelController.php',
'ConpherenceParticipant' => 'applications/conpherence/storage/ConpherenceParticipant.php',
'ConpherenceParticipantCountQuery' => 'applications/conpherence/query/ConpherenceParticipantCountQuery.php',
'ConpherenceParticipantQuery' => 'applications/conpherence/query/ConpherenceParticipantQuery.php',
'ConpherenceParticipationStatus' => 'applications/conpherence/constants/ConpherenceParticipationStatus.php',
'ConpherencePeopleWidgetView' => 'applications/conpherence/view/ConpherencePeopleWidgetView.php',
'ConpherencePicCropControl' => 'applications/conpherence/view/ConpherencePicCropControl.php',
'ConpherenceQueryThreadConduitAPIMethod' => 'applications/conpherence/conduit/ConpherenceQueryThreadConduitAPIMethod.php',
'ConpherenceQueryTransactionConduitAPIMethod' => 'applications/conpherence/conduit/ConpherenceQueryTransactionConduitAPIMethod.php',
'ConpherenceReplyHandler' => 'applications/conpherence/mail/ConpherenceReplyHandler.php',
'ConpherenceRoomListController' => 'applications/conpherence/controller/ConpherenceRoomListController.php',
'ConpherenceRoomTestCase' => 'applications/conpherence/__tests__/ConpherenceRoomTestCase.php',
'ConpherenceSchemaSpec' => 'applications/conpherence/storage/ConpherenceSchemaSpec.php',
'ConpherenceSettings' => 'applications/conpherence/constants/ConpherenceSettings.php',
'ConpherenceTestCase' => 'applications/conpherence/__tests__/ConpherenceTestCase.php',
'ConpherenceThread' => 'applications/conpherence/storage/ConpherenceThread.php',
'ConpherenceThreadIndexer' => 'applications/conpherence/search/ConpherenceThreadIndexer.php',
'ConpherenceThreadListView' => 'applications/conpherence/view/ConpherenceThreadListView.php',
'ConpherenceThreadMailReceiver' => 'applications/conpherence/mail/ConpherenceThreadMailReceiver.php',
'ConpherenceThreadMembersPolicyRule' => 'applications/conpherence/policyrule/ConpherenceThreadMembersPolicyRule.php',
'ConpherenceThreadQuery' => 'applications/conpherence/query/ConpherenceThreadQuery.php',
'ConpherenceThreadRemarkupRule' => 'applications/conpherence/remarkup/ConpherenceThreadRemarkupRule.php',
'ConpherenceThreadSearchEngine' => 'applications/conpherence/query/ConpherenceThreadSearchEngine.php',
'ConpherenceTransaction' => 'applications/conpherence/storage/ConpherenceTransaction.php',
'ConpherenceTransactionComment' => 'applications/conpherence/storage/ConpherenceTransactionComment.php',
'ConpherenceTransactionQuery' => 'applications/conpherence/query/ConpherenceTransactionQuery.php',
'ConpherenceTransactionRenderer' => 'applications/conpherence/ConpherenceTransactionRenderer.php',
'ConpherenceTransactionView' => 'applications/conpherence/view/ConpherenceTransactionView.php',
'ConpherenceUpdateActions' => 'applications/conpherence/constants/ConpherenceUpdateActions.php',
'ConpherenceUpdateController' => 'applications/conpherence/controller/ConpherenceUpdateController.php',
'ConpherenceUpdateThreadConduitAPIMethod' => 'applications/conpherence/conduit/ConpherenceUpdateThreadConduitAPIMethod.php',
'ConpherenceViewController' => 'applications/conpherence/controller/ConpherenceViewController.php',
'ConpherenceWidgetConfigConstants' => 'applications/conpherence/constants/ConpherenceWidgetConfigConstants.php',
'ConpherenceWidgetController' => 'applications/conpherence/controller/ConpherenceWidgetController.php',
'ConpherenceWidgetView' => 'applications/conpherence/view/ConpherenceWidgetView.php',
'DarkConsoleController' => 'applications/console/controller/DarkConsoleController.php',
'DarkConsoleCore' => 'applications/console/core/DarkConsoleCore.php',
'DarkConsoleDataController' => 'applications/console/controller/DarkConsoleDataController.php',
'DarkConsoleErrorLogPlugin' => 'applications/console/plugin/DarkConsoleErrorLogPlugin.php',
'DarkConsoleErrorLogPluginAPI' => 'applications/console/plugin/errorlog/DarkConsoleErrorLogPluginAPI.php',
'DarkConsoleEventPlugin' => 'applications/console/plugin/DarkConsoleEventPlugin.php',
'DarkConsoleEventPluginAPI' => 'applications/console/plugin/event/DarkConsoleEventPluginAPI.php',
'DarkConsolePlugin' => 'applications/console/plugin/DarkConsolePlugin.php',
'DarkConsoleRequestPlugin' => 'applications/console/plugin/DarkConsoleRequestPlugin.php',
'DarkConsoleServicesPlugin' => 'applications/console/plugin/DarkConsoleServicesPlugin.php',
'DarkConsoleStartupPlugin' => 'applications/console/plugin/DarkConsoleStartupPlugin.php',
'DarkConsoleXHProfPlugin' => 'applications/console/plugin/DarkConsoleXHProfPlugin.php',
'DarkConsoleXHProfPluginAPI' => 'applications/console/plugin/xhprof/DarkConsoleXHProfPluginAPI.php',
'DatabaseConfigurationProvider' => 'infrastructure/storage/configuration/DatabaseConfigurationProvider.php',
'DefaultDatabaseConfigurationProvider' => 'infrastructure/storage/configuration/DefaultDatabaseConfigurationProvider.php',
'DifferentialAction' => 'applications/differential/constants/DifferentialAction.php',
'DifferentialActionEmailCommand' => 'applications/differential/command/DifferentialActionEmailCommand.php',
'DifferentialActionMenuEventListener' => 'applications/differential/event/DifferentialActionMenuEventListener.php',
'DifferentialAddCommentView' => 'applications/differential/view/DifferentialAddCommentView.php',
'DifferentialAdjustmentMapTestCase' => 'applications/differential/storage/__tests__/DifferentialAdjustmentMapTestCase.php',
'DifferentialAffectedPath' => 'applications/differential/storage/DifferentialAffectedPath.php',
'DifferentialApplyPatchField' => 'applications/differential/customfield/DifferentialApplyPatchField.php',
'DifferentialAsanaRepresentationField' => 'applications/differential/customfield/DifferentialAsanaRepresentationField.php',
'DifferentialAuditorsField' => 'applications/differential/customfield/DifferentialAuditorsField.php',
'DifferentialAuthorField' => 'applications/differential/customfield/DifferentialAuthorField.php',
'DifferentialBlameRevisionField' => 'applications/differential/customfield/DifferentialBlameRevisionField.php',
'DifferentialBlockHeraldAction' => 'applications/differential/herald/DifferentialBlockHeraldAction.php',
'DifferentialBranchField' => 'applications/differential/customfield/DifferentialBranchField.php',
'DifferentialChangeHeraldFieldGroup' => 'applications/differential/herald/DifferentialChangeHeraldFieldGroup.php',
'DifferentialChangeType' => 'applications/differential/constants/DifferentialChangeType.php',
'DifferentialChangesSinceLastUpdateField' => 'applications/differential/customfield/DifferentialChangesSinceLastUpdateField.php',
'DifferentialChangeset' => 'applications/differential/storage/DifferentialChangeset.php',
'DifferentialChangesetDetailView' => 'applications/differential/view/DifferentialChangesetDetailView.php',
'DifferentialChangesetFileTreeSideNavBuilder' => 'applications/differential/view/DifferentialChangesetFileTreeSideNavBuilder.php',
'DifferentialChangesetHTMLRenderer' => 'applications/differential/render/DifferentialChangesetHTMLRenderer.php',
'DifferentialChangesetListView' => 'applications/differential/view/DifferentialChangesetListView.php',
'DifferentialChangesetOneUpRenderer' => 'applications/differential/render/DifferentialChangesetOneUpRenderer.php',
'DifferentialChangesetOneUpTestRenderer' => 'applications/differential/render/DifferentialChangesetOneUpTestRenderer.php',
'DifferentialChangesetParser' => 'applications/differential/parser/DifferentialChangesetParser.php',
'DifferentialChangesetParserTestCase' => 'applications/differential/parser/__tests__/DifferentialChangesetParserTestCase.php',
'DifferentialChangesetQuery' => 'applications/differential/query/DifferentialChangesetQuery.php',
'DifferentialChangesetRenderer' => 'applications/differential/render/DifferentialChangesetRenderer.php',
'DifferentialChangesetTestRenderer' => 'applications/differential/render/DifferentialChangesetTestRenderer.php',
'DifferentialChangesetTwoUpRenderer' => 'applications/differential/render/DifferentialChangesetTwoUpRenderer.php',
'DifferentialChangesetTwoUpTestRenderer' => 'applications/differential/render/DifferentialChangesetTwoUpTestRenderer.php',
'DifferentialChangesetViewController' => 'applications/differential/controller/DifferentialChangesetViewController.php',
'DifferentialCloseConduitAPIMethod' => 'applications/differential/conduit/DifferentialCloseConduitAPIMethod.php',
'DifferentialCommentPreviewController' => 'applications/differential/controller/DifferentialCommentPreviewController.php',
'DifferentialCommentSaveController' => 'applications/differential/controller/DifferentialCommentSaveController.php',
'DifferentialCommitMessageParser' => 'applications/differential/parser/DifferentialCommitMessageParser.php',
'DifferentialCommitMessageParserTestCase' => 'applications/differential/parser/__tests__/DifferentialCommitMessageParserTestCase.php',
'DifferentialCommitsField' => 'applications/differential/customfield/DifferentialCommitsField.php',
'DifferentialConduitAPIMethod' => 'applications/differential/conduit/DifferentialConduitAPIMethod.php',
'DifferentialConflictsField' => 'applications/differential/customfield/DifferentialConflictsField.php',
'DifferentialController' => 'applications/differential/controller/DifferentialController.php',
'DifferentialCoreCustomField' => 'applications/differential/customfield/DifferentialCoreCustomField.php',
'DifferentialCreateCommentConduitAPIMethod' => 'applications/differential/conduit/DifferentialCreateCommentConduitAPIMethod.php',
'DifferentialCreateDiffConduitAPIMethod' => 'applications/differential/conduit/DifferentialCreateDiffConduitAPIMethod.php',
'DifferentialCreateInlineConduitAPIMethod' => 'applications/differential/conduit/DifferentialCreateInlineConduitAPIMethod.php',
'DifferentialCreateMailReceiver' => 'applications/differential/mail/DifferentialCreateMailReceiver.php',
'DifferentialCreateRawDiffConduitAPIMethod' => 'applications/differential/conduit/DifferentialCreateRawDiffConduitAPIMethod.php',
'DifferentialCreateRevisionConduitAPIMethod' => 'applications/differential/conduit/DifferentialCreateRevisionConduitAPIMethod.php',
'DifferentialCustomField' => 'applications/differential/customfield/DifferentialCustomField.php',
'DifferentialCustomFieldDependsOnParser' => 'applications/differential/parser/DifferentialCustomFieldDependsOnParser.php',
'DifferentialCustomFieldDependsOnParserTestCase' => 'applications/differential/parser/__tests__/DifferentialCustomFieldDependsOnParserTestCase.php',
'DifferentialCustomFieldNumericIndex' => 'applications/differential/storage/DifferentialCustomFieldNumericIndex.php',
'DifferentialCustomFieldRevertsParser' => 'applications/differential/parser/DifferentialCustomFieldRevertsParser.php',
'DifferentialCustomFieldRevertsParserTestCase' => 'applications/differential/parser/__tests__/DifferentialCustomFieldRevertsParserTestCase.php',
'DifferentialCustomFieldStorage' => 'applications/differential/storage/DifferentialCustomFieldStorage.php',
'DifferentialCustomFieldStringIndex' => 'applications/differential/storage/DifferentialCustomFieldStringIndex.php',
'DifferentialDAO' => 'applications/differential/storage/DifferentialDAO.php',
'DifferentialDefaultViewCapability' => 'applications/differential/capability/DifferentialDefaultViewCapability.php',
'DifferentialDependenciesField' => 'applications/differential/customfield/DifferentialDependenciesField.php',
'DifferentialDependsOnField' => 'applications/differential/customfield/DifferentialDependsOnField.php',
'DifferentialDiff' => 'applications/differential/storage/DifferentialDiff.php',
'DifferentialDiffAffectedFilesHeraldField' => 'applications/differential/herald/DifferentialDiffAffectedFilesHeraldField.php',
'DifferentialDiffAuthorHeraldField' => 'applications/differential/herald/DifferentialDiffAuthorHeraldField.php',
'DifferentialDiffAuthorProjectsHeraldField' => 'applications/differential/herald/DifferentialDiffAuthorProjectsHeraldField.php',
'DifferentialDiffContentAddedHeraldField' => 'applications/differential/herald/DifferentialDiffContentAddedHeraldField.php',
'DifferentialDiffContentHeraldField' => 'applications/differential/herald/DifferentialDiffContentHeraldField.php',
'DifferentialDiffContentRemovedHeraldField' => 'applications/differential/herald/DifferentialDiffContentRemovedHeraldField.php',
'DifferentialDiffCreateController' => 'applications/differential/controller/DifferentialDiffCreateController.php',
'DifferentialDiffEditor' => 'applications/differential/editor/DifferentialDiffEditor.php',
'DifferentialDiffHeraldField' => 'applications/differential/herald/DifferentialDiffHeraldField.php',
'DifferentialDiffHeraldFieldGroup' => 'applications/differential/herald/DifferentialDiffHeraldFieldGroup.php',
'DifferentialDiffInlineCommentQuery' => 'applications/differential/query/DifferentialDiffInlineCommentQuery.php',
'DifferentialDiffPHIDType' => 'applications/differential/phid/DifferentialDiffPHIDType.php',
'DifferentialDiffProperty' => 'applications/differential/storage/DifferentialDiffProperty.php',
'DifferentialDiffQuery' => 'applications/differential/query/DifferentialDiffQuery.php',
'DifferentialDiffRepositoryHeraldField' => 'applications/differential/herald/DifferentialDiffRepositoryHeraldField.php',
'DifferentialDiffRepositoryProjectsHeraldField' => 'applications/differential/herald/DifferentialDiffRepositoryProjectsHeraldField.php',
'DifferentialDiffTestCase' => 'applications/differential/storage/__tests__/DifferentialDiffTestCase.php',
'DifferentialDiffTransaction' => 'applications/differential/storage/DifferentialDiffTransaction.php',
'DifferentialDiffTransactionQuery' => 'applications/differential/query/DifferentialDiffTransactionQuery.php',
'DifferentialDiffViewController' => 'applications/differential/controller/DifferentialDiffViewController.php',
'DifferentialDoorkeeperRevisionFeedStoryPublisher' => 'applications/differential/doorkeeper/DifferentialDoorkeeperRevisionFeedStoryPublisher.php',
'DifferentialDraft' => 'applications/differential/storage/DifferentialDraft.php',
'DifferentialEditPolicyField' => 'applications/differential/customfield/DifferentialEditPolicyField.php',
'DifferentialFieldParseException' => 'applications/differential/exception/DifferentialFieldParseException.php',
'DifferentialFieldValidationException' => 'applications/differential/exception/DifferentialFieldValidationException.php',
'DifferentialFindConduitAPIMethod' => 'applications/differential/conduit/DifferentialFindConduitAPIMethod.php',
'DifferentialGetAllDiffsConduitAPIMethod' => 'applications/differential/conduit/DifferentialGetAllDiffsConduitAPIMethod.php',
'DifferentialGetCommitMessageConduitAPIMethod' => 'applications/differential/conduit/DifferentialGetCommitMessageConduitAPIMethod.php',
'DifferentialGetCommitPathsConduitAPIMethod' => 'applications/differential/conduit/DifferentialGetCommitPathsConduitAPIMethod.php',
'DifferentialGetDiffConduitAPIMethod' => 'applications/differential/conduit/DifferentialGetDiffConduitAPIMethod.php',
'DifferentialGetRawDiffConduitAPIMethod' => 'applications/differential/conduit/DifferentialGetRawDiffConduitAPIMethod.php',
'DifferentialGetRevisionCommentsConduitAPIMethod' => 'applications/differential/conduit/DifferentialGetRevisionCommentsConduitAPIMethod.php',
'DifferentialGetRevisionConduitAPIMethod' => 'applications/differential/conduit/DifferentialGetRevisionConduitAPIMethod.php',
'DifferentialGetWorkingCopy' => 'applications/differential/DifferentialGetWorkingCopy.php',
'DifferentialGitHubLandingStrategy' => 'applications/differential/landing/DifferentialGitHubLandingStrategy.php',
'DifferentialGitSVNIDField' => 'applications/differential/customfield/DifferentialGitSVNIDField.php',
'DifferentialHarbormasterField' => 'applications/differential/customfield/DifferentialHarbormasterField.php',
'DifferentialHiddenComment' => 'applications/differential/storage/DifferentialHiddenComment.php',
'DifferentialHostField' => 'applications/differential/customfield/DifferentialHostField.php',
'DifferentialHostedGitLandingStrategy' => 'applications/differential/landing/DifferentialHostedGitLandingStrategy.php',
'DifferentialHostedMercurialLandingStrategy' => 'applications/differential/landing/DifferentialHostedMercurialLandingStrategy.php',
'DifferentialHovercardEventListener' => 'applications/differential/event/DifferentialHovercardEventListener.php',
'DifferentialHunk' => 'applications/differential/storage/DifferentialHunk.php',
'DifferentialHunkParser' => 'applications/differential/parser/DifferentialHunkParser.php',
'DifferentialHunkParserTestCase' => 'applications/differential/parser/__tests__/DifferentialHunkParserTestCase.php',
'DifferentialHunkQuery' => 'applications/differential/query/DifferentialHunkQuery.php',
'DifferentialHunkTestCase' => 'applications/differential/storage/__tests__/DifferentialHunkTestCase.php',
'DifferentialInlineComment' => 'applications/differential/storage/DifferentialInlineComment.php',
'DifferentialInlineCommentEditController' => 'applications/differential/controller/DifferentialInlineCommentEditController.php',
'DifferentialInlineCommentPreviewController' => 'applications/differential/controller/DifferentialInlineCommentPreviewController.php',
'DifferentialInlineCommentQuery' => 'applications/differential/query/DifferentialInlineCommentQuery.php',
'DifferentialJIRAIssuesField' => 'applications/differential/customfield/DifferentialJIRAIssuesField.php',
'DifferentialLandingActionMenuEventListener' => 'applications/differential/landing/DifferentialLandingActionMenuEventListener.php',
'DifferentialLandingStrategy' => 'applications/differential/landing/DifferentialLandingStrategy.php',
'DifferentialLegacyHunk' => 'applications/differential/storage/DifferentialLegacyHunk.php',
'DifferentialLineAdjustmentMap' => 'applications/differential/parser/DifferentialLineAdjustmentMap.php',
'DifferentialLintField' => 'applications/differential/customfield/DifferentialLintField.php',
'DifferentialLintStatus' => 'applications/differential/constants/DifferentialLintStatus.php',
'DifferentialLocalCommitsView' => 'applications/differential/view/DifferentialLocalCommitsView.php',
'DifferentialManiphestTasksField' => 'applications/differential/customfield/DifferentialManiphestTasksField.php',
'DifferentialModernHunk' => 'applications/differential/storage/DifferentialModernHunk.php',
'DifferentialParseCacheGarbageCollector' => 'applications/differential/garbagecollector/DifferentialParseCacheGarbageCollector.php',
'DifferentialParseCommitMessageConduitAPIMethod' => 'applications/differential/conduit/DifferentialParseCommitMessageConduitAPIMethod.php',
'DifferentialParseRenderTestCase' => 'applications/differential/__tests__/DifferentialParseRenderTestCase.php',
'DifferentialPathField' => 'applications/differential/customfield/DifferentialPathField.php',
'DifferentialPrimaryPaneView' => 'applications/differential/view/DifferentialPrimaryPaneView.php',
'DifferentialProjectReviewersField' => 'applications/differential/customfield/DifferentialProjectReviewersField.php',
'DifferentialProjectsField' => 'applications/differential/customfield/DifferentialProjectsField.php',
'DifferentialQueryConduitAPIMethod' => 'applications/differential/conduit/DifferentialQueryConduitAPIMethod.php',
'DifferentialQueryDiffsConduitAPIMethod' => 'applications/differential/conduit/DifferentialQueryDiffsConduitAPIMethod.php',
'DifferentialRawDiffRenderer' => 'applications/differential/render/DifferentialRawDiffRenderer.php',
'DifferentialReleephRequestFieldSpecification' => 'applications/releeph/differential/DifferentialReleephRequestFieldSpecification.php',
'DifferentialRemarkupRule' => 'applications/differential/remarkup/DifferentialRemarkupRule.php',
'DifferentialReplyHandler' => 'applications/differential/mail/DifferentialReplyHandler.php',
'DifferentialRepositoryField' => 'applications/differential/customfield/DifferentialRepositoryField.php',
'DifferentialRepositoryLookup' => 'applications/differential/query/DifferentialRepositoryLookup.php',
'DifferentialRequiredSignaturesField' => 'applications/differential/customfield/DifferentialRequiredSignaturesField.php',
'DifferentialRevertPlanField' => 'applications/differential/customfield/DifferentialRevertPlanField.php',
'DifferentialReviewedByField' => 'applications/differential/customfield/DifferentialReviewedByField.php',
'DifferentialReviewer' => 'applications/differential/storage/DifferentialReviewer.php',
'DifferentialReviewerForRevisionEdgeType' => 'applications/differential/edge/DifferentialReviewerForRevisionEdgeType.php',
'DifferentialReviewerStatus' => 'applications/differential/constants/DifferentialReviewerStatus.php',
'DifferentialReviewersAddBlockingReviewersHeraldAction' => 'applications/differential/herald/DifferentialReviewersAddBlockingReviewersHeraldAction.php',
'DifferentialReviewersAddBlockingSelfHeraldAction' => 'applications/differential/herald/DifferentialReviewersAddBlockingSelfHeraldAction.php',
'DifferentialReviewersAddReviewersHeraldAction' => 'applications/differential/herald/DifferentialReviewersAddReviewersHeraldAction.php',
'DifferentialReviewersAddSelfHeraldAction' => 'applications/differential/herald/DifferentialReviewersAddSelfHeraldAction.php',
'DifferentialReviewersField' => 'applications/differential/customfield/DifferentialReviewersField.php',
'DifferentialReviewersHeraldAction' => 'applications/differential/herald/DifferentialReviewersHeraldAction.php',
'DifferentialReviewersView' => 'applications/differential/view/DifferentialReviewersView.php',
'DifferentialRevision' => 'applications/differential/storage/DifferentialRevision.php',
'DifferentialRevisionAffectedFilesHeraldField' => 'applications/differential/herald/DifferentialRevisionAffectedFilesHeraldField.php',
'DifferentialRevisionAuthorHeraldField' => 'applications/differential/herald/DifferentialRevisionAuthorHeraldField.php',
'DifferentialRevisionAuthorProjectsHeraldField' => 'applications/differential/herald/DifferentialRevisionAuthorProjectsHeraldField.php',
'DifferentialRevisionCloseDetailsController' => 'applications/differential/controller/DifferentialRevisionCloseDetailsController.php',
'DifferentialRevisionContentAddedHeraldField' => 'applications/differential/herald/DifferentialRevisionContentAddedHeraldField.php',
'DifferentialRevisionContentHeraldField' => 'applications/differential/herald/DifferentialRevisionContentHeraldField.php',
'DifferentialRevisionContentRemovedHeraldField' => 'applications/differential/herald/DifferentialRevisionContentRemovedHeraldField.php',
'DifferentialRevisionControlSystem' => 'applications/differential/constants/DifferentialRevisionControlSystem.php',
'DifferentialRevisionDependedOnByRevisionEdgeType' => 'applications/differential/edge/DifferentialRevisionDependedOnByRevisionEdgeType.php',
'DifferentialRevisionDependsOnRevisionEdgeType' => 'applications/differential/edge/DifferentialRevisionDependsOnRevisionEdgeType.php',
'DifferentialRevisionDetailView' => 'applications/differential/view/DifferentialRevisionDetailView.php',
'DifferentialRevisionEditController' => 'applications/differential/controller/DifferentialRevisionEditController.php',
'DifferentialRevisionHasCommitEdgeType' => 'applications/differential/edge/DifferentialRevisionHasCommitEdgeType.php',
'DifferentialRevisionHasReviewerEdgeType' => 'applications/differential/edge/DifferentialRevisionHasReviewerEdgeType.php',
'DifferentialRevisionHasTaskEdgeType' => 'applications/differential/edge/DifferentialRevisionHasTaskEdgeType.php',
'DifferentialRevisionHeraldField' => 'applications/differential/herald/DifferentialRevisionHeraldField.php',
'DifferentialRevisionHeraldFieldGroup' => 'applications/differential/herald/DifferentialRevisionHeraldFieldGroup.php',
'DifferentialRevisionIDField' => 'applications/differential/customfield/DifferentialRevisionIDField.php',
'DifferentialRevisionLandController' => 'applications/differential/controller/DifferentialRevisionLandController.php',
'DifferentialRevisionListController' => 'applications/differential/controller/DifferentialRevisionListController.php',
'DifferentialRevisionListView' => 'applications/differential/view/DifferentialRevisionListView.php',
'DifferentialRevisionMailReceiver' => 'applications/differential/mail/DifferentialRevisionMailReceiver.php',
'DifferentialRevisionPHIDType' => 'applications/differential/phid/DifferentialRevisionPHIDType.php',
'DifferentialRevisionPackageHeraldField' => 'applications/differential/herald/DifferentialRevisionPackageHeraldField.php',
'DifferentialRevisionPackageOwnerHeraldField' => 'applications/differential/herald/DifferentialRevisionPackageOwnerHeraldField.php',
'DifferentialRevisionQuery' => 'applications/differential/query/DifferentialRevisionQuery.php',
'DifferentialRevisionRepositoryHeraldField' => 'applications/differential/herald/DifferentialRevisionRepositoryHeraldField.php',
'DifferentialRevisionRepositoryProjectsHeraldField' => 'applications/differential/herald/DifferentialRevisionRepositoryProjectsHeraldField.php',
'DifferentialRevisionReviewersHeraldField' => 'applications/differential/herald/DifferentialRevisionReviewersHeraldField.php',
'DifferentialRevisionSearchEngine' => 'applications/differential/query/DifferentialRevisionSearchEngine.php',
'DifferentialRevisionStatus' => 'applications/differential/constants/DifferentialRevisionStatus.php',
'DifferentialRevisionSummaryHeraldField' => 'applications/differential/herald/DifferentialRevisionSummaryHeraldField.php',
'DifferentialRevisionTitleHeraldField' => 'applications/differential/herald/DifferentialRevisionTitleHeraldField.php',
'DifferentialRevisionUpdateHistoryView' => 'applications/differential/view/DifferentialRevisionUpdateHistoryView.php',
'DifferentialRevisionViewController' => 'applications/differential/controller/DifferentialRevisionViewController.php',
'DifferentialSchemaSpec' => 'applications/differential/storage/DifferentialSchemaSpec.php',
'DifferentialSearchIndexer' => 'applications/differential/search/DifferentialSearchIndexer.php',
'DifferentialSetDiffPropertyConduitAPIMethod' => 'applications/differential/conduit/DifferentialSetDiffPropertyConduitAPIMethod.php',
'DifferentialStoredCustomField' => 'applications/differential/customfield/DifferentialStoredCustomField.php',
'DifferentialSubscribersField' => 'applications/differential/customfield/DifferentialSubscribersField.php',
'DifferentialSummaryField' => 'applications/differential/customfield/DifferentialSummaryField.php',
'DifferentialTestPlanField' => 'applications/differential/customfield/DifferentialTestPlanField.php',
'DifferentialTitleField' => 'applications/differential/customfield/DifferentialTitleField.php',
'DifferentialTransaction' => 'applications/differential/storage/DifferentialTransaction.php',
'DifferentialTransactionComment' => 'applications/differential/storage/DifferentialTransactionComment.php',
'DifferentialTransactionEditor' => 'applications/differential/editor/DifferentialTransactionEditor.php',
'DifferentialTransactionQuery' => 'applications/differential/query/DifferentialTransactionQuery.php',
'DifferentialTransactionView' => 'applications/differential/view/DifferentialTransactionView.php',
'DifferentialUnitField' => 'applications/differential/customfield/DifferentialUnitField.php',
'DifferentialUnitStatus' => 'applications/differential/constants/DifferentialUnitStatus.php',
'DifferentialUnitTestResult' => 'applications/differential/constants/DifferentialUnitTestResult.php',
'DifferentialUpdateRevisionConduitAPIMethod' => 'applications/differential/conduit/DifferentialUpdateRevisionConduitAPIMethod.php',
'DifferentialViewPolicyField' => 'applications/differential/customfield/DifferentialViewPolicyField.php',
'DiffusionAuditorDatasource' => 'applications/diffusion/typeahead/DiffusionAuditorDatasource.php',
'DiffusionAuditorFunctionDatasource' => 'applications/diffusion/typeahead/DiffusionAuditorFunctionDatasource.php',
'DiffusionAuditorsAddAuditorsHeraldAction' => 'applications/diffusion/herald/DiffusionAuditorsAddAuditorsHeraldAction.php',
'DiffusionAuditorsAddSelfHeraldAction' => 'applications/diffusion/herald/DiffusionAuditorsAddSelfHeraldAction.php',
'DiffusionAuditorsHeraldAction' => 'applications/diffusion/herald/DiffusionAuditorsHeraldAction.php',
'DiffusionBlockHeraldAction' => 'applications/diffusion/herald/DiffusionBlockHeraldAction.php',
'DiffusionBranchQueryConduitAPIMethod' => 'applications/diffusion/conduit/DiffusionBranchQueryConduitAPIMethod.php',
'DiffusionBranchTableController' => 'applications/diffusion/controller/DiffusionBranchTableController.php',
'DiffusionBranchTableView' => 'applications/diffusion/view/DiffusionBranchTableView.php',
'DiffusionBrowseController' => 'applications/diffusion/controller/DiffusionBrowseController.php',
'DiffusionBrowseDirectoryController' => 'applications/diffusion/controller/DiffusionBrowseDirectoryController.php',
'DiffusionBrowseFileController' => 'applications/diffusion/controller/DiffusionBrowseFileController.php',
'DiffusionBrowseMainController' => 'applications/diffusion/controller/DiffusionBrowseMainController.php',
'DiffusionBrowseQueryConduitAPIMethod' => 'applications/diffusion/conduit/DiffusionBrowseQueryConduitAPIMethod.php',
'DiffusionBrowseResultSet' => 'applications/diffusion/data/DiffusionBrowseResultSet.php',
'DiffusionBrowseSearchController' => 'applications/diffusion/controller/DiffusionBrowseSearchController.php',
'DiffusionBrowseTableView' => 'applications/diffusion/view/DiffusionBrowseTableView.php',
'DiffusionCachedResolveRefsQuery' => 'applications/diffusion/query/DiffusionCachedResolveRefsQuery.php',
'DiffusionChangeController' => 'applications/diffusion/controller/DiffusionChangeController.php',
'DiffusionChangeHeraldFieldGroup' => 'applications/diffusion/herald/DiffusionChangeHeraldFieldGroup.php',
'DiffusionCommitAffectedFilesHeraldField' => 'applications/diffusion/herald/DiffusionCommitAffectedFilesHeraldField.php',
'DiffusionCommitAuthorHeraldField' => 'applications/diffusion/herald/DiffusionCommitAuthorHeraldField.php',
'DiffusionCommitAutocloseHeraldField' => 'applications/diffusion/herald/DiffusionCommitAutocloseHeraldField.php',
'DiffusionCommitBranchesController' => 'applications/diffusion/controller/DiffusionCommitBranchesController.php',
'DiffusionCommitBranchesHeraldField' => 'applications/diffusion/herald/DiffusionCommitBranchesHeraldField.php',
'DiffusionCommitCommitterHeraldField' => 'applications/diffusion/herald/DiffusionCommitCommitterHeraldField.php',
'DiffusionCommitController' => 'applications/diffusion/controller/DiffusionCommitController.php',
'DiffusionCommitDiffContentAddedHeraldField' => 'applications/diffusion/herald/DiffusionCommitDiffContentAddedHeraldField.php',
'DiffusionCommitDiffContentHeraldField' => 'applications/diffusion/herald/DiffusionCommitDiffContentHeraldField.php',
'DiffusionCommitDiffContentRemovedHeraldField' => 'applications/diffusion/herald/DiffusionCommitDiffContentRemovedHeraldField.php',
'DiffusionCommitDiffEnormousHeraldField' => 'applications/diffusion/herald/DiffusionCommitDiffEnormousHeraldField.php',
'DiffusionCommitEditController' => 'applications/diffusion/controller/DiffusionCommitEditController.php',
'DiffusionCommitHasRevisionEdgeType' => 'applications/diffusion/edge/DiffusionCommitHasRevisionEdgeType.php',
'DiffusionCommitHasTaskEdgeType' => 'applications/diffusion/edge/DiffusionCommitHasTaskEdgeType.php',
'DiffusionCommitHash' => 'applications/diffusion/data/DiffusionCommitHash.php',
'DiffusionCommitHeraldField' => 'applications/diffusion/herald/DiffusionCommitHeraldField.php',
'DiffusionCommitHeraldFieldGroup' => 'applications/diffusion/herald/DiffusionCommitHeraldFieldGroup.php',
'DiffusionCommitHookEngine' => 'applications/diffusion/engine/DiffusionCommitHookEngine.php',
'DiffusionCommitHookRejectException' => 'applications/diffusion/exception/DiffusionCommitHookRejectException.php',
'DiffusionCommitMessageHeraldField' => 'applications/diffusion/herald/DiffusionCommitMessageHeraldField.php',
'DiffusionCommitPackageAuditHeraldField' => 'applications/diffusion/herald/DiffusionCommitPackageAuditHeraldField.php',
'DiffusionCommitPackageHeraldField' => 'applications/diffusion/herald/DiffusionCommitPackageHeraldField.php',
'DiffusionCommitPackageOwnerHeraldField' => 'applications/diffusion/herald/DiffusionCommitPackageOwnerHeraldField.php',
'DiffusionCommitParentsQueryConduitAPIMethod' => 'applications/diffusion/conduit/DiffusionCommitParentsQueryConduitAPIMethod.php',
'DiffusionCommitQuery' => 'applications/diffusion/query/DiffusionCommitQuery.php',
'DiffusionCommitRef' => 'applications/diffusion/data/DiffusionCommitRef.php',
'DiffusionCommitRemarkupRule' => 'applications/diffusion/remarkup/DiffusionCommitRemarkupRule.php',
'DiffusionCommitRemarkupRuleTestCase' => 'applications/diffusion/remarkup/__tests__/DiffusionCommitRemarkupRuleTestCase.php',
'DiffusionCommitRepositoryHeraldField' => 'applications/diffusion/herald/DiffusionCommitRepositoryHeraldField.php',
'DiffusionCommitRepositoryProjectsHeraldField' => 'applications/diffusion/herald/DiffusionCommitRepositoryProjectsHeraldField.php',
'DiffusionCommitRevertedByCommitEdgeType' => 'applications/diffusion/edge/DiffusionCommitRevertedByCommitEdgeType.php',
'DiffusionCommitRevertsCommitEdgeType' => 'applications/diffusion/edge/DiffusionCommitRevertsCommitEdgeType.php',
'DiffusionCommitReviewerHeraldField' => 'applications/diffusion/herald/DiffusionCommitReviewerHeraldField.php',
'DiffusionCommitRevisionAcceptedHeraldField' => 'applications/diffusion/herald/DiffusionCommitRevisionAcceptedHeraldField.php',
'DiffusionCommitRevisionHeraldField' => 'applications/diffusion/herald/DiffusionCommitRevisionHeraldField.php',
'DiffusionCommitRevisionReviewersHeraldField' => 'applications/diffusion/herald/DiffusionCommitRevisionReviewersHeraldField.php',
'DiffusionCommitRevisionSubscribersHeraldField' => 'applications/diffusion/herald/DiffusionCommitRevisionSubscribersHeraldField.php',
'DiffusionCommitTagsController' => 'applications/diffusion/controller/DiffusionCommitTagsController.php',
'DiffusionConduitAPIMethod' => 'applications/diffusion/conduit/DiffusionConduitAPIMethod.php',
'DiffusionController' => 'applications/diffusion/controller/DiffusionController.php',
'DiffusionCreateCommentConduitAPIMethod' => 'applications/diffusion/conduit/DiffusionCreateCommentConduitAPIMethod.php',
'DiffusionCreateRepositoriesCapability' => 'applications/diffusion/capability/DiffusionCreateRepositoriesCapability.php',
'DiffusionDefaultEditCapability' => 'applications/diffusion/capability/DiffusionDefaultEditCapability.php',
'DiffusionDefaultPushCapability' => 'applications/diffusion/capability/DiffusionDefaultPushCapability.php',
'DiffusionDefaultViewCapability' => 'applications/diffusion/capability/DiffusionDefaultViewCapability.php',
'DiffusionDiffController' => 'applications/diffusion/controller/DiffusionDiffController.php',
'DiffusionDiffInlineCommentQuery' => 'applications/diffusion/query/DiffusionDiffInlineCommentQuery.php',
'DiffusionDiffQueryConduitAPIMethod' => 'applications/diffusion/conduit/DiffusionDiffQueryConduitAPIMethod.php',
'DiffusionDoorkeeperCommitFeedStoryPublisher' => 'applications/diffusion/doorkeeper/DiffusionDoorkeeperCommitFeedStoryPublisher.php',
'DiffusionEmptyResultView' => 'applications/diffusion/view/DiffusionEmptyResultView.php',
'DiffusionExistsQueryConduitAPIMethod' => 'applications/diffusion/conduit/DiffusionExistsQueryConduitAPIMethod.php',
'DiffusionExternalController' => 'applications/diffusion/controller/DiffusionExternalController.php',
'DiffusionExternalSymbolQuery' => 'applications/diffusion/symbol/DiffusionExternalSymbolQuery.php',
'DiffusionExternalSymbolsSource' => 'applications/diffusion/symbol/DiffusionExternalSymbolsSource.php',
'DiffusionFileContent' => 'applications/diffusion/data/DiffusionFileContent.php',
'DiffusionFileContentQuery' => 'applications/diffusion/query/filecontent/DiffusionFileContentQuery.php',
'DiffusionFileContentQueryConduitAPIMethod' => 'applications/diffusion/conduit/DiffusionFileContentQueryConduitAPIMethod.php',
'DiffusionFindSymbolsConduitAPIMethod' => 'applications/diffusion/conduit/DiffusionFindSymbolsConduitAPIMethod.php',
'DiffusionGetCommitsConduitAPIMethod' => 'applications/diffusion/conduit/DiffusionGetCommitsConduitAPIMethod.php',
'DiffusionGetLintMessagesConduitAPIMethod' => 'applications/diffusion/conduit/DiffusionGetLintMessagesConduitAPIMethod.php',
'DiffusionGetRecentCommitsByPathConduitAPIMethod' => 'applications/diffusion/conduit/DiffusionGetRecentCommitsByPathConduitAPIMethod.php',
'DiffusionGitBranch' => 'applications/diffusion/data/DiffusionGitBranch.php',
'DiffusionGitBranchTestCase' => 'applications/diffusion/data/__tests__/DiffusionGitBranchTestCase.php',
'DiffusionGitFileContentQuery' => 'applications/diffusion/query/filecontent/DiffusionGitFileContentQuery.php',
'DiffusionGitFileContentQueryTestCase' => 'applications/diffusion/query/__tests__/DiffusionGitFileContentQueryTestCase.php',
'DiffusionGitRawDiffQuery' => 'applications/diffusion/query/rawdiff/DiffusionGitRawDiffQuery.php',
'DiffusionGitReceivePackSSHWorkflow' => 'applications/diffusion/ssh/DiffusionGitReceivePackSSHWorkflow.php',
'DiffusionGitRequest' => 'applications/diffusion/request/DiffusionGitRequest.php',
'DiffusionGitResponse' => 'applications/diffusion/response/DiffusionGitResponse.php',
'DiffusionGitSSHWorkflow' => 'applications/diffusion/ssh/DiffusionGitSSHWorkflow.php',
'DiffusionGitUploadPackSSHWorkflow' => 'applications/diffusion/ssh/DiffusionGitUploadPackSSHWorkflow.php',
'DiffusionHistoryController' => 'applications/diffusion/controller/DiffusionHistoryController.php',
'DiffusionHistoryQueryConduitAPIMethod' => 'applications/diffusion/conduit/DiffusionHistoryQueryConduitAPIMethod.php',
'DiffusionHistoryTableView' => 'applications/diffusion/view/DiffusionHistoryTableView.php',
'DiffusionHovercardEventListener' => 'applications/diffusion/events/DiffusionHovercardEventListener.php',
'DiffusionInlineCommentController' => 'applications/diffusion/controller/DiffusionInlineCommentController.php',
'DiffusionInlineCommentPreviewController' => 'applications/diffusion/controller/DiffusionInlineCommentPreviewController.php',
'DiffusionLastModifiedController' => 'applications/diffusion/controller/DiffusionLastModifiedController.php',
'DiffusionLastModifiedQueryConduitAPIMethod' => 'applications/diffusion/conduit/DiffusionLastModifiedQueryConduitAPIMethod.php',
'DiffusionLintController' => 'applications/diffusion/controller/DiffusionLintController.php',
'DiffusionLintCountQuery' => 'applications/diffusion/query/DiffusionLintCountQuery.php',
'DiffusionLintDetailsController' => 'applications/diffusion/controller/DiffusionLintDetailsController.php',
'DiffusionLintSaveRunner' => 'applications/diffusion/DiffusionLintSaveRunner.php',
'DiffusionLookSoonConduitAPIMethod' => 'applications/diffusion/conduit/DiffusionLookSoonConduitAPIMethod.php',
'DiffusionLowLevelCommitFieldsQuery' => 'applications/diffusion/query/lowlevel/DiffusionLowLevelCommitFieldsQuery.php',
'DiffusionLowLevelCommitQuery' => 'applications/diffusion/query/lowlevel/DiffusionLowLevelCommitQuery.php',
'DiffusionLowLevelGitRefQuery' => 'applications/diffusion/query/lowlevel/DiffusionLowLevelGitRefQuery.php',
'DiffusionLowLevelMercurialBranchesQuery' => 'applications/diffusion/query/lowlevel/DiffusionLowLevelMercurialBranchesQuery.php',
'DiffusionLowLevelMercurialPathsQuery' => 'applications/diffusion/query/lowlevel/DiffusionLowLevelMercurialPathsQuery.php',
'DiffusionLowLevelParentsQuery' => 'applications/diffusion/query/lowlevel/DiffusionLowLevelParentsQuery.php',
'DiffusionLowLevelQuery' => 'applications/diffusion/query/lowlevel/DiffusionLowLevelQuery.php',
'DiffusionLowLevelResolveRefsQuery' => 'applications/diffusion/query/lowlevel/DiffusionLowLevelResolveRefsQuery.php',
'DiffusionMercurialFileContentQuery' => 'applications/diffusion/query/filecontent/DiffusionMercurialFileContentQuery.php',
'DiffusionMercurialRawDiffQuery' => 'applications/diffusion/query/rawdiff/DiffusionMercurialRawDiffQuery.php',
'DiffusionMercurialRequest' => 'applications/diffusion/request/DiffusionMercurialRequest.php',
'DiffusionMercurialResponse' => 'applications/diffusion/response/DiffusionMercurialResponse.php',
'DiffusionMercurialSSHWorkflow' => 'applications/diffusion/ssh/DiffusionMercurialSSHWorkflow.php',
'DiffusionMercurialServeSSHWorkflow' => 'applications/diffusion/ssh/DiffusionMercurialServeSSHWorkflow.php',
'DiffusionMercurialWireClientSSHProtocolChannel' => 'applications/diffusion/ssh/DiffusionMercurialWireClientSSHProtocolChannel.php',
'DiffusionMercurialWireProtocol' => 'applications/diffusion/protocol/DiffusionMercurialWireProtocol.php',
'DiffusionMercurialWireSSHTestCase' => 'applications/diffusion/ssh/__tests__/DiffusionMercurialWireSSHTestCase.php',
'DiffusionMergedCommitsQueryConduitAPIMethod' => 'applications/diffusion/conduit/DiffusionMergedCommitsQueryConduitAPIMethod.php',
'DiffusionMirrorDeleteController' => 'applications/diffusion/controller/DiffusionMirrorDeleteController.php',
'DiffusionMirrorEditController' => 'applications/diffusion/controller/DiffusionMirrorEditController.php',
'DiffusionPathChange' => 'applications/diffusion/data/DiffusionPathChange.php',
'DiffusionPathChangeQuery' => 'applications/diffusion/query/pathchange/DiffusionPathChangeQuery.php',
'DiffusionPathCompleteController' => 'applications/diffusion/controller/DiffusionPathCompleteController.php',
'DiffusionPathIDQuery' => 'applications/diffusion/query/pathid/DiffusionPathIDQuery.php',
'DiffusionPathQuery' => 'applications/diffusion/query/DiffusionPathQuery.php',
'DiffusionPathQueryTestCase' => 'applications/diffusion/query/pathid/__tests__/DiffusionPathQueryTestCase.php',
'DiffusionPathTreeController' => 'applications/diffusion/controller/DiffusionPathTreeController.php',
'DiffusionPathValidateController' => 'applications/diffusion/controller/DiffusionPathValidateController.php',
'DiffusionPhpExternalSymbolsSource' => 'applications/diffusion/symbol/DiffusionPhpExternalSymbolsSource.php',
'DiffusionPreCommitContentAffectedFilesHeraldField' => 'applications/diffusion/herald/DiffusionPreCommitContentAffectedFilesHeraldField.php',
'DiffusionPreCommitContentAuthorHeraldField' => 'applications/diffusion/herald/DiffusionPreCommitContentAuthorHeraldField.php',
'DiffusionPreCommitContentAuthorRawHeraldField' => 'applications/diffusion/herald/DiffusionPreCommitContentAuthorRawHeraldField.php',
'DiffusionPreCommitContentBranchesHeraldField' => 'applications/diffusion/herald/DiffusionPreCommitContentBranchesHeraldField.php',
'DiffusionPreCommitContentCommitterHeraldField' => 'applications/diffusion/herald/DiffusionPreCommitContentCommitterHeraldField.php',
'DiffusionPreCommitContentCommitterRawHeraldField' => 'applications/diffusion/herald/DiffusionPreCommitContentCommitterRawHeraldField.php',
'DiffusionPreCommitContentDiffContentAddedHeraldField' => 'applications/diffusion/herald/DiffusionPreCommitContentDiffContentAddedHeraldField.php',
'DiffusionPreCommitContentDiffContentHeraldField' => 'applications/diffusion/herald/DiffusionPreCommitContentDiffContentHeraldField.php',
'DiffusionPreCommitContentDiffContentRemovedHeraldField' => 'applications/diffusion/herald/DiffusionPreCommitContentDiffContentRemovedHeraldField.php',
'DiffusionPreCommitContentDiffEnormousHeraldField' => 'applications/diffusion/herald/DiffusionPreCommitContentDiffEnormousHeraldField.php',
'DiffusionPreCommitContentHeraldField' => 'applications/diffusion/herald/DiffusionPreCommitContentHeraldField.php',
'DiffusionPreCommitContentMergeHeraldField' => 'applications/diffusion/herald/DiffusionPreCommitContentMergeHeraldField.php',
'DiffusionPreCommitContentMessageHeraldField' => 'applications/diffusion/herald/DiffusionPreCommitContentMessageHeraldField.php',
'DiffusionPreCommitContentPusherHeraldField' => 'applications/diffusion/herald/DiffusionPreCommitContentPusherHeraldField.php',
'DiffusionPreCommitContentPusherIsCommitterHeraldField' => 'applications/diffusion/herald/DiffusionPreCommitContentPusherIsCommitterHeraldField.php',
'DiffusionPreCommitContentPusherProjectsHeraldField' => 'applications/diffusion/herald/DiffusionPreCommitContentPusherProjectsHeraldField.php',
'DiffusionPreCommitContentRepositoryHeraldField' => 'applications/diffusion/herald/DiffusionPreCommitContentRepositoryHeraldField.php',
'DiffusionPreCommitContentRepositoryProjectsHeraldField' => 'applications/diffusion/herald/DiffusionPreCommitContentRepositoryProjectsHeraldField.php',
'DiffusionPreCommitContentRevisionAcceptedHeraldField' => 'applications/diffusion/herald/DiffusionPreCommitContentRevisionAcceptedHeraldField.php',
'DiffusionPreCommitContentRevisionHeraldField' => 'applications/diffusion/herald/DiffusionPreCommitContentRevisionHeraldField.php',
'DiffusionPreCommitContentRevisionReviewersHeraldField' => 'applications/diffusion/herald/DiffusionPreCommitContentRevisionReviewersHeraldField.php',
'DiffusionPreCommitContentRevisionSubscribersHeraldField' => 'applications/diffusion/herald/DiffusionPreCommitContentRevisionSubscribersHeraldField.php',
'DiffusionPreCommitRefChangeHeraldField' => 'applications/diffusion/herald/DiffusionPreCommitRefChangeHeraldField.php',
'DiffusionPreCommitRefHeraldField' => 'applications/diffusion/herald/DiffusionPreCommitRefHeraldField.php',
'DiffusionPreCommitRefHeraldFieldGroup' => 'applications/diffusion/herald/DiffusionPreCommitRefHeraldFieldGroup.php',
'DiffusionPreCommitRefNameHeraldField' => 'applications/diffusion/herald/DiffusionPreCommitRefNameHeraldField.php',
'DiffusionPreCommitRefPusherHeraldField' => 'applications/diffusion/herald/DiffusionPreCommitRefPusherHeraldField.php',
'DiffusionPreCommitRefPusherProjectsHeraldField' => 'applications/diffusion/herald/DiffusionPreCommitRefPusherProjectsHeraldField.php',
'DiffusionPreCommitRefRepositoryHeraldField' => 'applications/diffusion/herald/DiffusionPreCommitRefRepositoryHeraldField.php',
'DiffusionPreCommitRefRepositoryProjectsHeraldField' => 'applications/diffusion/herald/DiffusionPreCommitRefRepositoryProjectsHeraldField.php',
'DiffusionPreCommitRefTypeHeraldField' => 'applications/diffusion/herald/DiffusionPreCommitRefTypeHeraldField.php',
'DiffusionPushCapability' => 'applications/diffusion/capability/DiffusionPushCapability.php',
'DiffusionPushEventViewController' => 'applications/diffusion/controller/DiffusionPushEventViewController.php',
'DiffusionPushLogController' => 'applications/diffusion/controller/DiffusionPushLogController.php',
'DiffusionPushLogListController' => 'applications/diffusion/controller/DiffusionPushLogListController.php',
'DiffusionPushLogListView' => 'applications/diffusion/view/DiffusionPushLogListView.php',
'DiffusionPythonExternalSymbolsSource' => 'applications/diffusion/symbol/DiffusionPythonExternalSymbolsSource.php',
'DiffusionQuery' => 'applications/diffusion/query/DiffusionQuery.php',
'DiffusionQueryCommitsConduitAPIMethod' => 'applications/diffusion/conduit/DiffusionQueryCommitsConduitAPIMethod.php',
'DiffusionQueryConduitAPIMethod' => 'applications/diffusion/conduit/DiffusionQueryConduitAPIMethod.php',
'DiffusionQueryPathsConduitAPIMethod' => 'applications/diffusion/conduit/DiffusionQueryPathsConduitAPIMethod.php',
'DiffusionRawDiffQuery' => 'applications/diffusion/query/rawdiff/DiffusionRawDiffQuery.php',
'DiffusionRawDiffQueryConduitAPIMethod' => 'applications/diffusion/conduit/DiffusionRawDiffQueryConduitAPIMethod.php',
'DiffusionReadmeView' => 'applications/diffusion/view/DiffusionReadmeView.php',
'DiffusionRefNotFoundException' => 'applications/diffusion/exception/DiffusionRefNotFoundException.php',
'DiffusionRefTableController' => 'applications/diffusion/controller/DiffusionRefTableController.php',
'DiffusionRefsQueryConduitAPIMethod' => 'applications/diffusion/conduit/DiffusionRefsQueryConduitAPIMethod.php',
'DiffusionRenameHistoryQuery' => 'applications/diffusion/query/DiffusionRenameHistoryQuery.php',
'DiffusionRepositoryByIDRemarkupRule' => 'applications/diffusion/remarkup/DiffusionRepositoryByIDRemarkupRule.php',
'DiffusionRepositoryController' => 'applications/diffusion/controller/DiffusionRepositoryController.php',
'DiffusionRepositoryCreateController' => 'applications/diffusion/controller/DiffusionRepositoryCreateController.php',
'DiffusionRepositoryDatasource' => 'applications/diffusion/typeahead/DiffusionRepositoryDatasource.php',
'DiffusionRepositoryDefaultController' => 'applications/diffusion/controller/DiffusionRepositoryDefaultController.php',
'DiffusionRepositoryEditActionsController' => 'applications/diffusion/controller/DiffusionRepositoryEditActionsController.php',
'DiffusionRepositoryEditActivateController' => 'applications/diffusion/controller/DiffusionRepositoryEditActivateController.php',
'DiffusionRepositoryEditBasicController' => 'applications/diffusion/controller/DiffusionRepositoryEditBasicController.php',
'DiffusionRepositoryEditBranchesController' => 'applications/diffusion/controller/DiffusionRepositoryEditBranchesController.php',
'DiffusionRepositoryEditController' => 'applications/diffusion/controller/DiffusionRepositoryEditController.php',
'DiffusionRepositoryEditDangerousController' => 'applications/diffusion/controller/DiffusionRepositoryEditDangerousController.php',
'DiffusionRepositoryEditDeleteController' => 'applications/diffusion/controller/DiffusionRepositoryEditDeleteController.php',
'DiffusionRepositoryEditEncodingController' => 'applications/diffusion/controller/DiffusionRepositoryEditEncodingController.php',
'DiffusionRepositoryEditHostingController' => 'applications/diffusion/controller/DiffusionRepositoryEditHostingController.php',
'DiffusionRepositoryEditMainController' => 'applications/diffusion/controller/DiffusionRepositoryEditMainController.php',
'DiffusionRepositoryEditStagingController' => 'applications/diffusion/controller/DiffusionRepositoryEditStagingController.php',
'DiffusionRepositoryEditStorageController' => 'applications/diffusion/controller/DiffusionRepositoryEditStorageController.php',
'DiffusionRepositoryEditSubversionController' => 'applications/diffusion/controller/DiffusionRepositoryEditSubversionController.php',
'DiffusionRepositoryEditUpdateController' => 'applications/diffusion/controller/DiffusionRepositoryEditUpdateController.php',
'DiffusionRepositoryListController' => 'applications/diffusion/controller/DiffusionRepositoryListController.php',
'DiffusionRepositoryNewController' => 'applications/diffusion/controller/DiffusionRepositoryNewController.php',
'DiffusionRepositoryPath' => 'applications/diffusion/data/DiffusionRepositoryPath.php',
'DiffusionRepositoryRef' => 'applications/diffusion/data/DiffusionRepositoryRef.php',
'DiffusionRepositoryRemarkupRule' => 'applications/diffusion/remarkup/DiffusionRepositoryRemarkupRule.php',
'DiffusionRepositorySymbolsController' => 'applications/diffusion/controller/DiffusionRepositorySymbolsController.php',
'DiffusionRepositoryTag' => 'applications/diffusion/data/DiffusionRepositoryTag.php',
'DiffusionRequest' => 'applications/diffusion/request/DiffusionRequest.php',
'DiffusionResolveRefsConduitAPIMethod' => 'applications/diffusion/conduit/DiffusionResolveRefsConduitAPIMethod.php',
'DiffusionResolveUserQuery' => 'applications/diffusion/query/DiffusionResolveUserQuery.php',
'DiffusionSSHWorkflow' => 'applications/diffusion/ssh/DiffusionSSHWorkflow.php',
'DiffusionSearchQueryConduitAPIMethod' => 'applications/diffusion/conduit/DiffusionSearchQueryConduitAPIMethod.php',
'DiffusionServeController' => 'applications/diffusion/controller/DiffusionServeController.php',
'DiffusionSetPasswordSettingsPanel' => 'applications/diffusion/panel/DiffusionSetPasswordSettingsPanel.php',
'DiffusionSetupException' => 'applications/diffusion/exception/DiffusionSetupException.php',
'DiffusionSubversionSSHWorkflow' => 'applications/diffusion/ssh/DiffusionSubversionSSHWorkflow.php',
'DiffusionSubversionServeSSHWorkflow' => 'applications/diffusion/ssh/DiffusionSubversionServeSSHWorkflow.php',
'DiffusionSubversionWireProtocol' => 'applications/diffusion/protocol/DiffusionSubversionWireProtocol.php',
'DiffusionSubversionWireProtocolTestCase' => 'applications/diffusion/protocol/__tests__/DiffusionSubversionWireProtocolTestCase.php',
'DiffusionSvnFileContentQuery' => 'applications/diffusion/query/filecontent/DiffusionSvnFileContentQuery.php',
'DiffusionSvnRawDiffQuery' => 'applications/diffusion/query/rawdiff/DiffusionSvnRawDiffQuery.php',
'DiffusionSvnRequest' => 'applications/diffusion/request/DiffusionSvnRequest.php',
'DiffusionSymbolController' => 'applications/diffusion/controller/DiffusionSymbolController.php',
'DiffusionSymbolDatasource' => 'applications/diffusion/typeahead/DiffusionSymbolDatasource.php',
'DiffusionSymbolQuery' => 'applications/diffusion/query/DiffusionSymbolQuery.php',
'DiffusionTagListController' => 'applications/diffusion/controller/DiffusionTagListController.php',
'DiffusionTagListView' => 'applications/diffusion/view/DiffusionTagListView.php',
'DiffusionTagsQueryConduitAPIMethod' => 'applications/diffusion/conduit/DiffusionTagsQueryConduitAPIMethod.php',
'DiffusionURITestCase' => 'applications/diffusion/request/__tests__/DiffusionURITestCase.php',
'DiffusionUpdateCoverageConduitAPIMethod' => 'applications/diffusion/conduit/DiffusionUpdateCoverageConduitAPIMethod.php',
'DiffusionView' => 'applications/diffusion/view/DiffusionView.php',
'DivinerArticleAtomizer' => 'applications/diviner/atomizer/DivinerArticleAtomizer.php',
'DivinerAtom' => 'applications/diviner/atom/DivinerAtom.php',
'DivinerAtomCache' => 'applications/diviner/cache/DivinerAtomCache.php',
'DivinerAtomController' => 'applications/diviner/controller/DivinerAtomController.php',
'DivinerAtomListController' => 'applications/diviner/controller/DivinerAtomListController.php',
'DivinerAtomPHIDType' => 'applications/diviner/phid/DivinerAtomPHIDType.php',
'DivinerAtomQuery' => 'applications/diviner/query/DivinerAtomQuery.php',
'DivinerAtomRef' => 'applications/diviner/atom/DivinerAtomRef.php',
'DivinerAtomSearchEngine' => 'applications/diviner/query/DivinerAtomSearchEngine.php',
'DivinerAtomSearchIndexer' => 'applications/diviner/search/DivinerAtomSearchIndexer.php',
'DivinerAtomizeWorkflow' => 'applications/diviner/workflow/DivinerAtomizeWorkflow.php',
'DivinerAtomizer' => 'applications/diviner/atomizer/DivinerAtomizer.php',
'DivinerBookController' => 'applications/diviner/controller/DivinerBookController.php',
'DivinerBookDatasource' => 'applications/diviner/typeahead/DivinerBookDatasource.php',
'DivinerBookEditController' => 'applications/diviner/controller/DivinerBookEditController.php',
'DivinerBookItemView' => 'applications/diviner/view/DivinerBookItemView.php',
'DivinerBookPHIDType' => 'applications/diviner/phid/DivinerBookPHIDType.php',
'DivinerBookQuery' => 'applications/diviner/query/DivinerBookQuery.php',
'DivinerBookSearchIndexer' => 'applications/diviner/search/DivinerBookSearchIndexer.php',
'DivinerController' => 'applications/diviner/controller/DivinerController.php',
'DivinerDAO' => 'applications/diviner/storage/DivinerDAO.php',
'DivinerDefaultEditCapability' => 'applications/diviner/capability/DivinerDefaultEditCapability.php',
'DivinerDefaultRenderer' => 'applications/diviner/renderer/DivinerDefaultRenderer.php',
'DivinerDefaultViewCapability' => 'applications/diviner/capability/DivinerDefaultViewCapability.php',
'DivinerDiskCache' => 'applications/diviner/cache/DivinerDiskCache.php',
'DivinerFileAtomizer' => 'applications/diviner/atomizer/DivinerFileAtomizer.php',
'DivinerFindController' => 'applications/diviner/controller/DivinerFindController.php',
'DivinerGenerateWorkflow' => 'applications/diviner/workflow/DivinerGenerateWorkflow.php',
'DivinerLiveAtom' => 'applications/diviner/storage/DivinerLiveAtom.php',
'DivinerLiveBook' => 'applications/diviner/storage/DivinerLiveBook.php',
'DivinerLiveBookEditor' => 'applications/diviner/editor/DivinerLiveBookEditor.php',
'DivinerLiveBookTransaction' => 'applications/diviner/storage/DivinerLiveBookTransaction.php',
'DivinerLiveBookTransactionQuery' => 'applications/diviner/query/DivinerLiveBookTransactionQuery.php',
'DivinerLivePublisher' => 'applications/diviner/publisher/DivinerLivePublisher.php',
'DivinerLiveSymbol' => 'applications/diviner/storage/DivinerLiveSymbol.php',
'DivinerMainController' => 'applications/diviner/controller/DivinerMainController.php',
'DivinerPHPAtomizer' => 'applications/diviner/atomizer/DivinerPHPAtomizer.php',
'DivinerParameterTableView' => 'applications/diviner/view/DivinerParameterTableView.php',
'DivinerPublishCache' => 'applications/diviner/cache/DivinerPublishCache.php',
'DivinerPublisher' => 'applications/diviner/publisher/DivinerPublisher.php',
'DivinerRenderer' => 'applications/diviner/renderer/DivinerRenderer.php',
'DivinerReturnTableView' => 'applications/diviner/view/DivinerReturnTableView.php',
'DivinerSchemaSpec' => 'applications/diviner/storage/DivinerSchemaSpec.php',
'DivinerSectionView' => 'applications/diviner/view/DivinerSectionView.php',
'DivinerStaticPublisher' => 'applications/diviner/publisher/DivinerStaticPublisher.php',
'DivinerSymbolRemarkupRule' => 'applications/diviner/markup/DivinerSymbolRemarkupRule.php',
'DivinerWorkflow' => 'applications/diviner/workflow/DivinerWorkflow.php',
'DoorkeeperAsanaFeedWorker' => 'applications/doorkeeper/worker/DoorkeeperAsanaFeedWorker.php',
'DoorkeeperAsanaRemarkupRule' => 'applications/doorkeeper/remarkup/DoorkeeperAsanaRemarkupRule.php',
'DoorkeeperBridge' => 'applications/doorkeeper/bridge/DoorkeeperBridge.php',
'DoorkeeperBridgeAsana' => 'applications/doorkeeper/bridge/DoorkeeperBridgeAsana.php',
'DoorkeeperBridgeJIRA' => 'applications/doorkeeper/bridge/DoorkeeperBridgeJIRA.php',
'DoorkeeperBridgeJIRATestCase' => 'applications/doorkeeper/bridge/__tests__/DoorkeeperBridgeJIRATestCase.php',
'DoorkeeperDAO' => 'applications/doorkeeper/storage/DoorkeeperDAO.php',
'DoorkeeperExternalObject' => 'applications/doorkeeper/storage/DoorkeeperExternalObject.php',
'DoorkeeperExternalObjectQuery' => 'applications/doorkeeper/query/DoorkeeperExternalObjectQuery.php',
'DoorkeeperFeedStoryPublisher' => 'applications/doorkeeper/engine/DoorkeeperFeedStoryPublisher.php',
'DoorkeeperFeedWorker' => 'applications/doorkeeper/worker/DoorkeeperFeedWorker.php',
'DoorkeeperImportEngine' => 'applications/doorkeeper/engine/DoorkeeperImportEngine.php',
'DoorkeeperJIRAFeedWorker' => 'applications/doorkeeper/worker/DoorkeeperJIRAFeedWorker.php',
'DoorkeeperJIRARemarkupRule' => 'applications/doorkeeper/remarkup/DoorkeeperJIRARemarkupRule.php',
'DoorkeeperMissingLinkException' => 'applications/doorkeeper/exception/DoorkeeperMissingLinkException.php',
'DoorkeeperObjectRef' => 'applications/doorkeeper/engine/DoorkeeperObjectRef.php',
'DoorkeeperRemarkupRule' => 'applications/doorkeeper/remarkup/DoorkeeperRemarkupRule.php',
'DoorkeeperSchemaSpec' => 'applications/doorkeeper/storage/DoorkeeperSchemaSpec.php',
'DoorkeeperTagView' => 'applications/doorkeeper/view/DoorkeeperTagView.php',
'DoorkeeperTagsController' => 'applications/doorkeeper/controller/DoorkeeperTagsController.php',
'DrydockAllocatorWorker' => 'applications/drydock/worker/DrydockAllocatorWorker.php',
'DrydockApacheWebrootInterface' => 'applications/drydock/interface/webroot/DrydockApacheWebrootInterface.php',
'DrydockBlueprint' => 'applications/drydock/storage/DrydockBlueprint.php',
'DrydockBlueprintController' => 'applications/drydock/controller/DrydockBlueprintController.php',
'DrydockBlueprintCoreCustomField' => 'applications/drydock/customfield/DrydockBlueprintCoreCustomField.php',
'DrydockBlueprintCreateController' => 'applications/drydock/controller/DrydockBlueprintCreateController.php',
'DrydockBlueprintCustomField' => 'applications/drydock/customfield/DrydockBlueprintCustomField.php',
'DrydockBlueprintDatasource' => 'applications/drydock/typeahead/DrydockBlueprintDatasource.php',
'DrydockBlueprintEditController' => 'applications/drydock/controller/DrydockBlueprintEditController.php',
'DrydockBlueprintEditor' => 'applications/drydock/editor/DrydockBlueprintEditor.php',
'DrydockBlueprintImplementation' => 'applications/drydock/blueprint/DrydockBlueprintImplementation.php',
'DrydockBlueprintImplementationTestCase' => 'applications/drydock/blueprint/__tests__/DrydockBlueprintImplementationTestCase.php',
'DrydockBlueprintListController' => 'applications/drydock/controller/DrydockBlueprintListController.php',
'DrydockBlueprintPHIDType' => 'applications/drydock/phid/DrydockBlueprintPHIDType.php',
'DrydockBlueprintQuery' => 'applications/drydock/query/DrydockBlueprintQuery.php',
'DrydockBlueprintScopeGuard' => 'applications/drydock/util/DrydockBlueprintScopeGuard.php',
'DrydockBlueprintSearchEngine' => 'applications/drydock/query/DrydockBlueprintSearchEngine.php',
'DrydockBlueprintTransaction' => 'applications/drydock/storage/DrydockBlueprintTransaction.php',
'DrydockBlueprintTransactionQuery' => 'applications/drydock/query/DrydockBlueprintTransactionQuery.php',
'DrydockBlueprintViewController' => 'applications/drydock/controller/DrydockBlueprintViewController.php',
'DrydockCommandInterface' => 'applications/drydock/interface/command/DrydockCommandInterface.php',
'DrydockConsoleController' => 'applications/drydock/controller/DrydockConsoleController.php',
'DrydockConstants' => 'applications/drydock/constants/DrydockConstants.php',
'DrydockController' => 'applications/drydock/controller/DrydockController.php',
'DrydockCreateBlueprintsCapability' => 'applications/drydock/capability/DrydockCreateBlueprintsCapability.php',
'DrydockDAO' => 'applications/drydock/storage/DrydockDAO.php',
'DrydockDefaultEditCapability' => 'applications/drydock/capability/DrydockDefaultEditCapability.php',
'DrydockDefaultViewCapability' => 'applications/drydock/capability/DrydockDefaultViewCapability.php',
'DrydockFilesystemInterface' => 'applications/drydock/interface/filesystem/DrydockFilesystemInterface.php',
'DrydockInterface' => 'applications/drydock/interface/DrydockInterface.php',
'DrydockLease' => 'applications/drydock/storage/DrydockLease.php',
'DrydockLeaseController' => 'applications/drydock/controller/DrydockLeaseController.php',
'DrydockLeaseDatasource' => 'applications/drydock/typeahead/DrydockLeaseDatasource.php',
'DrydockLeaseListController' => 'applications/drydock/controller/DrydockLeaseListController.php',
'DrydockLeaseListView' => 'applications/drydock/view/DrydockLeaseListView.php',
'DrydockLeasePHIDType' => 'applications/drydock/phid/DrydockLeasePHIDType.php',
'DrydockLeaseQuery' => 'applications/drydock/query/DrydockLeaseQuery.php',
'DrydockLeaseReleaseController' => 'applications/drydock/controller/DrydockLeaseReleaseController.php',
'DrydockLeaseSearchEngine' => 'applications/drydock/query/DrydockLeaseSearchEngine.php',
'DrydockLeaseStatus' => 'applications/drydock/constants/DrydockLeaseStatus.php',
'DrydockLeaseViewController' => 'applications/drydock/controller/DrydockLeaseViewController.php',
'DrydockLocalCommandInterface' => 'applications/drydock/interface/command/DrydockLocalCommandInterface.php',
'DrydockLog' => 'applications/drydock/storage/DrydockLog.php',
'DrydockLogController' => 'applications/drydock/controller/DrydockLogController.php',
'DrydockLogListController' => 'applications/drydock/controller/DrydockLogListController.php',
'DrydockLogListView' => 'applications/drydock/view/DrydockLogListView.php',
'DrydockLogQuery' => 'applications/drydock/query/DrydockLogQuery.php',
'DrydockLogSearchEngine' => 'applications/drydock/query/DrydockLogSearchEngine.php',
'DrydockManagementCloseWorkflow' => 'applications/drydock/management/DrydockManagementCloseWorkflow.php',
'DrydockManagementCreateResourceWorkflow' => 'applications/drydock/management/DrydockManagementCreateResourceWorkflow.php',
'DrydockManagementLeaseWorkflow' => 'applications/drydock/management/DrydockManagementLeaseWorkflow.php',
'DrydockManagementReleaseWorkflow' => 'applications/drydock/management/DrydockManagementReleaseWorkflow.php',
'DrydockManagementWorkflow' => 'applications/drydock/management/DrydockManagementWorkflow.php',
'DrydockPreallocatedHostBlueprintImplementation' => 'applications/drydock/blueprint/DrydockPreallocatedHostBlueprintImplementation.php',
'DrydockQuery' => 'applications/drydock/query/DrydockQuery.php',
'DrydockResource' => 'applications/drydock/storage/DrydockResource.php',
'DrydockResourceCloseController' => 'applications/drydock/controller/DrydockResourceCloseController.php',
'DrydockResourceController' => 'applications/drydock/controller/DrydockResourceController.php',
'DrydockResourceDatasource' => 'applications/drydock/typeahead/DrydockResourceDatasource.php',
'DrydockResourceListController' => 'applications/drydock/controller/DrydockResourceListController.php',
'DrydockResourceListView' => 'applications/drydock/view/DrydockResourceListView.php',
'DrydockResourcePHIDType' => 'applications/drydock/phid/DrydockResourcePHIDType.php',
'DrydockResourceQuery' => 'applications/drydock/query/DrydockResourceQuery.php',
'DrydockResourceSearchEngine' => 'applications/drydock/query/DrydockResourceSearchEngine.php',
'DrydockResourceStatus' => 'applications/drydock/constants/DrydockResourceStatus.php',
'DrydockResourceViewController' => 'applications/drydock/controller/DrydockResourceViewController.php',
'DrydockSFTPFilesystemInterface' => 'applications/drydock/interface/filesystem/DrydockSFTPFilesystemInterface.php',
'DrydockSSHCommandInterface' => 'applications/drydock/interface/command/DrydockSSHCommandInterface.php',
'DrydockWebrootInterface' => 'applications/drydock/interface/webroot/DrydockWebrootInterface.php',
'DrydockWorkingCopyBlueprintImplementation' => 'applications/drydock/blueprint/DrydockWorkingCopyBlueprintImplementation.php',
'FeedConduitAPIMethod' => 'applications/feed/conduit/FeedConduitAPIMethod.php',
'FeedPublishConduitAPIMethod' => 'applications/feed/conduit/FeedPublishConduitAPIMethod.php',
'FeedPublisherHTTPWorker' => 'applications/feed/worker/FeedPublisherHTTPWorker.php',
'FeedPublisherWorker' => 'applications/feed/worker/FeedPublisherWorker.php',
'FeedPushWorker' => 'applications/feed/worker/FeedPushWorker.php',
'FeedQueryConduitAPIMethod' => 'applications/feed/conduit/FeedQueryConduitAPIMethod.php',
'FeedStoryNotificationGarbageCollector' => 'applications/notification/garbagecollector/FeedStoryNotificationGarbageCollector.php',
'FileAllocateConduitAPIMethod' => 'applications/files/conduit/FileAllocateConduitAPIMethod.php',
'FileConduitAPIMethod' => 'applications/files/conduit/FileConduitAPIMethod.php',
'FileCreateMailReceiver' => 'applications/files/mail/FileCreateMailReceiver.php',
'FileDownloadConduitAPIMethod' => 'applications/files/conduit/FileDownloadConduitAPIMethod.php',
'FileInfoConduitAPIMethod' => 'applications/files/conduit/FileInfoConduitAPIMethod.php',
'FileMailReceiver' => 'applications/files/mail/FileMailReceiver.php',
'FileQueryChunksConduitAPIMethod' => 'applications/files/conduit/FileQueryChunksConduitAPIMethod.php',
'FileReplyHandler' => 'applications/files/mail/FileReplyHandler.php',
'FileUploadChunkConduitAPIMethod' => 'applications/files/conduit/FileUploadChunkConduitAPIMethod.php',
'FileUploadConduitAPIMethod' => 'applications/files/conduit/FileUploadConduitAPIMethod.php',
'FileUploadHashConduitAPIMethod' => 'applications/files/conduit/FileUploadHashConduitAPIMethod.php',
'FilesDefaultViewCapability' => 'applications/files/capability/FilesDefaultViewCapability.php',
'FlagConduitAPIMethod' => 'applications/flag/conduit/FlagConduitAPIMethod.php',
'FlagDeleteConduitAPIMethod' => 'applications/flag/conduit/FlagDeleteConduitAPIMethod.php',
'FlagEditConduitAPIMethod' => 'applications/flag/conduit/FlagEditConduitAPIMethod.php',
'FlagQueryConduitAPIMethod' => 'applications/flag/conduit/FlagQueryConduitAPIMethod.php',
'FundBacker' => 'applications/fund/storage/FundBacker.php',
'FundBackerCart' => 'applications/fund/phortune/FundBackerCart.php',
'FundBackerEditor' => 'applications/fund/editor/FundBackerEditor.php',
'FundBackerListController' => 'applications/fund/controller/FundBackerListController.php',
'FundBackerPHIDType' => 'applications/fund/phid/FundBackerPHIDType.php',
'FundBackerProduct' => 'applications/fund/phortune/FundBackerProduct.php',
'FundBackerQuery' => 'applications/fund/query/FundBackerQuery.php',
'FundBackerSearchEngine' => 'applications/fund/query/FundBackerSearchEngine.php',
'FundBackerTransaction' => 'applications/fund/storage/FundBackerTransaction.php',
'FundBackerTransactionQuery' => 'applications/fund/query/FundBackerTransactionQuery.php',
'FundController' => 'applications/fund/controller/FundController.php',
'FundCreateInitiativesCapability' => 'applications/fund/capability/FundCreateInitiativesCapability.php',
'FundDAO' => 'applications/fund/storage/FundDAO.php',
'FundDefaultViewCapability' => 'applications/fund/capability/FundDefaultViewCapability.php',
'FundInitiative' => 'applications/fund/storage/FundInitiative.php',
'FundInitiativeBackController' => 'applications/fund/controller/FundInitiativeBackController.php',
'FundInitiativeCloseController' => 'applications/fund/controller/FundInitiativeCloseController.php',
'FundInitiativeEditController' => 'applications/fund/controller/FundInitiativeEditController.php',
'FundInitiativeEditor' => 'applications/fund/editor/FundInitiativeEditor.php',
'FundInitiativeIndexer' => 'applications/fund/search/FundInitiativeIndexer.php',
'FundInitiativeListController' => 'applications/fund/controller/FundInitiativeListController.php',
'FundInitiativePHIDType' => 'applications/fund/phid/FundInitiativePHIDType.php',
'FundInitiativeQuery' => 'applications/fund/query/FundInitiativeQuery.php',
'FundInitiativeRemarkupRule' => 'applications/fund/remarkup/FundInitiativeRemarkupRule.php',
'FundInitiativeReplyHandler' => 'applications/fund/mail/FundInitiativeReplyHandler.php',
'FundInitiativeSearchEngine' => 'applications/fund/query/FundInitiativeSearchEngine.php',
'FundInitiativeTransaction' => 'applications/fund/storage/FundInitiativeTransaction.php',
'FundInitiativeTransactionQuery' => 'applications/fund/query/FundInitiativeTransactionQuery.php',
'FundInitiativeViewController' => 'applications/fund/controller/FundInitiativeViewController.php',
'FundSchemaSpec' => 'applications/fund/storage/FundSchemaSpec.php',
'HarbormasterArcLintBuildStepImplementation' => 'applications/harbormaster/step/HarbormasterArcLintBuildStepImplementation.php',
'HarbormasterArcUnitBuildStepImplementation' => 'applications/harbormaster/step/HarbormasterArcUnitBuildStepImplementation.php',
'HarbormasterArtifact' => 'applications/harbormaster/artifact/HarbormasterArtifact.php',
'HarbormasterAutotargetsTestCase' => 'applications/harbormaster/__tests__/HarbormasterAutotargetsTestCase.php',
'HarbormasterBuild' => 'applications/harbormaster/storage/build/HarbormasterBuild.php',
'HarbormasterBuildAbortedException' => 'applications/harbormaster/exception/HarbormasterBuildAbortedException.php',
'HarbormasterBuildActionController' => 'applications/harbormaster/controller/HarbormasterBuildActionController.php',
'HarbormasterBuildArcanistAutoplan' => 'applications/harbormaster/autoplan/HarbormasterBuildArcanistAutoplan.php',
'HarbormasterBuildArtifact' => 'applications/harbormaster/storage/build/HarbormasterBuildArtifact.php',
'HarbormasterBuildArtifactPHIDType' => 'applications/harbormaster/phid/HarbormasterBuildArtifactPHIDType.php',
'HarbormasterBuildArtifactQuery' => 'applications/harbormaster/query/HarbormasterBuildArtifactQuery.php',
'HarbormasterBuildAutoplan' => 'applications/harbormaster/autoplan/HarbormasterBuildAutoplan.php',
'HarbormasterBuildCommand' => 'applications/harbormaster/storage/HarbormasterBuildCommand.php',
'HarbormasterBuildDependencyDatasource' => 'applications/harbormaster/typeahead/HarbormasterBuildDependencyDatasource.php',
'HarbormasterBuildEngine' => 'applications/harbormaster/engine/HarbormasterBuildEngine.php',
'HarbormasterBuildFailureException' => 'applications/harbormaster/exception/HarbormasterBuildFailureException.php',
'HarbormasterBuildGraph' => 'applications/harbormaster/engine/HarbormasterBuildGraph.php',
'HarbormasterBuildLintMessage' => 'applications/harbormaster/storage/build/HarbormasterBuildLintMessage.php',
'HarbormasterBuildLog' => 'applications/harbormaster/storage/build/HarbormasterBuildLog.php',
'HarbormasterBuildLogPHIDType' => 'applications/harbormaster/phid/HarbormasterBuildLogPHIDType.php',
'HarbormasterBuildLogQuery' => 'applications/harbormaster/query/HarbormasterBuildLogQuery.php',
'HarbormasterBuildMessage' => 'applications/harbormaster/storage/HarbormasterBuildMessage.php',
'HarbormasterBuildMessageQuery' => 'applications/harbormaster/query/HarbormasterBuildMessageQuery.php',
'HarbormasterBuildPHIDType' => 'applications/harbormaster/phid/HarbormasterBuildPHIDType.php',
'HarbormasterBuildPlan' => 'applications/harbormaster/storage/configuration/HarbormasterBuildPlan.php',
'HarbormasterBuildPlanDatasource' => 'applications/harbormaster/typeahead/HarbormasterBuildPlanDatasource.php',
'HarbormasterBuildPlanEditor' => 'applications/harbormaster/editor/HarbormasterBuildPlanEditor.php',
'HarbormasterBuildPlanPHIDType' => 'applications/harbormaster/phid/HarbormasterBuildPlanPHIDType.php',
'HarbormasterBuildPlanQuery' => 'applications/harbormaster/query/HarbormasterBuildPlanQuery.php',
'HarbormasterBuildPlanSearchEngine' => 'applications/harbormaster/query/HarbormasterBuildPlanSearchEngine.php',
'HarbormasterBuildPlanTransaction' => 'applications/harbormaster/storage/configuration/HarbormasterBuildPlanTransaction.php',
'HarbormasterBuildPlanTransactionQuery' => 'applications/harbormaster/query/HarbormasterBuildPlanTransactionQuery.php',
'HarbormasterBuildQuery' => 'applications/harbormaster/query/HarbormasterBuildQuery.php',
'HarbormasterBuildStep' => 'applications/harbormaster/storage/configuration/HarbormasterBuildStep.php',
'HarbormasterBuildStepCoreCustomField' => 'applications/harbormaster/customfield/HarbormasterBuildStepCoreCustomField.php',
'HarbormasterBuildStepCustomField' => 'applications/harbormaster/customfield/HarbormasterBuildStepCustomField.php',
'HarbormasterBuildStepEditor' => 'applications/harbormaster/editor/HarbormasterBuildStepEditor.php',
'HarbormasterBuildStepGroup' => 'applications/harbormaster/stepgroup/HarbormasterBuildStepGroup.php',
'HarbormasterBuildStepImplementation' => 'applications/harbormaster/step/HarbormasterBuildStepImplementation.php',
'HarbormasterBuildStepImplementationTestCase' => 'applications/harbormaster/step/__tests__/HarbormasterBuildStepImplementationTestCase.php',
'HarbormasterBuildStepPHIDType' => 'applications/harbormaster/phid/HarbormasterBuildStepPHIDType.php',
'HarbormasterBuildStepQuery' => 'applications/harbormaster/query/HarbormasterBuildStepQuery.php',
'HarbormasterBuildStepTransaction' => 'applications/harbormaster/storage/configuration/HarbormasterBuildStepTransaction.php',
'HarbormasterBuildStepTransactionQuery' => 'applications/harbormaster/query/HarbormasterBuildStepTransactionQuery.php',
'HarbormasterBuildTarget' => 'applications/harbormaster/storage/build/HarbormasterBuildTarget.php',
'HarbormasterBuildTargetPHIDType' => 'applications/harbormaster/phid/HarbormasterBuildTargetPHIDType.php',
'HarbormasterBuildTargetQuery' => 'applications/harbormaster/query/HarbormasterBuildTargetQuery.php',
'HarbormasterBuildTransaction' => 'applications/harbormaster/storage/HarbormasterBuildTransaction.php',
'HarbormasterBuildTransactionEditor' => 'applications/harbormaster/editor/HarbormasterBuildTransactionEditor.php',
'HarbormasterBuildTransactionQuery' => 'applications/harbormaster/query/HarbormasterBuildTransactionQuery.php',
'HarbormasterBuildUnitMessage' => 'applications/harbormaster/storage/build/HarbormasterBuildUnitMessage.php',
'HarbormasterBuildViewController' => 'applications/harbormaster/controller/HarbormasterBuildViewController.php',
'HarbormasterBuildWorker' => 'applications/harbormaster/worker/HarbormasterBuildWorker.php',
'HarbormasterBuildable' => 'applications/harbormaster/storage/HarbormasterBuildable.php',
'HarbormasterBuildableActionController' => 'applications/harbormaster/controller/HarbormasterBuildableActionController.php',
'HarbormasterBuildableAdapterInterface' => 'applications/harbormaster/herald/HarbormasterBuildableAdapterInterface.php',
'HarbormasterBuildableInterface' => 'applications/harbormaster/interface/HarbormasterBuildableInterface.php',
'HarbormasterBuildableListController' => 'applications/harbormaster/controller/HarbormasterBuildableListController.php',
'HarbormasterBuildablePHIDType' => 'applications/harbormaster/phid/HarbormasterBuildablePHIDType.php',
'HarbormasterBuildableQuery' => 'applications/harbormaster/query/HarbormasterBuildableQuery.php',
'HarbormasterBuildableSearchEngine' => 'applications/harbormaster/query/HarbormasterBuildableSearchEngine.php',
'HarbormasterBuildableTransaction' => 'applications/harbormaster/storage/HarbormasterBuildableTransaction.php',
'HarbormasterBuildableTransactionEditor' => 'applications/harbormaster/editor/HarbormasterBuildableTransactionEditor.php',
'HarbormasterBuildableTransactionQuery' => 'applications/harbormaster/query/HarbormasterBuildableTransactionQuery.php',
'HarbormasterBuildableViewController' => 'applications/harbormaster/controller/HarbormasterBuildableViewController.php',
'HarbormasterBuiltinBuildStepGroup' => 'applications/harbormaster/stepgroup/HarbormasterBuiltinBuildStepGroup.php',
'HarbormasterCommandBuildStepImplementation' => 'applications/harbormaster/step/HarbormasterCommandBuildStepImplementation.php',
'HarbormasterConduitAPIMethod' => 'applications/harbormaster/conduit/HarbormasterConduitAPIMethod.php',
'HarbormasterController' => 'applications/harbormaster/controller/HarbormasterController.php',
'HarbormasterCreateArtifactConduitAPIMethod' => 'applications/harbormaster/conduit/HarbormasterCreateArtifactConduitAPIMethod.php',
'HarbormasterDAO' => 'applications/harbormaster/storage/HarbormasterDAO.php',
'HarbormasterExternalBuildStepGroup' => 'applications/harbormaster/stepgroup/HarbormasterExternalBuildStepGroup.php',
'HarbormasterFileArtifact' => 'applications/harbormaster/artifact/HarbormasterFileArtifact.php',
'HarbormasterHTTPRequestBuildStepImplementation' => 'applications/harbormaster/step/HarbormasterHTTPRequestBuildStepImplementation.php',
'HarbormasterHostArtifact' => 'applications/harbormaster/artifact/HarbormasterHostArtifact.php',
'HarbormasterLeaseHostBuildStepImplementation' => 'applications/harbormaster/step/HarbormasterLeaseHostBuildStepImplementation.php',
'HarbormasterLintMessagesController' => 'applications/harbormaster/controller/HarbormasterLintMessagesController.php',
'HarbormasterLintPropertyView' => 'applications/harbormaster/view/HarbormasterLintPropertyView.php',
'HarbormasterManagePlansCapability' => 'applications/harbormaster/capability/HarbormasterManagePlansCapability.php',
'HarbormasterManagementBuildWorkflow' => 'applications/harbormaster/management/HarbormasterManagementBuildWorkflow.php',
'HarbormasterManagementUpdateWorkflow' => 'applications/harbormaster/management/HarbormasterManagementUpdateWorkflow.php',
'HarbormasterManagementWorkflow' => 'applications/harbormaster/management/HarbormasterManagementWorkflow.php',
'HarbormasterMessageType' => 'applications/harbormaster/engine/HarbormasterMessageType.php',
'HarbormasterObject' => 'applications/harbormaster/storage/HarbormasterObject.php',
'HarbormasterOtherBuildStepGroup' => 'applications/harbormaster/stepgroup/HarbormasterOtherBuildStepGroup.php',
'HarbormasterPlanController' => 'applications/harbormaster/controller/HarbormasterPlanController.php',
'HarbormasterPlanDisableController' => 'applications/harbormaster/controller/HarbormasterPlanDisableController.php',
'HarbormasterPlanEditController' => 'applications/harbormaster/controller/HarbormasterPlanEditController.php',
'HarbormasterPlanListController' => 'applications/harbormaster/controller/HarbormasterPlanListController.php',
'HarbormasterPlanRunController' => 'applications/harbormaster/controller/HarbormasterPlanRunController.php',
'HarbormasterPlanViewController' => 'applications/harbormaster/controller/HarbormasterPlanViewController.php',
'HarbormasterPrototypeBuildStepGroup' => 'applications/harbormaster/stepgroup/HarbormasterPrototypeBuildStepGroup.php',
'HarbormasterPublishFragmentBuildStepImplementation' => 'applications/harbormaster/step/HarbormasterPublishFragmentBuildStepImplementation.php',
'HarbormasterQueryAutotargetsConduitAPIMethod' => 'applications/harbormaster/conduit/HarbormasterQueryAutotargetsConduitAPIMethod.php',
'HarbormasterQueryBuildablesConduitAPIMethod' => 'applications/harbormaster/conduit/HarbormasterQueryBuildablesConduitAPIMethod.php',
'HarbormasterQueryBuildsConduitAPIMethod' => 'applications/harbormaster/conduit/HarbormasterQueryBuildsConduitAPIMethod.php',
'HarbormasterRemarkupRule' => 'applications/harbormaster/remarkup/HarbormasterRemarkupRule.php',
'HarbormasterRunBuildPlansHeraldAction' => 'applications/harbormaster/herald/HarbormasterRunBuildPlansHeraldAction.php',
'HarbormasterSchemaSpec' => 'applications/harbormaster/storage/HarbormasterSchemaSpec.php',
'HarbormasterScratchTable' => 'applications/harbormaster/storage/HarbormasterScratchTable.php',
'HarbormasterSendMessageConduitAPIMethod' => 'applications/harbormaster/conduit/HarbormasterSendMessageConduitAPIMethod.php',
'HarbormasterSleepBuildStepImplementation' => 'applications/harbormaster/step/HarbormasterSleepBuildStepImplementation.php',
'HarbormasterStepAddController' => 'applications/harbormaster/controller/HarbormasterStepAddController.php',
'HarbormasterStepDeleteController' => 'applications/harbormaster/controller/HarbormasterStepDeleteController.php',
'HarbormasterStepEditController' => 'applications/harbormaster/controller/HarbormasterStepEditController.php',
'HarbormasterTargetEngine' => 'applications/harbormaster/engine/HarbormasterTargetEngine.php',
'HarbormasterTargetWorker' => 'applications/harbormaster/worker/HarbormasterTargetWorker.php',
'HarbormasterTestBuildStepGroup' => 'applications/harbormaster/stepgroup/HarbormasterTestBuildStepGroup.php',
'HarbormasterThrowExceptionBuildStep' => 'applications/harbormaster/step/HarbormasterThrowExceptionBuildStep.php',
'HarbormasterUIEventListener' => 'applications/harbormaster/event/HarbormasterUIEventListener.php',
'HarbormasterURIArtifact' => 'applications/harbormaster/artifact/HarbormasterURIArtifact.php',
'HarbormasterUnitMessagesController' => 'applications/harbormaster/controller/HarbormasterUnitMessagesController.php',
'HarbormasterUnitPropertyView' => 'applications/harbormaster/view/HarbormasterUnitPropertyView.php',
'HarbormasterUploadArtifactBuildStepImplementation' => 'applications/harbormaster/step/HarbormasterUploadArtifactBuildStepImplementation.php',
'HarbormasterWaitForPreviousBuildStepImplementation' => 'applications/harbormaster/step/HarbormasterWaitForPreviousBuildStepImplementation.php',
'HarbormasterWorker' => 'applications/harbormaster/worker/HarbormasterWorker.php',
'HeraldAction' => 'applications/herald/action/HeraldAction.php',
'HeraldActionGroup' => 'applications/herald/action/HeraldActionGroup.php',
'HeraldActionRecord' => 'applications/herald/storage/HeraldActionRecord.php',
'HeraldAdapter' => 'applications/herald/adapter/HeraldAdapter.php',
'HeraldAlwaysField' => 'applications/herald/field/HeraldAlwaysField.php',
'HeraldAnotherRuleField' => 'applications/herald/field/HeraldAnotherRuleField.php',
'HeraldApplicationActionGroup' => 'applications/herald/action/HeraldApplicationActionGroup.php',
'HeraldApplyTranscript' => 'applications/herald/storage/transcript/HeraldApplyTranscript.php',
'HeraldBasicFieldGroup' => 'applications/herald/field/HeraldBasicFieldGroup.php',
'HeraldCommitAdapter' => 'applications/diffusion/herald/HeraldCommitAdapter.php',
'HeraldCondition' => 'applications/herald/storage/HeraldCondition.php',
'HeraldConditionTranscript' => 'applications/herald/storage/transcript/HeraldConditionTranscript.php',
'HeraldContentSourceField' => 'applications/herald/field/HeraldContentSourceField.php',
'HeraldController' => 'applications/herald/controller/HeraldController.php',
'HeraldDAO' => 'applications/herald/storage/HeraldDAO.php',
'HeraldDifferentialAdapter' => 'applications/differential/herald/HeraldDifferentialAdapter.php',
'HeraldDifferentialDiffAdapter' => 'applications/differential/herald/HeraldDifferentialDiffAdapter.php',
'HeraldDifferentialRevisionAdapter' => 'applications/differential/herald/HeraldDifferentialRevisionAdapter.php',
'HeraldDisableController' => 'applications/herald/controller/HeraldDisableController.php',
'HeraldDoNothingAction' => 'applications/herald/action/HeraldDoNothingAction.php',
'HeraldEditFieldGroup' => 'applications/herald/field/HeraldEditFieldGroup.php',
'HeraldEffect' => 'applications/herald/engine/HeraldEffect.php',
'HeraldEmptyFieldValue' => 'applications/herald/value/HeraldEmptyFieldValue.php',
'HeraldEngine' => 'applications/herald/engine/HeraldEngine.php',
'HeraldField' => 'applications/herald/field/HeraldField.php',
'HeraldFieldGroup' => 'applications/herald/field/HeraldFieldGroup.php',
'HeraldFieldTestCase' => 'applications/herald/field/__tests__/HeraldFieldTestCase.php',
'HeraldFieldValue' => 'applications/herald/value/HeraldFieldValue.php',
'HeraldGroup' => 'applications/herald/group/HeraldGroup.php',
'HeraldInvalidActionException' => 'applications/herald/engine/exception/HeraldInvalidActionException.php',
'HeraldInvalidConditionException' => 'applications/herald/engine/exception/HeraldInvalidConditionException.php',
'HeraldManageGlobalRulesCapability' => 'applications/herald/capability/HeraldManageGlobalRulesCapability.php',
'HeraldManiphestTaskAdapter' => 'applications/maniphest/herald/HeraldManiphestTaskAdapter.php',
'HeraldNewController' => 'applications/herald/controller/HeraldNewController.php',
'HeraldNewObjectField' => 'applications/herald/field/HeraldNewObjectField.php',
'HeraldNotifyActionGroup' => 'applications/herald/action/HeraldNotifyActionGroup.php',
'HeraldObjectTranscript' => 'applications/herald/storage/transcript/HeraldObjectTranscript.php',
'HeraldPholioMockAdapter' => 'applications/pholio/herald/HeraldPholioMockAdapter.php',
'HeraldPonderQuestionAdapter' => 'applications/ponder/herald/HeraldPonderQuestionAdapter.php',
'HeraldPreCommitAdapter' => 'applications/diffusion/herald/HeraldPreCommitAdapter.php',
'HeraldPreCommitContentAdapter' => 'applications/diffusion/herald/HeraldPreCommitContentAdapter.php',
'HeraldPreCommitRefAdapter' => 'applications/diffusion/herald/HeraldPreCommitRefAdapter.php',
'HeraldPreventActionGroup' => 'applications/herald/action/HeraldPreventActionGroup.php',
'HeraldProjectsField' => 'applications/project/herald/HeraldProjectsField.php',
'HeraldRecursiveConditionsException' => 'applications/herald/engine/exception/HeraldRecursiveConditionsException.php',
'HeraldRelatedFieldGroup' => 'applications/herald/field/HeraldRelatedFieldGroup.php',
'HeraldRemarkupRule' => 'applications/herald/remarkup/HeraldRemarkupRule.php',
'HeraldRepetitionPolicyConfig' => 'applications/herald/config/HeraldRepetitionPolicyConfig.php',
'HeraldRule' => 'applications/herald/storage/HeraldRule.php',
'HeraldRuleController' => 'applications/herald/controller/HeraldRuleController.php',
'HeraldRuleEditor' => 'applications/herald/editor/HeraldRuleEditor.php',
'HeraldRuleListController' => 'applications/herald/controller/HeraldRuleListController.php',
'HeraldRulePHIDType' => 'applications/herald/phid/HeraldRulePHIDType.php',
'HeraldRuleQuery' => 'applications/herald/query/HeraldRuleQuery.php',
'HeraldRuleSearchEngine' => 'applications/herald/query/HeraldRuleSearchEngine.php',
'HeraldRuleTestCase' => 'applications/herald/storage/__tests__/HeraldRuleTestCase.php',
'HeraldRuleTransaction' => 'applications/herald/storage/HeraldRuleTransaction.php',
'HeraldRuleTransactionComment' => 'applications/herald/storage/HeraldRuleTransactionComment.php',
'HeraldRuleTranscript' => 'applications/herald/storage/transcript/HeraldRuleTranscript.php',
'HeraldRuleTypeConfig' => 'applications/herald/config/HeraldRuleTypeConfig.php',
'HeraldRuleViewController' => 'applications/herald/controller/HeraldRuleViewController.php',
'HeraldSchemaSpec' => 'applications/herald/storage/HeraldSchemaSpec.php',
'HeraldSelectFieldValue' => 'applications/herald/value/HeraldSelectFieldValue.php',
'HeraldSpaceField' => 'applications/spaces/herald/HeraldSpaceField.php',
'HeraldSubscribersField' => 'applications/subscriptions/herald/HeraldSubscribersField.php',
'HeraldSupportActionGroup' => 'applications/herald/action/HeraldSupportActionGroup.php',
'HeraldSupportFieldGroup' => 'applications/herald/field/HeraldSupportFieldGroup.php',
'HeraldTestConsoleController' => 'applications/herald/controller/HeraldTestConsoleController.php',
'HeraldTextFieldValue' => 'applications/herald/value/HeraldTextFieldValue.php',
'HeraldTokenizerFieldValue' => 'applications/herald/value/HeraldTokenizerFieldValue.php',
'HeraldTransactionQuery' => 'applications/herald/query/HeraldTransactionQuery.php',
'HeraldTranscript' => 'applications/herald/storage/transcript/HeraldTranscript.php',
'HeraldTranscriptController' => 'applications/herald/controller/HeraldTranscriptController.php',
'HeraldTranscriptGarbageCollector' => 'applications/herald/garbagecollector/HeraldTranscriptGarbageCollector.php',
'HeraldTranscriptListController' => 'applications/herald/controller/HeraldTranscriptListController.php',
'HeraldTranscriptQuery' => 'applications/herald/query/HeraldTranscriptQuery.php',
'HeraldTranscriptSearchEngine' => 'applications/herald/query/HeraldTranscriptSearchEngine.php',
'HeraldTranscriptTestCase' => 'applications/herald/storage/__tests__/HeraldTranscriptTestCase.php',
'HeraldUtilityActionGroup' => 'applications/herald/action/HeraldUtilityActionGroup.php',
'Javelin' => 'infrastructure/javelin/Javelin.php',
'JavelinReactorUIExample' => 'applications/uiexample/examples/JavelinReactorUIExample.php',
'JavelinUIExample' => 'applications/uiexample/examples/JavelinUIExample.php',
'JavelinViewExampleServerView' => 'applications/uiexample/examples/JavelinViewExampleServerView.php',
'JavelinViewUIExample' => 'applications/uiexample/examples/JavelinViewUIExample.php',
'LegalpadController' => 'applications/legalpad/controller/LegalpadController.php',
'LegalpadCreateDocumentsCapability' => 'applications/legalpad/capability/LegalpadCreateDocumentsCapability.php',
'LegalpadDAO' => 'applications/legalpad/storage/LegalpadDAO.php',
'LegalpadDefaultEditCapability' => 'applications/legalpad/capability/LegalpadDefaultEditCapability.php',
'LegalpadDefaultViewCapability' => 'applications/legalpad/capability/LegalpadDefaultViewCapability.php',
'LegalpadDocument' => 'applications/legalpad/storage/LegalpadDocument.php',
'LegalpadDocumentBody' => 'applications/legalpad/storage/LegalpadDocumentBody.php',
'LegalpadDocumentCommentController' => 'applications/legalpad/controller/LegalpadDocumentCommentController.php',
'LegalpadDocumentDatasource' => 'applications/legalpad/typeahead/LegalpadDocumentDatasource.php',
'LegalpadDocumentDoneController' => 'applications/legalpad/controller/LegalpadDocumentDoneController.php',
'LegalpadDocumentEditController' => 'applications/legalpad/controller/LegalpadDocumentEditController.php',
'LegalpadDocumentEditor' => 'applications/legalpad/editor/LegalpadDocumentEditor.php',
'LegalpadDocumentListController' => 'applications/legalpad/controller/LegalpadDocumentListController.php',
'LegalpadDocumentManageController' => 'applications/legalpad/controller/LegalpadDocumentManageController.php',
'LegalpadDocumentQuery' => 'applications/legalpad/query/LegalpadDocumentQuery.php',
'LegalpadDocumentRemarkupRule' => 'applications/legalpad/remarkup/LegalpadDocumentRemarkupRule.php',
'LegalpadDocumentSearchEngine' => 'applications/legalpad/query/LegalpadDocumentSearchEngine.php',
'LegalpadDocumentSignController' => 'applications/legalpad/controller/LegalpadDocumentSignController.php',
'LegalpadDocumentSignature' => 'applications/legalpad/storage/LegalpadDocumentSignature.php',
'LegalpadDocumentSignatureAddController' => 'applications/legalpad/controller/LegalpadDocumentSignatureAddController.php',
'LegalpadDocumentSignatureListController' => 'applications/legalpad/controller/LegalpadDocumentSignatureListController.php',
'LegalpadDocumentSignatureQuery' => 'applications/legalpad/query/LegalpadDocumentSignatureQuery.php',
'LegalpadDocumentSignatureSearchEngine' => 'applications/legalpad/query/LegalpadDocumentSignatureSearchEngine.php',
'LegalpadDocumentSignatureVerificationController' => 'applications/legalpad/controller/LegalpadDocumentSignatureVerificationController.php',
'LegalpadDocumentSignatureViewController' => 'applications/legalpad/controller/LegalpadDocumentSignatureViewController.php',
'LegalpadMailReceiver' => 'applications/legalpad/mail/LegalpadMailReceiver.php',
'LegalpadObjectNeedsSignatureEdgeType' => 'applications/legalpad/edge/LegalpadObjectNeedsSignatureEdgeType.php',
'LegalpadReplyHandler' => 'applications/legalpad/mail/LegalpadReplyHandler.php',
'LegalpadRequireSignatureHeraldAction' => 'applications/legalpad/herald/LegalpadRequireSignatureHeraldAction.php',
'LegalpadSchemaSpec' => 'applications/legalpad/storage/LegalpadSchemaSpec.php',
'LegalpadSignatureNeededByObjectEdgeType' => 'applications/legalpad/edge/LegalpadSignatureNeededByObjectEdgeType.php',
'LegalpadTransaction' => 'applications/legalpad/storage/LegalpadTransaction.php',
'LegalpadTransactionComment' => 'applications/legalpad/storage/LegalpadTransactionComment.php',
'LegalpadTransactionQuery' => 'applications/legalpad/query/LegalpadTransactionQuery.php',
'LegalpadTransactionView' => 'applications/legalpad/view/LegalpadTransactionView.php',
'LiskChunkTestCase' => 'infrastructure/storage/lisk/__tests__/LiskChunkTestCase.php',
'LiskDAO' => 'infrastructure/storage/lisk/LiskDAO.php',
'LiskDAOSet' => 'infrastructure/storage/lisk/LiskDAOSet.php',
'LiskDAOTestCase' => 'infrastructure/storage/lisk/__tests__/LiskDAOTestCase.php',
'LiskEphemeralObjectException' => 'infrastructure/storage/lisk/LiskEphemeralObjectException.php',
'LiskFixtureTestCase' => 'infrastructure/storage/lisk/__tests__/LiskFixtureTestCase.php',
'LiskIsolationTestCase' => 'infrastructure/storage/lisk/__tests__/LiskIsolationTestCase.php',
'LiskIsolationTestDAO' => 'infrastructure/storage/lisk/__tests__/LiskIsolationTestDAO.php',
'LiskIsolationTestDAOException' => 'infrastructure/storage/lisk/__tests__/LiskIsolationTestDAOException.php',
'LiskMigrationIterator' => 'infrastructure/storage/lisk/LiskMigrationIterator.php',
'LiskRawMigrationIterator' => 'infrastructure/storage/lisk/LiskRawMigrationIterator.php',
'MacroConduitAPIMethod' => 'applications/macro/conduit/MacroConduitAPIMethod.php',
'MacroCreateMemeConduitAPIMethod' => 'applications/macro/conduit/MacroCreateMemeConduitAPIMethod.php',
'MacroQueryConduitAPIMethod' => 'applications/macro/conduit/MacroQueryConduitAPIMethod.php',
'ManiphestAssignEmailCommand' => 'applications/maniphest/command/ManiphestAssignEmailCommand.php',
'ManiphestAssigneeDatasource' => 'applications/maniphest/typeahead/ManiphestAssigneeDatasource.php',
'ManiphestBatchEditController' => 'applications/maniphest/controller/ManiphestBatchEditController.php',
'ManiphestBulkEditCapability' => 'applications/maniphest/capability/ManiphestBulkEditCapability.php',
'ManiphestClaimEmailCommand' => 'applications/maniphest/command/ManiphestClaimEmailCommand.php',
'ManiphestCloseEmailCommand' => 'applications/maniphest/command/ManiphestCloseEmailCommand.php',
'ManiphestConduitAPIMethod' => 'applications/maniphest/conduit/ManiphestConduitAPIMethod.php',
'ManiphestConfiguredCustomField' => 'applications/maniphest/field/ManiphestConfiguredCustomField.php',
'ManiphestConstants' => 'applications/maniphest/constants/ManiphestConstants.php',
'ManiphestController' => 'applications/maniphest/controller/ManiphestController.php',
'ManiphestCreateMailReceiver' => 'applications/maniphest/mail/ManiphestCreateMailReceiver.php',
'ManiphestCreateTaskConduitAPIMethod' => 'applications/maniphest/conduit/ManiphestCreateTaskConduitAPIMethod.php',
'ManiphestCustomField' => 'applications/maniphest/field/ManiphestCustomField.php',
'ManiphestCustomFieldNumericIndex' => 'applications/maniphest/storage/ManiphestCustomFieldNumericIndex.php',
'ManiphestCustomFieldStatusParser' => 'applications/maniphest/field/parser/ManiphestCustomFieldStatusParser.php',
'ManiphestCustomFieldStatusParserTestCase' => 'applications/maniphest/field/parser/__tests__/ManiphestCustomFieldStatusParserTestCase.php',
'ManiphestCustomFieldStorage' => 'applications/maniphest/storage/ManiphestCustomFieldStorage.php',
'ManiphestCustomFieldStringIndex' => 'applications/maniphest/storage/ManiphestCustomFieldStringIndex.php',
'ManiphestDAO' => 'applications/maniphest/storage/ManiphestDAO.php',
'ManiphestDefaultEditCapability' => 'applications/maniphest/capability/ManiphestDefaultEditCapability.php',
'ManiphestDefaultViewCapability' => 'applications/maniphest/capability/ManiphestDefaultViewCapability.php',
'ManiphestEditAssignCapability' => 'applications/maniphest/capability/ManiphestEditAssignCapability.php',
'ManiphestEditPoliciesCapability' => 'applications/maniphest/capability/ManiphestEditPoliciesCapability.php',
'ManiphestEditPriorityCapability' => 'applications/maniphest/capability/ManiphestEditPriorityCapability.php',
'ManiphestEditProjectsCapability' => 'applications/maniphest/capability/ManiphestEditProjectsCapability.php',
'ManiphestEditStatusCapability' => 'applications/maniphest/capability/ManiphestEditStatusCapability.php',
'ManiphestEmailCommand' => 'applications/maniphest/command/ManiphestEmailCommand.php',
'ManiphestExcelDefaultFormat' => 'applications/maniphest/export/ManiphestExcelDefaultFormat.php',
'ManiphestExcelFormat' => 'applications/maniphest/export/ManiphestExcelFormat.php',
'ManiphestExcelFormatTestCase' => 'applications/maniphest/export/__tests__/ManiphestExcelFormatTestCase.php',
'ManiphestExportController' => 'applications/maniphest/controller/ManiphestExportController.php',
'ManiphestGetTaskTransactionsConduitAPIMethod' => 'applications/maniphest/conduit/ManiphestGetTaskTransactionsConduitAPIMethod.php',
'ManiphestHovercardEventListener' => 'applications/maniphest/event/ManiphestHovercardEventListener.php',
'ManiphestInfoConduitAPIMethod' => 'applications/maniphest/conduit/ManiphestInfoConduitAPIMethod.php',
'ManiphestNameIndex' => 'applications/maniphest/storage/ManiphestNameIndex.php',
'ManiphestNameIndexEventListener' => 'applications/maniphest/event/ManiphestNameIndexEventListener.php',
'ManiphestPriorityEmailCommand' => 'applications/maniphest/command/ManiphestPriorityEmailCommand.php',
'ManiphestQueryConduitAPIMethod' => 'applications/maniphest/conduit/ManiphestQueryConduitAPIMethod.php',
'ManiphestQueryStatusesConduitAPIMethod' => 'applications/maniphest/conduit/ManiphestQueryStatusesConduitAPIMethod.php',
'ManiphestRemarkupRule' => 'applications/maniphest/remarkup/ManiphestRemarkupRule.php',
'ManiphestReplyHandler' => 'applications/maniphest/mail/ManiphestReplyHandler.php',
'ManiphestReportController' => 'applications/maniphest/controller/ManiphestReportController.php',
'ManiphestSchemaSpec' => 'applications/maniphest/storage/ManiphestSchemaSpec.php',
'ManiphestSearchIndexer' => 'applications/maniphest/search/ManiphestSearchIndexer.php',
'ManiphestStatusConfigOptionType' => 'applications/maniphest/config/ManiphestStatusConfigOptionType.php',
'ManiphestStatusEmailCommand' => 'applications/maniphest/command/ManiphestStatusEmailCommand.php',
'ManiphestSubpriorityController' => 'applications/maniphest/controller/ManiphestSubpriorityController.php',
'ManiphestTask' => 'applications/maniphest/storage/ManiphestTask.php',
'ManiphestTaskAssignHeraldAction' => 'applications/maniphest/herald/ManiphestTaskAssignHeraldAction.php',
'ManiphestTaskAssignOtherHeraldAction' => 'applications/maniphest/herald/ManiphestTaskAssignOtherHeraldAction.php',
'ManiphestTaskAssignSelfHeraldAction' => 'applications/maniphest/herald/ManiphestTaskAssignSelfHeraldAction.php',
'ManiphestTaskAssigneeHeraldField' => 'applications/maniphest/herald/ManiphestTaskAssigneeHeraldField.php',
'ManiphestTaskAuthorHeraldField' => 'applications/maniphest/herald/ManiphestTaskAuthorHeraldField.php',
'ManiphestTaskAuthorPolicyRule' => 'applications/maniphest/policyrule/ManiphestTaskAuthorPolicyRule.php',
'ManiphestTaskClosedStatusDatasource' => 'applications/maniphest/typeahead/ManiphestTaskClosedStatusDatasource.php',
'ManiphestTaskDependedOnByTaskEdgeType' => 'applications/maniphest/edge/ManiphestTaskDependedOnByTaskEdgeType.php',
'ManiphestTaskDependsOnTaskEdgeType' => 'applications/maniphest/edge/ManiphestTaskDependsOnTaskEdgeType.php',
'ManiphestTaskDescriptionHeraldField' => 'applications/maniphest/herald/ManiphestTaskDescriptionHeraldField.php',
'ManiphestTaskDetailController' => 'applications/maniphest/controller/ManiphestTaskDetailController.php',
'ManiphestTaskEditBulkJobType' => 'applications/maniphest/bulk/ManiphestTaskEditBulkJobType.php',
'ManiphestTaskEditController' => 'applications/maniphest/controller/ManiphestTaskEditController.php',
'ManiphestTaskHasCommitEdgeType' => 'applications/maniphest/edge/ManiphestTaskHasCommitEdgeType.php',
'ManiphestTaskHasMockEdgeType' => 'applications/maniphest/edge/ManiphestTaskHasMockEdgeType.php',
'ManiphestTaskHasRevisionEdgeType' => 'applications/maniphest/edge/ManiphestTaskHasRevisionEdgeType.php',
'ManiphestTaskHeraldField' => 'applications/maniphest/herald/ManiphestTaskHeraldField.php',
'ManiphestTaskHeraldFieldGroup' => 'applications/maniphest/herald/ManiphestTaskHeraldFieldGroup.php',
'ManiphestTaskListController' => 'applications/maniphest/controller/ManiphestTaskListController.php',
'ManiphestTaskListView' => 'applications/maniphest/view/ManiphestTaskListView.php',
'ManiphestTaskMailReceiver' => 'applications/maniphest/mail/ManiphestTaskMailReceiver.php',
'ManiphestTaskOpenStatusDatasource' => 'applications/maniphest/typeahead/ManiphestTaskOpenStatusDatasource.php',
'ManiphestTaskPHIDType' => 'applications/maniphest/phid/ManiphestTaskPHIDType.php',
'ManiphestTaskPriority' => 'applications/maniphest/constants/ManiphestTaskPriority.php',
'ManiphestTaskPriorityDatasource' => 'applications/maniphest/typeahead/ManiphestTaskPriorityDatasource.php',
'ManiphestTaskPriorityHeraldField' => 'applications/maniphest/herald/ManiphestTaskPriorityHeraldField.php',
'ManiphestTaskQuery' => 'applications/maniphest/query/ManiphestTaskQuery.php',
'ManiphestTaskResultListView' => 'applications/maniphest/view/ManiphestTaskResultListView.php',
'ManiphestTaskSearchEngine' => 'applications/maniphest/query/ManiphestTaskSearchEngine.php',
'ManiphestTaskStatus' => 'applications/maniphest/constants/ManiphestTaskStatus.php',
'ManiphestTaskStatusDatasource' => 'applications/maniphest/typeahead/ManiphestTaskStatusDatasource.php',
'ManiphestTaskStatusFunctionDatasource' => 'applications/maniphest/typeahead/ManiphestTaskStatusFunctionDatasource.php',
'ManiphestTaskStatusHeraldField' => 'applications/maniphest/herald/ManiphestTaskStatusHeraldField.php',
'ManiphestTaskStatusTestCase' => 'applications/maniphest/constants/__tests__/ManiphestTaskStatusTestCase.php',
'ManiphestTaskTestCase' => 'applications/maniphest/__tests__/ManiphestTaskTestCase.php',
'ManiphestTaskTitleHeraldField' => 'applications/maniphest/herald/ManiphestTaskTitleHeraldField.php',
'ManiphestTransaction' => 'applications/maniphest/storage/ManiphestTransaction.php',
'ManiphestTransactionComment' => 'applications/maniphest/storage/ManiphestTransactionComment.php',
'ManiphestTransactionEditor' => 'applications/maniphest/editor/ManiphestTransactionEditor.php',
'ManiphestTransactionPreviewController' => 'applications/maniphest/controller/ManiphestTransactionPreviewController.php',
'ManiphestTransactionQuery' => 'applications/maniphest/query/ManiphestTransactionQuery.php',
'ManiphestTransactionSaveController' => 'applications/maniphest/controller/ManiphestTransactionSaveController.php',
'ManiphestUpdateConduitAPIMethod' => 'applications/maniphest/conduit/ManiphestUpdateConduitAPIMethod.php',
'ManiphestView' => 'applications/maniphest/view/ManiphestView.php',
'MetaMTAEmailTransactionCommand' => 'applications/metamta/command/MetaMTAEmailTransactionCommand.php',
'MetaMTAEmailTransactionCommandTestCase' => 'applications/metamta/command/__tests__/MetaMTAEmailTransactionCommandTestCase.php',
'MetaMTAMailReceivedGarbageCollector' => 'applications/metamta/garbagecollector/MetaMTAMailReceivedGarbageCollector.php',
'MetaMTAMailSentGarbageCollector' => 'applications/metamta/garbagecollector/MetaMTAMailSentGarbageCollector.php',
'MetaMTAReceivedMailStatus' => 'applications/metamta/constants/MetaMTAReceivedMailStatus.php',
'MultimeterContext' => 'applications/multimeter/storage/MultimeterContext.php',
'MultimeterControl' => 'applications/multimeter/data/MultimeterControl.php',
'MultimeterController' => 'applications/multimeter/controller/MultimeterController.php',
'MultimeterDAO' => 'applications/multimeter/storage/MultimeterDAO.php',
'MultimeterDimension' => 'applications/multimeter/storage/MultimeterDimension.php',
'MultimeterEvent' => 'applications/multimeter/storage/MultimeterEvent.php',
'MultimeterEventGarbageCollector' => 'applications/multimeter/garbagecollector/MultimeterEventGarbageCollector.php',
'MultimeterHost' => 'applications/multimeter/storage/MultimeterHost.php',
'MultimeterLabel' => 'applications/multimeter/storage/MultimeterLabel.php',
'MultimeterSampleController' => 'applications/multimeter/controller/MultimeterSampleController.php',
'MultimeterViewer' => 'applications/multimeter/storage/MultimeterViewer.php',
'NuanceConduitAPIMethod' => 'applications/nuance/conduit/NuanceConduitAPIMethod.php',
'NuanceConsoleController' => 'applications/nuance/controller/NuanceConsoleController.php',
'NuanceController' => 'applications/nuance/controller/NuanceController.php',
'NuanceCreateItemConduitAPIMethod' => 'applications/nuance/conduit/NuanceCreateItemConduitAPIMethod.php',
'NuanceDAO' => 'applications/nuance/storage/NuanceDAO.php',
'NuanceItem' => 'applications/nuance/storage/NuanceItem.php',
'NuanceItemEditController' => 'applications/nuance/controller/NuanceItemEditController.php',
'NuanceItemEditor' => 'applications/nuance/editor/NuanceItemEditor.php',
'NuanceItemPHIDType' => 'applications/nuance/phid/NuanceItemPHIDType.php',
'NuanceItemQuery' => 'applications/nuance/query/NuanceItemQuery.php',
'NuanceItemTransaction' => 'applications/nuance/storage/NuanceItemTransaction.php',
'NuanceItemTransactionComment' => 'applications/nuance/storage/NuanceItemTransactionComment.php',
'NuanceItemTransactionQuery' => 'applications/nuance/query/NuanceItemTransactionQuery.php',
'NuanceItemViewController' => 'applications/nuance/controller/NuanceItemViewController.php',
'NuancePhabricatorFormSourceDefinition' => 'applications/nuance/source/NuancePhabricatorFormSourceDefinition.php',
'NuanceQuery' => 'applications/nuance/query/NuanceQuery.php',
'NuanceQueue' => 'applications/nuance/storage/NuanceQueue.php',
'NuanceQueueDatasource' => 'applications/nuance/typeahead/NuanceQueueDatasource.php',
'NuanceQueueEditController' => 'applications/nuance/controller/NuanceQueueEditController.php',
'NuanceQueueEditor' => 'applications/nuance/editor/NuanceQueueEditor.php',
'NuanceQueueListController' => 'applications/nuance/controller/NuanceQueueListController.php',
'NuanceQueuePHIDType' => 'applications/nuance/phid/NuanceQueuePHIDType.php',
'NuanceQueueQuery' => 'applications/nuance/query/NuanceQueueQuery.php',
'NuanceQueueSearchEngine' => 'applications/nuance/query/NuanceQueueSearchEngine.php',
'NuanceQueueTransaction' => 'applications/nuance/storage/NuanceQueueTransaction.php',
'NuanceQueueTransactionComment' => 'applications/nuance/storage/NuanceQueueTransactionComment.php',
'NuanceQueueTransactionQuery' => 'applications/nuance/query/NuanceQueueTransactionQuery.php',
'NuanceQueueViewController' => 'applications/nuance/controller/NuanceQueueViewController.php',
'NuanceRequestor' => 'applications/nuance/storage/NuanceRequestor.php',
'NuanceRequestorEditController' => 'applications/nuance/controller/NuanceRequestorEditController.php',
'NuanceRequestorEditor' => 'applications/nuance/editor/NuanceRequestorEditor.php',
'NuanceRequestorPHIDType' => 'applications/nuance/phid/NuanceRequestorPHIDType.php',
'NuanceRequestorQuery' => 'applications/nuance/query/NuanceRequestorQuery.php',
'NuanceRequestorSource' => 'applications/nuance/storage/NuanceRequestorSource.php',
'NuanceRequestorTransaction' => 'applications/nuance/storage/NuanceRequestorTransaction.php',
'NuanceRequestorTransactionComment' => 'applications/nuance/storage/NuanceRequestorTransactionComment.php',
'NuanceRequestorTransactionQuery' => 'applications/nuance/query/NuanceRequestorTransactionQuery.php',
'NuanceRequestorViewController' => 'applications/nuance/controller/NuanceRequestorViewController.php',
'NuanceSchemaSpec' => 'applications/nuance/storage/NuanceSchemaSpec.php',
'NuanceSource' => 'applications/nuance/storage/NuanceSource.php',
'NuanceSourceActionController' => 'applications/nuance/controller/NuanceSourceActionController.php',
'NuanceSourceCreateController' => 'applications/nuance/controller/NuanceSourceCreateController.php',
'NuanceSourceDefaultEditCapability' => 'applications/nuance/capability/NuanceSourceDefaultEditCapability.php',
'NuanceSourceDefaultViewCapability' => 'applications/nuance/capability/NuanceSourceDefaultViewCapability.php',
'NuanceSourceDefinition' => 'applications/nuance/source/NuanceSourceDefinition.php',
'NuanceSourceDefinitionTestCase' => 'applications/nuance/source/__tests__/NuanceSourceDefinitionTestCase.php',
'NuanceSourceEditController' => 'applications/nuance/controller/NuanceSourceEditController.php',
'NuanceSourceEditor' => 'applications/nuance/editor/NuanceSourceEditor.php',
'NuanceSourceListController' => 'applications/nuance/controller/NuanceSourceListController.php',
'NuanceSourceManageCapability' => 'applications/nuance/capability/NuanceSourceManageCapability.php',
'NuanceSourcePHIDType' => 'applications/nuance/phid/NuanceSourcePHIDType.php',
'NuanceSourceQuery' => 'applications/nuance/query/NuanceSourceQuery.php',
'NuanceSourceSearchEngine' => 'applications/nuance/query/NuanceSourceSearchEngine.php',
'NuanceSourceTransaction' => 'applications/nuance/storage/NuanceSourceTransaction.php',
'NuanceSourceTransactionComment' => 'applications/nuance/storage/NuanceSourceTransactionComment.php',
'NuanceSourceTransactionQuery' => 'applications/nuance/query/NuanceSourceTransactionQuery.php',
'NuanceSourceViewController' => 'applications/nuance/controller/NuanceSourceViewController.php',
'NuanceTransaction' => 'applications/nuance/storage/NuanceTransaction.php',
'OwnersConduitAPIMethod' => 'applications/owners/conduit/OwnersConduitAPIMethod.php',
'OwnersPackageReplyHandler' => 'applications/owners/mail/OwnersPackageReplyHandler.php',
'OwnersQueryConduitAPIMethod' => 'applications/owners/conduit/OwnersQueryConduitAPIMethod.php',
'PHIDConduitAPIMethod' => 'applications/phid/conduit/PHIDConduitAPIMethod.php',
'PHIDInfoConduitAPIMethod' => 'applications/phid/conduit/PHIDInfoConduitAPIMethod.php',
'PHIDLookupConduitAPIMethod' => 'applications/phid/conduit/PHIDLookupConduitAPIMethod.php',
'PHIDQueryConduitAPIMethod' => 'applications/phid/conduit/PHIDQueryConduitAPIMethod.php',
'PHUI' => 'view/phui/PHUI.php',
'PHUIActionPanelExample' => 'applications/uiexample/examples/PHUIActionPanelExample.php',
'PHUIActionPanelView' => 'view/phui/PHUIActionPanelView.php',
'PHUIBadgeBoxView' => 'view/phui/PHUIBadgeBoxView.php',
'PHUIBadgeExample' => 'applications/uiexample/examples/PHUIBadgeExample.php',
'PHUIBadgeMiniView' => 'view/phui/PHUIBadgeMiniView.php',
'PHUIBadgeView' => 'view/phui/PHUIBadgeView.php',
'PHUIBoxExample' => 'applications/uiexample/examples/PHUIBoxExample.php',
'PHUIBoxView' => 'view/phui/PHUIBoxView.php',
'PHUIButtonBarExample' => 'applications/uiexample/examples/PHUIButtonBarExample.php',
'PHUIButtonBarView' => 'view/phui/PHUIButtonBarView.php',
'PHUIButtonExample' => 'applications/uiexample/examples/PHUIButtonExample.php',
'PHUIButtonView' => 'view/phui/PHUIButtonView.php',
'PHUICalendarDayView' => 'view/phui/calendar/PHUICalendarDayView.php',
'PHUICalendarListView' => 'view/phui/calendar/PHUICalendarListView.php',
'PHUICalendarMonthView' => 'view/phui/calendar/PHUICalendarMonthView.php',
'PHUICalendarWidgetView' => 'view/phui/calendar/PHUICalendarWidgetView.php',
'PHUIColorPalletteExample' => 'applications/uiexample/examples/PHUIColorPalletteExample.php',
'PHUICrumbView' => 'view/phui/PHUICrumbView.php',
'PHUICrumbsView' => 'view/phui/PHUICrumbsView.php',
'PHUIDiffInlineCommentDetailView' => 'infrastructure/diff/view/PHUIDiffInlineCommentDetailView.php',
'PHUIDiffInlineCommentEditView' => 'infrastructure/diff/view/PHUIDiffInlineCommentEditView.php',
'PHUIDiffInlineCommentRowScaffold' => 'infrastructure/diff/view/PHUIDiffInlineCommentRowScaffold.php',
'PHUIDiffInlineCommentTableScaffold' => 'infrastructure/diff/view/PHUIDiffInlineCommentTableScaffold.php',
'PHUIDiffInlineCommentUndoView' => 'infrastructure/diff/view/PHUIDiffInlineCommentUndoView.php',
'PHUIDiffInlineCommentView' => 'infrastructure/diff/view/PHUIDiffInlineCommentView.php',
'PHUIDiffOneUpInlineCommentRowScaffold' => 'infrastructure/diff/view/PHUIDiffOneUpInlineCommentRowScaffold.php',
'PHUIDiffRevealIconView' => 'infrastructure/diff/view/PHUIDiffRevealIconView.php',
'PHUIDiffTableOfContentsItemView' => 'infrastructure/diff/view/PHUIDiffTableOfContentsItemView.php',
'PHUIDiffTableOfContentsListView' => 'infrastructure/diff/view/PHUIDiffTableOfContentsListView.php',
'PHUIDiffTwoUpInlineCommentRowScaffold' => 'infrastructure/diff/view/PHUIDiffTwoUpInlineCommentRowScaffold.php',
'PHUIDocumentExample' => 'applications/uiexample/examples/PHUIDocumentExample.php',
'PHUIDocumentView' => 'view/phui/PHUIDocumentView.php',
'PHUIFeedStoryExample' => 'applications/uiexample/examples/PHUIFeedStoryExample.php',
'PHUIFeedStoryView' => 'view/phui/PHUIFeedStoryView.php',
'PHUIFormDividerControl' => 'view/form/control/PHUIFormDividerControl.php',
'PHUIFormFreeformDateControl' => 'view/form/control/PHUIFormFreeformDateControl.php',
'PHUIFormInsetView' => 'view/form/PHUIFormInsetView.php',
'PHUIFormLayoutView' => 'view/form/PHUIFormLayoutView.php',
'PHUIFormMultiSubmitControl' => 'view/form/control/PHUIFormMultiSubmitControl.php',
'PHUIFormPageView' => 'view/form/PHUIFormPageView.php',
'PHUIHandleListView' => 'applications/phid/view/PHUIHandleListView.php',
'PHUIHandleTagListView' => 'applications/phid/view/PHUIHandleTagListView.php',
'PHUIHandleView' => 'applications/phid/view/PHUIHandleView.php',
'PHUIHeaderView' => 'view/phui/PHUIHeaderView.php',
'PHUIIconExample' => 'applications/uiexample/examples/PHUIIconExample.php',
'PHUIIconView' => 'view/phui/PHUIIconView.php',
'PHUIImageMaskExample' => 'applications/uiexample/examples/PHUIImageMaskExample.php',
'PHUIImageMaskView' => 'view/phui/PHUIImageMaskView.php',
'PHUIInfoExample' => 'applications/uiexample/examples/PHUIInfoExample.php',
'PHUIInfoPanelExample' => 'applications/uiexample/examples/PHUIInfoPanelExample.php',
'PHUIInfoPanelView' => 'view/phui/PHUIInfoPanelView.php',
'PHUIInfoView' => 'view/form/PHUIInfoView.php',
'PHUIListExample' => 'applications/uiexample/examples/PHUIListExample.php',
'PHUIListItemView' => 'view/phui/PHUIListItemView.php',
'PHUIListView' => 'view/phui/PHUIListView.php',
'PHUIListViewTestCase' => 'view/layout/__tests__/PHUIListViewTestCase.php',
'PHUIObjectBoxView' => 'view/phui/PHUIObjectBoxView.php',
'PHUIObjectItemListExample' => 'applications/uiexample/examples/PHUIObjectItemListExample.php',
'PHUIObjectItemListView' => 'view/phui/PHUIObjectItemListView.php',
'PHUIObjectItemView' => 'view/phui/PHUIObjectItemView.php',
'PHUIPagedFormView' => 'view/form/PHUIPagedFormView.php',
'PHUIPagerView' => 'view/phui/PHUIPagerView.php',
'PHUIPinboardItemView' => 'view/phui/PHUIPinboardItemView.php',
'PHUIPinboardView' => 'view/phui/PHUIPinboardView.php',
'PHUIPropertyGroupView' => 'view/phui/PHUIPropertyGroupView.php',
'PHUIPropertyListExample' => 'applications/uiexample/examples/PHUIPropertyListExample.php',
'PHUIPropertyListView' => 'view/phui/PHUIPropertyListView.php',
'PHUIRemarkupPreviewPanel' => 'view/phui/PHUIRemarkupPreviewPanel.php',
'PHUISpacesNamespaceContextView' => 'applications/spaces/view/PHUISpacesNamespaceContextView.php',
'PHUIStatusItemView' => 'view/phui/PHUIStatusItemView.php',
'PHUIStatusListView' => 'view/phui/PHUIStatusListView.php',
'PHUITagExample' => 'applications/uiexample/examples/PHUITagExample.php',
'PHUITagView' => 'view/phui/PHUITagView.php',
'PHUITextExample' => 'applications/uiexample/examples/PHUITextExample.php',
'PHUITextView' => 'view/phui/PHUITextView.php',
'PHUITimelineEventView' => 'view/phui/PHUITimelineEventView.php',
'PHUITimelineExample' => 'applications/uiexample/examples/PHUITimelineExample.php',
'PHUITimelineView' => 'view/phui/PHUITimelineView.php',
'PHUITwoColumnView' => 'view/phui/PHUITwoColumnView.php',
'PHUITypeaheadExample' => 'applications/uiexample/examples/PHUITypeaheadExample.php',
'PHUIWorkboardView' => 'view/phui/PHUIWorkboardView.php',
'PHUIWorkpanelView' => 'view/phui/PHUIWorkpanelView.php',
'PassphraseAbstractKey' => 'applications/passphrase/keys/PassphraseAbstractKey.php',
'PassphraseConduitAPIMethod' => 'applications/passphrase/conduit/PassphraseConduitAPIMethod.php',
'PassphraseController' => 'applications/passphrase/controller/PassphraseController.php',
'PassphraseCredential' => 'applications/passphrase/storage/PassphraseCredential.php',
'PassphraseCredentialAuthorPolicyRule' => 'applications/passphrase/policyrule/PassphraseCredentialAuthorPolicyRule.php',
'PassphraseCredentialConduitController' => 'applications/passphrase/controller/PassphraseCredentialConduitController.php',
'PassphraseCredentialControl' => 'applications/passphrase/view/PassphraseCredentialControl.php',
'PassphraseCredentialCreateController' => 'applications/passphrase/controller/PassphraseCredentialCreateController.php',
'PassphraseCredentialDestroyController' => 'applications/passphrase/controller/PassphraseCredentialDestroyController.php',
'PassphraseCredentialEditController' => 'applications/passphrase/controller/PassphraseCredentialEditController.php',
'PassphraseCredentialListController' => 'applications/passphrase/controller/PassphraseCredentialListController.php',
'PassphraseCredentialLockController' => 'applications/passphrase/controller/PassphraseCredentialLockController.php',
'PassphraseCredentialPHIDType' => 'applications/passphrase/phid/PassphraseCredentialPHIDType.php',
'PassphraseCredentialPublicController' => 'applications/passphrase/controller/PassphraseCredentialPublicController.php',
'PassphraseCredentialQuery' => 'applications/passphrase/query/PassphraseCredentialQuery.php',
'PassphraseCredentialRevealController' => 'applications/passphrase/controller/PassphraseCredentialRevealController.php',
'PassphraseCredentialSearchEngine' => 'applications/passphrase/query/PassphraseCredentialSearchEngine.php',
'PassphraseCredentialTransaction' => 'applications/passphrase/storage/PassphraseCredentialTransaction.php',
'PassphraseCredentialTransactionEditor' => 'applications/passphrase/editor/PassphraseCredentialTransactionEditor.php',
'PassphraseCredentialTransactionQuery' => 'applications/passphrase/query/PassphraseCredentialTransactionQuery.php',
'PassphraseCredentialType' => 'applications/passphrase/credentialtype/PassphraseCredentialType.php',
'PassphraseCredentialTypeTestCase' => 'applications/passphrase/credentialtype/__tests__/PassphraseCredentialTypeTestCase.php',
'PassphraseCredentialViewController' => 'applications/passphrase/controller/PassphraseCredentialViewController.php',
'PassphraseDAO' => 'applications/passphrase/storage/PassphraseDAO.php',
'PassphraseDefaultEditCapability' => 'applications/passphrase/capability/PassphraseDefaultEditCapability.php',
'PassphraseDefaultViewCapability' => 'applications/passphrase/capability/PassphraseDefaultViewCapability.php',
'PassphraseNoteCredentialType' => 'applications/passphrase/credentialtype/PassphraseNoteCredentialType.php',
'PassphrasePasswordCredentialType' => 'applications/passphrase/credentialtype/PassphrasePasswordCredentialType.php',
'PassphrasePasswordKey' => 'applications/passphrase/keys/PassphrasePasswordKey.php',
'PassphraseQueryConduitAPIMethod' => 'applications/passphrase/conduit/PassphraseQueryConduitAPIMethod.php',
'PassphraseRemarkupRule' => 'applications/passphrase/remarkup/PassphraseRemarkupRule.php',
'PassphraseSSHGeneratedKeyCredentialType' => 'applications/passphrase/credentialtype/PassphraseSSHGeneratedKeyCredentialType.php',
'PassphraseSSHKey' => 'applications/passphrase/keys/PassphraseSSHKey.php',
'PassphraseSSHPrivateKeyCredentialType' => 'applications/passphrase/credentialtype/PassphraseSSHPrivateKeyCredentialType.php',
'PassphraseSSHPrivateKeyFileCredentialType' => 'applications/passphrase/credentialtype/PassphraseSSHPrivateKeyFileCredentialType.php',
'PassphraseSSHPrivateKeyTextCredentialType' => 'applications/passphrase/credentialtype/PassphraseSSHPrivateKeyTextCredentialType.php',
'PassphraseSchemaSpec' => 'applications/passphrase/storage/PassphraseSchemaSpec.php',
'PassphraseSearchIndexer' => 'applications/passphrase/search/PassphraseSearchIndexer.php',
'PassphraseSecret' => 'applications/passphrase/storage/PassphraseSecret.php',
'PasteConduitAPIMethod' => 'applications/paste/conduit/PasteConduitAPIMethod.php',
'PasteCreateConduitAPIMethod' => 'applications/paste/conduit/PasteCreateConduitAPIMethod.php',
'PasteCreateMailReceiver' => 'applications/paste/mail/PasteCreateMailReceiver.php',
'PasteDefaultEditCapability' => 'applications/paste/capability/PasteDefaultEditCapability.php',
'PasteDefaultViewCapability' => 'applications/paste/capability/PasteDefaultViewCapability.php',
'PasteEmbedView' => 'applications/paste/view/PasteEmbedView.php',
'PasteInfoConduitAPIMethod' => 'applications/paste/conduit/PasteInfoConduitAPIMethod.php',
'PasteMailReceiver' => 'applications/paste/mail/PasteMailReceiver.php',
'PasteQueryConduitAPIMethod' => 'applications/paste/conduit/PasteQueryConduitAPIMethod.php',
'PasteReplyHandler' => 'applications/paste/mail/PasteReplyHandler.php',
'PeopleBrowseUserDirectoryCapability' => 'applications/people/capability/PeopleBrowseUserDirectoryCapability.php',
'PeopleCreateUsersCapability' => 'applications/people/capability/PeopleCreateUsersCapability.php',
'PeopleUserLogGarbageCollector' => 'applications/people/garbagecollector/PeopleUserLogGarbageCollector.php',
'Phabricator404Controller' => 'applications/base/controller/Phabricator404Controller.php',
'PhabricatorAWSConfigOptions' => 'applications/config/option/PhabricatorAWSConfigOptions.php',
'PhabricatorAccessControlTestCase' => 'applications/base/controller/__tests__/PhabricatorAccessControlTestCase.php',
'PhabricatorAccessLog' => 'infrastructure/log/PhabricatorAccessLog.php',
'PhabricatorAccessLogConfigOptions' => 'applications/config/option/PhabricatorAccessLogConfigOptions.php',
'PhabricatorAccountSettingsPanel' => 'applications/settings/panel/PhabricatorAccountSettingsPanel.php',
'PhabricatorActionListView' => 'view/layout/PhabricatorActionListView.php',
'PhabricatorActionView' => 'view/layout/PhabricatorActionView.php',
'PhabricatorActivitySettingsPanel' => 'applications/settings/panel/PhabricatorActivitySettingsPanel.php',
'PhabricatorAdministratorsPolicyRule' => 'applications/policy/rule/PhabricatorAdministratorsPolicyRule.php',
'PhabricatorAjaxRequestExceptionHandler' => 'aphront/handler/PhabricatorAjaxRequestExceptionHandler.php',
'PhabricatorAlmanacApplication' => 'applications/almanac/application/PhabricatorAlmanacApplication.php',
'PhabricatorAmazonAuthProvider' => 'applications/auth/provider/PhabricatorAmazonAuthProvider.php',
'PhabricatorAnchorView' => 'view/layout/PhabricatorAnchorView.php',
'PhabricatorAphlictManagementDebugWorkflow' => 'applications/aphlict/management/PhabricatorAphlictManagementDebugWorkflow.php',
'PhabricatorAphlictManagementRestartWorkflow' => 'applications/aphlict/management/PhabricatorAphlictManagementRestartWorkflow.php',
'PhabricatorAphlictManagementStartWorkflow' => 'applications/aphlict/management/PhabricatorAphlictManagementStartWorkflow.php',
'PhabricatorAphlictManagementStatusWorkflow' => 'applications/aphlict/management/PhabricatorAphlictManagementStatusWorkflow.php',
'PhabricatorAphlictManagementStopWorkflow' => 'applications/aphlict/management/PhabricatorAphlictManagementStopWorkflow.php',
'PhabricatorAphlictManagementWorkflow' => 'applications/aphlict/management/PhabricatorAphlictManagementWorkflow.php',
'PhabricatorAphlictSetupCheck' => 'applications/notification/setup/PhabricatorAphlictSetupCheck.php',
'PhabricatorAphrontBarUIExample' => 'applications/uiexample/examples/PhabricatorAphrontBarUIExample.php',
'PhabricatorAphrontViewTestCase' => 'view/__tests__/PhabricatorAphrontViewTestCase.php',
'PhabricatorAppSearchEngine' => 'applications/meta/query/PhabricatorAppSearchEngine.php',
'PhabricatorApplication' => 'applications/base/PhabricatorApplication.php',
'PhabricatorApplicationApplicationPHIDType' => 'applications/meta/phid/PhabricatorApplicationApplicationPHIDType.php',
'PhabricatorApplicationConfigOptions' => 'applications/config/option/PhabricatorApplicationConfigOptions.php',
'PhabricatorApplicationConfigurationPanel' => 'applications/meta/panel/PhabricatorApplicationConfigurationPanel.php',
'PhabricatorApplicationConfigurationPanelTestCase' => 'applications/meta/panel/__tests__/PhabricatorApplicationConfigurationPanelTestCase.php',
'PhabricatorApplicationDatasource' => 'applications/meta/typeahead/PhabricatorApplicationDatasource.php',
'PhabricatorApplicationDetailViewController' => 'applications/meta/controller/PhabricatorApplicationDetailViewController.php',
'PhabricatorApplicationEditController' => 'applications/meta/controller/PhabricatorApplicationEditController.php',
'PhabricatorApplicationEmailCommandsController' => 'applications/meta/controller/PhabricatorApplicationEmailCommandsController.php',
'PhabricatorApplicationLaunchView' => 'applications/meta/view/PhabricatorApplicationLaunchView.php',
'PhabricatorApplicationPanelController' => 'applications/meta/controller/PhabricatorApplicationPanelController.php',
'PhabricatorApplicationQuery' => 'applications/meta/query/PhabricatorApplicationQuery.php',
'PhabricatorApplicationSearchController' => 'applications/search/controller/PhabricatorApplicationSearchController.php',
'PhabricatorApplicationSearchEngine' => 'applications/search/engine/PhabricatorApplicationSearchEngine.php',
'PhabricatorApplicationSearchEngineTestCase' => 'applications/search/engine/__tests__/PhabricatorApplicationSearchEngineTestCase.php',
'PhabricatorApplicationSearchResultView' => 'applications/search/view/PhabricatorApplicationSearchResultView.php',
'PhabricatorApplicationStatusView' => 'applications/meta/view/PhabricatorApplicationStatusView.php',
'PhabricatorApplicationTestCase' => 'applications/base/__tests__/PhabricatorApplicationTestCase.php',
'PhabricatorApplicationTransaction' => 'applications/transactions/storage/PhabricatorApplicationTransaction.php',
'PhabricatorApplicationTransactionComment' => 'applications/transactions/storage/PhabricatorApplicationTransactionComment.php',
'PhabricatorApplicationTransactionCommentEditController' => 'applications/transactions/controller/PhabricatorApplicationTransactionCommentEditController.php',
'PhabricatorApplicationTransactionCommentEditor' => 'applications/transactions/editor/PhabricatorApplicationTransactionCommentEditor.php',
'PhabricatorApplicationTransactionCommentHistoryController' => 'applications/transactions/controller/PhabricatorApplicationTransactionCommentHistoryController.php',
'PhabricatorApplicationTransactionCommentQuery' => 'applications/transactions/query/PhabricatorApplicationTransactionCommentQuery.php',
'PhabricatorApplicationTransactionCommentQuoteController' => 'applications/transactions/controller/PhabricatorApplicationTransactionCommentQuoteController.php',
'PhabricatorApplicationTransactionCommentRawController' => 'applications/transactions/controller/PhabricatorApplicationTransactionCommentRawController.php',
'PhabricatorApplicationTransactionCommentRemoveController' => 'applications/transactions/controller/PhabricatorApplicationTransactionCommentRemoveController.php',
'PhabricatorApplicationTransactionCommentView' => 'applications/transactions/view/PhabricatorApplicationTransactionCommentView.php',
'PhabricatorApplicationTransactionController' => 'applications/transactions/controller/PhabricatorApplicationTransactionController.php',
'PhabricatorApplicationTransactionDetailController' => 'applications/transactions/controller/PhabricatorApplicationTransactionDetailController.php',
'PhabricatorApplicationTransactionEditor' => 'applications/transactions/editor/PhabricatorApplicationTransactionEditor.php',
'PhabricatorApplicationTransactionFeedStory' => 'applications/transactions/feed/PhabricatorApplicationTransactionFeedStory.php',
'PhabricatorApplicationTransactionInterface' => 'applications/transactions/interface/PhabricatorApplicationTransactionInterface.php',
'PhabricatorApplicationTransactionNoEffectException' => 'applications/transactions/exception/PhabricatorApplicationTransactionNoEffectException.php',
'PhabricatorApplicationTransactionNoEffectResponse' => 'applications/transactions/response/PhabricatorApplicationTransactionNoEffectResponse.php',
'PhabricatorApplicationTransactionPublishWorker' => 'applications/transactions/worker/PhabricatorApplicationTransactionPublishWorker.php',
'PhabricatorApplicationTransactionQuery' => 'applications/transactions/query/PhabricatorApplicationTransactionQuery.php',
'PhabricatorApplicationTransactionReplyHandler' => 'applications/transactions/replyhandler/PhabricatorApplicationTransactionReplyHandler.php',
'PhabricatorApplicationTransactionResponse' => 'applications/transactions/response/PhabricatorApplicationTransactionResponse.php',
'PhabricatorApplicationTransactionShowOlderController' => 'applications/transactions/controller/PhabricatorApplicationTransactionShowOlderController.php',
'PhabricatorApplicationTransactionStructureException' => 'applications/transactions/exception/PhabricatorApplicationTransactionStructureException.php',
'PhabricatorApplicationTransactionTemplatedCommentQuery' => 'applications/transactions/query/PhabricatorApplicationTransactionTemplatedCommentQuery.php',
'PhabricatorApplicationTransactionTextDiffDetailView' => 'applications/transactions/view/PhabricatorApplicationTransactionTextDiffDetailView.php',
'PhabricatorApplicationTransactionTransactionPHIDType' => 'applications/transactions/phid/PhabricatorApplicationTransactionTransactionPHIDType.php',
'PhabricatorApplicationTransactionValidationError' => 'applications/transactions/error/PhabricatorApplicationTransactionValidationError.php',
'PhabricatorApplicationTransactionValidationException' => 'applications/transactions/exception/PhabricatorApplicationTransactionValidationException.php',
'PhabricatorApplicationTransactionValidationResponse' => 'applications/transactions/response/PhabricatorApplicationTransactionValidationResponse.php',
'PhabricatorApplicationTransactionValueController' => 'applications/transactions/controller/PhabricatorApplicationTransactionValueController.php',
'PhabricatorApplicationTransactionView' => 'applications/transactions/view/PhabricatorApplicationTransactionView.php',
'PhabricatorApplicationUninstallController' => 'applications/meta/controller/PhabricatorApplicationUninstallController.php',
'PhabricatorApplicationsApplication' => 'applications/meta/application/PhabricatorApplicationsApplication.php',
'PhabricatorApplicationsController' => 'applications/meta/controller/PhabricatorApplicationsController.php',
'PhabricatorApplicationsListController' => 'applications/meta/controller/PhabricatorApplicationsListController.php',
'PhabricatorAsanaAuthProvider' => 'applications/auth/provider/PhabricatorAsanaAuthProvider.php',
'PhabricatorAsanaConfigOptions' => 'applications/doorkeeper/option/PhabricatorAsanaConfigOptions.php',
'PhabricatorAsanaSubtaskHasObjectEdgeType' => 'applications/doorkeeper/edge/PhabricatorAsanaSubtaskHasObjectEdgeType.php',
'PhabricatorAsanaTaskHasObjectEdgeType' => 'applications/doorkeeper/edge/PhabricatorAsanaTaskHasObjectEdgeType.php',
'PhabricatorAuditActionConstants' => 'applications/audit/constants/PhabricatorAuditActionConstants.php',
'PhabricatorAuditAddCommentController' => 'applications/audit/controller/PhabricatorAuditAddCommentController.php',
'PhabricatorAuditApplication' => 'applications/audit/application/PhabricatorAuditApplication.php',
'PhabricatorAuditCommentEditor' => 'applications/audit/editor/PhabricatorAuditCommentEditor.php',
'PhabricatorAuditCommitStatusConstants' => 'applications/audit/constants/PhabricatorAuditCommitStatusConstants.php',
'PhabricatorAuditController' => 'applications/audit/controller/PhabricatorAuditController.php',
'PhabricatorAuditEditor' => 'applications/audit/editor/PhabricatorAuditEditor.php',
'PhabricatorAuditInlineComment' => 'applications/audit/storage/PhabricatorAuditInlineComment.php',
'PhabricatorAuditListController' => 'applications/audit/controller/PhabricatorAuditListController.php',
'PhabricatorAuditListView' => 'applications/audit/view/PhabricatorAuditListView.php',
'PhabricatorAuditMailReceiver' => 'applications/audit/mail/PhabricatorAuditMailReceiver.php',
'PhabricatorAuditManagementDeleteWorkflow' => 'applications/audit/management/PhabricatorAuditManagementDeleteWorkflow.php',
'PhabricatorAuditManagementWorkflow' => 'applications/audit/management/PhabricatorAuditManagementWorkflow.php',
'PhabricatorAuditPreviewController' => 'applications/audit/controller/PhabricatorAuditPreviewController.php',
'PhabricatorAuditReplyHandler' => 'applications/audit/mail/PhabricatorAuditReplyHandler.php',
'PhabricatorAuditStatusConstants' => 'applications/audit/constants/PhabricatorAuditStatusConstants.php',
'PhabricatorAuditTransaction' => 'applications/audit/storage/PhabricatorAuditTransaction.php',
'PhabricatorAuditTransactionComment' => 'applications/audit/storage/PhabricatorAuditTransactionComment.php',
'PhabricatorAuditTransactionQuery' => 'applications/audit/query/PhabricatorAuditTransactionQuery.php',
'PhabricatorAuditTransactionView' => 'applications/audit/view/PhabricatorAuditTransactionView.php',
'PhabricatorAuthAccountView' => 'applications/auth/view/PhabricatorAuthAccountView.php',
'PhabricatorAuthApplication' => 'applications/auth/application/PhabricatorAuthApplication.php',
'PhabricatorAuthAuthFactorPHIDType' => 'applications/auth/phid/PhabricatorAuthAuthFactorPHIDType.php',
'PhabricatorAuthAuthProviderPHIDType' => 'applications/auth/phid/PhabricatorAuthAuthProviderPHIDType.php',
'PhabricatorAuthConduitAPIMethod' => 'applications/auth/conduit/PhabricatorAuthConduitAPIMethod.php',
'PhabricatorAuthConfirmLinkController' => 'applications/auth/controller/PhabricatorAuthConfirmLinkController.php',
'PhabricatorAuthController' => 'applications/auth/controller/PhabricatorAuthController.php',
'PhabricatorAuthDAO' => 'applications/auth/storage/PhabricatorAuthDAO.php',
'PhabricatorAuthDisableController' => 'applications/auth/controller/config/PhabricatorAuthDisableController.php',
'PhabricatorAuthDowngradeSessionController' => 'applications/auth/controller/PhabricatorAuthDowngradeSessionController.php',
'PhabricatorAuthEditController' => 'applications/auth/controller/config/PhabricatorAuthEditController.php',
'PhabricatorAuthFactor' => 'applications/auth/factor/PhabricatorAuthFactor.php',
'PhabricatorAuthFactorConfig' => 'applications/auth/storage/PhabricatorAuthFactorConfig.php',
'PhabricatorAuthFactorTestCase' => 'applications/auth/factor/__tests__/PhabricatorAuthFactorTestCase.php',
'PhabricatorAuthFinishController' => 'applications/auth/controller/PhabricatorAuthFinishController.php',
'PhabricatorAuthHighSecurityRequiredException' => 'applications/auth/exception/PhabricatorAuthHighSecurityRequiredException.php',
'PhabricatorAuthHighSecurityToken' => 'applications/auth/data/PhabricatorAuthHighSecurityToken.php',
'PhabricatorAuthInvite' => 'applications/auth/storage/PhabricatorAuthInvite.php',
'PhabricatorAuthInviteAccountException' => 'applications/auth/exception/PhabricatorAuthInviteAccountException.php',
'PhabricatorAuthInviteAction' => 'applications/auth/data/PhabricatorAuthInviteAction.php',
'PhabricatorAuthInviteActionTableView' => 'applications/auth/view/PhabricatorAuthInviteActionTableView.php',
'PhabricatorAuthInviteController' => 'applications/auth/controller/PhabricatorAuthInviteController.php',
'PhabricatorAuthInviteDialogException' => 'applications/auth/exception/PhabricatorAuthInviteDialogException.php',
'PhabricatorAuthInviteEngine' => 'applications/auth/engine/PhabricatorAuthInviteEngine.php',
'PhabricatorAuthInviteException' => 'applications/auth/exception/PhabricatorAuthInviteException.php',
'PhabricatorAuthInviteInvalidException' => 'applications/auth/exception/PhabricatorAuthInviteInvalidException.php',
'PhabricatorAuthInviteLoginException' => 'applications/auth/exception/PhabricatorAuthInviteLoginException.php',
'PhabricatorAuthInvitePHIDType' => 'applications/auth/phid/PhabricatorAuthInvitePHIDType.php',
'PhabricatorAuthInviteQuery' => 'applications/auth/query/PhabricatorAuthInviteQuery.php',
'PhabricatorAuthInviteRegisteredException' => 'applications/auth/exception/PhabricatorAuthInviteRegisteredException.php',
'PhabricatorAuthInviteSearchEngine' => 'applications/auth/query/PhabricatorAuthInviteSearchEngine.php',
'PhabricatorAuthInviteTestCase' => 'applications/auth/factor/__tests__/PhabricatorAuthInviteTestCase.php',
'PhabricatorAuthInviteVerifyException' => 'applications/auth/exception/PhabricatorAuthInviteVerifyException.php',
'PhabricatorAuthInviteWorker' => 'applications/auth/worker/PhabricatorAuthInviteWorker.php',
'PhabricatorAuthLinkController' => 'applications/auth/controller/PhabricatorAuthLinkController.php',
'PhabricatorAuthListController' => 'applications/auth/controller/config/PhabricatorAuthListController.php',
'PhabricatorAuthLoginController' => 'applications/auth/controller/PhabricatorAuthLoginController.php',
'PhabricatorAuthLoginHandler' => 'applications/auth/handler/PhabricatorAuthLoginHandler.php',
'PhabricatorAuthManagementCachePKCS8Workflow' => 'applications/auth/management/PhabricatorAuthManagementCachePKCS8Workflow.php',
'PhabricatorAuthManagementLDAPWorkflow' => 'applications/auth/management/PhabricatorAuthManagementLDAPWorkflow.php',
'PhabricatorAuthManagementListFactorsWorkflow' => 'applications/auth/management/PhabricatorAuthManagementListFactorsWorkflow.php',
'PhabricatorAuthManagementRecoverWorkflow' => 'applications/auth/management/PhabricatorAuthManagementRecoverWorkflow.php',
'PhabricatorAuthManagementRefreshWorkflow' => 'applications/auth/management/PhabricatorAuthManagementRefreshWorkflow.php',
'PhabricatorAuthManagementStripWorkflow' => 'applications/auth/management/PhabricatorAuthManagementStripWorkflow.php',
'PhabricatorAuthManagementTrustOAuthClientWorkflow' => 'applications/auth/management/PhabricatorAuthManagementTrustOAuthClientWorkflow.php',
+ 'PhabricatorAuthManagementUnlimitWorkflow' => 'applications/auth/management/PhabricatorAuthManagementUnlimitWorkflow.php',
'PhabricatorAuthManagementUntrustOAuthClientWorkflow' => 'applications/auth/management/PhabricatorAuthManagementUntrustOAuthClientWorkflow.php',
'PhabricatorAuthManagementVerifyWorkflow' => 'applications/auth/management/PhabricatorAuthManagementVerifyWorkflow.php',
'PhabricatorAuthManagementWorkflow' => 'applications/auth/management/PhabricatorAuthManagementWorkflow.php',
'PhabricatorAuthNeedsApprovalController' => 'applications/auth/controller/PhabricatorAuthNeedsApprovalController.php',
'PhabricatorAuthNeedsMultiFactorController' => 'applications/auth/controller/PhabricatorAuthNeedsMultiFactorController.php',
'PhabricatorAuthNewController' => 'applications/auth/controller/config/PhabricatorAuthNewController.php',
'PhabricatorAuthOldOAuthRedirectController' => 'applications/auth/controller/PhabricatorAuthOldOAuthRedirectController.php',
'PhabricatorAuthOneTimeLoginController' => 'applications/auth/controller/PhabricatorAuthOneTimeLoginController.php',
'PhabricatorAuthProvider' => 'applications/auth/provider/PhabricatorAuthProvider.php',
'PhabricatorAuthProviderConfig' => 'applications/auth/storage/PhabricatorAuthProviderConfig.php',
'PhabricatorAuthProviderConfigController' => 'applications/auth/controller/config/PhabricatorAuthProviderConfigController.php',
'PhabricatorAuthProviderConfigEditor' => 'applications/auth/editor/PhabricatorAuthProviderConfigEditor.php',
'PhabricatorAuthProviderConfigQuery' => 'applications/auth/query/PhabricatorAuthProviderConfigQuery.php',
'PhabricatorAuthProviderConfigTransaction' => 'applications/auth/storage/PhabricatorAuthProviderConfigTransaction.php',
'PhabricatorAuthProviderConfigTransactionQuery' => 'applications/auth/query/PhabricatorAuthProviderConfigTransactionQuery.php',
'PhabricatorAuthQueryPublicKeysConduitAPIMethod' => 'applications/auth/conduit/PhabricatorAuthQueryPublicKeysConduitAPIMethod.php',
'PhabricatorAuthRegisterController' => 'applications/auth/controller/PhabricatorAuthRegisterController.php',
'PhabricatorAuthRevokeTokenController' => 'applications/auth/controller/PhabricatorAuthRevokeTokenController.php',
'PhabricatorAuthSSHKey' => 'applications/auth/storage/PhabricatorAuthSSHKey.php',
'PhabricatorAuthSSHKeyController' => 'applications/auth/controller/PhabricatorAuthSSHKeyController.php',
'PhabricatorAuthSSHKeyDeleteController' => 'applications/auth/controller/PhabricatorAuthSSHKeyDeleteController.php',
'PhabricatorAuthSSHKeyEditController' => 'applications/auth/controller/PhabricatorAuthSSHKeyEditController.php',
'PhabricatorAuthSSHKeyGenerateController' => 'applications/auth/controller/PhabricatorAuthSSHKeyGenerateController.php',
'PhabricatorAuthSSHKeyQuery' => 'applications/auth/query/PhabricatorAuthSSHKeyQuery.php',
'PhabricatorAuthSSHKeyTableView' => 'applications/auth/view/PhabricatorAuthSSHKeyTableView.php',
'PhabricatorAuthSSHPublicKey' => 'applications/auth/sshkey/PhabricatorAuthSSHPublicKey.php',
'PhabricatorAuthSession' => 'applications/auth/storage/PhabricatorAuthSession.php',
'PhabricatorAuthSessionEngine' => 'applications/auth/engine/PhabricatorAuthSessionEngine.php',
'PhabricatorAuthSessionGarbageCollector' => 'applications/auth/garbagecollector/PhabricatorAuthSessionGarbageCollector.php',
'PhabricatorAuthSessionQuery' => 'applications/auth/query/PhabricatorAuthSessionQuery.php',
'PhabricatorAuthSetupCheck' => 'applications/config/check/PhabricatorAuthSetupCheck.php',
'PhabricatorAuthStartController' => 'applications/auth/controller/PhabricatorAuthStartController.php',
'PhabricatorAuthTemporaryToken' => 'applications/auth/storage/PhabricatorAuthTemporaryToken.php',
'PhabricatorAuthTemporaryTokenGarbageCollector' => 'applications/auth/garbagecollector/PhabricatorAuthTemporaryTokenGarbageCollector.php',
'PhabricatorAuthTemporaryTokenQuery' => 'applications/auth/query/PhabricatorAuthTemporaryTokenQuery.php',
'PhabricatorAuthTerminateSessionController' => 'applications/auth/controller/PhabricatorAuthTerminateSessionController.php',
'PhabricatorAuthTryFactorAction' => 'applications/auth/action/PhabricatorAuthTryFactorAction.php',
'PhabricatorAuthUnlinkController' => 'applications/auth/controller/PhabricatorAuthUnlinkController.php',
'PhabricatorAuthValidateController' => 'applications/auth/controller/PhabricatorAuthValidateController.php',
'PhabricatorAuthenticationConfigOptions' => 'applications/config/option/PhabricatorAuthenticationConfigOptions.php',
'PhabricatorAutoEventListener' => 'infrastructure/events/PhabricatorAutoEventListener.php',
'PhabricatorBadgeHasRecipientEdgeType' => 'applications/badges/edge/PhabricatorBadgeHasRecipientEdgeType.php',
'PhabricatorBadgesApplication' => 'applications/badges/application/PhabricatorBadgesApplication.php',
'PhabricatorBadgesBadge' => 'applications/badges/storage/PhabricatorBadgesBadge.php',
'PhabricatorBadgesCommentController' => 'applications/badges/controller/PhabricatorBadgesCommentController.php',
'PhabricatorBadgesController' => 'applications/badges/controller/PhabricatorBadgesController.php',
'PhabricatorBadgesCreateCapability' => 'applications/badges/capability/PhabricatorBadgesCreateCapability.php',
'PhabricatorBadgesDAO' => 'applications/badges/storage/PhabricatorBadgesDAO.php',
'PhabricatorBadgesDefaultEditCapability' => 'applications/badges/capability/PhabricatorBadgesDefaultEditCapability.php',
'PhabricatorBadgesEditController' => 'applications/badges/controller/PhabricatorBadgesEditController.php',
'PhabricatorBadgesEditIconController' => 'applications/badges/controller/PhabricatorBadgesEditIconController.php',
'PhabricatorBadgesEditRecipientsController' => 'applications/badges/controller/PhabricatorBadgesEditRecipientsController.php',
'PhabricatorBadgesEditor' => 'applications/badges/editor/PhabricatorBadgesEditor.php',
'PhabricatorBadgesIcon' => 'applications/badges/icon/PhabricatorBadgesIcon.php',
'PhabricatorBadgesListController' => 'applications/badges/controller/PhabricatorBadgesListController.php',
'PhabricatorBadgesMailReceiver' => 'applications/badges/mail/PhabricatorBadgesMailReceiver.php',
'PhabricatorBadgesPHIDType' => 'applications/badges/phid/PhabricatorBadgesPHIDType.php',
'PhabricatorBadgesQuery' => 'applications/badges/query/PhabricatorBadgesQuery.php',
'PhabricatorBadgesRecipientsListView' => 'applications/badges/view/PhabricatorBadgesRecipientsListView.php',
'PhabricatorBadgesRemoveRecipientsController' => 'applications/badges/controller/PhabricatorBadgesRemoveRecipientsController.php',
'PhabricatorBadgesReplyHandler' => 'applications/badges/mail/PhabricatorBadgesReplyHandler.php',
'PhabricatorBadgesSchemaSpec' => 'applications/badges/storage/PhabricatorBadgesSchemaSpec.php',
'PhabricatorBadgesSearchEngine' => 'applications/badges/query/PhabricatorBadgesSearchEngine.php',
'PhabricatorBadgesTransaction' => 'applications/badges/storage/PhabricatorBadgesTransaction.php',
'PhabricatorBadgesTransactionComment' => 'applications/badges/storage/PhabricatorBadgesTransactionComment.php',
'PhabricatorBadgesTransactionQuery' => 'applications/badges/query/PhabricatorBadgesTransactionQuery.php',
'PhabricatorBadgesViewController' => 'applications/badges/controller/PhabricatorBadgesViewController.php',
'PhabricatorBarePageUIExample' => 'applications/uiexample/examples/PhabricatorBarePageUIExample.php',
'PhabricatorBarePageView' => 'view/page/PhabricatorBarePageView.php',
'PhabricatorBaseURISetupCheck' => 'applications/config/check/PhabricatorBaseURISetupCheck.php',
'PhabricatorBcryptPasswordHasher' => 'infrastructure/util/password/PhabricatorBcryptPasswordHasher.php',
'PhabricatorBinariesSetupCheck' => 'applications/config/check/PhabricatorBinariesSetupCheck.php',
'PhabricatorBitbucketAuthProvider' => 'applications/auth/provider/PhabricatorBitbucketAuthProvider.php',
'PhabricatorBot' => 'infrastructure/daemon/bot/PhabricatorBot.php',
'PhabricatorBotChannel' => 'infrastructure/daemon/bot/target/PhabricatorBotChannel.php',
'PhabricatorBotDebugLogHandler' => 'infrastructure/daemon/bot/handler/PhabricatorBotDebugLogHandler.php',
'PhabricatorBotFeedNotificationHandler' => 'infrastructure/daemon/bot/handler/PhabricatorBotFeedNotificationHandler.php',
'PhabricatorBotFlowdockProtocolAdapter' => 'infrastructure/daemon/bot/adapter/PhabricatorBotFlowdockProtocolAdapter.php',
'PhabricatorBotHandler' => 'infrastructure/daemon/bot/handler/PhabricatorBotHandler.php',
'PhabricatorBotLogHandler' => 'infrastructure/daemon/bot/handler/PhabricatorBotLogHandler.php',
'PhabricatorBotMacroHandler' => 'infrastructure/daemon/bot/handler/PhabricatorBotMacroHandler.php',
'PhabricatorBotMessage' => 'infrastructure/daemon/bot/PhabricatorBotMessage.php',
'PhabricatorBotObjectNameHandler' => 'infrastructure/daemon/bot/handler/PhabricatorBotObjectNameHandler.php',
'PhabricatorBotSymbolHandler' => 'infrastructure/daemon/bot/handler/PhabricatorBotSymbolHandler.php',
'PhabricatorBotTarget' => 'infrastructure/daemon/bot/target/PhabricatorBotTarget.php',
'PhabricatorBotUser' => 'infrastructure/daemon/bot/target/PhabricatorBotUser.php',
'PhabricatorBotWhatsNewHandler' => 'infrastructure/daemon/bot/handler/PhabricatorBotWhatsNewHandler.php',
'PhabricatorBritishEnglishTranslation' => 'infrastructure/internationalization/translation/PhabricatorBritishEnglishTranslation.php',
'PhabricatorBuiltinPatchList' => 'infrastructure/storage/patch/PhabricatorBuiltinPatchList.php',
'PhabricatorBusyUIExample' => 'applications/uiexample/examples/PhabricatorBusyUIExample.php',
'PhabricatorCacheDAO' => 'applications/cache/storage/PhabricatorCacheDAO.php',
'PhabricatorCacheGeneralGarbageCollector' => 'applications/cache/garbagecollector/PhabricatorCacheGeneralGarbageCollector.php',
'PhabricatorCacheManagementPurgeWorkflow' => 'applications/cache/management/PhabricatorCacheManagementPurgeWorkflow.php',
'PhabricatorCacheManagementWorkflow' => 'applications/cache/management/PhabricatorCacheManagementWorkflow.php',
'PhabricatorCacheMarkupGarbageCollector' => 'applications/cache/garbagecollector/PhabricatorCacheMarkupGarbageCollector.php',
'PhabricatorCacheSchemaSpec' => 'applications/cache/storage/PhabricatorCacheSchemaSpec.php',
'PhabricatorCacheSetupCheck' => 'applications/config/check/PhabricatorCacheSetupCheck.php',
'PhabricatorCacheSpec' => 'applications/cache/spec/PhabricatorCacheSpec.php',
'PhabricatorCacheTTLGarbageCollector' => 'applications/cache/garbagecollector/PhabricatorCacheTTLGarbageCollector.php',
'PhabricatorCaches' => 'applications/cache/PhabricatorCaches.php',
'PhabricatorCachesTestCase' => 'applications/cache/__tests__/PhabricatorCachesTestCase.php',
'PhabricatorCalendarApplication' => 'applications/calendar/application/PhabricatorCalendarApplication.php',
'PhabricatorCalendarController' => 'applications/calendar/controller/PhabricatorCalendarController.php',
'PhabricatorCalendarDAO' => 'applications/calendar/storage/PhabricatorCalendarDAO.php',
'PhabricatorCalendarEvent' => 'applications/calendar/storage/PhabricatorCalendarEvent.php',
'PhabricatorCalendarEventCancelController' => 'applications/calendar/controller/PhabricatorCalendarEventCancelController.php',
'PhabricatorCalendarEventCommentController' => 'applications/calendar/controller/PhabricatorCalendarEventCommentController.php',
'PhabricatorCalendarEventDragController' => 'applications/calendar/controller/PhabricatorCalendarEventDragController.php',
'PhabricatorCalendarEventEditController' => 'applications/calendar/controller/PhabricatorCalendarEventEditController.php',
'PhabricatorCalendarEventEditIconController' => 'applications/calendar/controller/PhabricatorCalendarEventEditIconController.php',
'PhabricatorCalendarEventEditor' => 'applications/calendar/editor/PhabricatorCalendarEventEditor.php',
'PhabricatorCalendarEventEmailCommand' => 'applications/calendar/command/PhabricatorCalendarEventEmailCommand.php',
'PhabricatorCalendarEventInvitee' => 'applications/calendar/storage/PhabricatorCalendarEventInvitee.php',
'PhabricatorCalendarEventInviteeQuery' => 'applications/calendar/query/PhabricatorCalendarEventInviteeQuery.php',
'PhabricatorCalendarEventJoinController' => 'applications/calendar/controller/PhabricatorCalendarEventJoinController.php',
'PhabricatorCalendarEventListController' => 'applications/calendar/controller/PhabricatorCalendarEventListController.php',
'PhabricatorCalendarEventMailReceiver' => 'applications/calendar/mail/PhabricatorCalendarEventMailReceiver.php',
'PhabricatorCalendarEventPHIDType' => 'applications/calendar/phid/PhabricatorCalendarEventPHIDType.php',
'PhabricatorCalendarEventQuery' => 'applications/calendar/query/PhabricatorCalendarEventQuery.php',
'PhabricatorCalendarEventRSVPEmailCommand' => 'applications/calendar/command/PhabricatorCalendarEventRSVPEmailCommand.php',
'PhabricatorCalendarEventSearchEngine' => 'applications/calendar/query/PhabricatorCalendarEventSearchEngine.php',
'PhabricatorCalendarEventSearchIndexer' => 'applications/calendar/search/PhabricatorCalendarEventSearchIndexer.php',
'PhabricatorCalendarEventTransaction' => 'applications/calendar/storage/PhabricatorCalendarEventTransaction.php',
'PhabricatorCalendarEventTransactionComment' => 'applications/calendar/storage/PhabricatorCalendarEventTransactionComment.php',
'PhabricatorCalendarEventTransactionQuery' => 'applications/calendar/query/PhabricatorCalendarEventTransactionQuery.php',
'PhabricatorCalendarEventViewController' => 'applications/calendar/controller/PhabricatorCalendarEventViewController.php',
'PhabricatorCalendarHoliday' => 'applications/calendar/storage/PhabricatorCalendarHoliday.php',
'PhabricatorCalendarHolidayTestCase' => 'applications/calendar/storage/__tests__/PhabricatorCalendarHolidayTestCase.php',
'PhabricatorCalendarIcon' => 'applications/calendar/icon/PhabricatorCalendarIcon.php',
'PhabricatorCalendarRemarkupRule' => 'applications/calendar/remarkup/PhabricatorCalendarRemarkupRule.php',
'PhabricatorCalendarReplyHandler' => 'applications/calendar/mail/PhabricatorCalendarReplyHandler.php',
'PhabricatorCalendarSchemaSpec' => 'applications/calendar/storage/PhabricatorCalendarSchemaSpec.php',
'PhabricatorCampfireProtocolAdapter' => 'infrastructure/daemon/bot/adapter/PhabricatorCampfireProtocolAdapter.php',
'PhabricatorCelerityApplication' => 'applications/celerity/application/PhabricatorCelerityApplication.php',
'PhabricatorCelerityTestCase' => '__tests__/PhabricatorCelerityTestCase.php',
'PhabricatorChangeParserTestCase' => 'applications/repository/worker/__tests__/PhabricatorChangeParserTestCase.php',
'PhabricatorChangesetResponse' => 'infrastructure/diff/PhabricatorChangesetResponse.php',
'PhabricatorChatLogApplication' => 'applications/chatlog/application/PhabricatorChatLogApplication.php',
'PhabricatorChatLogChannel' => 'applications/chatlog/storage/PhabricatorChatLogChannel.php',
'PhabricatorChatLogChannelListController' => 'applications/chatlog/controller/PhabricatorChatLogChannelListController.php',
'PhabricatorChatLogChannelLogController' => 'applications/chatlog/controller/PhabricatorChatLogChannelLogController.php',
'PhabricatorChatLogChannelQuery' => 'applications/chatlog/query/PhabricatorChatLogChannelQuery.php',
'PhabricatorChatLogController' => 'applications/chatlog/controller/PhabricatorChatLogController.php',
'PhabricatorChatLogDAO' => 'applications/chatlog/storage/PhabricatorChatLogDAO.php',
'PhabricatorChatLogEvent' => 'applications/chatlog/storage/PhabricatorChatLogEvent.php',
'PhabricatorChatLogQuery' => 'applications/chatlog/query/PhabricatorChatLogQuery.php',
'PhabricatorChunkedFileStorageEngine' => 'applications/files/engine/PhabricatorChunkedFileStorageEngine.php',
'PhabricatorClusterConfigOptions' => 'applications/config/option/PhabricatorClusterConfigOptions.php',
'PhabricatorCommitBranchesField' => 'applications/repository/customfield/PhabricatorCommitBranchesField.php',
'PhabricatorCommitCustomField' => 'applications/repository/customfield/PhabricatorCommitCustomField.php',
'PhabricatorCommitMergedCommitsField' => 'applications/repository/customfield/PhabricatorCommitMergedCommitsField.php',
'PhabricatorCommitRepositoryField' => 'applications/repository/customfield/PhabricatorCommitRepositoryField.php',
'PhabricatorCommitSearchEngine' => 'applications/audit/query/PhabricatorCommitSearchEngine.php',
'PhabricatorCommitTagsField' => 'applications/repository/customfield/PhabricatorCommitTagsField.php',
'PhabricatorCommonPasswords' => 'applications/auth/constants/PhabricatorCommonPasswords.php',
'PhabricatorConduitAPIController' => 'applications/conduit/controller/PhabricatorConduitAPIController.php',
'PhabricatorConduitApplication' => 'applications/conduit/application/PhabricatorConduitApplication.php',
'PhabricatorConduitCertificateSettingsPanel' => 'applications/settings/panel/PhabricatorConduitCertificateSettingsPanel.php',
'PhabricatorConduitCertificateToken' => 'applications/conduit/storage/PhabricatorConduitCertificateToken.php',
'PhabricatorConduitConnectionLog' => 'applications/conduit/storage/PhabricatorConduitConnectionLog.php',
'PhabricatorConduitConsoleController' => 'applications/conduit/controller/PhabricatorConduitConsoleController.php',
'PhabricatorConduitController' => 'applications/conduit/controller/PhabricatorConduitController.php',
'PhabricatorConduitDAO' => 'applications/conduit/storage/PhabricatorConduitDAO.php',
'PhabricatorConduitListController' => 'applications/conduit/controller/PhabricatorConduitListController.php',
'PhabricatorConduitLogController' => 'applications/conduit/controller/PhabricatorConduitLogController.php',
'PhabricatorConduitLogQuery' => 'applications/conduit/query/PhabricatorConduitLogQuery.php',
'PhabricatorConduitMethodCallLog' => 'applications/conduit/storage/PhabricatorConduitMethodCallLog.php',
'PhabricatorConduitMethodQuery' => 'applications/conduit/query/PhabricatorConduitMethodQuery.php',
'PhabricatorConduitRequestExceptionHandler' => 'aphront/handler/PhabricatorConduitRequestExceptionHandler.php',
'PhabricatorConduitSearchEngine' => 'applications/conduit/query/PhabricatorConduitSearchEngine.php',
'PhabricatorConduitTestCase' => '__tests__/PhabricatorConduitTestCase.php',
'PhabricatorConduitToken' => 'applications/conduit/storage/PhabricatorConduitToken.php',
'PhabricatorConduitTokenController' => 'applications/conduit/controller/PhabricatorConduitTokenController.php',
'PhabricatorConduitTokenEditController' => 'applications/conduit/controller/PhabricatorConduitTokenEditController.php',
'PhabricatorConduitTokenHandshakeController' => 'applications/conduit/controller/PhabricatorConduitTokenHandshakeController.php',
'PhabricatorConduitTokenQuery' => 'applications/conduit/query/PhabricatorConduitTokenQuery.php',
'PhabricatorConduitTokenTerminateController' => 'applications/conduit/controller/PhabricatorConduitTokenTerminateController.php',
'PhabricatorConduitTokensSettingsPanel' => 'applications/conduit/settings/PhabricatorConduitTokensSettingsPanel.php',
'PhabricatorConfigAllController' => 'applications/config/controller/PhabricatorConfigAllController.php',
'PhabricatorConfigApplication' => 'applications/config/application/PhabricatorConfigApplication.php',
'PhabricatorConfigCacheController' => 'applications/config/controller/PhabricatorConfigCacheController.php',
'PhabricatorConfigColumnSchema' => 'applications/config/schema/PhabricatorConfigColumnSchema.php',
'PhabricatorConfigConfigPHIDType' => 'applications/config/phid/PhabricatorConfigConfigPHIDType.php',
'PhabricatorConfigController' => 'applications/config/controller/PhabricatorConfigController.php',
'PhabricatorConfigCoreSchemaSpec' => 'applications/config/schema/PhabricatorConfigCoreSchemaSpec.php',
'PhabricatorConfigDatabaseController' => 'applications/config/controller/PhabricatorConfigDatabaseController.php',
'PhabricatorConfigDatabaseIssueController' => 'applications/config/controller/PhabricatorConfigDatabaseIssueController.php',
'PhabricatorConfigDatabaseSchema' => 'applications/config/schema/PhabricatorConfigDatabaseSchema.php',
'PhabricatorConfigDatabaseSource' => 'infrastructure/env/PhabricatorConfigDatabaseSource.php',
'PhabricatorConfigDatabaseStatusController' => 'applications/config/controller/PhabricatorConfigDatabaseStatusController.php',
'PhabricatorConfigDefaultSource' => 'infrastructure/env/PhabricatorConfigDefaultSource.php',
'PhabricatorConfigDictionarySource' => 'infrastructure/env/PhabricatorConfigDictionarySource.php',
'PhabricatorConfigEdgeModule' => 'applications/config/module/PhabricatorConfigEdgeModule.php',
'PhabricatorConfigEditController' => 'applications/config/controller/PhabricatorConfigEditController.php',
'PhabricatorConfigEditor' => 'applications/config/editor/PhabricatorConfigEditor.php',
'PhabricatorConfigEntry' => 'applications/config/storage/PhabricatorConfigEntry.php',
'PhabricatorConfigEntryDAO' => 'applications/config/storage/PhabricatorConfigEntryDAO.php',
'PhabricatorConfigEntryQuery' => 'applications/config/query/PhabricatorConfigEntryQuery.php',
'PhabricatorConfigFileSource' => 'infrastructure/env/PhabricatorConfigFileSource.php',
'PhabricatorConfigGroupController' => 'applications/config/controller/PhabricatorConfigGroupController.php',
'PhabricatorConfigHistoryController' => 'applications/config/controller/PhabricatorConfigHistoryController.php',
'PhabricatorConfigIgnoreController' => 'applications/config/controller/PhabricatorConfigIgnoreController.php',
'PhabricatorConfigIssueListController' => 'applications/config/controller/PhabricatorConfigIssueListController.php',
'PhabricatorConfigIssueViewController' => 'applications/config/controller/PhabricatorConfigIssueViewController.php',
'PhabricatorConfigJSON' => 'applications/config/json/PhabricatorConfigJSON.php',
'PhabricatorConfigJSONOptionType' => 'applications/config/custom/PhabricatorConfigJSONOptionType.php',
'PhabricatorConfigKeySchema' => 'applications/config/schema/PhabricatorConfigKeySchema.php',
'PhabricatorConfigListController' => 'applications/config/controller/PhabricatorConfigListController.php',
'PhabricatorConfigLocalSource' => 'infrastructure/env/PhabricatorConfigLocalSource.php',
'PhabricatorConfigManagementDeleteWorkflow' => 'applications/config/management/PhabricatorConfigManagementDeleteWorkflow.php',
'PhabricatorConfigManagementGetWorkflow' => 'applications/config/management/PhabricatorConfigManagementGetWorkflow.php',
'PhabricatorConfigManagementListWorkflow' => 'applications/config/management/PhabricatorConfigManagementListWorkflow.php',
'PhabricatorConfigManagementMigrateWorkflow' => 'applications/config/management/PhabricatorConfigManagementMigrateWorkflow.php',
'PhabricatorConfigManagementSetWorkflow' => 'applications/config/management/PhabricatorConfigManagementSetWorkflow.php',
'PhabricatorConfigManagementWorkflow' => 'applications/config/management/PhabricatorConfigManagementWorkflow.php',
'PhabricatorConfigModule' => 'applications/config/module/PhabricatorConfigModule.php',
'PhabricatorConfigModuleController' => 'applications/config/controller/PhabricatorConfigModuleController.php',
'PhabricatorConfigOption' => 'applications/config/option/PhabricatorConfigOption.php',
'PhabricatorConfigOptionType' => 'applications/config/custom/PhabricatorConfigOptionType.php',
'PhabricatorConfigPHIDModule' => 'applications/config/module/PhabricatorConfigPHIDModule.php',
'PhabricatorConfigProxySource' => 'infrastructure/env/PhabricatorConfigProxySource.php',
'PhabricatorConfigPurgeCacheController' => 'applications/config/controller/PhabricatorConfigPurgeCacheController.php',
'PhabricatorConfigRequestExceptionHandlerModule' => 'applications/config/module/PhabricatorConfigRequestExceptionHandlerModule.php',
'PhabricatorConfigResponse' => 'applications/config/response/PhabricatorConfigResponse.php',
'PhabricatorConfigSchemaQuery' => 'applications/config/schema/PhabricatorConfigSchemaQuery.php',
'PhabricatorConfigSchemaSpec' => 'applications/config/schema/PhabricatorConfigSchemaSpec.php',
'PhabricatorConfigServerSchema' => 'applications/config/schema/PhabricatorConfigServerSchema.php',
'PhabricatorConfigSiteModule' => 'applications/config/module/PhabricatorConfigSiteModule.php',
'PhabricatorConfigSiteSource' => 'infrastructure/env/PhabricatorConfigSiteSource.php',
'PhabricatorConfigSource' => 'infrastructure/env/PhabricatorConfigSource.php',
'PhabricatorConfigStackSource' => 'infrastructure/env/PhabricatorConfigStackSource.php',
'PhabricatorConfigStorageSchema' => 'applications/config/schema/PhabricatorConfigStorageSchema.php',
'PhabricatorConfigTableSchema' => 'applications/config/schema/PhabricatorConfigTableSchema.php',
'PhabricatorConfigTransaction' => 'applications/config/storage/PhabricatorConfigTransaction.php',
'PhabricatorConfigTransactionQuery' => 'applications/config/query/PhabricatorConfigTransactionQuery.php',
'PhabricatorConfigValidationException' => 'applications/config/exception/PhabricatorConfigValidationException.php',
'PhabricatorConfigWelcomeController' => 'applications/config/controller/PhabricatorConfigWelcomeController.php',
'PhabricatorConpherenceApplication' => 'applications/conpherence/application/PhabricatorConpherenceApplication.php',
'PhabricatorConpherencePreferencesSettingsPanel' => 'applications/settings/panel/PhabricatorConpherencePreferencesSettingsPanel.php',
'PhabricatorConpherenceThreadPHIDType' => 'applications/conpherence/phid/PhabricatorConpherenceThreadPHIDType.php',
'PhabricatorConsoleApplication' => 'applications/console/application/PhabricatorConsoleApplication.php',
'PhabricatorContentSource' => 'applications/metamta/contentsource/PhabricatorContentSource.php',
'PhabricatorContentSourceView' => 'applications/metamta/contentsource/PhabricatorContentSourceView.php',
'PhabricatorContributedToObjectEdgeType' => 'applications/transactions/edges/PhabricatorContributedToObjectEdgeType.php',
'PhabricatorController' => 'applications/base/controller/PhabricatorController.php',
'PhabricatorCookies' => 'applications/auth/constants/PhabricatorCookies.php',
'PhabricatorCoreConfigOptions' => 'applications/config/option/PhabricatorCoreConfigOptions.php',
'PhabricatorCountdown' => 'applications/countdown/storage/PhabricatorCountdown.php',
'PhabricatorCountdownApplication' => 'applications/countdown/application/PhabricatorCountdownApplication.php',
'PhabricatorCountdownCommentController' => 'applications/countdown/controller/PhabricatorCountdownCommentController.php',
'PhabricatorCountdownController' => 'applications/countdown/controller/PhabricatorCountdownController.php',
'PhabricatorCountdownCountdownPHIDType' => 'applications/countdown/phid/PhabricatorCountdownCountdownPHIDType.php',
'PhabricatorCountdownDAO' => 'applications/countdown/storage/PhabricatorCountdownDAO.php',
'PhabricatorCountdownDefaultEditCapability' => 'applications/countdown/capability/PhabricatorCountdownDefaultEditCapability.php',
'PhabricatorCountdownDefaultViewCapability' => 'applications/countdown/capability/PhabricatorCountdownDefaultViewCapability.php',
'PhabricatorCountdownDeleteController' => 'applications/countdown/controller/PhabricatorCountdownDeleteController.php',
'PhabricatorCountdownEditController' => 'applications/countdown/controller/PhabricatorCountdownEditController.php',
'PhabricatorCountdownEditor' => 'applications/countdown/editor/PhabricatorCountdownEditor.php',
'PhabricatorCountdownListController' => 'applications/countdown/controller/PhabricatorCountdownListController.php',
'PhabricatorCountdownMailReceiver' => 'applications/countdown/mail/PhabricatorCountdownMailReceiver.php',
'PhabricatorCountdownQuery' => 'applications/countdown/query/PhabricatorCountdownQuery.php',
'PhabricatorCountdownRemarkupRule' => 'applications/countdown/remarkup/PhabricatorCountdownRemarkupRule.php',
'PhabricatorCountdownReplyHandler' => 'applications/countdown/mail/PhabricatorCountdownReplyHandler.php',
'PhabricatorCountdownSchemaSpec' => 'applications/countdown/storage/PhabricatorCountdownSchemaSpec.php',
'PhabricatorCountdownSearchEngine' => 'applications/countdown/query/PhabricatorCountdownSearchEngine.php',
'PhabricatorCountdownTransaction' => 'applications/countdown/storage/PhabricatorCountdownTransaction.php',
'PhabricatorCountdownTransactionComment' => 'applications/countdown/storage/PhabricatorCountdownTransactionComment.php',
'PhabricatorCountdownTransactionQuery' => 'applications/countdown/query/PhabricatorCountdownTransactionQuery.php',
'PhabricatorCountdownView' => 'applications/countdown/view/PhabricatorCountdownView.php',
'PhabricatorCountdownViewController' => 'applications/countdown/controller/PhabricatorCountdownViewController.php',
'PhabricatorCredentialsUsedByObjectEdgeType' => 'applications/passphrase/edge/PhabricatorCredentialsUsedByObjectEdgeType.php',
'PhabricatorCursorPagedPolicyAwareQuery' => 'infrastructure/query/policy/PhabricatorCursorPagedPolicyAwareQuery.php',
'PhabricatorCustomField' => 'infrastructure/customfield/field/PhabricatorCustomField.php',
'PhabricatorCustomFieldAttachment' => 'infrastructure/customfield/field/PhabricatorCustomFieldAttachment.php',
'PhabricatorCustomFieldConfigOptionType' => 'infrastructure/customfield/config/PhabricatorCustomFieldConfigOptionType.php',
'PhabricatorCustomFieldDataNotAvailableException' => 'infrastructure/customfield/exception/PhabricatorCustomFieldDataNotAvailableException.php',
'PhabricatorCustomFieldHeraldField' => 'infrastructure/customfield/herald/PhabricatorCustomFieldHeraldField.php',
'PhabricatorCustomFieldHeraldFieldGroup' => 'infrastructure/customfield/herald/PhabricatorCustomFieldHeraldFieldGroup.php',
'PhabricatorCustomFieldImplementationIncompleteException' => 'infrastructure/customfield/exception/PhabricatorCustomFieldImplementationIncompleteException.php',
'PhabricatorCustomFieldIndexStorage' => 'infrastructure/customfield/storage/PhabricatorCustomFieldIndexStorage.php',
'PhabricatorCustomFieldInterface' => 'infrastructure/customfield/interface/PhabricatorCustomFieldInterface.php',
'PhabricatorCustomFieldList' => 'infrastructure/customfield/field/PhabricatorCustomFieldList.php',
'PhabricatorCustomFieldMonogramParser' => 'infrastructure/customfield/parser/PhabricatorCustomFieldMonogramParser.php',
'PhabricatorCustomFieldNotAttachedException' => 'infrastructure/customfield/exception/PhabricatorCustomFieldNotAttachedException.php',
'PhabricatorCustomFieldNotProxyException' => 'infrastructure/customfield/exception/PhabricatorCustomFieldNotProxyException.php',
'PhabricatorCustomFieldNumericIndexStorage' => 'infrastructure/customfield/storage/PhabricatorCustomFieldNumericIndexStorage.php',
'PhabricatorCustomFieldStorage' => 'infrastructure/customfield/storage/PhabricatorCustomFieldStorage.php',
'PhabricatorCustomFieldStringIndexStorage' => 'infrastructure/customfield/storage/PhabricatorCustomFieldStringIndexStorage.php',
'PhabricatorCustomHeaderConfigType' => 'applications/config/custom/PhabricatorCustomHeaderConfigType.php',
'PhabricatorDaemon' => 'infrastructure/daemon/PhabricatorDaemon.php',
'PhabricatorDaemonBulkJobListController' => 'applications/daemon/controller/PhabricatorDaemonBulkJobListController.php',
'PhabricatorDaemonBulkJobMonitorController' => 'applications/daemon/controller/PhabricatorDaemonBulkJobMonitorController.php',
'PhabricatorDaemonBulkJobViewController' => 'applications/daemon/controller/PhabricatorDaemonBulkJobViewController.php',
'PhabricatorDaemonConsoleController' => 'applications/daemon/controller/PhabricatorDaemonConsoleController.php',
'PhabricatorDaemonController' => 'applications/daemon/controller/PhabricatorDaemonController.php',
'PhabricatorDaemonDAO' => 'applications/daemon/storage/PhabricatorDaemonDAO.php',
'PhabricatorDaemonEventListener' => 'applications/daemon/event/PhabricatorDaemonEventListener.php',
'PhabricatorDaemonLog' => 'applications/daemon/storage/PhabricatorDaemonLog.php',
'PhabricatorDaemonLogEvent' => 'applications/daemon/storage/PhabricatorDaemonLogEvent.php',
'PhabricatorDaemonLogEventGarbageCollector' => 'applications/daemon/garbagecollector/PhabricatorDaemonLogEventGarbageCollector.php',
'PhabricatorDaemonLogEventViewController' => 'applications/daemon/controller/PhabricatorDaemonLogEventViewController.php',
'PhabricatorDaemonLogEventsView' => 'applications/daemon/view/PhabricatorDaemonLogEventsView.php',
'PhabricatorDaemonLogGarbageCollector' => 'applications/daemon/garbagecollector/PhabricatorDaemonLogGarbageCollector.php',
'PhabricatorDaemonLogListController' => 'applications/daemon/controller/PhabricatorDaemonLogListController.php',
'PhabricatorDaemonLogListView' => 'applications/daemon/view/PhabricatorDaemonLogListView.php',
'PhabricatorDaemonLogQuery' => 'applications/daemon/query/PhabricatorDaemonLogQuery.php',
'PhabricatorDaemonLogViewController' => 'applications/daemon/controller/PhabricatorDaemonLogViewController.php',
'PhabricatorDaemonManagementDebugWorkflow' => 'applications/daemon/management/PhabricatorDaemonManagementDebugWorkflow.php',
'PhabricatorDaemonManagementLaunchWorkflow' => 'applications/daemon/management/PhabricatorDaemonManagementLaunchWorkflow.php',
'PhabricatorDaemonManagementListWorkflow' => 'applications/daemon/management/PhabricatorDaemonManagementListWorkflow.php',
'PhabricatorDaemonManagementLogWorkflow' => 'applications/daemon/management/PhabricatorDaemonManagementLogWorkflow.php',
'PhabricatorDaemonManagementReloadWorkflow' => 'applications/daemon/management/PhabricatorDaemonManagementReloadWorkflow.php',
'PhabricatorDaemonManagementRestartWorkflow' => 'applications/daemon/management/PhabricatorDaemonManagementRestartWorkflow.php',
'PhabricatorDaemonManagementStartWorkflow' => 'applications/daemon/management/PhabricatorDaemonManagementStartWorkflow.php',
'PhabricatorDaemonManagementStatusWorkflow' => 'applications/daemon/management/PhabricatorDaemonManagementStatusWorkflow.php',
'PhabricatorDaemonManagementStopWorkflow' => 'applications/daemon/management/PhabricatorDaemonManagementStopWorkflow.php',
'PhabricatorDaemonManagementWorkflow' => 'applications/daemon/management/PhabricatorDaemonManagementWorkflow.php',
'PhabricatorDaemonReference' => 'infrastructure/daemon/control/PhabricatorDaemonReference.php',
'PhabricatorDaemonTaskGarbageCollector' => 'applications/daemon/garbagecollector/PhabricatorDaemonTaskGarbageCollector.php',
'PhabricatorDaemonTasksTableView' => 'applications/daemon/view/PhabricatorDaemonTasksTableView.php',
'PhabricatorDaemonsApplication' => 'applications/daemon/application/PhabricatorDaemonsApplication.php',
'PhabricatorDaemonsSetupCheck' => 'applications/config/check/PhabricatorDaemonsSetupCheck.php',
'PhabricatorDailyRoutineTriggerClock' => 'infrastructure/daemon/workers/clock/PhabricatorDailyRoutineTriggerClock.php',
'PhabricatorDashboard' => 'applications/dashboard/storage/PhabricatorDashboard.php',
'PhabricatorDashboardAddPanelController' => 'applications/dashboard/controller/PhabricatorDashboardAddPanelController.php',
'PhabricatorDashboardApplication' => 'applications/dashboard/application/PhabricatorDashboardApplication.php',
'PhabricatorDashboardController' => 'applications/dashboard/controller/PhabricatorDashboardController.php',
'PhabricatorDashboardCopyController' => 'applications/dashboard/controller/PhabricatorDashboardCopyController.php',
'PhabricatorDashboardDAO' => 'applications/dashboard/storage/PhabricatorDashboardDAO.php',
'PhabricatorDashboardDashboardHasPanelEdgeType' => 'applications/dashboard/edge/PhabricatorDashboardDashboardHasPanelEdgeType.php',
'PhabricatorDashboardDashboardPHIDType' => 'applications/dashboard/phid/PhabricatorDashboardDashboardPHIDType.php',
'PhabricatorDashboardEditController' => 'applications/dashboard/controller/PhabricatorDashboardEditController.php',
'PhabricatorDashboardHistoryController' => 'applications/dashboard/controller/PhabricatorDashboardHistoryController.php',
'PhabricatorDashboardInstall' => 'applications/dashboard/storage/PhabricatorDashboardInstall.php',
'PhabricatorDashboardInstallController' => 'applications/dashboard/controller/PhabricatorDashboardInstallController.php',
'PhabricatorDashboardLayoutConfig' => 'applications/dashboard/layoutconfig/PhabricatorDashboardLayoutConfig.php',
'PhabricatorDashboardListController' => 'applications/dashboard/controller/PhabricatorDashboardListController.php',
'PhabricatorDashboardManageController' => 'applications/dashboard/controller/PhabricatorDashboardManageController.php',
'PhabricatorDashboardMovePanelController' => 'applications/dashboard/controller/PhabricatorDashboardMovePanelController.php',
'PhabricatorDashboardPanel' => 'applications/dashboard/storage/PhabricatorDashboardPanel.php',
'PhabricatorDashboardPanelArchiveController' => 'applications/dashboard/controller/PhabricatorDashboardPanelArchiveController.php',
'PhabricatorDashboardPanelCoreCustomField' => 'applications/dashboard/customfield/PhabricatorDashboardPanelCoreCustomField.php',
'PhabricatorDashboardPanelCustomField' => 'applications/dashboard/customfield/PhabricatorDashboardPanelCustomField.php',
'PhabricatorDashboardPanelEditController' => 'applications/dashboard/controller/PhabricatorDashboardPanelEditController.php',
'PhabricatorDashboardPanelHasDashboardEdgeType' => 'applications/dashboard/edge/PhabricatorDashboardPanelHasDashboardEdgeType.php',
'PhabricatorDashboardPanelListController' => 'applications/dashboard/controller/PhabricatorDashboardPanelListController.php',
'PhabricatorDashboardPanelPHIDType' => 'applications/dashboard/phid/PhabricatorDashboardPanelPHIDType.php',
'PhabricatorDashboardPanelQuery' => 'applications/dashboard/query/PhabricatorDashboardPanelQuery.php',
'PhabricatorDashboardPanelRenderController' => 'applications/dashboard/controller/PhabricatorDashboardPanelRenderController.php',
'PhabricatorDashboardPanelRenderingEngine' => 'applications/dashboard/engine/PhabricatorDashboardPanelRenderingEngine.php',
'PhabricatorDashboardPanelSearchApplicationCustomField' => 'applications/dashboard/customfield/PhabricatorDashboardPanelSearchApplicationCustomField.php',
'PhabricatorDashboardPanelSearchEngine' => 'applications/dashboard/query/PhabricatorDashboardPanelSearchEngine.php',
'PhabricatorDashboardPanelSearchQueryCustomField' => 'applications/dashboard/customfield/PhabricatorDashboardPanelSearchQueryCustomField.php',
'PhabricatorDashboardPanelTabsCustomField' => 'applications/dashboard/customfield/PhabricatorDashboardPanelTabsCustomField.php',
'PhabricatorDashboardPanelTransaction' => 'applications/dashboard/storage/PhabricatorDashboardPanelTransaction.php',
'PhabricatorDashboardPanelTransactionEditor' => 'applications/dashboard/editor/PhabricatorDashboardPanelTransactionEditor.php',
'PhabricatorDashboardPanelTransactionQuery' => 'applications/dashboard/query/PhabricatorDashboardPanelTransactionQuery.php',
'PhabricatorDashboardPanelType' => 'applications/dashboard/paneltype/PhabricatorDashboardPanelType.php',
'PhabricatorDashboardPanelViewController' => 'applications/dashboard/controller/PhabricatorDashboardPanelViewController.php',
'PhabricatorDashboardQuery' => 'applications/dashboard/query/PhabricatorDashboardQuery.php',
'PhabricatorDashboardQueryPanelType' => 'applications/dashboard/paneltype/PhabricatorDashboardQueryPanelType.php',
'PhabricatorDashboardRemarkupRule' => 'applications/dashboard/remarkup/PhabricatorDashboardRemarkupRule.php',
'PhabricatorDashboardRemovePanelController' => 'applications/dashboard/controller/PhabricatorDashboardRemovePanelController.php',
'PhabricatorDashboardRenderingEngine' => 'applications/dashboard/engine/PhabricatorDashboardRenderingEngine.php',
'PhabricatorDashboardSchemaSpec' => 'applications/dashboard/storage/PhabricatorDashboardSchemaSpec.php',
'PhabricatorDashboardSearchEngine' => 'applications/dashboard/query/PhabricatorDashboardSearchEngine.php',
'PhabricatorDashboardTabsPanelType' => 'applications/dashboard/paneltype/PhabricatorDashboardTabsPanelType.php',
'PhabricatorDashboardTextPanelType' => 'applications/dashboard/paneltype/PhabricatorDashboardTextPanelType.php',
'PhabricatorDashboardTransaction' => 'applications/dashboard/storage/PhabricatorDashboardTransaction.php',
'PhabricatorDashboardTransactionEditor' => 'applications/dashboard/editor/PhabricatorDashboardTransactionEditor.php',
'PhabricatorDashboardTransactionQuery' => 'applications/dashboard/query/PhabricatorDashboardTransactionQuery.php',
'PhabricatorDashboardUninstallController' => 'applications/dashboard/controller/PhabricatorDashboardUninstallController.php',
'PhabricatorDashboardViewController' => 'applications/dashboard/controller/PhabricatorDashboardViewController.php',
'PhabricatorDataCacheSpec' => 'applications/cache/spec/PhabricatorDataCacheSpec.php',
'PhabricatorDataNotAttachedException' => 'infrastructure/storage/lisk/PhabricatorDataNotAttachedException.php',
'PhabricatorDatabaseSetupCheck' => 'applications/config/check/PhabricatorDatabaseSetupCheck.php',
'PhabricatorDateTimeSettingsPanel' => 'applications/settings/panel/PhabricatorDateTimeSettingsPanel.php',
'PhabricatorDebugController' => 'applications/system/controller/PhabricatorDebugController.php',
'PhabricatorDefaultRequestExceptionHandler' => 'aphront/handler/PhabricatorDefaultRequestExceptionHandler.php',
'PhabricatorDesktopNotificationsSettingsPanel' => 'applications/settings/panel/PhabricatorDesktopNotificationsSettingsPanel.php',
'PhabricatorDestructibleInterface' => 'applications/system/interface/PhabricatorDestructibleInterface.php',
'PhabricatorDestructionEngine' => 'applications/system/engine/PhabricatorDestructionEngine.php',
'PhabricatorDeveloperConfigOptions' => 'applications/config/option/PhabricatorDeveloperConfigOptions.php',
'PhabricatorDeveloperPreferencesSettingsPanel' => 'applications/settings/panel/PhabricatorDeveloperPreferencesSettingsPanel.php',
'PhabricatorDiffInlineCommentQuery' => 'infrastructure/diff/query/PhabricatorDiffInlineCommentQuery.php',
'PhabricatorDiffPreferencesSettingsPanel' => 'applications/settings/panel/PhabricatorDiffPreferencesSettingsPanel.php',
'PhabricatorDifferenceEngine' => 'infrastructure/diff/PhabricatorDifferenceEngine.php',
'PhabricatorDifferentialApplication' => 'applications/differential/application/PhabricatorDifferentialApplication.php',
'PhabricatorDifferentialConfigOptions' => 'applications/differential/config/PhabricatorDifferentialConfigOptions.php',
'PhabricatorDifferentialRevisionTestDataGenerator' => 'applications/differential/lipsum/PhabricatorDifferentialRevisionTestDataGenerator.php',
'PhabricatorDiffusionApplication' => 'applications/diffusion/application/PhabricatorDiffusionApplication.php',
'PhabricatorDiffusionConfigOptions' => 'applications/diffusion/config/PhabricatorDiffusionConfigOptions.php',
'PhabricatorDisabledUserController' => 'applications/auth/controller/PhabricatorDisabledUserController.php',
'PhabricatorDisplayPreferencesSettingsPanel' => 'applications/settings/panel/PhabricatorDisplayPreferencesSettingsPanel.php',
'PhabricatorDisqusAuthProvider' => 'applications/auth/provider/PhabricatorDisqusAuthProvider.php',
'PhabricatorDisqusConfigOptions' => 'applications/config/option/PhabricatorDisqusConfigOptions.php',
'PhabricatorDivinerApplication' => 'applications/diviner/application/PhabricatorDivinerApplication.php',
'PhabricatorDoorkeeperApplication' => 'applications/doorkeeper/application/PhabricatorDoorkeeperApplication.php',
'PhabricatorDraft' => 'applications/draft/storage/PhabricatorDraft.php',
'PhabricatorDraftDAO' => 'applications/draft/storage/PhabricatorDraftDAO.php',
'PhabricatorDrydockApplication' => 'applications/drydock/application/PhabricatorDrydockApplication.php',
'PhabricatorEdgeConfig' => 'infrastructure/edges/constants/PhabricatorEdgeConfig.php',
'PhabricatorEdgeConstants' => 'infrastructure/edges/constants/PhabricatorEdgeConstants.php',
'PhabricatorEdgeCycleException' => 'infrastructure/edges/exception/PhabricatorEdgeCycleException.php',
'PhabricatorEdgeEditor' => 'infrastructure/edges/editor/PhabricatorEdgeEditor.php',
'PhabricatorEdgeGraph' => 'infrastructure/edges/util/PhabricatorEdgeGraph.php',
'PhabricatorEdgeQuery' => 'infrastructure/edges/query/PhabricatorEdgeQuery.php',
'PhabricatorEdgeTestCase' => 'infrastructure/edges/__tests__/PhabricatorEdgeTestCase.php',
'PhabricatorEdgeType' => 'infrastructure/edges/type/PhabricatorEdgeType.php',
'PhabricatorEdgeTypeTestCase' => 'infrastructure/edges/type/__tests__/PhabricatorEdgeTypeTestCase.php',
'PhabricatorEditor' => 'infrastructure/PhabricatorEditor.php',
'PhabricatorElasticSearchEngine' => 'applications/search/engine/PhabricatorElasticSearchEngine.php',
'PhabricatorElasticSearchSetupCheck' => 'applications/config/check/PhabricatorElasticSearchSetupCheck.php',
'PhabricatorEmailAddressesSettingsPanel' => 'applications/settings/panel/PhabricatorEmailAddressesSettingsPanel.php',
'PhabricatorEmailFormatSettingsPanel' => 'applications/settings/panel/PhabricatorEmailFormatSettingsPanel.php',
'PhabricatorEmailLoginController' => 'applications/auth/controller/PhabricatorEmailLoginController.php',
'PhabricatorEmailPreferencesSettingsPanel' => 'applications/settings/panel/PhabricatorEmailPreferencesSettingsPanel.php',
'PhabricatorEmailVerificationController' => 'applications/auth/controller/PhabricatorEmailVerificationController.php',
'PhabricatorEmbedFileRemarkupRule' => 'applications/files/markup/PhabricatorEmbedFileRemarkupRule.php',
'PhabricatorEmojiRemarkupRule' => 'applications/macro/markup/PhabricatorEmojiRemarkupRule.php',
'PhabricatorEmptyQueryException' => 'infrastructure/query/PhabricatorEmptyQueryException.php',
'PhabricatorEnv' => 'infrastructure/env/PhabricatorEnv.php',
'PhabricatorEnvTestCase' => 'infrastructure/env/__tests__/PhabricatorEnvTestCase.php',
'PhabricatorEvent' => 'infrastructure/events/PhabricatorEvent.php',
'PhabricatorEventEngine' => 'infrastructure/events/PhabricatorEventEngine.php',
'PhabricatorEventListener' => 'infrastructure/events/PhabricatorEventListener.php',
'PhabricatorEventType' => 'infrastructure/events/constant/PhabricatorEventType.php',
'PhabricatorExampleEventListener' => 'infrastructure/events/PhabricatorExampleEventListener.php',
'PhabricatorExtendedPolicyInterface' => 'applications/policy/interface/PhabricatorExtendedPolicyInterface.php',
'PhabricatorExtendingPhabricatorConfigOptions' => 'applications/config/option/PhabricatorExtendingPhabricatorConfigOptions.php',
'PhabricatorExtensionsSetupCheck' => 'applications/config/check/PhabricatorExtensionsSetupCheck.php',
'PhabricatorExternalAccount' => 'applications/people/storage/PhabricatorExternalAccount.php',
'PhabricatorExternalAccountQuery' => 'applications/auth/query/PhabricatorExternalAccountQuery.php',
'PhabricatorExternalAccountsSettingsPanel' => 'applications/settings/panel/PhabricatorExternalAccountsSettingsPanel.php',
'PhabricatorExtraConfigSetupCheck' => 'applications/config/check/PhabricatorExtraConfigSetupCheck.php',
'PhabricatorFacebookAuthProvider' => 'applications/auth/provider/PhabricatorFacebookAuthProvider.php',
'PhabricatorFactAggregate' => 'applications/fact/storage/PhabricatorFactAggregate.php',
'PhabricatorFactApplication' => 'applications/fact/application/PhabricatorFactApplication.php',
'PhabricatorFactChartController' => 'applications/fact/controller/PhabricatorFactChartController.php',
'PhabricatorFactController' => 'applications/fact/controller/PhabricatorFactController.php',
'PhabricatorFactCountEngine' => 'applications/fact/engine/PhabricatorFactCountEngine.php',
'PhabricatorFactCursor' => 'applications/fact/storage/PhabricatorFactCursor.php',
'PhabricatorFactDAO' => 'applications/fact/storage/PhabricatorFactDAO.php',
'PhabricatorFactDaemon' => 'applications/fact/daemon/PhabricatorFactDaemon.php',
'PhabricatorFactEngine' => 'applications/fact/engine/PhabricatorFactEngine.php',
'PhabricatorFactEngineTestCase' => 'applications/fact/engine/__tests__/PhabricatorFactEngineTestCase.php',
'PhabricatorFactHomeController' => 'applications/fact/controller/PhabricatorFactHomeController.php',
'PhabricatorFactLastUpdatedEngine' => 'applications/fact/engine/PhabricatorFactLastUpdatedEngine.php',
'PhabricatorFactManagementAnalyzeWorkflow' => 'applications/fact/management/PhabricatorFactManagementAnalyzeWorkflow.php',
'PhabricatorFactManagementCursorsWorkflow' => 'applications/fact/management/PhabricatorFactManagementCursorsWorkflow.php',
'PhabricatorFactManagementDestroyWorkflow' => 'applications/fact/management/PhabricatorFactManagementDestroyWorkflow.php',
'PhabricatorFactManagementListWorkflow' => 'applications/fact/management/PhabricatorFactManagementListWorkflow.php',
'PhabricatorFactManagementStatusWorkflow' => 'applications/fact/management/PhabricatorFactManagementStatusWorkflow.php',
'PhabricatorFactManagementWorkflow' => 'applications/fact/management/PhabricatorFactManagementWorkflow.php',
'PhabricatorFactRaw' => 'applications/fact/storage/PhabricatorFactRaw.php',
'PhabricatorFactSimpleSpec' => 'applications/fact/spec/PhabricatorFactSimpleSpec.php',
'PhabricatorFactSpec' => 'applications/fact/spec/PhabricatorFactSpec.php',
'PhabricatorFactUpdateIterator' => 'applications/fact/extract/PhabricatorFactUpdateIterator.php',
'PhabricatorFeedApplication' => 'applications/feed/application/PhabricatorFeedApplication.php',
'PhabricatorFeedBuilder' => 'applications/feed/builder/PhabricatorFeedBuilder.php',
'PhabricatorFeedConfigOptions' => 'applications/feed/config/PhabricatorFeedConfigOptions.php',
'PhabricatorFeedController' => 'applications/feed/controller/PhabricatorFeedController.php',
'PhabricatorFeedDAO' => 'applications/feed/storage/PhabricatorFeedDAO.php',
'PhabricatorFeedDetailController' => 'applications/feed/controller/PhabricatorFeedDetailController.php',
'PhabricatorFeedListController' => 'applications/feed/controller/PhabricatorFeedListController.php',
'PhabricatorFeedManagementRepublishWorkflow' => 'applications/feed/management/PhabricatorFeedManagementRepublishWorkflow.php',
'PhabricatorFeedManagementWorkflow' => 'applications/feed/management/PhabricatorFeedManagementWorkflow.php',
'PhabricatorFeedQuery' => 'applications/feed/query/PhabricatorFeedQuery.php',
'PhabricatorFeedSearchEngine' => 'applications/feed/query/PhabricatorFeedSearchEngine.php',
'PhabricatorFeedStory' => 'applications/feed/story/PhabricatorFeedStory.php',
'PhabricatorFeedStoryData' => 'applications/feed/storage/PhabricatorFeedStoryData.php',
'PhabricatorFeedStoryNotification' => 'applications/notification/storage/PhabricatorFeedStoryNotification.php',
'PhabricatorFeedStoryPublisher' => 'applications/feed/PhabricatorFeedStoryPublisher.php',
'PhabricatorFeedStoryReference' => 'applications/feed/storage/PhabricatorFeedStoryReference.php',
'PhabricatorFile' => 'applications/files/storage/PhabricatorFile.php',
'PhabricatorFileBundleLoader' => 'applications/files/query/PhabricatorFileBundleLoader.php',
'PhabricatorFileChunk' => 'applications/files/storage/PhabricatorFileChunk.php',
'PhabricatorFileChunkIterator' => 'applications/files/engine/PhabricatorFileChunkIterator.php',
'PhabricatorFileChunkQuery' => 'applications/files/query/PhabricatorFileChunkQuery.php',
'PhabricatorFileCommentController' => 'applications/files/controller/PhabricatorFileCommentController.php',
'PhabricatorFileComposeController' => 'applications/files/controller/PhabricatorFileComposeController.php',
'PhabricatorFileController' => 'applications/files/controller/PhabricatorFileController.php',
'PhabricatorFileDAO' => 'applications/files/storage/PhabricatorFileDAO.php',
'PhabricatorFileDataController' => 'applications/files/controller/PhabricatorFileDataController.php',
'PhabricatorFileDeleteController' => 'applications/files/controller/PhabricatorFileDeleteController.php',
'PhabricatorFileDropUploadController' => 'applications/files/controller/PhabricatorFileDropUploadController.php',
'PhabricatorFileEditController' => 'applications/files/controller/PhabricatorFileEditController.php',
'PhabricatorFileEditor' => 'applications/files/editor/PhabricatorFileEditor.php',
'PhabricatorFileFilePHIDType' => 'applications/files/phid/PhabricatorFileFilePHIDType.php',
'PhabricatorFileHasObjectEdgeType' => 'applications/files/edge/PhabricatorFileHasObjectEdgeType.php',
'PhabricatorFileImageMacro' => 'applications/macro/storage/PhabricatorFileImageMacro.php',
'PhabricatorFileImageTransform' => 'applications/files/transform/PhabricatorFileImageTransform.php',
'PhabricatorFileInfoController' => 'applications/files/controller/PhabricatorFileInfoController.php',
'PhabricatorFileLinkListView' => 'view/layout/PhabricatorFileLinkListView.php',
'PhabricatorFileLinkView' => 'view/layout/PhabricatorFileLinkView.php',
'PhabricatorFileListController' => 'applications/files/controller/PhabricatorFileListController.php',
'PhabricatorFileQuery' => 'applications/files/query/PhabricatorFileQuery.php',
'PhabricatorFileSchemaSpec' => 'applications/files/storage/PhabricatorFileSchemaSpec.php',
'PhabricatorFileSearchEngine' => 'applications/files/query/PhabricatorFileSearchEngine.php',
'PhabricatorFileStorageBlob' => 'applications/files/storage/PhabricatorFileStorageBlob.php',
'PhabricatorFileStorageConfigurationException' => 'applications/files/exception/PhabricatorFileStorageConfigurationException.php',
'PhabricatorFileStorageEngine' => 'applications/files/engine/PhabricatorFileStorageEngine.php',
'PhabricatorFileStorageEngineTestCase' => 'applications/files/engine/__tests__/PhabricatorFileStorageEngineTestCase.php',
'PhabricatorFileTemporaryGarbageCollector' => 'applications/files/garbagecollector/PhabricatorFileTemporaryGarbageCollector.php',
'PhabricatorFileTestCase' => 'applications/files/storage/__tests__/PhabricatorFileTestCase.php',
'PhabricatorFileTestDataGenerator' => 'applications/files/lipsum/PhabricatorFileTestDataGenerator.php',
'PhabricatorFileThumbnailTransform' => 'applications/files/transform/PhabricatorFileThumbnailTransform.php',
'PhabricatorFileTransaction' => 'applications/files/storage/PhabricatorFileTransaction.php',
'PhabricatorFileTransactionComment' => 'applications/files/storage/PhabricatorFileTransactionComment.php',
'PhabricatorFileTransactionQuery' => 'applications/files/query/PhabricatorFileTransactionQuery.php',
'PhabricatorFileTransform' => 'applications/files/transform/PhabricatorFileTransform.php',
'PhabricatorFileTransformController' => 'applications/files/controller/PhabricatorFileTransformController.php',
'PhabricatorFileTransformListController' => 'applications/files/controller/PhabricatorFileTransformListController.php',
'PhabricatorFileTransformTestCase' => 'applications/files/transform/__tests__/PhabricatorFileTransformTestCase.php',
'PhabricatorFileUploadController' => 'applications/files/controller/PhabricatorFileUploadController.php',
'PhabricatorFileUploadDialogController' => 'applications/files/controller/PhabricatorFileUploadDialogController.php',
'PhabricatorFileUploadException' => 'applications/files/exception/PhabricatorFileUploadException.php',
'PhabricatorFileinfoSetupCheck' => 'applications/config/check/PhabricatorFileinfoSetupCheck.php',
'PhabricatorFilesApplication' => 'applications/files/application/PhabricatorFilesApplication.php',
'PhabricatorFilesApplicationStorageEnginePanel' => 'applications/files/applicationpanel/PhabricatorFilesApplicationStorageEnginePanel.php',
'PhabricatorFilesConfigOptions' => 'applications/files/config/PhabricatorFilesConfigOptions.php',
'PhabricatorFilesManagementCatWorkflow' => 'applications/files/management/PhabricatorFilesManagementCatWorkflow.php',
'PhabricatorFilesManagementCompactWorkflow' => 'applications/files/management/PhabricatorFilesManagementCompactWorkflow.php',
'PhabricatorFilesManagementEnginesWorkflow' => 'applications/files/management/PhabricatorFilesManagementEnginesWorkflow.php',
'PhabricatorFilesManagementMigrateWorkflow' => 'applications/files/management/PhabricatorFilesManagementMigrateWorkflow.php',
'PhabricatorFilesManagementPurgeWorkflow' => 'applications/files/management/PhabricatorFilesManagementPurgeWorkflow.php',
'PhabricatorFilesManagementRebuildWorkflow' => 'applications/files/management/PhabricatorFilesManagementRebuildWorkflow.php',
'PhabricatorFilesManagementWorkflow' => 'applications/files/management/PhabricatorFilesManagementWorkflow.php',
'PhabricatorFilesOutboundRequestAction' => 'applications/files/action/PhabricatorFilesOutboundRequestAction.php',
'PhabricatorFlag' => 'applications/flag/storage/PhabricatorFlag.php',
'PhabricatorFlagAddFlagHeraldAction' => 'applications/flag/herald/PhabricatorFlagAddFlagHeraldAction.php',
'PhabricatorFlagColor' => 'applications/flag/constants/PhabricatorFlagColor.php',
'PhabricatorFlagConstants' => 'applications/flag/constants/PhabricatorFlagConstants.php',
'PhabricatorFlagController' => 'applications/flag/controller/PhabricatorFlagController.php',
'PhabricatorFlagDAO' => 'applications/flag/storage/PhabricatorFlagDAO.php',
'PhabricatorFlagDeleteController' => 'applications/flag/controller/PhabricatorFlagDeleteController.php',
'PhabricatorFlagEditController' => 'applications/flag/controller/PhabricatorFlagEditController.php',
'PhabricatorFlagListController' => 'applications/flag/controller/PhabricatorFlagListController.php',
'PhabricatorFlagQuery' => 'applications/flag/query/PhabricatorFlagQuery.php',
'PhabricatorFlagSearchEngine' => 'applications/flag/query/PhabricatorFlagSearchEngine.php',
'PhabricatorFlagSelectControl' => 'applications/flag/view/PhabricatorFlagSelectControl.php',
'PhabricatorFlaggableInterface' => 'applications/flag/interface/PhabricatorFlaggableInterface.php',
'PhabricatorFlagsApplication' => 'applications/flag/application/PhabricatorFlagsApplication.php',
'PhabricatorFlagsUIEventListener' => 'applications/flag/events/PhabricatorFlagsUIEventListener.php',
'PhabricatorFundApplication' => 'applications/fund/application/PhabricatorFundApplication.php',
'PhabricatorGDSetupCheck' => 'applications/config/check/PhabricatorGDSetupCheck.php',
'PhabricatorGarbageCollector' => 'infrastructure/daemon/garbagecollector/PhabricatorGarbageCollector.php',
'PhabricatorGarbageCollectorConfigOptions' => 'applications/config/option/PhabricatorGarbageCollectorConfigOptions.php',
'PhabricatorGestureUIExample' => 'applications/uiexample/examples/PhabricatorGestureUIExample.php',
'PhabricatorGitGraphStream' => 'applications/repository/daemon/PhabricatorGitGraphStream.php',
'PhabricatorGitHubAuthProvider' => 'applications/auth/provider/PhabricatorGitHubAuthProvider.php',
'PhabricatorGlobalLock' => 'infrastructure/util/PhabricatorGlobalLock.php',
'PhabricatorGlobalUploadTargetView' => 'applications/files/view/PhabricatorGlobalUploadTargetView.php',
'PhabricatorGoogleAuthProvider' => 'applications/auth/provider/PhabricatorGoogleAuthProvider.php',
'PhabricatorHandleList' => 'applications/phid/handle/pool/PhabricatorHandleList.php',
'PhabricatorHandleObjectSelectorDataView' => 'applications/phid/handle/view/PhabricatorHandleObjectSelectorDataView.php',
'PhabricatorHandlePool' => 'applications/phid/handle/pool/PhabricatorHandlePool.php',
'PhabricatorHandlePoolTestCase' => 'applications/phid/handle/pool/__tests__/PhabricatorHandlePoolTestCase.php',
'PhabricatorHandleQuery' => 'applications/phid/query/PhabricatorHandleQuery.php',
'PhabricatorHarbormasterApplication' => 'applications/harbormaster/application/PhabricatorHarbormasterApplication.php',
'PhabricatorHarbormasterConfigOptions' => 'applications/harbormaster/config/PhabricatorHarbormasterConfigOptions.php',
'PhabricatorHash' => 'infrastructure/util/PhabricatorHash.php',
'PhabricatorHashTestCase' => 'infrastructure/util/__tests__/PhabricatorHashTestCase.php',
'PhabricatorHelpApplication' => 'applications/help/application/PhabricatorHelpApplication.php',
'PhabricatorHelpController' => 'applications/help/controller/PhabricatorHelpController.php',
'PhabricatorHelpDocumentationController' => 'applications/help/controller/PhabricatorHelpDocumentationController.php',
'PhabricatorHelpEditorProtocolController' => 'applications/help/controller/PhabricatorHelpEditorProtocolController.php',
'PhabricatorHelpKeyboardShortcutController' => 'applications/help/controller/PhabricatorHelpKeyboardShortcutController.php',
'PhabricatorHeraldApplication' => 'applications/herald/application/PhabricatorHeraldApplication.php',
'PhabricatorHighSecurityRequestExceptionHandler' => 'aphront/handler/PhabricatorHighSecurityRequestExceptionHandler.php',
'PhabricatorHomeApplication' => 'applications/home/application/PhabricatorHomeApplication.php',
'PhabricatorHomeController' => 'applications/home/controller/PhabricatorHomeController.php',
'PhabricatorHomeMainController' => 'applications/home/controller/PhabricatorHomeMainController.php',
'PhabricatorHomePreferencesSettingsPanel' => 'applications/settings/panel/PhabricatorHomePreferencesSettingsPanel.php',
'PhabricatorHomeQuickCreateController' => 'applications/home/controller/PhabricatorHomeQuickCreateController.php',
'PhabricatorHovercardUIExample' => 'applications/uiexample/examples/PhabricatorHovercardUIExample.php',
'PhabricatorHovercardView' => 'view/widget/hovercard/PhabricatorHovercardView.php',
'PhabricatorHunksManagementMigrateWorkflow' => 'applications/differential/management/PhabricatorHunksManagementMigrateWorkflow.php',
'PhabricatorHunksManagementWorkflow' => 'applications/differential/management/PhabricatorHunksManagementWorkflow.php',
'PhabricatorIRCProtocolAdapter' => 'infrastructure/daemon/bot/adapter/PhabricatorIRCProtocolAdapter.php',
'PhabricatorIconRemarkupRule' => 'applications/macro/markup/PhabricatorIconRemarkupRule.php',
'PhabricatorImageMacroRemarkupRule' => 'applications/macro/markup/PhabricatorImageMacroRemarkupRule.php',
'PhabricatorImageTransformer' => 'applications/files/PhabricatorImageTransformer.php',
'PhabricatorImagemagickSetupCheck' => 'applications/config/check/PhabricatorImagemagickSetupCheck.php',
'PhabricatorInfrastructureTestCase' => '__tests__/PhabricatorInfrastructureTestCase.php',
'PhabricatorInlineCommentController' => 'infrastructure/diff/PhabricatorInlineCommentController.php',
'PhabricatorInlineCommentInterface' => 'infrastructure/diff/interface/PhabricatorInlineCommentInterface.php',
'PhabricatorInlineCommentPreviewController' => 'infrastructure/diff/PhabricatorInlineCommentPreviewController.php',
'PhabricatorInlineSummaryView' => 'infrastructure/diff/view/PhabricatorInlineSummaryView.php',
'PhabricatorInternationalizationManagementExtractWorkflow' => 'infrastructure/internationalization/management/PhabricatorInternationalizationManagementExtractWorkflow.php',
'PhabricatorInternationalizationManagementWorkflow' => 'infrastructure/internationalization/management/PhabricatorInternationalizationManagementWorkflow.php',
'PhabricatorInvalidConfigSetupCheck' => 'applications/config/check/PhabricatorInvalidConfigSetupCheck.php',
'PhabricatorIteratedMD5PasswordHasher' => 'infrastructure/util/password/PhabricatorIteratedMD5PasswordHasher.php',
'PhabricatorIteratedMD5PasswordHasherTestCase' => 'infrastructure/util/password/__tests__/PhabricatorIteratedMD5PasswordHasherTestCase.php',
'PhabricatorJIRAAuthProvider' => 'applications/auth/provider/PhabricatorJIRAAuthProvider.php',
'PhabricatorJavelinLinter' => 'infrastructure/lint/linter/PhabricatorJavelinLinter.php',
'PhabricatorJiraIssueHasObjectEdgeType' => 'applications/doorkeeper/edge/PhabricatorJiraIssueHasObjectEdgeType.php',
'PhabricatorJumpNavHandler' => 'applications/search/engine/PhabricatorJumpNavHandler.php',
'PhabricatorKeyValueDatabaseCache' => 'applications/cache/PhabricatorKeyValueDatabaseCache.php',
'PhabricatorLDAPAuthProvider' => 'applications/auth/provider/PhabricatorLDAPAuthProvider.php',
'PhabricatorLegalpadApplication' => 'applications/legalpad/application/PhabricatorLegalpadApplication.php',
'PhabricatorLegalpadConfigOptions' => 'applications/legalpad/config/PhabricatorLegalpadConfigOptions.php',
'PhabricatorLegalpadDocumentPHIDType' => 'applications/legalpad/phid/PhabricatorLegalpadDocumentPHIDType.php',
'PhabricatorLegalpadSignaturePolicyRule' => 'applications/policy/rule/PhabricatorLegalpadSignaturePolicyRule.php',
'PhabricatorLibraryTestCase' => '__tests__/PhabricatorLibraryTestCase.php',
'PhabricatorLipsumArtist' => 'applications/lipsum/image/PhabricatorLipsumArtist.php',
'PhabricatorLipsumGenerateWorkflow' => 'applications/lipsum/management/PhabricatorLipsumGenerateWorkflow.php',
'PhabricatorLipsumManagementWorkflow' => 'applications/lipsum/management/PhabricatorLipsumManagementWorkflow.php',
'PhabricatorLipsumMondrianArtist' => 'applications/lipsum/image/PhabricatorLipsumMondrianArtist.php',
'PhabricatorLiskDAO' => 'infrastructure/storage/lisk/PhabricatorLiskDAO.php',
'PhabricatorLiskSerializer' => 'infrastructure/storage/lisk/PhabricatorLiskSerializer.php',
'PhabricatorListFilterUIExample' => 'applications/uiexample/examples/PhabricatorListFilterUIExample.php',
'PhabricatorLocalDiskFileStorageEngine' => 'applications/files/engine/PhabricatorLocalDiskFileStorageEngine.php',
'PhabricatorLocalTimeTestCase' => 'view/__tests__/PhabricatorLocalTimeTestCase.php',
'PhabricatorLocaleScopeGuard' => 'infrastructure/internationalization/scope/PhabricatorLocaleScopeGuard.php',
'PhabricatorLocaleScopeGuardTestCase' => 'infrastructure/internationalization/scope/__tests__/PhabricatorLocaleScopeGuardTestCase.php',
'PhabricatorLogTriggerAction' => 'infrastructure/daemon/workers/action/PhabricatorLogTriggerAction.php',
'PhabricatorLogoutController' => 'applications/auth/controller/PhabricatorLogoutController.php',
'PhabricatorLunarPhasePolicyRule' => 'applications/policy/rule/PhabricatorLunarPhasePolicyRule.php',
'PhabricatorMacroApplication' => 'applications/macro/application/PhabricatorMacroApplication.php',
'PhabricatorMacroAudioController' => 'applications/macro/controller/PhabricatorMacroAudioController.php',
'PhabricatorMacroCommentController' => 'applications/macro/controller/PhabricatorMacroCommentController.php',
'PhabricatorMacroConfigOptions' => 'applications/macro/config/PhabricatorMacroConfigOptions.php',
'PhabricatorMacroController' => 'applications/macro/controller/PhabricatorMacroController.php',
'PhabricatorMacroDatasource' => 'applications/macro/typeahead/PhabricatorMacroDatasource.php',
'PhabricatorMacroDisableController' => 'applications/macro/controller/PhabricatorMacroDisableController.php',
'PhabricatorMacroEditController' => 'applications/macro/controller/PhabricatorMacroEditController.php',
'PhabricatorMacroEditor' => 'applications/macro/editor/PhabricatorMacroEditor.php',
'PhabricatorMacroListController' => 'applications/macro/controller/PhabricatorMacroListController.php',
'PhabricatorMacroMacroPHIDType' => 'applications/macro/phid/PhabricatorMacroMacroPHIDType.php',
'PhabricatorMacroMailReceiver' => 'applications/macro/mail/PhabricatorMacroMailReceiver.php',
'PhabricatorMacroManageCapability' => 'applications/macro/capability/PhabricatorMacroManageCapability.php',
'PhabricatorMacroMemeController' => 'applications/macro/controller/PhabricatorMacroMemeController.php',
'PhabricatorMacroMemeDialogController' => 'applications/macro/controller/PhabricatorMacroMemeDialogController.php',
'PhabricatorMacroQuery' => 'applications/macro/query/PhabricatorMacroQuery.php',
'PhabricatorMacroReplyHandler' => 'applications/macro/mail/PhabricatorMacroReplyHandler.php',
'PhabricatorMacroSearchEngine' => 'applications/macro/query/PhabricatorMacroSearchEngine.php',
'PhabricatorMacroTransaction' => 'applications/macro/storage/PhabricatorMacroTransaction.php',
'PhabricatorMacroTransactionComment' => 'applications/macro/storage/PhabricatorMacroTransactionComment.php',
'PhabricatorMacroTransactionQuery' => 'applications/macro/query/PhabricatorMacroTransactionQuery.php',
'PhabricatorMacroViewController' => 'applications/macro/controller/PhabricatorMacroViewController.php',
'PhabricatorMailEmailHeraldField' => 'applications/metamta/herald/PhabricatorMailEmailHeraldField.php',
'PhabricatorMailEmailHeraldFieldGroup' => 'applications/metamta/herald/PhabricatorMailEmailHeraldFieldGroup.php',
'PhabricatorMailEmailSubjectHeraldField' => 'applications/metamta/herald/PhabricatorMailEmailSubjectHeraldField.php',
'PhabricatorMailImplementationAdapter' => 'applications/metamta/adapter/PhabricatorMailImplementationAdapter.php',
'PhabricatorMailImplementationAmazonSESAdapter' => 'applications/metamta/adapter/PhabricatorMailImplementationAmazonSESAdapter.php',
'PhabricatorMailImplementationMailgunAdapter' => 'applications/metamta/adapter/PhabricatorMailImplementationMailgunAdapter.php',
'PhabricatorMailImplementationPHPMailerAdapter' => 'applications/metamta/adapter/PhabricatorMailImplementationPHPMailerAdapter.php',
'PhabricatorMailImplementationPHPMailerLiteAdapter' => 'applications/metamta/adapter/PhabricatorMailImplementationPHPMailerLiteAdapter.php',
'PhabricatorMailImplementationSendGridAdapter' => 'applications/metamta/adapter/PhabricatorMailImplementationSendGridAdapter.php',
'PhabricatorMailImplementationTestAdapter' => 'applications/metamta/adapter/PhabricatorMailImplementationTestAdapter.php',
'PhabricatorMailManagementListInboundWorkflow' => 'applications/metamta/management/PhabricatorMailManagementListInboundWorkflow.php',
'PhabricatorMailManagementListOutboundWorkflow' => 'applications/metamta/management/PhabricatorMailManagementListOutboundWorkflow.php',
'PhabricatorMailManagementReceiveTestWorkflow' => 'applications/metamta/management/PhabricatorMailManagementReceiveTestWorkflow.php',
'PhabricatorMailManagementResendWorkflow' => 'applications/metamta/management/PhabricatorMailManagementResendWorkflow.php',
'PhabricatorMailManagementSendTestWorkflow' => 'applications/metamta/management/PhabricatorMailManagementSendTestWorkflow.php',
'PhabricatorMailManagementShowInboundWorkflow' => 'applications/metamta/management/PhabricatorMailManagementShowInboundWorkflow.php',
'PhabricatorMailManagementShowOutboundWorkflow' => 'applications/metamta/management/PhabricatorMailManagementShowOutboundWorkflow.php',
'PhabricatorMailManagementVolumeWorkflow' => 'applications/metamta/management/PhabricatorMailManagementVolumeWorkflow.php',
'PhabricatorMailManagementWorkflow' => 'applications/metamta/management/PhabricatorMailManagementWorkflow.php',
'PhabricatorMailOutboundMailHeraldAdapter' => 'applications/metamta/herald/PhabricatorMailOutboundMailHeraldAdapter.php',
'PhabricatorMailOutboundRoutingHeraldAction' => 'applications/metamta/herald/PhabricatorMailOutboundRoutingHeraldAction.php',
'PhabricatorMailOutboundRoutingSelfEmailHeraldAction' => 'applications/metamta/herald/PhabricatorMailOutboundRoutingSelfEmailHeraldAction.php',
'PhabricatorMailOutboundRoutingSelfNotificationHeraldAction' => 'applications/metamta/herald/PhabricatorMailOutboundRoutingSelfNotificationHeraldAction.php',
'PhabricatorMailOutboundStatus' => 'applications/metamta/constants/PhabricatorMailOutboundStatus.php',
'PhabricatorMailReceiver' => 'applications/metamta/receiver/PhabricatorMailReceiver.php',
'PhabricatorMailReceiverTestCase' => 'applications/metamta/receiver/__tests__/PhabricatorMailReceiverTestCase.php',
'PhabricatorMailReplyHandler' => 'applications/metamta/replyhandler/PhabricatorMailReplyHandler.php',
'PhabricatorMailRoutingRule' => 'applications/metamta/constants/PhabricatorMailRoutingRule.php',
'PhabricatorMailSetupCheck' => 'applications/config/check/PhabricatorMailSetupCheck.php',
'PhabricatorMailTarget' => 'applications/metamta/replyhandler/PhabricatorMailTarget.php',
'PhabricatorMailgunConfigOptions' => 'applications/config/option/PhabricatorMailgunConfigOptions.php',
'PhabricatorMainMenuSearchView' => 'view/page/menu/PhabricatorMainMenuSearchView.php',
'PhabricatorMainMenuView' => 'view/page/menu/PhabricatorMainMenuView.php',
'PhabricatorManagementWorkflow' => 'infrastructure/management/PhabricatorManagementWorkflow.php',
'PhabricatorManiphestApplication' => 'applications/maniphest/application/PhabricatorManiphestApplication.php',
'PhabricatorManiphestConfigOptions' => 'applications/maniphest/config/PhabricatorManiphestConfigOptions.php',
'PhabricatorManiphestTaskTestDataGenerator' => 'applications/maniphest/lipsum/PhabricatorManiphestTaskTestDataGenerator.php',
'PhabricatorMarkupCache' => 'applications/cache/storage/PhabricatorMarkupCache.php',
'PhabricatorMarkupEngine' => 'infrastructure/markup/PhabricatorMarkupEngine.php',
'PhabricatorMarkupInterface' => 'infrastructure/markup/PhabricatorMarkupInterface.php',
'PhabricatorMarkupOneOff' => 'infrastructure/markup/PhabricatorMarkupOneOff.php',
'PhabricatorMarkupPreviewController' => 'infrastructure/markup/PhabricatorMarkupPreviewController.php',
'PhabricatorMemeRemarkupRule' => 'applications/macro/markup/PhabricatorMemeRemarkupRule.php',
'PhabricatorMentionRemarkupRule' => 'applications/people/markup/PhabricatorMentionRemarkupRule.php',
'PhabricatorMentionableInterface' => 'applications/transactions/interface/PhabricatorMentionableInterface.php',
'PhabricatorMercurialGraphStream' => 'applications/repository/daemon/PhabricatorMercurialGraphStream.php',
'PhabricatorMetaMTAActor' => 'applications/metamta/query/PhabricatorMetaMTAActor.php',
'PhabricatorMetaMTAActorQuery' => 'applications/metamta/query/PhabricatorMetaMTAActorQuery.php',
'PhabricatorMetaMTAApplication' => 'applications/metamta/application/PhabricatorMetaMTAApplication.php',
'PhabricatorMetaMTAApplicationEmail' => 'applications/metamta/storage/PhabricatorMetaMTAApplicationEmail.php',
'PhabricatorMetaMTAApplicationEmailDatasource' => 'applications/metamta/typeahead/PhabricatorMetaMTAApplicationEmailDatasource.php',
'PhabricatorMetaMTAApplicationEmailEditor' => 'applications/metamta/editor/PhabricatorMetaMTAApplicationEmailEditor.php',
'PhabricatorMetaMTAApplicationEmailHeraldField' => 'applications/metamta/herald/PhabricatorMetaMTAApplicationEmailHeraldField.php',
'PhabricatorMetaMTAApplicationEmailPHIDType' => 'applications/phid/PhabricatorMetaMTAApplicationEmailPHIDType.php',
'PhabricatorMetaMTAApplicationEmailPanel' => 'applications/metamta/applicationpanel/PhabricatorMetaMTAApplicationEmailPanel.php',
'PhabricatorMetaMTAApplicationEmailQuery' => 'applications/metamta/query/PhabricatorMetaMTAApplicationEmailQuery.php',
'PhabricatorMetaMTAApplicationEmailTransaction' => 'applications/metamta/storage/PhabricatorMetaMTAApplicationEmailTransaction.php',
'PhabricatorMetaMTAApplicationEmailTransactionQuery' => 'applications/metamta/query/PhabricatorMetaMTAApplicationEmailTransactionQuery.php',
'PhabricatorMetaMTAAttachment' => 'applications/metamta/storage/PhabricatorMetaMTAAttachment.php',
'PhabricatorMetaMTAConfigOptions' => 'applications/config/option/PhabricatorMetaMTAConfigOptions.php',
'PhabricatorMetaMTAController' => 'applications/metamta/controller/PhabricatorMetaMTAController.php',
'PhabricatorMetaMTADAO' => 'applications/metamta/storage/PhabricatorMetaMTADAO.php',
'PhabricatorMetaMTAEmailBodyParser' => 'applications/metamta/parser/PhabricatorMetaMTAEmailBodyParser.php',
'PhabricatorMetaMTAEmailBodyParserTestCase' => 'applications/metamta/parser/__tests__/PhabricatorMetaMTAEmailBodyParserTestCase.php',
'PhabricatorMetaMTAEmailHeraldAction' => 'applications/metamta/herald/PhabricatorMetaMTAEmailHeraldAction.php',
'PhabricatorMetaMTAEmailOthersHeraldAction' => 'applications/metamta/herald/PhabricatorMetaMTAEmailOthersHeraldAction.php',
'PhabricatorMetaMTAEmailSelfHeraldAction' => 'applications/metamta/herald/PhabricatorMetaMTAEmailSelfHeraldAction.php',
'PhabricatorMetaMTAErrorMailAction' => 'applications/metamta/action/PhabricatorMetaMTAErrorMailAction.php',
'PhabricatorMetaMTAMail' => 'applications/metamta/storage/PhabricatorMetaMTAMail.php',
'PhabricatorMetaMTAMailBody' => 'applications/metamta/view/PhabricatorMetaMTAMailBody.php',
'PhabricatorMetaMTAMailBodyTestCase' => 'applications/metamta/view/__tests__/PhabricatorMetaMTAMailBodyTestCase.php',
'PhabricatorMetaMTAMailHasRecipientEdgeType' => 'applications/metamta/edge/PhabricatorMetaMTAMailHasRecipientEdgeType.php',
'PhabricatorMetaMTAMailListController' => 'applications/metamta/controller/PhabricatorMetaMTAMailListController.php',
'PhabricatorMetaMTAMailPHIDType' => 'applications/metamta/phid/PhabricatorMetaMTAMailPHIDType.php',
'PhabricatorMetaMTAMailQuery' => 'applications/metamta/query/PhabricatorMetaMTAMailQuery.php',
'PhabricatorMetaMTAMailSearchEngine' => 'applications/metamta/query/PhabricatorMetaMTAMailSearchEngine.php',
'PhabricatorMetaMTAMailSection' => 'applications/metamta/view/PhabricatorMetaMTAMailSection.php',
'PhabricatorMetaMTAMailTestCase' => 'applications/metamta/storage/__tests__/PhabricatorMetaMTAMailTestCase.php',
'PhabricatorMetaMTAMailViewController' => 'applications/metamta/controller/PhabricatorMetaMTAMailViewController.php',
'PhabricatorMetaMTAMailableDatasource' => 'applications/metamta/typeahead/PhabricatorMetaMTAMailableDatasource.php',
'PhabricatorMetaMTAMailableFunctionDatasource' => 'applications/metamta/typeahead/PhabricatorMetaMTAMailableFunctionDatasource.php',
'PhabricatorMetaMTAMailgunReceiveController' => 'applications/metamta/controller/PhabricatorMetaMTAMailgunReceiveController.php',
'PhabricatorMetaMTAMailingList' => 'applications/mailinglists/storage/PhabricatorMetaMTAMailingList.php',
'PhabricatorMetaMTAMemberQuery' => 'applications/metamta/query/PhabricatorMetaMTAMemberQuery.php',
'PhabricatorMetaMTAPermanentFailureException' => 'applications/metamta/exception/PhabricatorMetaMTAPermanentFailureException.php',
'PhabricatorMetaMTAReceivedMail' => 'applications/metamta/storage/PhabricatorMetaMTAReceivedMail.php',
'PhabricatorMetaMTAReceivedMailProcessingException' => 'applications/metamta/exception/PhabricatorMetaMTAReceivedMailProcessingException.php',
'PhabricatorMetaMTAReceivedMailTestCase' => 'applications/metamta/storage/__tests__/PhabricatorMetaMTAReceivedMailTestCase.php',
'PhabricatorMetaMTASchemaSpec' => 'applications/metamta/storage/PhabricatorMetaMTASchemaSpec.php',
'PhabricatorMetaMTASendGridReceiveController' => 'applications/metamta/controller/PhabricatorMetaMTASendGridReceiveController.php',
'PhabricatorMetaMTAWorker' => 'applications/metamta/PhabricatorMetaMTAWorker.php',
'PhabricatorMetronomicTriggerClock' => 'infrastructure/daemon/workers/clock/PhabricatorMetronomicTriggerClock.php',
'PhabricatorMultiColumnUIExample' => 'applications/uiexample/examples/PhabricatorMultiColumnUIExample.php',
'PhabricatorMultiFactorSettingsPanel' => 'applications/settings/panel/PhabricatorMultiFactorSettingsPanel.php',
'PhabricatorMultimeterApplication' => 'applications/multimeter/application/PhabricatorMultimeterApplication.php',
'PhabricatorMustVerifyEmailController' => 'applications/auth/controller/PhabricatorMustVerifyEmailController.php',
'PhabricatorMySQLConfigOptions' => 'applications/config/option/PhabricatorMySQLConfigOptions.php',
'PhabricatorMySQLFileStorageEngine' => 'applications/files/engine/PhabricatorMySQLFileStorageEngine.php',
'PhabricatorMySQLSearchEngine' => 'applications/search/engine/PhabricatorMySQLSearchEngine.php',
'PhabricatorMySQLSetupCheck' => 'applications/config/check/PhabricatorMySQLSetupCheck.php',
'PhabricatorNamedQuery' => 'applications/search/storage/PhabricatorNamedQuery.php',
'PhabricatorNamedQueryQuery' => 'applications/search/query/PhabricatorNamedQueryQuery.php',
'PhabricatorNavigationRemarkupRule' => 'infrastructure/markup/rule/PhabricatorNavigationRemarkupRule.php',
'PhabricatorNeverTriggerClock' => 'infrastructure/daemon/workers/clock/PhabricatorNeverTriggerClock.php',
'PhabricatorNotificationBuilder' => 'applications/notification/builder/PhabricatorNotificationBuilder.php',
'PhabricatorNotificationClearController' => 'applications/notification/controller/PhabricatorNotificationClearController.php',
'PhabricatorNotificationClient' => 'applications/notification/client/PhabricatorNotificationClient.php',
'PhabricatorNotificationConfigOptions' => 'applications/config/option/PhabricatorNotificationConfigOptions.php',
'PhabricatorNotificationController' => 'applications/notification/controller/PhabricatorNotificationController.php',
'PhabricatorNotificationIndividualController' => 'applications/notification/controller/PhabricatorNotificationIndividualController.php',
'PhabricatorNotificationListController' => 'applications/notification/controller/PhabricatorNotificationListController.php',
'PhabricatorNotificationPanelController' => 'applications/notification/controller/PhabricatorNotificationPanelController.php',
'PhabricatorNotificationQuery' => 'applications/notification/query/PhabricatorNotificationQuery.php',
'PhabricatorNotificationSearchEngine' => 'applications/notification/query/PhabricatorNotificationSearchEngine.php',
'PhabricatorNotificationStatusController' => 'applications/notification/controller/PhabricatorNotificationStatusController.php',
'PhabricatorNotificationStatusView' => 'applications/notification/view/PhabricatorNotificationStatusView.php',
'PhabricatorNotificationTestController' => 'applications/notification/controller/PhabricatorNotificationTestController.php',
'PhabricatorNotificationTestFeedStory' => 'applications/notification/feed/PhabricatorNotificationTestFeedStory.php',
'PhabricatorNotificationUIExample' => 'applications/uiexample/examples/PhabricatorNotificationUIExample.php',
'PhabricatorNotificationsApplication' => 'applications/notification/application/PhabricatorNotificationsApplication.php',
'PhabricatorNuanceApplication' => 'applications/nuance/application/PhabricatorNuanceApplication.php',
'PhabricatorOAuth1AuthProvider' => 'applications/auth/provider/PhabricatorOAuth1AuthProvider.php',
'PhabricatorOAuth2AuthProvider' => 'applications/auth/provider/PhabricatorOAuth2AuthProvider.php',
'PhabricatorOAuthAuthProvider' => 'applications/auth/provider/PhabricatorOAuthAuthProvider.php',
'PhabricatorOAuthClientAuthorization' => 'applications/oauthserver/storage/PhabricatorOAuthClientAuthorization.php',
'PhabricatorOAuthClientAuthorizationQuery' => 'applications/oauthserver/query/PhabricatorOAuthClientAuthorizationQuery.php',
'PhabricatorOAuthClientController' => 'applications/oauthserver/controller/client/PhabricatorOAuthClientController.php',
'PhabricatorOAuthClientDeleteController' => 'applications/oauthserver/controller/client/PhabricatorOAuthClientDeleteController.php',
'PhabricatorOAuthClientEditController' => 'applications/oauthserver/controller/client/PhabricatorOAuthClientEditController.php',
'PhabricatorOAuthClientListController' => 'applications/oauthserver/controller/client/PhabricatorOAuthClientListController.php',
'PhabricatorOAuthClientSecretController' => 'applications/oauthserver/controller/client/PhabricatorOAuthClientSecretController.php',
'PhabricatorOAuthClientViewController' => 'applications/oauthserver/controller/client/PhabricatorOAuthClientViewController.php',
'PhabricatorOAuthResponse' => 'applications/oauthserver/PhabricatorOAuthResponse.php',
'PhabricatorOAuthServer' => 'applications/oauthserver/PhabricatorOAuthServer.php',
'PhabricatorOAuthServerAccessToken' => 'applications/oauthserver/storage/PhabricatorOAuthServerAccessToken.php',
'PhabricatorOAuthServerApplication' => 'applications/oauthserver/application/PhabricatorOAuthServerApplication.php',
'PhabricatorOAuthServerAuthController' => 'applications/oauthserver/controller/PhabricatorOAuthServerAuthController.php',
'PhabricatorOAuthServerAuthorizationCode' => 'applications/oauthserver/storage/PhabricatorOAuthServerAuthorizationCode.php',
'PhabricatorOAuthServerAuthorizationsSettingsPanel' => 'applications/oauthserver/panel/PhabricatorOAuthServerAuthorizationsSettingsPanel.php',
'PhabricatorOAuthServerClient' => 'applications/oauthserver/storage/PhabricatorOAuthServerClient.php',
'PhabricatorOAuthServerClientAuthorizationPHIDType' => 'applications/oauthserver/phid/PhabricatorOAuthServerClientAuthorizationPHIDType.php',
'PhabricatorOAuthServerClientPHIDType' => 'applications/oauthserver/phid/PhabricatorOAuthServerClientPHIDType.php',
'PhabricatorOAuthServerClientQuery' => 'applications/oauthserver/query/PhabricatorOAuthServerClientQuery.php',
'PhabricatorOAuthServerClientSearchEngine' => 'applications/oauthserver/query/PhabricatorOAuthServerClientSearchEngine.php',
'PhabricatorOAuthServerController' => 'applications/oauthserver/controller/PhabricatorOAuthServerController.php',
'PhabricatorOAuthServerCreateClientsCapability' => 'applications/oauthserver/capability/PhabricatorOAuthServerCreateClientsCapability.php',
'PhabricatorOAuthServerDAO' => 'applications/oauthserver/storage/PhabricatorOAuthServerDAO.php',
'PhabricatorOAuthServerScope' => 'applications/oauthserver/PhabricatorOAuthServerScope.php',
'PhabricatorOAuthServerTestCase' => 'applications/oauthserver/__tests__/PhabricatorOAuthServerTestCase.php',
'PhabricatorOAuthServerTestController' => 'applications/oauthserver/controller/PhabricatorOAuthServerTestController.php',
'PhabricatorOAuthServerTokenController' => 'applications/oauthserver/controller/PhabricatorOAuthServerTokenController.php',
'PhabricatorObjectHandle' => 'applications/phid/PhabricatorObjectHandle.php',
'PhabricatorObjectHasAsanaSubtaskEdgeType' => 'applications/doorkeeper/edge/PhabricatorObjectHasAsanaSubtaskEdgeType.php',
'PhabricatorObjectHasAsanaTaskEdgeType' => 'applications/doorkeeper/edge/PhabricatorObjectHasAsanaTaskEdgeType.php',
'PhabricatorObjectHasContributorEdgeType' => 'applications/transactions/edges/PhabricatorObjectHasContributorEdgeType.php',
'PhabricatorObjectHasFileEdgeType' => 'applications/transactions/edges/PhabricatorObjectHasFileEdgeType.php',
'PhabricatorObjectHasJiraIssueEdgeType' => 'applications/doorkeeper/edge/PhabricatorObjectHasJiraIssueEdgeType.php',
'PhabricatorObjectHasSubscriberEdgeType' => 'applications/transactions/edges/PhabricatorObjectHasSubscriberEdgeType.php',
'PhabricatorObjectHasUnsubscriberEdgeType' => 'applications/transactions/edges/PhabricatorObjectHasUnsubscriberEdgeType.php',
'PhabricatorObjectHasWatcherEdgeType' => 'applications/transactions/edges/PhabricatorObjectHasWatcherEdgeType.php',
'PhabricatorObjectListQuery' => 'applications/phid/query/PhabricatorObjectListQuery.php',
'PhabricatorObjectListQueryTestCase' => 'applications/phid/query/__tests__/PhabricatorObjectListQueryTestCase.php',
'PhabricatorObjectMailReceiver' => 'applications/metamta/receiver/PhabricatorObjectMailReceiver.php',
'PhabricatorObjectMailReceiverTestCase' => 'applications/metamta/receiver/__tests__/PhabricatorObjectMailReceiverTestCase.php',
'PhabricatorObjectMentionedByObjectEdgeType' => 'applications/transactions/edges/PhabricatorObjectMentionedByObjectEdgeType.php',
'PhabricatorObjectMentionsObjectEdgeType' => 'applications/transactions/edges/PhabricatorObjectMentionsObjectEdgeType.php',
'PhabricatorObjectQuery' => 'applications/phid/query/PhabricatorObjectQuery.php',
'PhabricatorObjectRemarkupRule' => 'infrastructure/markup/rule/PhabricatorObjectRemarkupRule.php',
'PhabricatorObjectSelectorDialog' => 'view/control/PhabricatorObjectSelectorDialog.php',
'PhabricatorObjectUsesCredentialsEdgeType' => 'applications/transactions/edges/PhabricatorObjectUsesCredentialsEdgeType.php',
'PhabricatorOffsetPagedQuery' => 'infrastructure/query/PhabricatorOffsetPagedQuery.php',
'PhabricatorOneTimeTriggerClock' => 'infrastructure/daemon/workers/clock/PhabricatorOneTimeTriggerClock.php',
'PhabricatorOpcodeCacheSpec' => 'applications/cache/spec/PhabricatorOpcodeCacheSpec.php',
'PhabricatorOwnerPathQuery' => 'applications/owners/query/PhabricatorOwnerPathQuery.php',
'PhabricatorOwnersApplication' => 'applications/owners/application/PhabricatorOwnersApplication.php',
'PhabricatorOwnersConfigOptions' => 'applications/owners/config/PhabricatorOwnersConfigOptions.php',
'PhabricatorOwnersConfiguredCustomField' => 'applications/owners/customfield/PhabricatorOwnersConfiguredCustomField.php',
'PhabricatorOwnersController' => 'applications/owners/controller/PhabricatorOwnersController.php',
'PhabricatorOwnersCustomField' => 'applications/owners/customfield/PhabricatorOwnersCustomField.php',
'PhabricatorOwnersCustomFieldNumericIndex' => 'applications/owners/storage/PhabricatorOwnersCustomFieldNumericIndex.php',
'PhabricatorOwnersCustomFieldStorage' => 'applications/owners/storage/PhabricatorOwnersCustomFieldStorage.php',
'PhabricatorOwnersCustomFieldStringIndex' => 'applications/owners/storage/PhabricatorOwnersCustomFieldStringIndex.php',
'PhabricatorOwnersDAO' => 'applications/owners/storage/PhabricatorOwnersDAO.php',
'PhabricatorOwnersDetailController' => 'applications/owners/controller/PhabricatorOwnersDetailController.php',
'PhabricatorOwnersEditController' => 'applications/owners/controller/PhabricatorOwnersEditController.php',
'PhabricatorOwnersListController' => 'applications/owners/controller/PhabricatorOwnersListController.php',
'PhabricatorOwnersOwner' => 'applications/owners/storage/PhabricatorOwnersOwner.php',
'PhabricatorOwnersPackage' => 'applications/owners/storage/PhabricatorOwnersPackage.php',
'PhabricatorOwnersPackageDatasource' => 'applications/owners/typeahead/PhabricatorOwnersPackageDatasource.php',
'PhabricatorOwnersPackageFunctionDatasource' => 'applications/owners/typeahead/PhabricatorOwnersPackageFunctionDatasource.php',
'PhabricatorOwnersPackageOwnerDatasource' => 'applications/owners/typeahead/PhabricatorOwnersPackageOwnerDatasource.php',
'PhabricatorOwnersPackagePHIDType' => 'applications/owners/phid/PhabricatorOwnersPackagePHIDType.php',
'PhabricatorOwnersPackageQuery' => 'applications/owners/query/PhabricatorOwnersPackageQuery.php',
'PhabricatorOwnersPackageSearchEngine' => 'applications/owners/query/PhabricatorOwnersPackageSearchEngine.php',
'PhabricatorOwnersPackageTestCase' => 'applications/owners/storage/__tests__/PhabricatorOwnersPackageTestCase.php',
'PhabricatorOwnersPackageTransaction' => 'applications/owners/storage/PhabricatorOwnersPackageTransaction.php',
'PhabricatorOwnersPackageTransactionEditor' => 'applications/owners/editor/PhabricatorOwnersPackageTransactionEditor.php',
'PhabricatorOwnersPackageTransactionQuery' => 'applications/owners/query/PhabricatorOwnersPackageTransactionQuery.php',
'PhabricatorOwnersPath' => 'applications/owners/storage/PhabricatorOwnersPath.php',
'PhabricatorOwnersPathsController' => 'applications/owners/controller/PhabricatorOwnersPathsController.php',
'PhabricatorOwnersSearchField' => 'applications/owners/searchfield/PhabricatorOwnersSearchField.php',
'PhabricatorPHDConfigOptions' => 'applications/config/option/PhabricatorPHDConfigOptions.php',
'PhabricatorPHID' => 'applications/phid/storage/PhabricatorPHID.php',
'PhabricatorPHIDConstants' => 'applications/phid/PhabricatorPHIDConstants.php',
'PhabricatorPHIDInterface' => 'applications/phid/interface/PhabricatorPHIDInterface.php',
'PhabricatorPHIDType' => 'applications/phid/type/PhabricatorPHIDType.php',
'PhabricatorPHIDTypeTestCase' => 'applications/phid/type/__tests__/PhabricatorPHIDTypeTestCase.php',
'PhabricatorPHPASTApplication' => 'applications/phpast/application/PhabricatorPHPASTApplication.php',
'PhabricatorPHPConfigSetupCheck' => 'applications/config/check/PhabricatorPHPConfigSetupCheck.php',
'PhabricatorPHPMailerConfigOptions' => 'applications/config/option/PhabricatorPHPMailerConfigOptions.php',
'PhabricatorPagedFormUIExample' => 'applications/uiexample/examples/PhabricatorPagedFormUIExample.php',
'PhabricatorPagerUIExample' => 'applications/uiexample/examples/PhabricatorPagerUIExample.php',
'PhabricatorPassphraseApplication' => 'applications/passphrase/application/PhabricatorPassphraseApplication.php',
'PhabricatorPasswordAuthProvider' => 'applications/auth/provider/PhabricatorPasswordAuthProvider.php',
'PhabricatorPasswordHasher' => 'infrastructure/util/password/PhabricatorPasswordHasher.php',
'PhabricatorPasswordHasherTestCase' => 'infrastructure/util/password/__tests__/PhabricatorPasswordHasherTestCase.php',
'PhabricatorPasswordHasherUnavailableException' => 'infrastructure/util/password/PhabricatorPasswordHasherUnavailableException.php',
'PhabricatorPasswordSettingsPanel' => 'applications/settings/panel/PhabricatorPasswordSettingsPanel.php',
'PhabricatorPaste' => 'applications/paste/storage/PhabricatorPaste.php',
'PhabricatorPasteApplication' => 'applications/paste/application/PhabricatorPasteApplication.php',
'PhabricatorPasteCommentController' => 'applications/paste/controller/PhabricatorPasteCommentController.php',
'PhabricatorPasteConfigOptions' => 'applications/paste/config/PhabricatorPasteConfigOptions.php',
'PhabricatorPasteController' => 'applications/paste/controller/PhabricatorPasteController.php',
'PhabricatorPasteDAO' => 'applications/paste/storage/PhabricatorPasteDAO.php',
'PhabricatorPasteEditController' => 'applications/paste/controller/PhabricatorPasteEditController.php',
'PhabricatorPasteEditor' => 'applications/paste/editor/PhabricatorPasteEditor.php',
'PhabricatorPasteListController' => 'applications/paste/controller/PhabricatorPasteListController.php',
'PhabricatorPastePastePHIDType' => 'applications/paste/phid/PhabricatorPastePastePHIDType.php',
'PhabricatorPasteQuery' => 'applications/paste/query/PhabricatorPasteQuery.php',
'PhabricatorPasteRemarkupRule' => 'applications/paste/remarkup/PhabricatorPasteRemarkupRule.php',
'PhabricatorPasteSchemaSpec' => 'applications/paste/storage/PhabricatorPasteSchemaSpec.php',
'PhabricatorPasteSearchEngine' => 'applications/paste/query/PhabricatorPasteSearchEngine.php',
'PhabricatorPasteTestDataGenerator' => 'applications/paste/lipsum/PhabricatorPasteTestDataGenerator.php',
'PhabricatorPasteTransaction' => 'applications/paste/storage/PhabricatorPasteTransaction.php',
'PhabricatorPasteTransactionComment' => 'applications/paste/storage/PhabricatorPasteTransactionComment.php',
'PhabricatorPasteTransactionQuery' => 'applications/paste/query/PhabricatorPasteTransactionQuery.php',
'PhabricatorPasteViewController' => 'applications/paste/controller/PhabricatorPasteViewController.php',
'PhabricatorPathSetupCheck' => 'applications/config/check/PhabricatorPathSetupCheck.php',
'PhabricatorPeopleAnyOwnerDatasource' => 'applications/people/typeahead/PhabricatorPeopleAnyOwnerDatasource.php',
'PhabricatorPeopleApplication' => 'applications/people/application/PhabricatorPeopleApplication.php',
'PhabricatorPeopleApproveController' => 'applications/people/controller/PhabricatorPeopleApproveController.php',
'PhabricatorPeopleCalendarController' => 'applications/people/controller/PhabricatorPeopleCalendarController.php',
'PhabricatorPeopleController' => 'applications/people/controller/PhabricatorPeopleController.php',
'PhabricatorPeopleCreateController' => 'applications/people/controller/PhabricatorPeopleCreateController.php',
'PhabricatorPeopleDatasource' => 'applications/people/typeahead/PhabricatorPeopleDatasource.php',
'PhabricatorPeopleDeleteController' => 'applications/people/controller/PhabricatorPeopleDeleteController.php',
'PhabricatorPeopleDisableController' => 'applications/people/controller/PhabricatorPeopleDisableController.php',
'PhabricatorPeopleEmpowerController' => 'applications/people/controller/PhabricatorPeopleEmpowerController.php',
'PhabricatorPeopleExternalPHIDType' => 'applications/people/phid/PhabricatorPeopleExternalPHIDType.php',
'PhabricatorPeopleHovercardEventListener' => 'applications/people/event/PhabricatorPeopleHovercardEventListener.php',
'PhabricatorPeopleInviteController' => 'applications/people/controller/PhabricatorPeopleInviteController.php',
'PhabricatorPeopleInviteListController' => 'applications/people/controller/PhabricatorPeopleInviteListController.php',
'PhabricatorPeopleInviteSendController' => 'applications/people/controller/PhabricatorPeopleInviteSendController.php',
'PhabricatorPeopleLdapController' => 'applications/people/controller/PhabricatorPeopleLdapController.php',
'PhabricatorPeopleListController' => 'applications/people/controller/PhabricatorPeopleListController.php',
'PhabricatorPeopleLogQuery' => 'applications/people/query/PhabricatorPeopleLogQuery.php',
'PhabricatorPeopleLogSearchEngine' => 'applications/people/query/PhabricatorPeopleLogSearchEngine.php',
'PhabricatorPeopleLogsController' => 'applications/people/controller/PhabricatorPeopleLogsController.php',
'PhabricatorPeopleNewController' => 'applications/people/controller/PhabricatorPeopleNewController.php',
'PhabricatorPeopleNoOwnerDatasource' => 'applications/people/typeahead/PhabricatorPeopleNoOwnerDatasource.php',
'PhabricatorPeopleOwnerDatasource' => 'applications/people/typeahead/PhabricatorPeopleOwnerDatasource.php',
'PhabricatorPeopleProfileController' => 'applications/people/controller/PhabricatorPeopleProfileController.php',
'PhabricatorPeopleProfileEditController' => 'applications/people/controller/PhabricatorPeopleProfileEditController.php',
'PhabricatorPeopleProfilePictureController' => 'applications/people/controller/PhabricatorPeopleProfilePictureController.php',
'PhabricatorPeopleQuery' => 'applications/people/query/PhabricatorPeopleQuery.php',
'PhabricatorPeopleRenameController' => 'applications/people/controller/PhabricatorPeopleRenameController.php',
'PhabricatorPeopleSearchEngine' => 'applications/people/query/PhabricatorPeopleSearchEngine.php',
'PhabricatorPeopleTestDataGenerator' => 'applications/people/lipsum/PhabricatorPeopleTestDataGenerator.php',
'PhabricatorPeopleTransactionQuery' => 'applications/people/query/PhabricatorPeopleTransactionQuery.php',
'PhabricatorPeopleUserFunctionDatasource' => 'applications/people/typeahead/PhabricatorPeopleUserFunctionDatasource.php',
'PhabricatorPeopleUserPHIDType' => 'applications/people/phid/PhabricatorPeopleUserPHIDType.php',
'PhabricatorPeopleWelcomeController' => 'applications/people/controller/PhabricatorPeopleWelcomeController.php',
'PhabricatorPersonaAuthProvider' => 'applications/auth/provider/PhabricatorPersonaAuthProvider.php',
'PhabricatorPhabricatorAuthProvider' => 'applications/auth/provider/PhabricatorPhabricatorAuthProvider.php',
'PhabricatorPhameApplication' => 'applications/phame/application/PhabricatorPhameApplication.php',
'PhabricatorPhameBlogPHIDType' => 'applications/phame/phid/PhabricatorPhameBlogPHIDType.php',
'PhabricatorPhameConfigOptions' => 'applications/phame/config/PhabricatorPhameConfigOptions.php',
'PhabricatorPhamePostPHIDType' => 'applications/phame/phid/PhabricatorPhamePostPHIDType.php',
'PhabricatorPhluxApplication' => 'applications/phlux/application/PhabricatorPhluxApplication.php',
'PhabricatorPholioApplication' => 'applications/pholio/application/PhabricatorPholioApplication.php',
'PhabricatorPholioConfigOptions' => 'applications/pholio/config/PhabricatorPholioConfigOptions.php',
'PhabricatorPholioMockTestDataGenerator' => 'applications/pholio/lipsum/PhabricatorPholioMockTestDataGenerator.php',
'PhabricatorPhortuneApplication' => 'applications/phortune/application/PhabricatorPhortuneApplication.php',
'PhabricatorPhortuneManagementInvoiceWorkflow' => 'applications/phortune/management/PhabricatorPhortuneManagementInvoiceWorkflow.php',
'PhabricatorPhortuneManagementWorkflow' => 'applications/phortune/management/PhabricatorPhortuneManagementWorkflow.php',
'PhabricatorPhragmentApplication' => 'applications/phragment/application/PhabricatorPhragmentApplication.php',
'PhabricatorPhrequentApplication' => 'applications/phrequent/application/PhabricatorPhrequentApplication.php',
'PhabricatorPhrequentConfigOptions' => 'applications/phrequent/config/PhabricatorPhrequentConfigOptions.php',
'PhabricatorPhrictionApplication' => 'applications/phriction/application/PhabricatorPhrictionApplication.php',
'PhabricatorPhrictionConfigOptions' => 'applications/phriction/config/PhabricatorPhrictionConfigOptions.php',
'PhabricatorPhurlApplication' => 'applications/phurl/application/PhabricatorPhurlApplication.php',
'PhabricatorPhurlController' => 'applications/phurl/controller/PhabricatorPhurlController.php',
'PhabricatorPhurlDAO' => 'applications/phurl/storage/PhabricatorPhurlDAO.php',
'PhabricatorPhurlSchemaSpec' => 'applications/phurl/storage/PhabricatorPhurlSchemaSpec.php',
'PhabricatorPhurlURL' => 'applications/phurl/storage/PhabricatorPhurlURL.php',
'PhabricatorPhurlURLEditController' => 'applications/phurl/controller/PhabricatorPhurlURLEditController.php',
'PhabricatorPhurlURLEditor' => 'applications/phurl/editor/PhabricatorPhurlURLEditor.php',
'PhabricatorPhurlURLListController' => 'applications/phurl/controller/PhabricatorPhurlURLListController.php',
'PhabricatorPhurlURLPHIDType' => 'applications/phurl/phid/PhabricatorPhurlURLPHIDType.php',
'PhabricatorPhurlURLQuery' => 'applications/phurl/query/PhabricatorPhurlURLQuery.php',
'PhabricatorPhurlURLSearchEngine' => 'applications/phurl/query/PhabricatorPhurlURLSearchEngine.php',
'PhabricatorPhurlURLTransaction' => 'applications/phurl/storage/PhabricatorPhurlURLTransaction.php',
'PhabricatorPhurlURLTransactionComment' => 'applications/phurl/storage/PhabricatorPhurlURLTransactionComment.php',
'PhabricatorPhurlURLTransactionQuery' => 'applications/phurl/query/PhabricatorPhurlURLTransactionQuery.php',
'PhabricatorPhurlURLViewController' => 'applications/phurl/controller/PhabricatorPhurlURLViewController.php',
'PhabricatorPlatformSite' => 'aphront/site/PhabricatorPlatformSite.php',
'PhabricatorPolicies' => 'applications/policy/constants/PhabricatorPolicies.php',
'PhabricatorPolicy' => 'applications/policy/storage/PhabricatorPolicy.php',
'PhabricatorPolicyApplication' => 'applications/policy/application/PhabricatorPolicyApplication.php',
'PhabricatorPolicyAwareQuery' => 'infrastructure/query/policy/PhabricatorPolicyAwareQuery.php',
'PhabricatorPolicyAwareTestQuery' => 'applications/policy/__tests__/PhabricatorPolicyAwareTestQuery.php',
'PhabricatorPolicyCanEditCapability' => 'applications/policy/capability/PhabricatorPolicyCanEditCapability.php',
'PhabricatorPolicyCanJoinCapability' => 'applications/policy/capability/PhabricatorPolicyCanJoinCapability.php',
'PhabricatorPolicyCanViewCapability' => 'applications/policy/capability/PhabricatorPolicyCanViewCapability.php',
'PhabricatorPolicyCapability' => 'applications/policy/capability/PhabricatorPolicyCapability.php',
'PhabricatorPolicyCapabilityTestCase' => 'applications/policy/capability/__tests__/PhabricatorPolicyCapabilityTestCase.php',
'PhabricatorPolicyConfigOptions' => 'applications/policy/config/PhabricatorPolicyConfigOptions.php',
'PhabricatorPolicyConstants' => 'applications/policy/constants/PhabricatorPolicyConstants.php',
'PhabricatorPolicyController' => 'applications/policy/controller/PhabricatorPolicyController.php',
'PhabricatorPolicyDAO' => 'applications/policy/storage/PhabricatorPolicyDAO.php',
'PhabricatorPolicyDataTestCase' => 'applications/policy/__tests__/PhabricatorPolicyDataTestCase.php',
'PhabricatorPolicyEditController' => 'applications/policy/controller/PhabricatorPolicyEditController.php',
'PhabricatorPolicyException' => 'applications/policy/exception/PhabricatorPolicyException.php',
'PhabricatorPolicyExplainController' => 'applications/policy/controller/PhabricatorPolicyExplainController.php',
'PhabricatorPolicyFilter' => 'applications/policy/filter/PhabricatorPolicyFilter.php',
'PhabricatorPolicyInterface' => 'applications/policy/interface/PhabricatorPolicyInterface.php',
'PhabricatorPolicyManagementShowWorkflow' => 'applications/policy/management/PhabricatorPolicyManagementShowWorkflow.php',
'PhabricatorPolicyManagementUnlockWorkflow' => 'applications/policy/management/PhabricatorPolicyManagementUnlockWorkflow.php',
'PhabricatorPolicyManagementWorkflow' => 'applications/policy/management/PhabricatorPolicyManagementWorkflow.php',
'PhabricatorPolicyPHIDTypePolicy' => 'applications/policy/phid/PhabricatorPolicyPHIDTypePolicy.php',
'PhabricatorPolicyQuery' => 'applications/policy/query/PhabricatorPolicyQuery.php',
'PhabricatorPolicyRequestExceptionHandler' => 'aphront/handler/PhabricatorPolicyRequestExceptionHandler.php',
'PhabricatorPolicyRule' => 'applications/policy/rule/PhabricatorPolicyRule.php',
'PhabricatorPolicyTestCase' => 'applications/policy/__tests__/PhabricatorPolicyTestCase.php',
'PhabricatorPolicyTestObject' => 'applications/policy/__tests__/PhabricatorPolicyTestObject.php',
'PhabricatorPolicyType' => 'applications/policy/constants/PhabricatorPolicyType.php',
'PhabricatorPonderApplication' => 'applications/ponder/application/PhabricatorPonderApplication.php',
'PhabricatorProject' => 'applications/project/storage/PhabricatorProject.php',
'PhabricatorProjectAddHeraldAction' => 'applications/project/herald/PhabricatorProjectAddHeraldAction.php',
'PhabricatorProjectApplication' => 'applications/project/application/PhabricatorProjectApplication.php',
'PhabricatorProjectArchiveController' => 'applications/project/controller/PhabricatorProjectArchiveController.php',
'PhabricatorProjectBoardController' => 'applications/project/controller/PhabricatorProjectBoardController.php',
'PhabricatorProjectBoardImportController' => 'applications/project/controller/PhabricatorProjectBoardImportController.php',
'PhabricatorProjectBoardReorderController' => 'applications/project/controller/PhabricatorProjectBoardReorderController.php',
'PhabricatorProjectBoardViewController' => 'applications/project/controller/PhabricatorProjectBoardViewController.php',
'PhabricatorProjectColumn' => 'applications/project/storage/PhabricatorProjectColumn.php',
'PhabricatorProjectColumnDetailController' => 'applications/project/controller/PhabricatorProjectColumnDetailController.php',
'PhabricatorProjectColumnEditController' => 'applications/project/controller/PhabricatorProjectColumnEditController.php',
'PhabricatorProjectColumnHideController' => 'applications/project/controller/PhabricatorProjectColumnHideController.php',
'PhabricatorProjectColumnPHIDType' => 'applications/project/phid/PhabricatorProjectColumnPHIDType.php',
'PhabricatorProjectColumnPosition' => 'applications/project/storage/PhabricatorProjectColumnPosition.php',
'PhabricatorProjectColumnPositionQuery' => 'applications/project/query/PhabricatorProjectColumnPositionQuery.php',
'PhabricatorProjectColumnQuery' => 'applications/project/query/PhabricatorProjectColumnQuery.php',
'PhabricatorProjectColumnTransaction' => 'applications/project/storage/PhabricatorProjectColumnTransaction.php',
'PhabricatorProjectColumnTransactionEditor' => 'applications/project/editor/PhabricatorProjectColumnTransactionEditor.php',
'PhabricatorProjectColumnTransactionQuery' => 'applications/project/query/PhabricatorProjectColumnTransactionQuery.php',
'PhabricatorProjectConfigOptions' => 'applications/project/config/PhabricatorProjectConfigOptions.php',
'PhabricatorProjectConfiguredCustomField' => 'applications/project/customfield/PhabricatorProjectConfiguredCustomField.php',
'PhabricatorProjectController' => 'applications/project/controller/PhabricatorProjectController.php',
'PhabricatorProjectCustomField' => 'applications/project/customfield/PhabricatorProjectCustomField.php',
'PhabricatorProjectCustomFieldNumericIndex' => 'applications/project/storage/PhabricatorProjectCustomFieldNumericIndex.php',
'PhabricatorProjectCustomFieldStorage' => 'applications/project/storage/PhabricatorProjectCustomFieldStorage.php',
'PhabricatorProjectCustomFieldStringIndex' => 'applications/project/storage/PhabricatorProjectCustomFieldStringIndex.php',
'PhabricatorProjectDAO' => 'applications/project/storage/PhabricatorProjectDAO.php',
'PhabricatorProjectDatasource' => 'applications/project/typeahead/PhabricatorProjectDatasource.php',
'PhabricatorProjectDescriptionField' => 'applications/project/customfield/PhabricatorProjectDescriptionField.php',
'PhabricatorProjectEditDetailsController' => 'applications/project/controller/PhabricatorProjectEditDetailsController.php',
'PhabricatorProjectEditIconController' => 'applications/project/controller/PhabricatorProjectEditIconController.php',
'PhabricatorProjectEditPictureController' => 'applications/project/controller/PhabricatorProjectEditPictureController.php',
'PhabricatorProjectEditorTestCase' => 'applications/project/editor/__tests__/PhabricatorProjectEditorTestCase.php',
'PhabricatorProjectFeedController' => 'applications/project/controller/PhabricatorProjectFeedController.php',
'PhabricatorProjectHeraldAction' => 'applications/project/herald/PhabricatorProjectHeraldAction.php',
'PhabricatorProjectIcon' => 'applications/project/icon/PhabricatorProjectIcon.php',
'PhabricatorProjectInterface' => 'applications/project/interface/PhabricatorProjectInterface.php',
'PhabricatorProjectListController' => 'applications/project/controller/PhabricatorProjectListController.php',
'PhabricatorProjectLogicalAndDatasource' => 'applications/project/typeahead/PhabricatorProjectLogicalAndDatasource.php',
'PhabricatorProjectLogicalDatasource' => 'applications/project/typeahead/PhabricatorProjectLogicalDatasource.php',
'PhabricatorProjectLogicalOrNotDatasource' => 'applications/project/typeahead/PhabricatorProjectLogicalOrNotDatasource.php',
'PhabricatorProjectLogicalUserDatasource' => 'applications/project/typeahead/PhabricatorProjectLogicalUserDatasource.php',
'PhabricatorProjectLogicalViewerDatasource' => 'applications/project/typeahead/PhabricatorProjectLogicalViewerDatasource.php',
'PhabricatorProjectMemberOfProjectEdgeType' => 'applications/project/edge/PhabricatorProjectMemberOfProjectEdgeType.php',
'PhabricatorProjectMembersDatasource' => 'applications/project/typeahead/PhabricatorProjectMembersDatasource.php',
'PhabricatorProjectMembersEditController' => 'applications/project/controller/PhabricatorProjectMembersEditController.php',
'PhabricatorProjectMembersRemoveController' => 'applications/project/controller/PhabricatorProjectMembersRemoveController.php',
'PhabricatorProjectMoveController' => 'applications/project/controller/PhabricatorProjectMoveController.php',
'PhabricatorProjectNoProjectsDatasource' => 'applications/project/typeahead/PhabricatorProjectNoProjectsDatasource.php',
'PhabricatorProjectObjectHasProjectEdgeType' => 'applications/project/edge/PhabricatorProjectObjectHasProjectEdgeType.php',
'PhabricatorProjectOrUserDatasource' => 'applications/project/typeahead/PhabricatorProjectOrUserDatasource.php',
'PhabricatorProjectOrUserFunctionDatasource' => 'applications/project/typeahead/PhabricatorProjectOrUserFunctionDatasource.php',
'PhabricatorProjectProfileController' => 'applications/project/controller/PhabricatorProjectProfileController.php',
'PhabricatorProjectProjectHasMemberEdgeType' => 'applications/project/edge/PhabricatorProjectProjectHasMemberEdgeType.php',
'PhabricatorProjectProjectHasObjectEdgeType' => 'applications/project/edge/PhabricatorProjectProjectHasObjectEdgeType.php',
'PhabricatorProjectProjectPHIDType' => 'applications/project/phid/PhabricatorProjectProjectPHIDType.php',
'PhabricatorProjectQuery' => 'applications/project/query/PhabricatorProjectQuery.php',
'PhabricatorProjectRemoveHeraldAction' => 'applications/project/herald/PhabricatorProjectRemoveHeraldAction.php',
'PhabricatorProjectSchemaSpec' => 'applications/project/storage/PhabricatorProjectSchemaSpec.php',
'PhabricatorProjectSearchEngine' => 'applications/project/query/PhabricatorProjectSearchEngine.php',
'PhabricatorProjectSearchField' => 'applications/project/searchfield/PhabricatorProjectSearchField.php',
'PhabricatorProjectSearchIndexer' => 'applications/project/search/PhabricatorProjectSearchIndexer.php',
'PhabricatorProjectSlug' => 'applications/project/storage/PhabricatorProjectSlug.php',
'PhabricatorProjectStandardCustomField' => 'applications/project/customfield/PhabricatorProjectStandardCustomField.php',
'PhabricatorProjectStatus' => 'applications/project/constants/PhabricatorProjectStatus.php',
'PhabricatorProjectTestDataGenerator' => 'applications/project/lipsum/PhabricatorProjectTestDataGenerator.php',
'PhabricatorProjectTransaction' => 'applications/project/storage/PhabricatorProjectTransaction.php',
'PhabricatorProjectTransactionEditor' => 'applications/project/editor/PhabricatorProjectTransactionEditor.php',
'PhabricatorProjectTransactionQuery' => 'applications/project/query/PhabricatorProjectTransactionQuery.php',
'PhabricatorProjectUIEventListener' => 'applications/project/events/PhabricatorProjectUIEventListener.php',
'PhabricatorProjectUpdateController' => 'applications/project/controller/PhabricatorProjectUpdateController.php',
'PhabricatorProjectUserFunctionDatasource' => 'applications/project/typeahead/PhabricatorProjectUserFunctionDatasource.php',
'PhabricatorProjectViewController' => 'applications/project/controller/PhabricatorProjectViewController.php',
'PhabricatorProjectWatchController' => 'applications/project/controller/PhabricatorProjectWatchController.php',
'PhabricatorProjectsPolicyRule' => 'applications/policy/rule/PhabricatorProjectsPolicyRule.php',
'PhabricatorProtocolAdapter' => 'infrastructure/daemon/bot/adapter/PhabricatorProtocolAdapter.php',
'PhabricatorPygmentSetupCheck' => 'applications/config/check/PhabricatorPygmentSetupCheck.php',
'PhabricatorQuery' => 'infrastructure/query/PhabricatorQuery.php',
'PhabricatorQueryConstraint' => 'infrastructure/query/constraint/PhabricatorQueryConstraint.php',
'PhabricatorQueryOrderItem' => 'infrastructure/query/order/PhabricatorQueryOrderItem.php',
'PhabricatorQueryOrderTestCase' => 'infrastructure/query/order/__tests__/PhabricatorQueryOrderTestCase.php',
'PhabricatorQueryOrderVector' => 'infrastructure/query/order/PhabricatorQueryOrderVector.php',
'PhabricatorRateLimitRequestExceptionHandler' => 'aphront/handler/PhabricatorRateLimitRequestExceptionHandler.php',
'PhabricatorRecaptchaConfigOptions' => 'applications/config/option/PhabricatorRecaptchaConfigOptions.php',
'PhabricatorRecipientHasBadgeEdgeType' => 'applications/badges/edge/PhabricatorRecipientHasBadgeEdgeType.php',
'PhabricatorRedirectController' => 'applications/base/controller/PhabricatorRedirectController.php',
'PhabricatorRefreshCSRFController' => 'applications/auth/controller/PhabricatorRefreshCSRFController.php',
'PhabricatorRegistrationProfile' => 'applications/people/storage/PhabricatorRegistrationProfile.php',
'PhabricatorReleephApplication' => 'applications/releeph/application/PhabricatorReleephApplication.php',
'PhabricatorReleephApplicationConfigOptions' => 'applications/releeph/config/PhabricatorReleephApplicationConfigOptions.php',
'PhabricatorRemarkupControl' => 'view/form/control/PhabricatorRemarkupControl.php',
'PhabricatorRemarkupCowsayBlockInterpreter' => 'infrastructure/markup/interpreter/PhabricatorRemarkupCowsayBlockInterpreter.php',
'PhabricatorRemarkupCustomBlockRule' => 'infrastructure/markup/rule/PhabricatorRemarkupCustomBlockRule.php',
'PhabricatorRemarkupCustomInlineRule' => 'infrastructure/markup/rule/PhabricatorRemarkupCustomInlineRule.php',
'PhabricatorRemarkupFigletBlockInterpreter' => 'infrastructure/markup/interpreter/PhabricatorRemarkupFigletBlockInterpreter.php',
- 'PhabricatorRemarkupGraphvizBlockInterpreter' => 'infrastructure/markup/interpreter/PhabricatorRemarkupGraphvizBlockInterpreter.php',
'PhabricatorRemarkupUIExample' => 'applications/uiexample/examples/PhabricatorRemarkupUIExample.php',
'PhabricatorRepositoriesSetupCheck' => 'applications/config/check/PhabricatorRepositoriesSetupCheck.php',
'PhabricatorRepository' => 'applications/repository/storage/PhabricatorRepository.php',
'PhabricatorRepositoryAuditRequest' => 'applications/repository/storage/PhabricatorRepositoryAuditRequest.php',
'PhabricatorRepositoryBranch' => 'applications/repository/storage/PhabricatorRepositoryBranch.php',
'PhabricatorRepositoryCommit' => 'applications/repository/storage/PhabricatorRepositoryCommit.php',
'PhabricatorRepositoryCommitChangeParserWorker' => 'applications/repository/worker/commitchangeparser/PhabricatorRepositoryCommitChangeParserWorker.php',
'PhabricatorRepositoryCommitData' => 'applications/repository/storage/PhabricatorRepositoryCommitData.php',
'PhabricatorRepositoryCommitHeraldWorker' => 'applications/repository/worker/PhabricatorRepositoryCommitHeraldWorker.php',
'PhabricatorRepositoryCommitMessageParserWorker' => 'applications/repository/worker/commitmessageparser/PhabricatorRepositoryCommitMessageParserWorker.php',
'PhabricatorRepositoryCommitOwnersWorker' => 'applications/repository/worker/PhabricatorRepositoryCommitOwnersWorker.php',
'PhabricatorRepositoryCommitPHIDType' => 'applications/repository/phid/PhabricatorRepositoryCommitPHIDType.php',
'PhabricatorRepositoryCommitParserWorker' => 'applications/repository/worker/PhabricatorRepositoryCommitParserWorker.php',
'PhabricatorRepositoryCommitRef' => 'applications/repository/engine/PhabricatorRepositoryCommitRef.php',
'PhabricatorRepositoryCommitSearchIndexer' => 'applications/repository/search/PhabricatorRepositoryCommitSearchIndexer.php',
'PhabricatorRepositoryConfigOptions' => 'applications/repository/config/PhabricatorRepositoryConfigOptions.php',
'PhabricatorRepositoryDAO' => 'applications/repository/storage/PhabricatorRepositoryDAO.php',
'PhabricatorRepositoryDiscoveryEngine' => 'applications/repository/engine/PhabricatorRepositoryDiscoveryEngine.php',
'PhabricatorRepositoryEditor' => 'applications/repository/editor/PhabricatorRepositoryEditor.php',
'PhabricatorRepositoryEngine' => 'applications/repository/engine/PhabricatorRepositoryEngine.php',
'PhabricatorRepositoryGitCommitChangeParserWorker' => 'applications/repository/worker/commitchangeparser/PhabricatorRepositoryGitCommitChangeParserWorker.php',
'PhabricatorRepositoryGitCommitMessageParserWorker' => 'applications/repository/worker/commitmessageparser/PhabricatorRepositoryGitCommitMessageParserWorker.php',
'PhabricatorRepositoryGraphCache' => 'applications/repository/graphcache/PhabricatorRepositoryGraphCache.php',
'PhabricatorRepositoryGraphStream' => 'applications/repository/daemon/PhabricatorRepositoryGraphStream.php',
'PhabricatorRepositoryManagementCacheWorkflow' => 'applications/repository/management/PhabricatorRepositoryManagementCacheWorkflow.php',
'PhabricatorRepositoryManagementDiscoverWorkflow' => 'applications/repository/management/PhabricatorRepositoryManagementDiscoverWorkflow.php',
'PhabricatorRepositoryManagementEditWorkflow' => 'applications/repository/management/PhabricatorRepositoryManagementEditWorkflow.php',
'PhabricatorRepositoryManagementImportingWorkflow' => 'applications/repository/management/PhabricatorRepositoryManagementImportingWorkflow.php',
'PhabricatorRepositoryManagementListPathsWorkflow' => 'applications/repository/management/PhabricatorRepositoryManagementListPathsWorkflow.php',
'PhabricatorRepositoryManagementListWorkflow' => 'applications/repository/management/PhabricatorRepositoryManagementListWorkflow.php',
'PhabricatorRepositoryManagementLookupUsersWorkflow' => 'applications/repository/management/PhabricatorRepositoryManagementLookupUsersWorkflow.php',
'PhabricatorRepositoryManagementMarkImportedWorkflow' => 'applications/repository/management/PhabricatorRepositoryManagementMarkImportedWorkflow.php',
'PhabricatorRepositoryManagementMirrorWorkflow' => 'applications/repository/management/PhabricatorRepositoryManagementMirrorWorkflow.php',
'PhabricatorRepositoryManagementMovePathsWorkflow' => 'applications/repository/management/PhabricatorRepositoryManagementMovePathsWorkflow.php',
'PhabricatorRepositoryManagementParentsWorkflow' => 'applications/repository/management/PhabricatorRepositoryManagementParentsWorkflow.php',
'PhabricatorRepositoryManagementPullWorkflow' => 'applications/repository/management/PhabricatorRepositoryManagementPullWorkflow.php',
'PhabricatorRepositoryManagementRefsWorkflow' => 'applications/repository/management/PhabricatorRepositoryManagementRefsWorkflow.php',
'PhabricatorRepositoryManagementReparseWorkflow' => 'applications/repository/management/PhabricatorRepositoryManagementReparseWorkflow.php',
'PhabricatorRepositoryManagementUpdateWorkflow' => 'applications/repository/management/PhabricatorRepositoryManagementUpdateWorkflow.php',
'PhabricatorRepositoryManagementWorkflow' => 'applications/repository/management/PhabricatorRepositoryManagementWorkflow.php',
'PhabricatorRepositoryMercurialCommitChangeParserWorker' => 'applications/repository/worker/commitchangeparser/PhabricatorRepositoryMercurialCommitChangeParserWorker.php',
'PhabricatorRepositoryMercurialCommitMessageParserWorker' => 'applications/repository/worker/commitmessageparser/PhabricatorRepositoryMercurialCommitMessageParserWorker.php',
'PhabricatorRepositoryMirror' => 'applications/repository/storage/PhabricatorRepositoryMirror.php',
'PhabricatorRepositoryMirrorEngine' => 'applications/repository/engine/PhabricatorRepositoryMirrorEngine.php',
'PhabricatorRepositoryMirrorPHIDType' => 'applications/repository/phid/PhabricatorRepositoryMirrorPHIDType.php',
'PhabricatorRepositoryMirrorQuery' => 'applications/repository/query/PhabricatorRepositoryMirrorQuery.php',
'PhabricatorRepositoryParsedChange' => 'applications/repository/data/PhabricatorRepositoryParsedChange.php',
'PhabricatorRepositoryPullEngine' => 'applications/repository/engine/PhabricatorRepositoryPullEngine.php',
'PhabricatorRepositoryPullLocalDaemon' => 'applications/repository/daemon/PhabricatorRepositoryPullLocalDaemon.php',
'PhabricatorRepositoryPushEvent' => 'applications/repository/storage/PhabricatorRepositoryPushEvent.php',
'PhabricatorRepositoryPushEventPHIDType' => 'applications/repository/phid/PhabricatorRepositoryPushEventPHIDType.php',
'PhabricatorRepositoryPushEventQuery' => 'applications/repository/query/PhabricatorRepositoryPushEventQuery.php',
'PhabricatorRepositoryPushLog' => 'applications/repository/storage/PhabricatorRepositoryPushLog.php',
'PhabricatorRepositoryPushLogPHIDType' => 'applications/repository/phid/PhabricatorRepositoryPushLogPHIDType.php',
'PhabricatorRepositoryPushLogQuery' => 'applications/repository/query/PhabricatorRepositoryPushLogQuery.php',
'PhabricatorRepositoryPushLogSearchEngine' => 'applications/repository/query/PhabricatorRepositoryPushLogSearchEngine.php',
'PhabricatorRepositoryPushMailWorker' => 'applications/repository/worker/PhabricatorRepositoryPushMailWorker.php',
'PhabricatorRepositoryPushReplyHandler' => 'applications/repository/mail/PhabricatorRepositoryPushReplyHandler.php',
'PhabricatorRepositoryQuery' => 'applications/repository/query/PhabricatorRepositoryQuery.php',
'PhabricatorRepositoryRefCursor' => 'applications/repository/storage/PhabricatorRepositoryRefCursor.php',
'PhabricatorRepositoryRefCursorQuery' => 'applications/repository/query/PhabricatorRepositoryRefCursorQuery.php',
'PhabricatorRepositoryRefEngine' => 'applications/repository/engine/PhabricatorRepositoryRefEngine.php',
'PhabricatorRepositoryRepositoryPHIDType' => 'applications/repository/phid/PhabricatorRepositoryRepositoryPHIDType.php',
'PhabricatorRepositorySchemaSpec' => 'applications/repository/storage/PhabricatorRepositorySchemaSpec.php',
'PhabricatorRepositorySearchEngine' => 'applications/repository/query/PhabricatorRepositorySearchEngine.php',
'PhabricatorRepositoryStatusMessage' => 'applications/repository/storage/PhabricatorRepositoryStatusMessage.php',
'PhabricatorRepositorySvnCommitChangeParserWorker' => 'applications/repository/worker/commitchangeparser/PhabricatorRepositorySvnCommitChangeParserWorker.php',
'PhabricatorRepositorySvnCommitMessageParserWorker' => 'applications/repository/worker/commitmessageparser/PhabricatorRepositorySvnCommitMessageParserWorker.php',
'PhabricatorRepositorySymbol' => 'applications/repository/storage/PhabricatorRepositorySymbol.php',
'PhabricatorRepositoryTestCase' => 'applications/repository/storage/__tests__/PhabricatorRepositoryTestCase.php',
'PhabricatorRepositoryTransaction' => 'applications/repository/storage/PhabricatorRepositoryTransaction.php',
'PhabricatorRepositoryTransactionQuery' => 'applications/repository/query/PhabricatorRepositoryTransactionQuery.php',
'PhabricatorRepositoryType' => 'applications/repository/constants/PhabricatorRepositoryType.php',
'PhabricatorRepositoryURINormalizer' => 'applications/repository/data/PhabricatorRepositoryURINormalizer.php',
'PhabricatorRepositoryURINormalizerTestCase' => 'applications/repository/data/__tests__/PhabricatorRepositoryURINormalizerTestCase.php',
'PhabricatorRepositoryURITestCase' => 'applications/repository/storage/__tests__/PhabricatorRepositoryURITestCase.php',
'PhabricatorRepositoryVCSPassword' => 'applications/repository/storage/PhabricatorRepositoryVCSPassword.php',
'PhabricatorRepositoryVersion' => 'applications/repository/constants/PhabricatorRepositoryVersion.php',
'PhabricatorRequestExceptionHandler' => 'aphront/handler/PhabricatorRequestExceptionHandler.php',
'PhabricatorResourceSite' => 'aphront/site/PhabricatorResourceSite.php',
'PhabricatorRobotsController' => 'applications/system/controller/PhabricatorRobotsController.php',
'PhabricatorS3FileStorageEngine' => 'applications/files/engine/PhabricatorS3FileStorageEngine.php',
'PhabricatorSMS' => 'infrastructure/sms/storage/PhabricatorSMS.php',
'PhabricatorSMSConfigOptions' => 'applications/config/option/PhabricatorSMSConfigOptions.php',
'PhabricatorSMSDAO' => 'infrastructure/sms/storage/PhabricatorSMSDAO.php',
'PhabricatorSMSDemultiplexWorker' => 'infrastructure/sms/worker/PhabricatorSMSDemultiplexWorker.php',
'PhabricatorSMSImplementationAdapter' => 'infrastructure/sms/adapter/PhabricatorSMSImplementationAdapter.php',
'PhabricatorSMSImplementationTestBlackholeAdapter' => 'infrastructure/sms/adapter/PhabricatorSMSImplementationTestBlackholeAdapter.php',
'PhabricatorSMSImplementationTwilioAdapter' => 'infrastructure/sms/adapter/PhabricatorSMSImplementationTwilioAdapter.php',
'PhabricatorSMSManagementListOutboundWorkflow' => 'infrastructure/sms/management/PhabricatorSMSManagementListOutboundWorkflow.php',
'PhabricatorSMSManagementSendTestWorkflow' => 'infrastructure/sms/management/PhabricatorSMSManagementSendTestWorkflow.php',
'PhabricatorSMSManagementShowOutboundWorkflow' => 'infrastructure/sms/management/PhabricatorSMSManagementShowOutboundWorkflow.php',
'PhabricatorSMSManagementWorkflow' => 'infrastructure/sms/management/PhabricatorSMSManagementWorkflow.php',
'PhabricatorSMSSendWorker' => 'infrastructure/sms/worker/PhabricatorSMSSendWorker.php',
'PhabricatorSMSWorker' => 'infrastructure/sms/worker/PhabricatorSMSWorker.php',
'PhabricatorSQLPatchList' => 'infrastructure/storage/patch/PhabricatorSQLPatchList.php',
'PhabricatorSSHKeyGenerator' => 'infrastructure/util/PhabricatorSSHKeyGenerator.php',
'PhabricatorSSHKeysSettingsPanel' => 'applications/settings/panel/PhabricatorSSHKeysSettingsPanel.php',
'PhabricatorSSHLog' => 'infrastructure/log/PhabricatorSSHLog.php',
'PhabricatorSSHPassthruCommand' => 'infrastructure/ssh/PhabricatorSSHPassthruCommand.php',
'PhabricatorSSHPublicKeyInterface' => 'applications/auth/sshkey/PhabricatorSSHPublicKeyInterface.php',
'PhabricatorSSHWorkflow' => 'infrastructure/ssh/PhabricatorSSHWorkflow.php',
'PhabricatorSavedQuery' => 'applications/search/storage/PhabricatorSavedQuery.php',
'PhabricatorSavedQueryQuery' => 'applications/search/query/PhabricatorSavedQueryQuery.php',
'PhabricatorScheduleTaskTriggerAction' => 'infrastructure/daemon/workers/action/PhabricatorScheduleTaskTriggerAction.php',
'PhabricatorScopedEnv' => 'infrastructure/env/PhabricatorScopedEnv.php',
'PhabricatorSearchAbstractDocument' => 'applications/search/index/PhabricatorSearchAbstractDocument.php',
'PhabricatorSearchApplication' => 'applications/search/application/PhabricatorSearchApplication.php',
'PhabricatorSearchApplicationSearchEngine' => 'applications/search/query/PhabricatorSearchApplicationSearchEngine.php',
'PhabricatorSearchApplicationStorageEnginePanel' => 'applications/search/applicationpanel/PhabricatorSearchApplicationStorageEnginePanel.php',
'PhabricatorSearchAttachController' => 'applications/search/controller/PhabricatorSearchAttachController.php',
'PhabricatorSearchBaseController' => 'applications/search/controller/PhabricatorSearchBaseController.php',
'PhabricatorSearchCheckboxesField' => 'applications/search/field/PhabricatorSearchCheckboxesField.php',
'PhabricatorSearchConfigOptions' => 'applications/search/config/PhabricatorSearchConfigOptions.php',
'PhabricatorSearchController' => 'applications/search/controller/PhabricatorSearchController.php',
'PhabricatorSearchCustomFieldProxyField' => 'applications/search/field/PhabricatorSearchCustomFieldProxyField.php',
'PhabricatorSearchDAO' => 'applications/search/storage/PhabricatorSearchDAO.php',
'PhabricatorSearchDatasource' => 'applications/search/typeahead/PhabricatorSearchDatasource.php',
'PhabricatorSearchDatasourceField' => 'applications/search/field/PhabricatorSearchDatasourceField.php',
'PhabricatorSearchDateControlField' => 'applications/search/field/PhabricatorSearchDateControlField.php',
'PhabricatorSearchDateField' => 'applications/search/field/PhabricatorSearchDateField.php',
'PhabricatorSearchDeleteController' => 'applications/search/controller/PhabricatorSearchDeleteController.php',
'PhabricatorSearchDocument' => 'applications/search/storage/document/PhabricatorSearchDocument.php',
'PhabricatorSearchDocumentField' => 'applications/search/storage/document/PhabricatorSearchDocumentField.php',
'PhabricatorSearchDocumentFieldType' => 'applications/search/constants/PhabricatorSearchDocumentFieldType.php',
'PhabricatorSearchDocumentIndexer' => 'applications/search/index/PhabricatorSearchDocumentIndexer.php',
'PhabricatorSearchDocumentQuery' => 'applications/search/query/PhabricatorSearchDocumentQuery.php',
'PhabricatorSearchDocumentRelationship' => 'applications/search/storage/document/PhabricatorSearchDocumentRelationship.php',
'PhabricatorSearchDocumentTypeDatasource' => 'applications/search/typeahead/PhabricatorSearchDocumentTypeDatasource.php',
'PhabricatorSearchEditController' => 'applications/search/controller/PhabricatorSearchEditController.php',
'PhabricatorSearchEngine' => 'applications/search/engine/PhabricatorSearchEngine.php',
'PhabricatorSearchEngineTestCase' => 'applications/search/engine/__tests__/PhabricatorSearchEngineTestCase.php',
'PhabricatorSearchField' => 'applications/search/field/PhabricatorSearchField.php',
'PhabricatorSearchHovercardController' => 'applications/search/controller/PhabricatorSearchHovercardController.php',
'PhabricatorSearchIndexer' => 'applications/search/index/PhabricatorSearchIndexer.php',
'PhabricatorSearchManagementIndexWorkflow' => 'applications/search/management/PhabricatorSearchManagementIndexWorkflow.php',
'PhabricatorSearchManagementInitWorkflow' => 'applications/search/management/PhabricatorSearchManagementInitWorkflow.php',
'PhabricatorSearchManagementWorkflow' => 'applications/search/management/PhabricatorSearchManagementWorkflow.php',
'PhabricatorSearchOrderController' => 'applications/search/controller/PhabricatorSearchOrderController.php',
'PhabricatorSearchOrderField' => 'applications/search/field/PhabricatorSearchOrderField.php',
'PhabricatorSearchPreferencesSettingsPanel' => 'applications/settings/panel/PhabricatorSearchPreferencesSettingsPanel.php',
'PhabricatorSearchRelationship' => 'applications/search/constants/PhabricatorSearchRelationship.php',
'PhabricatorSearchResultView' => 'applications/search/view/PhabricatorSearchResultView.php',
'PhabricatorSearchSelectController' => 'applications/search/controller/PhabricatorSearchSelectController.php',
'PhabricatorSearchSelectField' => 'applications/search/field/PhabricatorSearchSelectField.php',
'PhabricatorSearchStringListField' => 'applications/search/field/PhabricatorSearchStringListField.php',
'PhabricatorSearchSubscribersField' => 'applications/search/field/PhabricatorSearchSubscribersField.php',
'PhabricatorSearchTextField' => 'applications/search/field/PhabricatorSearchTextField.php',
'PhabricatorSearchThreeStateField' => 'applications/search/field/PhabricatorSearchThreeStateField.php',
'PhabricatorSearchTokenizerField' => 'applications/search/field/PhabricatorSearchTokenizerField.php',
'PhabricatorSearchWorker' => 'applications/search/worker/PhabricatorSearchWorker.php',
'PhabricatorSecurityConfigOptions' => 'applications/config/option/PhabricatorSecurityConfigOptions.php',
'PhabricatorSecuritySetupCheck' => 'applications/config/check/PhabricatorSecuritySetupCheck.php',
'PhabricatorSendGridConfigOptions' => 'applications/config/option/PhabricatorSendGridConfigOptions.php',
'PhabricatorSessionsSettingsPanel' => 'applications/settings/panel/PhabricatorSessionsSettingsPanel.php',
'PhabricatorSettingsAddEmailAction' => 'applications/settings/action/PhabricatorSettingsAddEmailAction.php',
'PhabricatorSettingsAdjustController' => 'applications/settings/controller/PhabricatorSettingsAdjustController.php',
'PhabricatorSettingsApplication' => 'applications/settings/application/PhabricatorSettingsApplication.php',
'PhabricatorSettingsMainController' => 'applications/settings/controller/PhabricatorSettingsMainController.php',
'PhabricatorSettingsPanel' => 'applications/settings/panel/PhabricatorSettingsPanel.php',
'PhabricatorSetupCheck' => 'applications/config/check/PhabricatorSetupCheck.php',
'PhabricatorSetupCheckTestCase' => 'applications/config/check/__tests__/PhabricatorSetupCheckTestCase.php',
'PhabricatorSetupIssue' => 'applications/config/issue/PhabricatorSetupIssue.php',
'PhabricatorSetupIssueUIExample' => 'applications/uiexample/examples/PhabricatorSetupIssueUIExample.php',
'PhabricatorSetupIssueView' => 'applications/config/view/PhabricatorSetupIssueView.php',
'PhabricatorSite' => 'aphront/site/PhabricatorSite.php',
'PhabricatorSlowvoteApplication' => 'applications/slowvote/application/PhabricatorSlowvoteApplication.php',
'PhabricatorSlowvoteChoice' => 'applications/slowvote/storage/PhabricatorSlowvoteChoice.php',
'PhabricatorSlowvoteCloseController' => 'applications/slowvote/controller/PhabricatorSlowvoteCloseController.php',
'PhabricatorSlowvoteCommentController' => 'applications/slowvote/controller/PhabricatorSlowvoteCommentController.php',
'PhabricatorSlowvoteController' => 'applications/slowvote/controller/PhabricatorSlowvoteController.php',
'PhabricatorSlowvoteDAO' => 'applications/slowvote/storage/PhabricatorSlowvoteDAO.php',
'PhabricatorSlowvoteDefaultViewCapability' => 'applications/slowvote/capability/PhabricatorSlowvoteDefaultViewCapability.php',
'PhabricatorSlowvoteEditController' => 'applications/slowvote/controller/PhabricatorSlowvoteEditController.php',
'PhabricatorSlowvoteEditor' => 'applications/slowvote/editor/PhabricatorSlowvoteEditor.php',
'PhabricatorSlowvoteListController' => 'applications/slowvote/controller/PhabricatorSlowvoteListController.php',
'PhabricatorSlowvoteMailReceiver' => 'applications/slowvote/mail/PhabricatorSlowvoteMailReceiver.php',
'PhabricatorSlowvoteOption' => 'applications/slowvote/storage/PhabricatorSlowvoteOption.php',
'PhabricatorSlowvotePoll' => 'applications/slowvote/storage/PhabricatorSlowvotePoll.php',
'PhabricatorSlowvotePollController' => 'applications/slowvote/controller/PhabricatorSlowvotePollController.php',
'PhabricatorSlowvotePollPHIDType' => 'applications/slowvote/phid/PhabricatorSlowvotePollPHIDType.php',
'PhabricatorSlowvoteQuery' => 'applications/slowvote/query/PhabricatorSlowvoteQuery.php',
'PhabricatorSlowvoteReplyHandler' => 'applications/slowvote/mail/PhabricatorSlowvoteReplyHandler.php',
'PhabricatorSlowvoteSchemaSpec' => 'applications/slowvote/storage/PhabricatorSlowvoteSchemaSpec.php',
'PhabricatorSlowvoteSearchEngine' => 'applications/slowvote/query/PhabricatorSlowvoteSearchEngine.php',
'PhabricatorSlowvoteTransaction' => 'applications/slowvote/storage/PhabricatorSlowvoteTransaction.php',
'PhabricatorSlowvoteTransactionComment' => 'applications/slowvote/storage/PhabricatorSlowvoteTransactionComment.php',
'PhabricatorSlowvoteTransactionQuery' => 'applications/slowvote/query/PhabricatorSlowvoteTransactionQuery.php',
'PhabricatorSlowvoteVoteController' => 'applications/slowvote/controller/PhabricatorSlowvoteVoteController.php',
'PhabricatorSlug' => 'infrastructure/util/PhabricatorSlug.php',
'PhabricatorSlugTestCase' => 'infrastructure/util/__tests__/PhabricatorSlugTestCase.php',
'PhabricatorSortTableUIExample' => 'applications/uiexample/examples/PhabricatorSortTableUIExample.php',
'PhabricatorSourceCodeView' => 'view/layout/PhabricatorSourceCodeView.php',
'PhabricatorSpacesApplication' => 'applications/spaces/application/PhabricatorSpacesApplication.php',
'PhabricatorSpacesArchiveController' => 'applications/spaces/controller/PhabricatorSpacesArchiveController.php',
'PhabricatorSpacesCapabilityCreateSpaces' => 'applications/spaces/capability/PhabricatorSpacesCapabilityCreateSpaces.php',
'PhabricatorSpacesCapabilityDefaultEdit' => 'applications/spaces/capability/PhabricatorSpacesCapabilityDefaultEdit.php',
'PhabricatorSpacesCapabilityDefaultView' => 'applications/spaces/capability/PhabricatorSpacesCapabilityDefaultView.php',
'PhabricatorSpacesController' => 'applications/spaces/controller/PhabricatorSpacesController.php',
'PhabricatorSpacesDAO' => 'applications/spaces/storage/PhabricatorSpacesDAO.php',
'PhabricatorSpacesEditController' => 'applications/spaces/controller/PhabricatorSpacesEditController.php',
'PhabricatorSpacesInterface' => 'applications/spaces/interface/PhabricatorSpacesInterface.php',
'PhabricatorSpacesListController' => 'applications/spaces/controller/PhabricatorSpacesListController.php',
'PhabricatorSpacesNamespace' => 'applications/spaces/storage/PhabricatorSpacesNamespace.php',
'PhabricatorSpacesNamespaceDatasource' => 'applications/spaces/typeahead/PhabricatorSpacesNamespaceDatasource.php',
'PhabricatorSpacesNamespaceEditor' => 'applications/spaces/editor/PhabricatorSpacesNamespaceEditor.php',
'PhabricatorSpacesNamespacePHIDType' => 'applications/spaces/phid/PhabricatorSpacesNamespacePHIDType.php',
'PhabricatorSpacesNamespaceQuery' => 'applications/spaces/query/PhabricatorSpacesNamespaceQuery.php',
'PhabricatorSpacesNamespaceSearchEngine' => 'applications/spaces/query/PhabricatorSpacesNamespaceSearchEngine.php',
'PhabricatorSpacesNamespaceTransaction' => 'applications/spaces/storage/PhabricatorSpacesNamespaceTransaction.php',
'PhabricatorSpacesNamespaceTransactionQuery' => 'applications/spaces/query/PhabricatorSpacesNamespaceTransactionQuery.php',
'PhabricatorSpacesNoAccessController' => 'applications/spaces/controller/PhabricatorSpacesNoAccessController.php',
'PhabricatorSpacesRemarkupRule' => 'applications/spaces/remarkup/PhabricatorSpacesRemarkupRule.php',
'PhabricatorSpacesSchemaSpec' => 'applications/spaces/storage/PhabricatorSpacesSchemaSpec.php',
'PhabricatorSpacesSearchField' => 'applications/spaces/searchfield/PhabricatorSpacesSearchField.php',
'PhabricatorSpacesTestCase' => 'applications/spaces/__tests__/PhabricatorSpacesTestCase.php',
'PhabricatorSpacesViewController' => 'applications/spaces/controller/PhabricatorSpacesViewController.php',
'PhabricatorStandardCustomField' => 'infrastructure/customfield/standard/PhabricatorStandardCustomField.php',
'PhabricatorStandardCustomFieldBool' => 'infrastructure/customfield/standard/PhabricatorStandardCustomFieldBool.php',
'PhabricatorStandardCustomFieldCredential' => 'infrastructure/customfield/standard/PhabricatorStandardCustomFieldCredential.php',
'PhabricatorStandardCustomFieldDate' => 'infrastructure/customfield/standard/PhabricatorStandardCustomFieldDate.php',
'PhabricatorStandardCustomFieldHeader' => 'infrastructure/customfield/standard/PhabricatorStandardCustomFieldHeader.php',
'PhabricatorStandardCustomFieldInt' => 'infrastructure/customfield/standard/PhabricatorStandardCustomFieldInt.php',
'PhabricatorStandardCustomFieldInterface' => 'infrastructure/customfield/interface/PhabricatorStandardCustomFieldInterface.php',
'PhabricatorStandardCustomFieldLink' => 'infrastructure/customfield/standard/PhabricatorStandardCustomFieldLink.php',
'PhabricatorStandardCustomFieldPHIDs' => 'infrastructure/customfield/standard/PhabricatorStandardCustomFieldPHIDs.php',
'PhabricatorStandardCustomFieldRemarkup' => 'infrastructure/customfield/standard/PhabricatorStandardCustomFieldRemarkup.php',
'PhabricatorStandardCustomFieldSelect' => 'infrastructure/customfield/standard/PhabricatorStandardCustomFieldSelect.php',
'PhabricatorStandardCustomFieldText' => 'infrastructure/customfield/standard/PhabricatorStandardCustomFieldText.php',
'PhabricatorStandardCustomFieldUsers' => 'infrastructure/customfield/standard/PhabricatorStandardCustomFieldUsers.php',
'PhabricatorStandardPageView' => 'view/page/PhabricatorStandardPageView.php',
'PhabricatorStandardSelectCustomFieldDatasource' => 'infrastructure/customfield/datasource/PhabricatorStandardSelectCustomFieldDatasource.php',
'PhabricatorStatusController' => 'applications/system/controller/PhabricatorStatusController.php',
'PhabricatorStatusUIExample' => 'applications/uiexample/examples/PhabricatorStatusUIExample.php',
'PhabricatorStorageFixtureScopeGuard' => 'infrastructure/testing/fixture/PhabricatorStorageFixtureScopeGuard.php',
'PhabricatorStorageManagementAPI' => 'infrastructure/storage/management/PhabricatorStorageManagementAPI.php',
'PhabricatorStorageManagementAdjustWorkflow' => 'infrastructure/storage/management/workflow/PhabricatorStorageManagementAdjustWorkflow.php',
'PhabricatorStorageManagementDatabasesWorkflow' => 'infrastructure/storage/management/workflow/PhabricatorStorageManagementDatabasesWorkflow.php',
'PhabricatorStorageManagementDestroyWorkflow' => 'infrastructure/storage/management/workflow/PhabricatorStorageManagementDestroyWorkflow.php',
'PhabricatorStorageManagementDumpWorkflow' => 'infrastructure/storage/management/workflow/PhabricatorStorageManagementDumpWorkflow.php',
'PhabricatorStorageManagementProbeWorkflow' => 'infrastructure/storage/management/workflow/PhabricatorStorageManagementProbeWorkflow.php',
'PhabricatorStorageManagementQuickstartWorkflow' => 'infrastructure/storage/management/workflow/PhabricatorStorageManagementQuickstartWorkflow.php',
'PhabricatorStorageManagementRenamespaceWorkflow' => 'infrastructure/storage/management/workflow/PhabricatorStorageManagementRenamespaceWorkflow.php',
'PhabricatorStorageManagementShellWorkflow' => 'infrastructure/storage/management/workflow/PhabricatorStorageManagementShellWorkflow.php',
'PhabricatorStorageManagementStatusWorkflow' => 'infrastructure/storage/management/workflow/PhabricatorStorageManagementStatusWorkflow.php',
'PhabricatorStorageManagementUpgradeWorkflow' => 'infrastructure/storage/management/workflow/PhabricatorStorageManagementUpgradeWorkflow.php',
'PhabricatorStorageManagementWorkflow' => 'infrastructure/storage/management/workflow/PhabricatorStorageManagementWorkflow.php',
'PhabricatorStoragePatch' => 'infrastructure/storage/management/PhabricatorStoragePatch.php',
'PhabricatorStorageSchemaSpec' => 'infrastructure/storage/schema/PhabricatorStorageSchemaSpec.php',
'PhabricatorStorageSetupCheck' => 'applications/config/check/PhabricatorStorageSetupCheck.php',
'PhabricatorStreamingProtocolAdapter' => 'infrastructure/daemon/bot/adapter/PhabricatorStreamingProtocolAdapter.php',
'PhabricatorSubscribableInterface' => 'applications/subscriptions/interface/PhabricatorSubscribableInterface.php',
'PhabricatorSubscribedToObjectEdgeType' => 'applications/transactions/edges/PhabricatorSubscribedToObjectEdgeType.php',
'PhabricatorSubscribersQuery' => 'applications/subscriptions/query/PhabricatorSubscribersQuery.php',
'PhabricatorSubscriptionTriggerClock' => 'infrastructure/daemon/workers/clock/PhabricatorSubscriptionTriggerClock.php',
'PhabricatorSubscriptionsAddSelfHeraldAction' => 'applications/subscriptions/herald/PhabricatorSubscriptionsAddSelfHeraldAction.php',
'PhabricatorSubscriptionsAddSubscribersHeraldAction' => 'applications/subscriptions/herald/PhabricatorSubscriptionsAddSubscribersHeraldAction.php',
'PhabricatorSubscriptionsApplication' => 'applications/subscriptions/application/PhabricatorSubscriptionsApplication.php',
'PhabricatorSubscriptionsEditController' => 'applications/subscriptions/controller/PhabricatorSubscriptionsEditController.php',
'PhabricatorSubscriptionsEditor' => 'applications/subscriptions/editor/PhabricatorSubscriptionsEditor.php',
'PhabricatorSubscriptionsHeraldAction' => 'applications/subscriptions/herald/PhabricatorSubscriptionsHeraldAction.php',
'PhabricatorSubscriptionsListController' => 'applications/subscriptions/controller/PhabricatorSubscriptionsListController.php',
'PhabricatorSubscriptionsRemoveSelfHeraldAction' => 'applications/subscriptions/herald/PhabricatorSubscriptionsRemoveSelfHeraldAction.php',
'PhabricatorSubscriptionsRemoveSubscribersHeraldAction' => 'applications/subscriptions/herald/PhabricatorSubscriptionsRemoveSubscribersHeraldAction.php',
'PhabricatorSubscriptionsSubscribeEmailCommand' => 'applications/subscriptions/command/PhabricatorSubscriptionsSubscribeEmailCommand.php',
'PhabricatorSubscriptionsSubscribersPolicyRule' => 'applications/subscriptions/policyrule/PhabricatorSubscriptionsSubscribersPolicyRule.php',
'PhabricatorSubscriptionsTransactionController' => 'applications/subscriptions/controller/PhabricatorSubscriptionsTransactionController.php',
'PhabricatorSubscriptionsUIEventListener' => 'applications/subscriptions/events/PhabricatorSubscriptionsUIEventListener.php',
'PhabricatorSubscriptionsUnsubscribeEmailCommand' => 'applications/subscriptions/command/PhabricatorSubscriptionsUnsubscribeEmailCommand.php',
'PhabricatorSupportApplication' => 'applications/support/application/PhabricatorSupportApplication.php',
'PhabricatorSyntaxHighlighter' => 'infrastructure/markup/PhabricatorSyntaxHighlighter.php',
'PhabricatorSyntaxHighlightingConfigOptions' => 'applications/config/option/PhabricatorSyntaxHighlightingConfigOptions.php',
'PhabricatorSystemAction' => 'applications/system/action/PhabricatorSystemAction.php',
'PhabricatorSystemActionEngine' => 'applications/system/engine/PhabricatorSystemActionEngine.php',
'PhabricatorSystemActionGarbageCollector' => 'applications/system/garbagecollector/PhabricatorSystemActionGarbageCollector.php',
'PhabricatorSystemActionLog' => 'applications/system/storage/PhabricatorSystemActionLog.php',
'PhabricatorSystemActionRateLimitException' => 'applications/system/exception/PhabricatorSystemActionRateLimitException.php',
'PhabricatorSystemApplication' => 'applications/system/application/PhabricatorSystemApplication.php',
'PhabricatorSystemDAO' => 'applications/system/storage/PhabricatorSystemDAO.php',
'PhabricatorSystemDestructionGarbageCollector' => 'applications/system/garbagecollector/PhabricatorSystemDestructionGarbageCollector.php',
'PhabricatorSystemDestructionLog' => 'applications/system/storage/PhabricatorSystemDestructionLog.php',
'PhabricatorSystemRemoveDestroyWorkflow' => 'applications/system/management/PhabricatorSystemRemoveDestroyWorkflow.php',
'PhabricatorSystemRemoveLogWorkflow' => 'applications/system/management/PhabricatorSystemRemoveLogWorkflow.php',
'PhabricatorSystemRemoveWorkflow' => 'applications/system/management/PhabricatorSystemRemoveWorkflow.php',
'PhabricatorSystemSelectEncodingController' => 'applications/system/controller/PhabricatorSystemSelectEncodingController.php',
'PhabricatorSystemSelectHighlightController' => 'applications/system/controller/PhabricatorSystemSelectHighlightController.php',
'PhabricatorTOTPAuthFactor' => 'applications/auth/factor/PhabricatorTOTPAuthFactor.php',
'PhabricatorTOTPAuthFactorTestCase' => 'applications/auth/factor/__tests__/PhabricatorTOTPAuthFactorTestCase.php',
'PhabricatorTaskmasterDaemon' => 'infrastructure/daemon/workers/PhabricatorTaskmasterDaemon.php',
'PhabricatorTestApplication' => 'applications/base/controller/__tests__/PhabricatorTestApplication.php',
'PhabricatorTestCase' => 'infrastructure/testing/PhabricatorTestCase.php',
'PhabricatorTestController' => 'applications/base/controller/__tests__/PhabricatorTestController.php',
'PhabricatorTestDataGenerator' => 'applications/lipsum/generator/PhabricatorTestDataGenerator.php',
'PhabricatorTestNoCycleEdgeType' => 'applications/transactions/edges/PhabricatorTestNoCycleEdgeType.php',
'PhabricatorTestStorageEngine' => 'applications/files/engine/PhabricatorTestStorageEngine.php',
'PhabricatorTestWorker' => 'infrastructure/daemon/workers/__tests__/PhabricatorTestWorker.php',
'PhabricatorTime' => 'infrastructure/time/PhabricatorTime.php',
'PhabricatorTimeGuard' => 'infrastructure/time/PhabricatorTimeGuard.php',
'PhabricatorTimeTestCase' => 'infrastructure/time/__tests__/PhabricatorTimeTestCase.php',
'PhabricatorTimezoneSetupCheck' => 'applications/config/check/PhabricatorTimezoneSetupCheck.php',
'PhabricatorToken' => 'applications/tokens/storage/PhabricatorToken.php',
'PhabricatorTokenController' => 'applications/tokens/controller/PhabricatorTokenController.php',
'PhabricatorTokenCount' => 'applications/tokens/storage/PhabricatorTokenCount.php',
'PhabricatorTokenCountQuery' => 'applications/tokens/query/PhabricatorTokenCountQuery.php',
'PhabricatorTokenDAO' => 'applications/tokens/storage/PhabricatorTokenDAO.php',
'PhabricatorTokenGiveController' => 'applications/tokens/controller/PhabricatorTokenGiveController.php',
'PhabricatorTokenGiven' => 'applications/tokens/storage/PhabricatorTokenGiven.php',
'PhabricatorTokenGivenController' => 'applications/tokens/controller/PhabricatorTokenGivenController.php',
'PhabricatorTokenGivenEditor' => 'applications/tokens/editor/PhabricatorTokenGivenEditor.php',
'PhabricatorTokenGivenFeedStory' => 'applications/tokens/feed/PhabricatorTokenGivenFeedStory.php',
'PhabricatorTokenGivenQuery' => 'applications/tokens/query/PhabricatorTokenGivenQuery.php',
'PhabricatorTokenLeaderController' => 'applications/tokens/controller/PhabricatorTokenLeaderController.php',
'PhabricatorTokenQuery' => 'applications/tokens/query/PhabricatorTokenQuery.php',
'PhabricatorTokenReceiverInterface' => 'applications/tokens/interface/PhabricatorTokenReceiverInterface.php',
'PhabricatorTokenReceiverQuery' => 'applications/tokens/query/PhabricatorTokenReceiverQuery.php',
'PhabricatorTokenTokenPHIDType' => 'applications/tokens/phid/PhabricatorTokenTokenPHIDType.php',
'PhabricatorTokenUIEventListener' => 'applications/tokens/event/PhabricatorTokenUIEventListener.php',
'PhabricatorTokensApplication' => 'applications/tokens/application/PhabricatorTokensApplication.php',
'PhabricatorTokensSettingsPanel' => 'applications/settings/panel/PhabricatorTokensSettingsPanel.php',
'PhabricatorTooltipUIExample' => 'applications/uiexample/examples/PhabricatorTooltipUIExample.php',
'PhabricatorTransactions' => 'applications/transactions/constants/PhabricatorTransactions.php',
'PhabricatorTransactionsApplication' => 'applications/transactions/application/PhabricatorTransactionsApplication.php',
'PhabricatorTransformedFile' => 'applications/files/storage/PhabricatorTransformedFile.php',
'PhabricatorTranslationsConfigOptions' => 'applications/config/option/PhabricatorTranslationsConfigOptions.php',
'PhabricatorTriggerAction' => 'infrastructure/daemon/workers/action/PhabricatorTriggerAction.php',
'PhabricatorTriggerClock' => 'infrastructure/daemon/workers/clock/PhabricatorTriggerClock.php',
'PhabricatorTriggerClockTestCase' => 'infrastructure/daemon/workers/clock/__tests__/PhabricatorTriggerClockTestCase.php',
'PhabricatorTriggerDaemon' => 'infrastructure/daemon/workers/PhabricatorTriggerDaemon.php',
'PhabricatorTrivialTestCase' => 'infrastructure/testing/__tests__/PhabricatorTrivialTestCase.php',
'PhabricatorTwitchAuthProvider' => 'applications/auth/provider/PhabricatorTwitchAuthProvider.php',
'PhabricatorTwitterAuthProvider' => 'applications/auth/provider/PhabricatorTwitterAuthProvider.php',
'PhabricatorTypeaheadApplication' => 'applications/typeahead/application/PhabricatorTypeaheadApplication.php',
'PhabricatorTypeaheadCompositeDatasource' => 'applications/typeahead/datasource/PhabricatorTypeaheadCompositeDatasource.php',
'PhabricatorTypeaheadDatasource' => 'applications/typeahead/datasource/PhabricatorTypeaheadDatasource.php',
'PhabricatorTypeaheadDatasourceController' => 'applications/typeahead/controller/PhabricatorTypeaheadDatasourceController.php',
'PhabricatorTypeaheadFunctionHelpController' => 'applications/typeahead/controller/PhabricatorTypeaheadFunctionHelpController.php',
'PhabricatorTypeaheadInvalidTokenException' => 'applications/typeahead/exception/PhabricatorTypeaheadInvalidTokenException.php',
'PhabricatorTypeaheadModularDatasourceController' => 'applications/typeahead/controller/PhabricatorTypeaheadModularDatasourceController.php',
'PhabricatorTypeaheadMonogramDatasource' => 'applications/typeahead/datasource/PhabricatorTypeaheadMonogramDatasource.php',
'PhabricatorTypeaheadResult' => 'applications/typeahead/storage/PhabricatorTypeaheadResult.php',
'PhabricatorTypeaheadRuntimeCompositeDatasource' => 'applications/typeahead/datasource/PhabricatorTypeaheadRuntimeCompositeDatasource.php',
'PhabricatorTypeaheadTokenView' => 'applications/typeahead/view/PhabricatorTypeaheadTokenView.php',
'PhabricatorUIConfigOptions' => 'applications/config/option/PhabricatorUIConfigOptions.php',
'PhabricatorUIExample' => 'applications/uiexample/examples/PhabricatorUIExample.php',
'PhabricatorUIExampleRenderController' => 'applications/uiexample/controller/PhabricatorUIExampleRenderController.php',
'PhabricatorUIExamplesApplication' => 'applications/uiexample/application/PhabricatorUIExamplesApplication.php',
'PhabricatorUSEnglishTranslation' => 'infrastructure/internationalization/translation/PhabricatorUSEnglishTranslation.php',
'PhabricatorUnitsTestCase' => 'view/__tests__/PhabricatorUnitsTestCase.php',
'PhabricatorUnsubscribedFromObjectEdgeType' => 'applications/transactions/edges/PhabricatorUnsubscribedFromObjectEdgeType.php',
'PhabricatorUser' => 'applications/people/storage/PhabricatorUser.php',
'PhabricatorUserBlurbField' => 'applications/people/customfield/PhabricatorUserBlurbField.php',
'PhabricatorUserConfigOptions' => 'applications/people/config/PhabricatorUserConfigOptions.php',
'PhabricatorUserConfiguredCustomField' => 'applications/people/customfield/PhabricatorUserConfiguredCustomField.php',
'PhabricatorUserConfiguredCustomFieldStorage' => 'applications/people/storage/PhabricatorUserConfiguredCustomFieldStorage.php',
'PhabricatorUserCustomField' => 'applications/people/customfield/PhabricatorUserCustomField.php',
'PhabricatorUserCustomFieldNumericIndex' => 'applications/people/storage/PhabricatorUserCustomFieldNumericIndex.php',
'PhabricatorUserCustomFieldStringIndex' => 'applications/people/storage/PhabricatorUserCustomFieldStringIndex.php',
'PhabricatorUserDAO' => 'applications/people/storage/PhabricatorUserDAO.php',
'PhabricatorUserEditor' => 'applications/people/editor/PhabricatorUserEditor.php',
'PhabricatorUserEditorTestCase' => 'applications/people/editor/__tests__/PhabricatorUserEditorTestCase.php',
'PhabricatorUserEmail' => 'applications/people/storage/PhabricatorUserEmail.php',
'PhabricatorUserEmailTestCase' => 'applications/people/storage/__tests__/PhabricatorUserEmailTestCase.php',
'PhabricatorUserLog' => 'applications/people/storage/PhabricatorUserLog.php',
'PhabricatorUserLogView' => 'applications/people/view/PhabricatorUserLogView.php',
'PhabricatorUserPreferences' => 'applications/settings/storage/PhabricatorUserPreferences.php',
'PhabricatorUserProfile' => 'applications/people/storage/PhabricatorUserProfile.php',
'PhabricatorUserProfileEditor' => 'applications/people/editor/PhabricatorUserProfileEditor.php',
'PhabricatorUserRealNameField' => 'applications/people/customfield/PhabricatorUserRealNameField.php',
'PhabricatorUserRolesField' => 'applications/people/customfield/PhabricatorUserRolesField.php',
'PhabricatorUserSchemaSpec' => 'applications/people/storage/PhabricatorUserSchemaSpec.php',
'PhabricatorUserSearchIndexer' => 'applications/people/search/PhabricatorUserSearchIndexer.php',
'PhabricatorUserSinceField' => 'applications/people/customfield/PhabricatorUserSinceField.php',
'PhabricatorUserStatusField' => 'applications/people/customfield/PhabricatorUserStatusField.php',
'PhabricatorUserTestCase' => 'applications/people/storage/__tests__/PhabricatorUserTestCase.php',
'PhabricatorUserTitleField' => 'applications/people/customfield/PhabricatorUserTitleField.php',
'PhabricatorUserTransaction' => 'applications/people/storage/PhabricatorUserTransaction.php',
'PhabricatorUsersPolicyRule' => 'applications/policy/rule/PhabricatorUsersPolicyRule.php',
'PhabricatorUsersSearchField' => 'applications/people/searchfield/PhabricatorUsersSearchField.php',
'PhabricatorVCSResponse' => 'applications/repository/response/PhabricatorVCSResponse.php',
'PhabricatorVeryWowEnglishTranslation' => 'infrastructure/internationalization/translation/PhabricatorVeryWowEnglishTranslation.php',
'PhabricatorViewerDatasource' => 'applications/people/typeahead/PhabricatorViewerDatasource.php',
'PhabricatorWatcherHasObjectEdgeType' => 'applications/transactions/edges/PhabricatorWatcherHasObjectEdgeType.php',
'PhabricatorWordPressAuthProvider' => 'applications/auth/provider/PhabricatorWordPressAuthProvider.php',
'PhabricatorWorker' => 'infrastructure/daemon/workers/PhabricatorWorker.php',
'PhabricatorWorkerActiveTask' => 'infrastructure/daemon/workers/storage/PhabricatorWorkerActiveTask.php',
'PhabricatorWorkerArchiveTask' => 'infrastructure/daemon/workers/storage/PhabricatorWorkerArchiveTask.php',
'PhabricatorWorkerArchiveTaskQuery' => 'infrastructure/daemon/workers/query/PhabricatorWorkerArchiveTaskQuery.php',
'PhabricatorWorkerBulkJob' => 'infrastructure/daemon/workers/storage/PhabricatorWorkerBulkJob.php',
'PhabricatorWorkerBulkJobCreateWorker' => 'infrastructure/daemon/workers/bulk/PhabricatorWorkerBulkJobCreateWorker.php',
'PhabricatorWorkerBulkJobEditor' => 'infrastructure/daemon/workers/editor/PhabricatorWorkerBulkJobEditor.php',
'PhabricatorWorkerBulkJobPHIDType' => 'infrastructure/daemon/workers/phid/PhabricatorWorkerBulkJobPHIDType.php',
'PhabricatorWorkerBulkJobQuery' => 'infrastructure/daemon/workers/query/PhabricatorWorkerBulkJobQuery.php',
'PhabricatorWorkerBulkJobSearchEngine' => 'infrastructure/daemon/workers/query/PhabricatorWorkerBulkJobSearchEngine.php',
'PhabricatorWorkerBulkJobTaskWorker' => 'infrastructure/daemon/workers/bulk/PhabricatorWorkerBulkJobTaskWorker.php',
'PhabricatorWorkerBulkJobTestCase' => 'infrastructure/daemon/workers/__tests__/PhabricatorWorkerBulkJobTestCase.php',
'PhabricatorWorkerBulkJobTransaction' => 'infrastructure/daemon/workers/storage/PhabricatorWorkerBulkJobTransaction.php',
'PhabricatorWorkerBulkJobTransactionQuery' => 'infrastructure/daemon/workers/query/PhabricatorWorkerBulkJobTransactionQuery.php',
'PhabricatorWorkerBulkJobType' => 'infrastructure/daemon/workers/bulk/PhabricatorWorkerBulkJobType.php',
'PhabricatorWorkerBulkJobWorker' => 'infrastructure/daemon/workers/bulk/PhabricatorWorkerBulkJobWorker.php',
'PhabricatorWorkerBulkTask' => 'infrastructure/daemon/workers/storage/PhabricatorWorkerBulkTask.php',
'PhabricatorWorkerDAO' => 'infrastructure/daemon/workers/storage/PhabricatorWorkerDAO.php',
'PhabricatorWorkerLeaseQuery' => 'infrastructure/daemon/workers/query/PhabricatorWorkerLeaseQuery.php',
'PhabricatorWorkerManagementCancelWorkflow' => 'infrastructure/daemon/workers/management/PhabricatorWorkerManagementCancelWorkflow.php',
'PhabricatorWorkerManagementExecuteWorkflow' => 'infrastructure/daemon/workers/management/PhabricatorWorkerManagementExecuteWorkflow.php',
'PhabricatorWorkerManagementFloodWorkflow' => 'infrastructure/daemon/workers/management/PhabricatorWorkerManagementFloodWorkflow.php',
'PhabricatorWorkerManagementFreeWorkflow' => 'infrastructure/daemon/workers/management/PhabricatorWorkerManagementFreeWorkflow.php',
'PhabricatorWorkerManagementRetryWorkflow' => 'infrastructure/daemon/workers/management/PhabricatorWorkerManagementRetryWorkflow.php',
'PhabricatorWorkerManagementWorkflow' => 'infrastructure/daemon/workers/management/PhabricatorWorkerManagementWorkflow.php',
'PhabricatorWorkerPermanentFailureException' => 'infrastructure/daemon/workers/exception/PhabricatorWorkerPermanentFailureException.php',
'PhabricatorWorkerSchemaSpec' => 'infrastructure/daemon/workers/storage/PhabricatorWorkerSchemaSpec.php',
'PhabricatorWorkerTask' => 'infrastructure/daemon/workers/storage/PhabricatorWorkerTask.php',
'PhabricatorWorkerTaskData' => 'infrastructure/daemon/workers/storage/PhabricatorWorkerTaskData.php',
'PhabricatorWorkerTaskDetailController' => 'applications/daemon/controller/PhabricatorWorkerTaskDetailController.php',
'PhabricatorWorkerTestCase' => 'infrastructure/daemon/workers/__tests__/PhabricatorWorkerTestCase.php',
'PhabricatorWorkerTrigger' => 'infrastructure/daemon/workers/storage/PhabricatorWorkerTrigger.php',
'PhabricatorWorkerTriggerEvent' => 'infrastructure/daemon/workers/storage/PhabricatorWorkerTriggerEvent.php',
'PhabricatorWorkerTriggerManagementFireWorkflow' => 'infrastructure/daemon/workers/management/PhabricatorWorkerTriggerManagementFireWorkflow.php',
'PhabricatorWorkerTriggerManagementWorkflow' => 'infrastructure/daemon/workers/management/PhabricatorWorkerTriggerManagementWorkflow.php',
'PhabricatorWorkerTriggerPHIDType' => 'infrastructure/daemon/workers/phid/PhabricatorWorkerTriggerPHIDType.php',
'PhabricatorWorkerTriggerQuery' => 'infrastructure/daemon/workers/query/PhabricatorWorkerTriggerQuery.php',
'PhabricatorWorkerYieldException' => 'infrastructure/daemon/workers/exception/PhabricatorWorkerYieldException.php',
'PhabricatorWorkingCopyDiscoveryTestCase' => 'applications/repository/engine/__tests__/PhabricatorWorkingCopyDiscoveryTestCase.php',
'PhabricatorWorkingCopyPullTestCase' => 'applications/repository/engine/__tests__/PhabricatorWorkingCopyPullTestCase.php',
'PhabricatorWorkingCopyTestCase' => 'applications/repository/engine/__tests__/PhabricatorWorkingCopyTestCase.php',
'PhabricatorXHPASTViewController' => 'applications/phpast/controller/PhabricatorXHPASTViewController.php',
'PhabricatorXHPASTViewDAO' => 'applications/phpast/storage/PhabricatorXHPASTViewDAO.php',
'PhabricatorXHPASTViewFrameController' => 'applications/phpast/controller/PhabricatorXHPASTViewFrameController.php',
'PhabricatorXHPASTViewFramesetController' => 'applications/phpast/controller/PhabricatorXHPASTViewFramesetController.php',
'PhabricatorXHPASTViewInputController' => 'applications/phpast/controller/PhabricatorXHPASTViewInputController.php',
'PhabricatorXHPASTViewPanelController' => 'applications/phpast/controller/PhabricatorXHPASTViewPanelController.php',
'PhabricatorXHPASTViewParseTree' => 'applications/phpast/storage/PhabricatorXHPASTViewParseTree.php',
'PhabricatorXHPASTViewRunController' => 'applications/phpast/controller/PhabricatorXHPASTViewRunController.php',
'PhabricatorXHPASTViewStreamController' => 'applications/phpast/controller/PhabricatorXHPASTViewStreamController.php',
'PhabricatorXHPASTViewTreeController' => 'applications/phpast/controller/PhabricatorXHPASTViewTreeController.php',
'PhabricatorXHProfApplication' => 'applications/xhprof/application/PhabricatorXHProfApplication.php',
'PhabricatorXHProfController' => 'applications/xhprof/controller/PhabricatorXHProfController.php',
'PhabricatorXHProfDAO' => 'applications/xhprof/storage/PhabricatorXHProfDAO.php',
'PhabricatorXHProfProfileController' => 'applications/xhprof/controller/PhabricatorXHProfProfileController.php',
'PhabricatorXHProfProfileSymbolView' => 'applications/xhprof/view/PhabricatorXHProfProfileSymbolView.php',
'PhabricatorXHProfProfileTopLevelView' => 'applications/xhprof/view/PhabricatorXHProfProfileTopLevelView.php',
'PhabricatorXHProfProfileView' => 'applications/xhprof/view/PhabricatorXHProfProfileView.php',
'PhabricatorXHProfSample' => 'applications/xhprof/storage/PhabricatorXHProfSample.php',
'PhabricatorXHProfSampleListController' => 'applications/xhprof/controller/PhabricatorXHProfSampleListController.php',
'PhabricatorYoutubeRemarkupRule' => 'infrastructure/markup/rule/PhabricatorYoutubeRemarkupRule.php',
'PhameBasicBlogSkin' => 'applications/phame/skins/PhameBasicBlogSkin.php',
'PhameBasicTemplateBlogSkin' => 'applications/phame/skins/PhameBasicTemplateBlogSkin.php',
'PhameBlog' => 'applications/phame/storage/PhameBlog.php',
'PhameBlogDeleteController' => 'applications/phame/controller/blog/PhameBlogDeleteController.php',
'PhameBlogEditController' => 'applications/phame/controller/blog/PhameBlogEditController.php',
'PhameBlogEditor' => 'applications/phame/editor/PhameBlogEditor.php',
'PhameBlogFeedController' => 'applications/phame/controller/blog/PhameBlogFeedController.php',
'PhameBlogListController' => 'applications/phame/controller/blog/PhameBlogListController.php',
'PhameBlogLiveController' => 'applications/phame/controller/blog/PhameBlogLiveController.php',
'PhameBlogQuery' => 'applications/phame/query/PhameBlogQuery.php',
'PhameBlogSearchEngine' => 'applications/phame/query/PhameBlogSearchEngine.php',
'PhameBlogSite' => 'applications/phame/site/PhameBlogSite.php',
'PhameBlogSkin' => 'applications/phame/skins/PhameBlogSkin.php',
'PhameBlogTransaction' => 'applications/phame/storage/PhameBlogTransaction.php',
'PhameBlogViewController' => 'applications/phame/controller/blog/PhameBlogViewController.php',
'PhameCelerityResources' => 'applications/phame/celerity/PhameCelerityResources.php',
'PhameConduitAPIMethod' => 'applications/phame/conduit/PhameConduitAPIMethod.php',
'PhameController' => 'applications/phame/controller/PhameController.php',
'PhameCreatePostConduitAPIMethod' => 'applications/phame/conduit/PhameCreatePostConduitAPIMethod.php',
'PhameDAO' => 'applications/phame/storage/PhameDAO.php',
'PhamePost' => 'applications/phame/storage/PhamePost.php',
'PhamePostDeleteController' => 'applications/phame/controller/post/PhamePostDeleteController.php',
'PhamePostEditController' => 'applications/phame/controller/post/PhamePostEditController.php',
'PhamePostEditor' => 'applications/phame/editor/PhamePostEditor.php',
'PhamePostFramedController' => 'applications/phame/controller/post/PhamePostFramedController.php',
'PhamePostListController' => 'applications/phame/controller/post/PhamePostListController.php',
'PhamePostNewController' => 'applications/phame/controller/post/PhamePostNewController.php',
'PhamePostNotLiveController' => 'applications/phame/controller/post/PhamePostNotLiveController.php',
'PhamePostPreviewController' => 'applications/phame/controller/post/PhamePostPreviewController.php',
'PhamePostPublishController' => 'applications/phame/controller/post/PhamePostPublishController.php',
'PhamePostQuery' => 'applications/phame/query/PhamePostQuery.php',
'PhamePostSearchEngine' => 'applications/phame/query/PhamePostSearchEngine.php',
'PhamePostTransaction' => 'applications/phame/storage/PhamePostTransaction.php',
'PhamePostTransactionQuery' => 'applications/phame/query/PhamePostTransactionQuery.php',
'PhamePostUnpublishController' => 'applications/phame/controller/post/PhamePostUnpublishController.php',
'PhamePostView' => 'applications/phame/view/PhamePostView.php',
'PhamePostViewController' => 'applications/phame/controller/post/PhamePostViewController.php',
'PhameQueryConduitAPIMethod' => 'applications/phame/conduit/PhameQueryConduitAPIMethod.php',
'PhameQueryPostsConduitAPIMethod' => 'applications/phame/conduit/PhameQueryPostsConduitAPIMethod.php',
'PhameResourceController' => 'applications/phame/controller/PhameResourceController.php',
'PhameSchemaSpec' => 'applications/phame/storage/PhameSchemaSpec.php',
'PhameSite' => 'applications/phame/site/PhameSite.php',
'PhameSkinSpecification' => 'applications/phame/skins/PhameSkinSpecification.php',
'PhluxController' => 'applications/phlux/controller/PhluxController.php',
'PhluxDAO' => 'applications/phlux/storage/PhluxDAO.php',
'PhluxEditController' => 'applications/phlux/controller/PhluxEditController.php',
'PhluxListController' => 'applications/phlux/controller/PhluxListController.php',
'PhluxTransaction' => 'applications/phlux/storage/PhluxTransaction.php',
'PhluxTransactionQuery' => 'applications/phlux/query/PhluxTransactionQuery.php',
'PhluxVariable' => 'applications/phlux/storage/PhluxVariable.php',
'PhluxVariableEditor' => 'applications/phlux/editor/PhluxVariableEditor.php',
'PhluxVariablePHIDType' => 'applications/phlux/phid/PhluxVariablePHIDType.php',
'PhluxVariableQuery' => 'applications/phlux/query/PhluxVariableQuery.php',
'PhluxViewController' => 'applications/phlux/controller/PhluxViewController.php',
'PholioActionMenuEventListener' => 'applications/pholio/event/PholioActionMenuEventListener.php',
'PholioController' => 'applications/pholio/controller/PholioController.php',
'PholioDAO' => 'applications/pholio/storage/PholioDAO.php',
'PholioDefaultEditCapability' => 'applications/pholio/capability/PholioDefaultEditCapability.php',
'PholioDefaultViewCapability' => 'applications/pholio/capability/PholioDefaultViewCapability.php',
'PholioImage' => 'applications/pholio/storage/PholioImage.php',
'PholioImagePHIDType' => 'applications/pholio/phid/PholioImagePHIDType.php',
'PholioImageQuery' => 'applications/pholio/query/PholioImageQuery.php',
'PholioImageUploadController' => 'applications/pholio/controller/PholioImageUploadController.php',
'PholioInlineController' => 'applications/pholio/controller/PholioInlineController.php',
'PholioInlineListController' => 'applications/pholio/controller/PholioInlineListController.php',
'PholioMock' => 'applications/pholio/storage/PholioMock.php',
'PholioMockAuthorHeraldField' => 'applications/pholio/herald/PholioMockAuthorHeraldField.php',
'PholioMockCommentController' => 'applications/pholio/controller/PholioMockCommentController.php',
'PholioMockDescriptionHeraldField' => 'applications/pholio/herald/PholioMockDescriptionHeraldField.php',
'PholioMockEditController' => 'applications/pholio/controller/PholioMockEditController.php',
'PholioMockEditor' => 'applications/pholio/editor/PholioMockEditor.php',
'PholioMockEmbedView' => 'applications/pholio/view/PholioMockEmbedView.php',
'PholioMockHasTaskEdgeType' => 'applications/pholio/edge/PholioMockHasTaskEdgeType.php',
'PholioMockHeraldField' => 'applications/pholio/herald/PholioMockHeraldField.php',
'PholioMockHeraldFieldGroup' => 'applications/pholio/herald/PholioMockHeraldFieldGroup.php',
'PholioMockImagesView' => 'applications/pholio/view/PholioMockImagesView.php',
'PholioMockListController' => 'applications/pholio/controller/PholioMockListController.php',
'PholioMockMailReceiver' => 'applications/pholio/mail/PholioMockMailReceiver.php',
'PholioMockNameHeraldField' => 'applications/pholio/herald/PholioMockNameHeraldField.php',
'PholioMockPHIDType' => 'applications/pholio/phid/PholioMockPHIDType.php',
'PholioMockQuery' => 'applications/pholio/query/PholioMockQuery.php',
'PholioMockSearchEngine' => 'applications/pholio/query/PholioMockSearchEngine.php',
'PholioMockThumbGridView' => 'applications/pholio/view/PholioMockThumbGridView.php',
'PholioMockViewController' => 'applications/pholio/controller/PholioMockViewController.php',
'PholioRemarkupRule' => 'applications/pholio/remarkup/PholioRemarkupRule.php',
'PholioReplyHandler' => 'applications/pholio/mail/PholioReplyHandler.php',
'PholioSchemaSpec' => 'applications/pholio/storage/PholioSchemaSpec.php',
'PholioSearchIndexer' => 'applications/pholio/search/PholioSearchIndexer.php',
'PholioTransaction' => 'applications/pholio/storage/PholioTransaction.php',
'PholioTransactionComment' => 'applications/pholio/storage/PholioTransactionComment.php',
'PholioTransactionQuery' => 'applications/pholio/query/PholioTransactionQuery.php',
'PholioTransactionView' => 'applications/pholio/view/PholioTransactionView.php',
'PholioUploadedImageView' => 'applications/pholio/view/PholioUploadedImageView.php',
'PhortuneAccount' => 'applications/phortune/storage/PhortuneAccount.php',
'PhortuneAccountEditController' => 'applications/phortune/controller/PhortuneAccountEditController.php',
'PhortuneAccountEditor' => 'applications/phortune/editor/PhortuneAccountEditor.php',
'PhortuneAccountHasMemberEdgeType' => 'applications/phortune/edge/PhortuneAccountHasMemberEdgeType.php',
'PhortuneAccountListController' => 'applications/phortune/controller/PhortuneAccountListController.php',
'PhortuneAccountPHIDType' => 'applications/phortune/phid/PhortuneAccountPHIDType.php',
'PhortuneAccountQuery' => 'applications/phortune/query/PhortuneAccountQuery.php',
'PhortuneAccountTransaction' => 'applications/phortune/storage/PhortuneAccountTransaction.php',
'PhortuneAccountTransactionQuery' => 'applications/phortune/query/PhortuneAccountTransactionQuery.php',
'PhortuneAccountViewController' => 'applications/phortune/controller/PhortuneAccountViewController.php',
'PhortuneAdHocCart' => 'applications/phortune/cart/PhortuneAdHocCart.php',
'PhortuneAdHocProduct' => 'applications/phortune/product/PhortuneAdHocProduct.php',
'PhortuneCart' => 'applications/phortune/storage/PhortuneCart.php',
'PhortuneCartAcceptController' => 'applications/phortune/controller/PhortuneCartAcceptController.php',
'PhortuneCartCancelController' => 'applications/phortune/controller/PhortuneCartCancelController.php',
'PhortuneCartCheckoutController' => 'applications/phortune/controller/PhortuneCartCheckoutController.php',
'PhortuneCartController' => 'applications/phortune/controller/PhortuneCartController.php',
'PhortuneCartEditor' => 'applications/phortune/editor/PhortuneCartEditor.php',
'PhortuneCartImplementation' => 'applications/phortune/cart/PhortuneCartImplementation.php',
'PhortuneCartListController' => 'applications/phortune/controller/PhortuneCartListController.php',
'PhortuneCartPHIDType' => 'applications/phortune/phid/PhortuneCartPHIDType.php',
'PhortuneCartQuery' => 'applications/phortune/query/PhortuneCartQuery.php',
'PhortuneCartReplyHandler' => 'applications/phortune/mail/PhortuneCartReplyHandler.php',
'PhortuneCartSearchEngine' => 'applications/phortune/query/PhortuneCartSearchEngine.php',
'PhortuneCartTransaction' => 'applications/phortune/storage/PhortuneCartTransaction.php',
'PhortuneCartTransactionQuery' => 'applications/phortune/query/PhortuneCartTransactionQuery.php',
'PhortuneCartUpdateController' => 'applications/phortune/controller/PhortuneCartUpdateController.php',
'PhortuneCartViewController' => 'applications/phortune/controller/PhortuneCartViewController.php',
'PhortuneCharge' => 'applications/phortune/storage/PhortuneCharge.php',
'PhortuneChargeListController' => 'applications/phortune/controller/PhortuneChargeListController.php',
'PhortuneChargePHIDType' => 'applications/phortune/phid/PhortuneChargePHIDType.php',
'PhortuneChargeQuery' => 'applications/phortune/query/PhortuneChargeQuery.php',
'PhortuneChargeSearchEngine' => 'applications/phortune/query/PhortuneChargeSearchEngine.php',
'PhortuneChargeTableView' => 'applications/phortune/view/PhortuneChargeTableView.php',
'PhortuneConstants' => 'applications/phortune/constants/PhortuneConstants.php',
'PhortuneController' => 'applications/phortune/controller/PhortuneController.php',
'PhortuneCreditCardForm' => 'applications/phortune/view/PhortuneCreditCardForm.php',
'PhortuneCurrency' => 'applications/phortune/currency/PhortuneCurrency.php',
'PhortuneCurrencySerializer' => 'applications/phortune/currency/PhortuneCurrencySerializer.php',
'PhortuneCurrencyTestCase' => 'applications/phortune/currency/__tests__/PhortuneCurrencyTestCase.php',
'PhortuneDAO' => 'applications/phortune/storage/PhortuneDAO.php',
'PhortuneErrCode' => 'applications/phortune/constants/PhortuneErrCode.php',
'PhortuneLandingController' => 'applications/phortune/controller/PhortuneLandingController.php',
'PhortuneMemberHasAccountEdgeType' => 'applications/phortune/edge/PhortuneMemberHasAccountEdgeType.php',
'PhortuneMemberHasMerchantEdgeType' => 'applications/phortune/edge/PhortuneMemberHasMerchantEdgeType.php',
'PhortuneMerchant' => 'applications/phortune/storage/PhortuneMerchant.php',
'PhortuneMerchantCapability' => 'applications/phortune/capability/PhortuneMerchantCapability.php',
'PhortuneMerchantController' => 'applications/phortune/controller/PhortuneMerchantController.php',
'PhortuneMerchantEditController' => 'applications/phortune/controller/PhortuneMerchantEditController.php',
'PhortuneMerchantEditor' => 'applications/phortune/editor/PhortuneMerchantEditor.php',
'PhortuneMerchantHasMemberEdgeType' => 'applications/phortune/edge/PhortuneMerchantHasMemberEdgeType.php',
'PhortuneMerchantInvoiceCreateController' => 'applications/phortune/controller/PhortuneMerchantInvoiceCreateController.php',
'PhortuneMerchantListController' => 'applications/phortune/controller/PhortuneMerchantListController.php',
'PhortuneMerchantPHIDType' => 'applications/phortune/phid/PhortuneMerchantPHIDType.php',
'PhortuneMerchantQuery' => 'applications/phortune/query/PhortuneMerchantQuery.php',
'PhortuneMerchantSearchEngine' => 'applications/phortune/query/PhortuneMerchantSearchEngine.php',
'PhortuneMerchantTransaction' => 'applications/phortune/storage/PhortuneMerchantTransaction.php',
'PhortuneMerchantTransactionQuery' => 'applications/phortune/query/PhortuneMerchantTransactionQuery.php',
'PhortuneMerchantViewController' => 'applications/phortune/controller/PhortuneMerchantViewController.php',
'PhortuneMonthYearExpiryControl' => 'applications/phortune/control/PhortuneMonthYearExpiryControl.php',
'PhortuneNotImplementedException' => 'applications/phortune/exception/PhortuneNotImplementedException.php',
'PhortuneOrderTableView' => 'applications/phortune/view/PhortuneOrderTableView.php',
'PhortunePayPalPaymentProvider' => 'applications/phortune/provider/PhortunePayPalPaymentProvider.php',
'PhortunePaymentMethod' => 'applications/phortune/storage/PhortunePaymentMethod.php',
'PhortunePaymentMethodCreateController' => 'applications/phortune/controller/PhortunePaymentMethodCreateController.php',
'PhortunePaymentMethodDisableController' => 'applications/phortune/controller/PhortunePaymentMethodDisableController.php',
'PhortunePaymentMethodEditController' => 'applications/phortune/controller/PhortunePaymentMethodEditController.php',
'PhortunePaymentMethodPHIDType' => 'applications/phortune/phid/PhortunePaymentMethodPHIDType.php',
'PhortunePaymentMethodQuery' => 'applications/phortune/query/PhortunePaymentMethodQuery.php',
'PhortunePaymentProvider' => 'applications/phortune/provider/PhortunePaymentProvider.php',
'PhortunePaymentProviderConfig' => 'applications/phortune/storage/PhortunePaymentProviderConfig.php',
'PhortunePaymentProviderConfigEditor' => 'applications/phortune/editor/PhortunePaymentProviderConfigEditor.php',
'PhortunePaymentProviderConfigQuery' => 'applications/phortune/query/PhortunePaymentProviderConfigQuery.php',
'PhortunePaymentProviderConfigTransaction' => 'applications/phortune/storage/PhortunePaymentProviderConfigTransaction.php',
'PhortunePaymentProviderConfigTransactionQuery' => 'applications/phortune/query/PhortunePaymentProviderConfigTransactionQuery.php',
'PhortunePaymentProviderPHIDType' => 'applications/phortune/phid/PhortunePaymentProviderPHIDType.php',
'PhortunePaymentProviderTestCase' => 'applications/phortune/provider/__tests__/PhortunePaymentProviderTestCase.php',
'PhortuneProduct' => 'applications/phortune/storage/PhortuneProduct.php',
'PhortuneProductImplementation' => 'applications/phortune/product/PhortuneProductImplementation.php',
'PhortuneProductListController' => 'applications/phortune/controller/PhortuneProductListController.php',
'PhortuneProductPHIDType' => 'applications/phortune/phid/PhortuneProductPHIDType.php',
'PhortuneProductQuery' => 'applications/phortune/query/PhortuneProductQuery.php',
'PhortuneProductViewController' => 'applications/phortune/controller/PhortuneProductViewController.php',
'PhortuneProviderActionController' => 'applications/phortune/controller/PhortuneProviderActionController.php',
'PhortuneProviderDisableController' => 'applications/phortune/controller/PhortuneProviderDisableController.php',
'PhortuneProviderEditController' => 'applications/phortune/controller/PhortuneProviderEditController.php',
'PhortunePurchase' => 'applications/phortune/storage/PhortunePurchase.php',
'PhortunePurchasePHIDType' => 'applications/phortune/phid/PhortunePurchasePHIDType.php',
'PhortunePurchaseQuery' => 'applications/phortune/query/PhortunePurchaseQuery.php',
'PhortuneSchemaSpec' => 'applications/phortune/storage/PhortuneSchemaSpec.php',
'PhortuneStripePaymentProvider' => 'applications/phortune/provider/PhortuneStripePaymentProvider.php',
'PhortuneSubscription' => 'applications/phortune/storage/PhortuneSubscription.php',
'PhortuneSubscriptionCart' => 'applications/phortune/cart/PhortuneSubscriptionCart.php',
'PhortuneSubscriptionEditController' => 'applications/phortune/controller/PhortuneSubscriptionEditController.php',
'PhortuneSubscriptionImplementation' => 'applications/phortune/subscription/PhortuneSubscriptionImplementation.php',
'PhortuneSubscriptionListController' => 'applications/phortune/controller/PhortuneSubscriptionListController.php',
'PhortuneSubscriptionPHIDType' => 'applications/phortune/phid/PhortuneSubscriptionPHIDType.php',
'PhortuneSubscriptionProduct' => 'applications/phortune/product/PhortuneSubscriptionProduct.php',
'PhortuneSubscriptionQuery' => 'applications/phortune/query/PhortuneSubscriptionQuery.php',
'PhortuneSubscriptionSearchEngine' => 'applications/phortune/query/PhortuneSubscriptionSearchEngine.php',
'PhortuneSubscriptionTableView' => 'applications/phortune/view/PhortuneSubscriptionTableView.php',
'PhortuneSubscriptionViewController' => 'applications/phortune/controller/PhortuneSubscriptionViewController.php',
'PhortuneSubscriptionWorker' => 'applications/phortune/worker/PhortuneSubscriptionWorker.php',
'PhortuneTestPaymentProvider' => 'applications/phortune/provider/PhortuneTestPaymentProvider.php',
'PhortuneWePayPaymentProvider' => 'applications/phortune/provider/PhortuneWePayPaymentProvider.php',
'PhragmentBrowseController' => 'applications/phragment/controller/PhragmentBrowseController.php',
'PhragmentCanCreateCapability' => 'applications/phragment/capability/PhragmentCanCreateCapability.php',
'PhragmentConduitAPIMethod' => 'applications/phragment/conduit/PhragmentConduitAPIMethod.php',
'PhragmentController' => 'applications/phragment/controller/PhragmentController.php',
'PhragmentCreateController' => 'applications/phragment/controller/PhragmentCreateController.php',
'PhragmentDAO' => 'applications/phragment/storage/PhragmentDAO.php',
'PhragmentFragment' => 'applications/phragment/storage/PhragmentFragment.php',
'PhragmentFragmentPHIDType' => 'applications/phragment/phid/PhragmentFragmentPHIDType.php',
'PhragmentFragmentQuery' => 'applications/phragment/query/PhragmentFragmentQuery.php',
'PhragmentFragmentVersion' => 'applications/phragment/storage/PhragmentFragmentVersion.php',
'PhragmentFragmentVersionPHIDType' => 'applications/phragment/phid/PhragmentFragmentVersionPHIDType.php',
'PhragmentFragmentVersionQuery' => 'applications/phragment/query/PhragmentFragmentVersionQuery.php',
'PhragmentGetPatchConduitAPIMethod' => 'applications/phragment/conduit/PhragmentGetPatchConduitAPIMethod.php',
'PhragmentHistoryController' => 'applications/phragment/controller/PhragmentHistoryController.php',
'PhragmentPatchController' => 'applications/phragment/controller/PhragmentPatchController.php',
'PhragmentPatchUtil' => 'applications/phragment/util/PhragmentPatchUtil.php',
'PhragmentPolicyController' => 'applications/phragment/controller/PhragmentPolicyController.php',
'PhragmentQueryFragmentsConduitAPIMethod' => 'applications/phragment/conduit/PhragmentQueryFragmentsConduitAPIMethod.php',
'PhragmentRevertController' => 'applications/phragment/controller/PhragmentRevertController.php',
'PhragmentSchemaSpec' => 'applications/phragment/storage/PhragmentSchemaSpec.php',
'PhragmentSnapshot' => 'applications/phragment/storage/PhragmentSnapshot.php',
'PhragmentSnapshotChild' => 'applications/phragment/storage/PhragmentSnapshotChild.php',
'PhragmentSnapshotChildQuery' => 'applications/phragment/query/PhragmentSnapshotChildQuery.php',
'PhragmentSnapshotCreateController' => 'applications/phragment/controller/PhragmentSnapshotCreateController.php',
'PhragmentSnapshotDeleteController' => 'applications/phragment/controller/PhragmentSnapshotDeleteController.php',
'PhragmentSnapshotPHIDType' => 'applications/phragment/phid/PhragmentSnapshotPHIDType.php',
'PhragmentSnapshotPromoteController' => 'applications/phragment/controller/PhragmentSnapshotPromoteController.php',
'PhragmentSnapshotQuery' => 'applications/phragment/query/PhragmentSnapshotQuery.php',
'PhragmentSnapshotViewController' => 'applications/phragment/controller/PhragmentSnapshotViewController.php',
'PhragmentUpdateController' => 'applications/phragment/controller/PhragmentUpdateController.php',
'PhragmentVersionController' => 'applications/phragment/controller/PhragmentVersionController.php',
'PhragmentZIPController' => 'applications/phragment/controller/PhragmentZIPController.php',
'PhrequentConduitAPIMethod' => 'applications/phrequent/conduit/PhrequentConduitAPIMethod.php',
'PhrequentController' => 'applications/phrequent/controller/PhrequentController.php',
'PhrequentDAO' => 'applications/phrequent/storage/PhrequentDAO.php',
'PhrequentListController' => 'applications/phrequent/controller/PhrequentListController.php',
'PhrequentPopConduitAPIMethod' => 'applications/phrequent/conduit/PhrequentPopConduitAPIMethod.php',
'PhrequentPushConduitAPIMethod' => 'applications/phrequent/conduit/PhrequentPushConduitAPIMethod.php',
'PhrequentSearchEngine' => 'applications/phrequent/query/PhrequentSearchEngine.php',
'PhrequentTimeBlock' => 'applications/phrequent/storage/PhrequentTimeBlock.php',
'PhrequentTimeBlockTestCase' => 'applications/phrequent/storage/__tests__/PhrequentTimeBlockTestCase.php',
'PhrequentTimeSlices' => 'applications/phrequent/storage/PhrequentTimeSlices.php',
'PhrequentTrackController' => 'applications/phrequent/controller/PhrequentTrackController.php',
'PhrequentTrackableInterface' => 'applications/phrequent/interface/PhrequentTrackableInterface.php',
'PhrequentTrackingConduitAPIMethod' => 'applications/phrequent/conduit/PhrequentTrackingConduitAPIMethod.php',
'PhrequentTrackingEditor' => 'applications/phrequent/editor/PhrequentTrackingEditor.php',
'PhrequentUIEventListener' => 'applications/phrequent/event/PhrequentUIEventListener.php',
'PhrequentUserTime' => 'applications/phrequent/storage/PhrequentUserTime.php',
'PhrequentUserTimeQuery' => 'applications/phrequent/query/PhrequentUserTimeQuery.php',
'PhrictionChangeType' => 'applications/phriction/constants/PhrictionChangeType.php',
'PhrictionConduitAPIMethod' => 'applications/phriction/conduit/PhrictionConduitAPIMethod.php',
'PhrictionConstants' => 'applications/phriction/constants/PhrictionConstants.php',
'PhrictionContent' => 'applications/phriction/storage/PhrictionContent.php',
'PhrictionController' => 'applications/phriction/controller/PhrictionController.php',
'PhrictionCreateConduitAPIMethod' => 'applications/phriction/conduit/PhrictionCreateConduitAPIMethod.php',
'PhrictionDAO' => 'applications/phriction/storage/PhrictionDAO.php',
'PhrictionDeleteController' => 'applications/phriction/controller/PhrictionDeleteController.php',
'PhrictionDiffController' => 'applications/phriction/controller/PhrictionDiffController.php',
'PhrictionDocument' => 'applications/phriction/storage/PhrictionDocument.php',
'PhrictionDocumentAuthorHeraldField' => 'applications/phriction/herald/PhrictionDocumentAuthorHeraldField.php',
'PhrictionDocumentContentHeraldField' => 'applications/phriction/herald/PhrictionDocumentContentHeraldField.php',
'PhrictionDocumentController' => 'applications/phriction/controller/PhrictionDocumentController.php',
'PhrictionDocumentHeraldAdapter' => 'applications/phriction/herald/PhrictionDocumentHeraldAdapter.php',
'PhrictionDocumentHeraldField' => 'applications/phriction/herald/PhrictionDocumentHeraldField.php',
'PhrictionDocumentHeraldFieldGroup' => 'applications/phriction/herald/PhrictionDocumentHeraldFieldGroup.php',
'PhrictionDocumentPHIDType' => 'applications/phriction/phid/PhrictionDocumentPHIDType.php',
'PhrictionDocumentPathHeraldField' => 'applications/phriction/herald/PhrictionDocumentPathHeraldField.php',
'PhrictionDocumentQuery' => 'applications/phriction/query/PhrictionDocumentQuery.php',
'PhrictionDocumentStatus' => 'applications/phriction/constants/PhrictionDocumentStatus.php',
'PhrictionDocumentTitleHeraldField' => 'applications/phriction/herald/PhrictionDocumentTitleHeraldField.php',
'PhrictionEditConduitAPIMethod' => 'applications/phriction/conduit/PhrictionEditConduitAPIMethod.php',
'PhrictionEditController' => 'applications/phriction/controller/PhrictionEditController.php',
'PhrictionHistoryConduitAPIMethod' => 'applications/phriction/conduit/PhrictionHistoryConduitAPIMethod.php',
'PhrictionHistoryController' => 'applications/phriction/controller/PhrictionHistoryController.php',
'PhrictionInfoConduitAPIMethod' => 'applications/phriction/conduit/PhrictionInfoConduitAPIMethod.php',
'PhrictionListController' => 'applications/phriction/controller/PhrictionListController.php',
'PhrictionMoveController' => 'applications/phriction/controller/PhrictionMoveController.php',
'PhrictionNewController' => 'applications/phriction/controller/PhrictionNewController.php',
'PhrictionRemarkupRule' => 'applications/phriction/markup/PhrictionRemarkupRule.php',
'PhrictionReplyHandler' => 'applications/phriction/mail/PhrictionReplyHandler.php',
'PhrictionSchemaSpec' => 'applications/phriction/storage/PhrictionSchemaSpec.php',
'PhrictionSearchEngine' => 'applications/phriction/query/PhrictionSearchEngine.php',
'PhrictionSearchIndexer' => 'applications/phriction/search/PhrictionSearchIndexer.php',
'PhrictionTransaction' => 'applications/phriction/storage/PhrictionTransaction.php',
'PhrictionTransactionComment' => 'applications/phriction/storage/PhrictionTransactionComment.php',
'PhrictionTransactionEditor' => 'applications/phriction/editor/PhrictionTransactionEditor.php',
'PhrictionTransactionQuery' => 'applications/phriction/query/PhrictionTransactionQuery.php',
'PolicyLockOptionType' => 'applications/policy/config/PolicyLockOptionType.php',
'PonderAddAnswerView' => 'applications/ponder/view/PonderAddAnswerView.php',
'PonderAnswer' => 'applications/ponder/storage/PonderAnswer.php',
'PonderAnswerCommentController' => 'applications/ponder/controller/PonderAnswerCommentController.php',
'PonderAnswerEditController' => 'applications/ponder/controller/PonderAnswerEditController.php',
'PonderAnswerEditor' => 'applications/ponder/editor/PonderAnswerEditor.php',
'PonderAnswerHasVotingUserEdgeType' => 'applications/ponder/edge/PonderAnswerHasVotingUserEdgeType.php',
'PonderAnswerHistoryController' => 'applications/ponder/controller/PonderAnswerHistoryController.php',
'PonderAnswerMailReceiver' => 'applications/ponder/mail/PonderAnswerMailReceiver.php',
'PonderAnswerPHIDType' => 'applications/ponder/phid/PonderAnswerPHIDType.php',
'PonderAnswerQuery' => 'applications/ponder/query/PonderAnswerQuery.php',
'PonderAnswerReplyHandler' => 'applications/ponder/mail/PonderAnswerReplyHandler.php',
'PonderAnswerSaveController' => 'applications/ponder/controller/PonderAnswerSaveController.php',
'PonderAnswerStatus' => 'applications/ponder/constants/PonderAnswerStatus.php',
'PonderAnswerTransaction' => 'applications/ponder/storage/PonderAnswerTransaction.php',
'PonderAnswerTransactionComment' => 'applications/ponder/storage/PonderAnswerTransactionComment.php',
'PonderAnswerTransactionQuery' => 'applications/ponder/query/PonderAnswerTransactionQuery.php',
'PonderAnswerView' => 'applications/ponder/view/PonderAnswerView.php',
'PonderConstants' => 'applications/ponder/constants/PonderConstants.php',
'PonderController' => 'applications/ponder/controller/PonderController.php',
'PonderDAO' => 'applications/ponder/storage/PonderDAO.php',
'PonderDefaultViewCapability' => 'applications/ponder/capability/PonderDefaultViewCapability.php',
'PonderEditor' => 'applications/ponder/editor/PonderEditor.php',
'PonderFooterView' => 'applications/ponder/view/PonderFooterView.php',
'PonderHelpfulSaveController' => 'applications/ponder/controller/PonderHelpfulSaveController.php',
'PonderModerateCapability' => 'applications/ponder/capability/PonderModerateCapability.php',
'PonderQuestion' => 'applications/ponder/storage/PonderQuestion.php',
'PonderQuestionCommentController' => 'applications/ponder/controller/PonderQuestionCommentController.php',
'PonderQuestionEditController' => 'applications/ponder/controller/PonderQuestionEditController.php',
'PonderQuestionEditor' => 'applications/ponder/editor/PonderQuestionEditor.php',
'PonderQuestionHistoryController' => 'applications/ponder/controller/PonderQuestionHistoryController.php',
'PonderQuestionListController' => 'applications/ponder/controller/PonderQuestionListController.php',
'PonderQuestionMailReceiver' => 'applications/ponder/mail/PonderQuestionMailReceiver.php',
'PonderQuestionPHIDType' => 'applications/ponder/phid/PonderQuestionPHIDType.php',
'PonderQuestionQuery' => 'applications/ponder/query/PonderQuestionQuery.php',
'PonderQuestionReplyHandler' => 'applications/ponder/mail/PonderQuestionReplyHandler.php',
'PonderQuestionSearchEngine' => 'applications/ponder/query/PonderQuestionSearchEngine.php',
'PonderQuestionStatus' => 'applications/ponder/constants/PonderQuestionStatus.php',
'PonderQuestionStatusController' => 'applications/ponder/controller/PonderQuestionStatusController.php',
'PonderQuestionTransaction' => 'applications/ponder/storage/PonderQuestionTransaction.php',
'PonderQuestionTransactionComment' => 'applications/ponder/storage/PonderQuestionTransactionComment.php',
'PonderQuestionTransactionQuery' => 'applications/ponder/query/PonderQuestionTransactionQuery.php',
'PonderQuestionViewController' => 'applications/ponder/controller/PonderQuestionViewController.php',
'PonderRemarkupRule' => 'applications/ponder/remarkup/PonderRemarkupRule.php',
'PonderSchemaSpec' => 'applications/ponder/storage/PonderSchemaSpec.php',
'PonderSearchIndexer' => 'applications/ponder/search/PonderSearchIndexer.php',
'PonderVotableInterface' => 'applications/ponder/storage/PonderVotableInterface.php',
'PonderVote' => 'applications/ponder/constants/PonderVote.php',
'PonderVoteEditor' => 'applications/ponder/editor/PonderVoteEditor.php',
'PonderVotingUserHasAnswerEdgeType' => 'applications/ponder/edge/PonderVotingUserHasAnswerEdgeType.php',
'ProjectAddProjectsEmailCommand' => 'applications/project/command/ProjectAddProjectsEmailCommand.php',
'ProjectBoardTaskCard' => 'applications/project/view/ProjectBoardTaskCard.php',
'ProjectCanLockProjectsCapability' => 'applications/project/capability/ProjectCanLockProjectsCapability.php',
'ProjectConduitAPIMethod' => 'applications/project/conduit/ProjectConduitAPIMethod.php',
'ProjectCreateConduitAPIMethod' => 'applications/project/conduit/ProjectCreateConduitAPIMethod.php',
'ProjectCreateProjectsCapability' => 'applications/project/capability/ProjectCreateProjectsCapability.php',
'ProjectDefaultEditCapability' => 'applications/project/capability/ProjectDefaultEditCapability.php',
'ProjectDefaultJoinCapability' => 'applications/project/capability/ProjectDefaultJoinCapability.php',
'ProjectDefaultViewCapability' => 'applications/project/capability/ProjectDefaultViewCapability.php',
'ProjectQueryConduitAPIMethod' => 'applications/project/conduit/ProjectQueryConduitAPIMethod.php',
'ProjectRemarkupRule' => 'applications/project/remarkup/ProjectRemarkupRule.php',
'ProjectRemarkupRuleTestCase' => 'applications/project/remarkup/__tests__/ProjectRemarkupRuleTestCase.php',
'ProjectReplyHandler' => 'applications/project/mail/ProjectReplyHandler.php',
'QueryFormattingTestCase' => 'infrastructure/storage/__tests__/QueryFormattingTestCase.php',
'ReleephAuthorFieldSpecification' => 'applications/releeph/field/specification/ReleephAuthorFieldSpecification.php',
'ReleephBranch' => 'applications/releeph/storage/ReleephBranch.php',
'ReleephBranchAccessController' => 'applications/releeph/controller/branch/ReleephBranchAccessController.php',
'ReleephBranchCommitFieldSpecification' => 'applications/releeph/field/specification/ReleephBranchCommitFieldSpecification.php',
'ReleephBranchController' => 'applications/releeph/controller/branch/ReleephBranchController.php',
'ReleephBranchCreateController' => 'applications/releeph/controller/branch/ReleephBranchCreateController.php',
'ReleephBranchEditController' => 'applications/releeph/controller/branch/ReleephBranchEditController.php',
'ReleephBranchEditor' => 'applications/releeph/editor/ReleephBranchEditor.php',
'ReleephBranchHistoryController' => 'applications/releeph/controller/branch/ReleephBranchHistoryController.php',
'ReleephBranchNamePreviewController' => 'applications/releeph/controller/branch/ReleephBranchNamePreviewController.php',
'ReleephBranchPHIDType' => 'applications/releeph/phid/ReleephBranchPHIDType.php',
'ReleephBranchPreviewView' => 'applications/releeph/view/branch/ReleephBranchPreviewView.php',
'ReleephBranchQuery' => 'applications/releeph/query/ReleephBranchQuery.php',
'ReleephBranchSearchEngine' => 'applications/releeph/query/ReleephBranchSearchEngine.php',
'ReleephBranchTemplate' => 'applications/releeph/view/branch/ReleephBranchTemplate.php',
'ReleephBranchTransaction' => 'applications/releeph/storage/ReleephBranchTransaction.php',
'ReleephBranchTransactionQuery' => 'applications/releeph/query/ReleephBranchTransactionQuery.php',
'ReleephBranchViewController' => 'applications/releeph/controller/branch/ReleephBranchViewController.php',
'ReleephCommitFinder' => 'applications/releeph/commitfinder/ReleephCommitFinder.php',
'ReleephCommitFinderException' => 'applications/releeph/commitfinder/ReleephCommitFinderException.php',
'ReleephCommitMessageFieldSpecification' => 'applications/releeph/field/specification/ReleephCommitMessageFieldSpecification.php',
'ReleephConduitAPIMethod' => 'applications/releeph/conduit/ReleephConduitAPIMethod.php',
'ReleephController' => 'applications/releeph/controller/ReleephController.php',
'ReleephDAO' => 'applications/releeph/storage/ReleephDAO.php',
'ReleephDefaultFieldSelector' => 'applications/releeph/field/selector/ReleephDefaultFieldSelector.php',
'ReleephDependsOnFieldSpecification' => 'applications/releeph/field/specification/ReleephDependsOnFieldSpecification.php',
'ReleephDiffChurnFieldSpecification' => 'applications/releeph/field/specification/ReleephDiffChurnFieldSpecification.php',
'ReleephDiffMessageFieldSpecification' => 'applications/releeph/field/specification/ReleephDiffMessageFieldSpecification.php',
'ReleephDiffSizeFieldSpecification' => 'applications/releeph/field/specification/ReleephDiffSizeFieldSpecification.php',
'ReleephFieldParseException' => 'applications/releeph/field/exception/ReleephFieldParseException.php',
'ReleephFieldSelector' => 'applications/releeph/field/selector/ReleephFieldSelector.php',
'ReleephFieldSpecification' => 'applications/releeph/field/specification/ReleephFieldSpecification.php',
'ReleephGetBranchesConduitAPIMethod' => 'applications/releeph/conduit/ReleephGetBranchesConduitAPIMethod.php',
'ReleephIntentFieldSpecification' => 'applications/releeph/field/specification/ReleephIntentFieldSpecification.php',
'ReleephLevelFieldSpecification' => 'applications/releeph/field/specification/ReleephLevelFieldSpecification.php',
'ReleephOriginalCommitFieldSpecification' => 'applications/releeph/field/specification/ReleephOriginalCommitFieldSpecification.php',
'ReleephProductActionController' => 'applications/releeph/controller/product/ReleephProductActionController.php',
'ReleephProductController' => 'applications/releeph/controller/product/ReleephProductController.php',
'ReleephProductCreateController' => 'applications/releeph/controller/product/ReleephProductCreateController.php',
'ReleephProductEditController' => 'applications/releeph/controller/product/ReleephProductEditController.php',
'ReleephProductEditor' => 'applications/releeph/editor/ReleephProductEditor.php',
'ReleephProductHistoryController' => 'applications/releeph/controller/product/ReleephProductHistoryController.php',
'ReleephProductListController' => 'applications/releeph/controller/product/ReleephProductListController.php',
'ReleephProductPHIDType' => 'applications/releeph/phid/ReleephProductPHIDType.php',
'ReleephProductQuery' => 'applications/releeph/query/ReleephProductQuery.php',
'ReleephProductSearchEngine' => 'applications/releeph/query/ReleephProductSearchEngine.php',
'ReleephProductTransaction' => 'applications/releeph/storage/ReleephProductTransaction.php',
'ReleephProductTransactionQuery' => 'applications/releeph/query/ReleephProductTransactionQuery.php',
'ReleephProductViewController' => 'applications/releeph/controller/product/ReleephProductViewController.php',
'ReleephProject' => 'applications/releeph/storage/ReleephProject.php',
'ReleephQueryBranchesConduitAPIMethod' => 'applications/releeph/conduit/ReleephQueryBranchesConduitAPIMethod.php',
'ReleephQueryProductsConduitAPIMethod' => 'applications/releeph/conduit/ReleephQueryProductsConduitAPIMethod.php',
'ReleephQueryRequestsConduitAPIMethod' => 'applications/releeph/conduit/ReleephQueryRequestsConduitAPIMethod.php',
'ReleephReasonFieldSpecification' => 'applications/releeph/field/specification/ReleephReasonFieldSpecification.php',
'ReleephRequest' => 'applications/releeph/storage/ReleephRequest.php',
'ReleephRequestActionController' => 'applications/releeph/controller/request/ReleephRequestActionController.php',
'ReleephRequestCommentController' => 'applications/releeph/controller/request/ReleephRequestCommentController.php',
'ReleephRequestConduitAPIMethod' => 'applications/releeph/conduit/ReleephRequestConduitAPIMethod.php',
'ReleephRequestController' => 'applications/releeph/controller/request/ReleephRequestController.php',
'ReleephRequestDifferentialCreateController' => 'applications/releeph/controller/request/ReleephRequestDifferentialCreateController.php',
'ReleephRequestEditController' => 'applications/releeph/controller/request/ReleephRequestEditController.php',
'ReleephRequestMailReceiver' => 'applications/releeph/mail/ReleephRequestMailReceiver.php',
'ReleephRequestPHIDType' => 'applications/releeph/phid/ReleephRequestPHIDType.php',
'ReleephRequestQuery' => 'applications/releeph/query/ReleephRequestQuery.php',
'ReleephRequestReplyHandler' => 'applications/releeph/mail/ReleephRequestReplyHandler.php',
'ReleephRequestSearchEngine' => 'applications/releeph/query/ReleephRequestSearchEngine.php',
'ReleephRequestStatus' => 'applications/releeph/constants/ReleephRequestStatus.php',
'ReleephRequestTransaction' => 'applications/releeph/storage/ReleephRequestTransaction.php',
'ReleephRequestTransactionComment' => 'applications/releeph/storage/ReleephRequestTransactionComment.php',
'ReleephRequestTransactionQuery' => 'applications/releeph/query/ReleephRequestTransactionQuery.php',
'ReleephRequestTransactionalEditor' => 'applications/releeph/editor/ReleephRequestTransactionalEditor.php',
'ReleephRequestTypeaheadControl' => 'applications/releeph/view/request/ReleephRequestTypeaheadControl.php',
'ReleephRequestTypeaheadController' => 'applications/releeph/controller/request/ReleephRequestTypeaheadController.php',
'ReleephRequestView' => 'applications/releeph/view/ReleephRequestView.php',
'ReleephRequestViewController' => 'applications/releeph/controller/request/ReleephRequestViewController.php',
'ReleephRequestorFieldSpecification' => 'applications/releeph/field/specification/ReleephRequestorFieldSpecification.php',
'ReleephRevisionFieldSpecification' => 'applications/releeph/field/specification/ReleephRevisionFieldSpecification.php',
'ReleephSeverityFieldSpecification' => 'applications/releeph/field/specification/ReleephSeverityFieldSpecification.php',
'ReleephSummaryFieldSpecification' => 'applications/releeph/field/specification/ReleephSummaryFieldSpecification.php',
'ReleephWorkCanPushConduitAPIMethod' => 'applications/releeph/conduit/work/ReleephWorkCanPushConduitAPIMethod.php',
'ReleephWorkGetAuthorInfoConduitAPIMethod' => 'applications/releeph/conduit/work/ReleephWorkGetAuthorInfoConduitAPIMethod.php',
'ReleephWorkGetBranchCommitMessageConduitAPIMethod' => 'applications/releeph/conduit/work/ReleephWorkGetBranchCommitMessageConduitAPIMethod.php',
'ReleephWorkGetBranchConduitAPIMethod' => 'applications/releeph/conduit/work/ReleephWorkGetBranchConduitAPIMethod.php',
'ReleephWorkGetCommitMessageConduitAPIMethod' => 'applications/releeph/conduit/work/ReleephWorkGetCommitMessageConduitAPIMethod.php',
'ReleephWorkNextRequestConduitAPIMethod' => 'applications/releeph/conduit/work/ReleephWorkNextRequestConduitAPIMethod.php',
'ReleephWorkRecordConduitAPIMethod' => 'applications/releeph/conduit/work/ReleephWorkRecordConduitAPIMethod.php',
'ReleephWorkRecordPickStatusConduitAPIMethod' => 'applications/releeph/conduit/work/ReleephWorkRecordPickStatusConduitAPIMethod.php',
'RemarkupProcessConduitAPIMethod' => 'applications/remarkup/conduit/RemarkupProcessConduitAPIMethod.php',
'RepositoryConduitAPIMethod' => 'applications/repository/conduit/RepositoryConduitAPIMethod.php',
'RepositoryCreateConduitAPIMethod' => 'applications/repository/conduit/RepositoryCreateConduitAPIMethod.php',
'RepositoryQueryConduitAPIMethod' => 'applications/repository/conduit/RepositoryQueryConduitAPIMethod.php',
'ShellLogView' => 'applications/harbormaster/view/ShellLogView.php',
'SlowvoteConduitAPIMethod' => 'applications/slowvote/conduit/SlowvoteConduitAPIMethod.php',
'SlowvoteEmbedView' => 'applications/slowvote/view/SlowvoteEmbedView.php',
'SlowvoteInfoConduitAPIMethod' => 'applications/slowvote/conduit/SlowvoteInfoConduitAPIMethod.php',
'SlowvoteRemarkupRule' => 'applications/slowvote/remarkup/SlowvoteRemarkupRule.php',
'SubscriptionListDialogBuilder' => 'applications/subscriptions/view/SubscriptionListDialogBuilder.php',
'SubscriptionListStringBuilder' => 'applications/subscriptions/view/SubscriptionListStringBuilder.php',
'TokenConduitAPIMethod' => 'applications/tokens/conduit/TokenConduitAPIMethod.php',
'TokenGiveConduitAPIMethod' => 'applications/tokens/conduit/TokenGiveConduitAPIMethod.php',
'TokenGivenConduitAPIMethod' => 'applications/tokens/conduit/TokenGivenConduitAPIMethod.php',
'TokenQueryConduitAPIMethod' => 'applications/tokens/conduit/TokenQueryConduitAPIMethod.php',
'UserConduitAPIMethod' => 'applications/people/conduit/UserConduitAPIMethod.php',
'UserDisableConduitAPIMethod' => 'applications/people/conduit/UserDisableConduitAPIMethod.php',
'UserEnableConduitAPIMethod' => 'applications/people/conduit/UserEnableConduitAPIMethod.php',
'UserFindConduitAPIMethod' => 'applications/people/conduit/UserFindConduitAPIMethod.php',
'UserQueryConduitAPIMethod' => 'applications/people/conduit/UserQueryConduitAPIMethod.php',
'UserWhoAmIConduitAPIMethod' => 'applications/people/conduit/UserWhoAmIConduitAPIMethod.php',
),
'function' => array(
'celerity_generate_unique_node_id' => 'applications/celerity/api.php',
'celerity_get_resource_uri' => 'applications/celerity/api.php',
'javelin_tag' => 'infrastructure/javelin/markup.php',
'phabricator_date' => 'view/viewutils.php',
'phabricator_datetime' => 'view/viewutils.php',
'phabricator_form' => 'infrastructure/javelin/markup.php',
'phabricator_format_local_time' => 'view/viewutils.php',
'phabricator_relative_date' => 'view/viewutils.php',
'phabricator_time' => 'view/viewutils.php',
'phid_get_subtype' => 'applications/phid/utils.php',
'phid_get_type' => 'applications/phid/utils.php',
'phid_group_by_type' => 'applications/phid/utils.php',
'require_celerity_resource' => 'applications/celerity/api.php',
),
'xmap' => array(
'AlmanacAddress' => 'Phobject',
'AlmanacBinding' => array(
'AlmanacDAO',
'PhabricatorPolicyInterface',
'PhabricatorCustomFieldInterface',
'PhabricatorApplicationTransactionInterface',
'AlmanacPropertyInterface',
),
'AlmanacBindingEditController' => 'AlmanacServiceController',
'AlmanacBindingEditor' => 'PhabricatorApplicationTransactionEditor',
'AlmanacBindingPHIDType' => 'PhabricatorPHIDType',
'AlmanacBindingQuery' => 'AlmanacQuery',
'AlmanacBindingTableView' => 'AphrontView',
'AlmanacBindingTransaction' => 'PhabricatorApplicationTransaction',
'AlmanacBindingTransactionQuery' => 'PhabricatorApplicationTransactionQuery',
'AlmanacBindingViewController' => 'AlmanacServiceController',
'AlmanacClusterDatabaseServiceType' => 'AlmanacClusterServiceType',
'AlmanacClusterRepositoryServiceType' => 'AlmanacClusterServiceType',
'AlmanacClusterServiceType' => 'AlmanacServiceType',
'AlmanacConduitAPIMethod' => 'ConduitAPIMethod',
'AlmanacConsoleController' => 'AlmanacController',
'AlmanacController' => 'PhabricatorController',
'AlmanacCoreCustomField' => array(
'AlmanacCustomField',
'PhabricatorStandardCustomFieldInterface',
),
'AlmanacCreateClusterServicesCapability' => 'PhabricatorPolicyCapability',
'AlmanacCreateDevicesCapability' => 'PhabricatorPolicyCapability',
'AlmanacCreateNetworksCapability' => 'PhabricatorPolicyCapability',
'AlmanacCreateServicesCapability' => 'PhabricatorPolicyCapability',
'AlmanacCustomField' => 'PhabricatorCustomField',
'AlmanacCustomServiceType' => 'AlmanacServiceType',
'AlmanacDAO' => 'PhabricatorLiskDAO',
'AlmanacDevice' => array(
'AlmanacDAO',
'PhabricatorPolicyInterface',
'PhabricatorCustomFieldInterface',
'PhabricatorApplicationTransactionInterface',
'PhabricatorProjectInterface',
'PhabricatorSSHPublicKeyInterface',
'AlmanacPropertyInterface',
'PhabricatorDestructibleInterface',
),
'AlmanacDeviceController' => 'AlmanacController',
'AlmanacDeviceEditController' => 'AlmanacDeviceController',
'AlmanacDeviceEditor' => 'PhabricatorApplicationTransactionEditor',
'AlmanacDeviceListController' => 'AlmanacDeviceController',
'AlmanacDevicePHIDType' => 'PhabricatorPHIDType',
'AlmanacDeviceQuery' => 'AlmanacQuery',
'AlmanacDeviceSearchEngine' => 'PhabricatorApplicationSearchEngine',
'AlmanacDeviceTransaction' => 'PhabricatorApplicationTransaction',
'AlmanacDeviceTransactionQuery' => 'PhabricatorApplicationTransactionQuery',
'AlmanacDeviceViewController' => 'AlmanacDeviceController',
'AlmanacInterface' => array(
'AlmanacDAO',
'PhabricatorPolicyInterface',
'PhabricatorDestructibleInterface',
),
'AlmanacInterfaceDatasource' => 'PhabricatorTypeaheadDatasource',
'AlmanacInterfaceEditController' => 'AlmanacDeviceController',
'AlmanacInterfacePHIDType' => 'PhabricatorPHIDType',
'AlmanacInterfaceQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'AlmanacInterfaceTableView' => 'AphrontView',
'AlmanacKeys' => 'Phobject',
'AlmanacManagementLockWorkflow' => 'AlmanacManagementWorkflow',
'AlmanacManagementRegisterWorkflow' => 'AlmanacManagementWorkflow',
'AlmanacManagementTrustKeyWorkflow' => 'AlmanacManagementWorkflow',
'AlmanacManagementUnlockWorkflow' => 'AlmanacManagementWorkflow',
'AlmanacManagementUntrustKeyWorkflow' => 'AlmanacManagementWorkflow',
'AlmanacManagementWorkflow' => 'PhabricatorManagementWorkflow',
'AlmanacNames' => 'Phobject',
'AlmanacNamesTestCase' => 'PhabricatorTestCase',
'AlmanacNetwork' => array(
'AlmanacDAO',
'PhabricatorApplicationTransactionInterface',
'PhabricatorPolicyInterface',
'PhabricatorDestructibleInterface',
),
'AlmanacNetworkController' => 'AlmanacController',
'AlmanacNetworkEditController' => 'AlmanacNetworkController',
'AlmanacNetworkEditor' => 'PhabricatorApplicationTransactionEditor',
'AlmanacNetworkListController' => 'AlmanacNetworkController',
'AlmanacNetworkPHIDType' => 'PhabricatorPHIDType',
'AlmanacNetworkQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'AlmanacNetworkSearchEngine' => 'PhabricatorApplicationSearchEngine',
'AlmanacNetworkTransaction' => 'PhabricatorApplicationTransaction',
'AlmanacNetworkTransactionQuery' => 'PhabricatorApplicationTransactionQuery',
'AlmanacNetworkViewController' => 'AlmanacNetworkController',
'AlmanacProperty' => array(
'PhabricatorCustomFieldStorage',
'PhabricatorPolicyInterface',
),
'AlmanacPropertyController' => 'AlmanacController',
'AlmanacPropertyDeleteController' => 'AlmanacDeviceController',
'AlmanacPropertyEditController' => 'AlmanacDeviceController',
'AlmanacPropertyQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'AlmanacQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'AlmanacQueryDevicesConduitAPIMethod' => 'AlmanacConduitAPIMethod',
'AlmanacQueryServicesConduitAPIMethod' => 'AlmanacConduitAPIMethod',
'AlmanacSchemaSpec' => 'PhabricatorConfigSchemaSpec',
'AlmanacService' => array(
'AlmanacDAO',
'PhabricatorPolicyInterface',
'PhabricatorCustomFieldInterface',
'PhabricatorApplicationTransactionInterface',
'PhabricatorProjectInterface',
'AlmanacPropertyInterface',
'PhabricatorDestructibleInterface',
),
'AlmanacServiceController' => 'AlmanacController',
'AlmanacServiceDatasource' => 'PhabricatorTypeaheadDatasource',
'AlmanacServiceEditController' => 'AlmanacServiceController',
'AlmanacServiceEditor' => 'PhabricatorApplicationTransactionEditor',
'AlmanacServiceListController' => 'AlmanacServiceController',
'AlmanacServicePHIDType' => 'PhabricatorPHIDType',
'AlmanacServiceQuery' => 'AlmanacQuery',
'AlmanacServiceSearchEngine' => 'PhabricatorApplicationSearchEngine',
'AlmanacServiceTransaction' => 'PhabricatorApplicationTransaction',
'AlmanacServiceTransactionQuery' => 'PhabricatorApplicationTransactionQuery',
'AlmanacServiceType' => 'Phobject',
'AlmanacServiceTypeTestCase' => 'PhabricatorTestCase',
'AlmanacServiceViewController' => 'AlmanacServiceController',
'AphlictDropdownDataQuery' => 'Phobject',
'Aphront304Response' => 'AphrontResponse',
'Aphront400Response' => 'AphrontResponse',
'Aphront403Response' => 'AphrontHTMLResponse',
'Aphront404Response' => 'AphrontHTMLResponse',
'AphrontAjaxResponse' => 'AphrontResponse',
'AphrontApplicationConfiguration' => 'Phobject',
'AphrontBarView' => 'AphrontView',
'AphrontCSRFException' => 'AphrontException',
'AphrontCalendarEventView' => 'AphrontView',
'AphrontController' => 'Phobject',
'AphrontCursorPagerView' => 'AphrontView',
'AphrontDefaultApplicationConfiguration' => 'AphrontApplicationConfiguration',
'AphrontDialogResponse' => 'AphrontResponse',
'AphrontDialogView' => array(
'AphrontView',
'AphrontResponseProducerInterface',
),
'AphrontException' => 'Exception',
'AphrontFileResponse' => 'AphrontResponse',
'AphrontFormCheckboxControl' => 'AphrontFormControl',
'AphrontFormChooseButtonControl' => 'AphrontFormControl',
'AphrontFormControl' => 'AphrontView',
'AphrontFormDateControl' => 'AphrontFormControl',
'AphrontFormDateControlValue' => 'Phobject',
'AphrontFormDividerControl' => 'AphrontFormControl',
'AphrontFormFileControl' => 'AphrontFormControl',
'AphrontFormMarkupControl' => 'AphrontFormControl',
'AphrontFormPasswordControl' => 'AphrontFormControl',
'AphrontFormPolicyControl' => 'AphrontFormControl',
'AphrontFormRadioButtonControl' => 'AphrontFormControl',
'AphrontFormRecaptchaControl' => 'AphrontFormControl',
'AphrontFormSelectControl' => 'AphrontFormControl',
'AphrontFormStaticControl' => 'AphrontFormControl',
'AphrontFormSubmitControl' => 'AphrontFormControl',
'AphrontFormTextAreaControl' => 'AphrontFormControl',
'AphrontFormTextControl' => 'AphrontFormControl',
'AphrontFormTextWithSubmitControl' => 'AphrontFormControl',
'AphrontFormTokenizerControl' => 'AphrontFormControl',
'AphrontFormTypeaheadControl' => 'AphrontFormControl',
'AphrontFormView' => 'AphrontView',
'AphrontGlyphBarView' => 'AphrontBarView',
'AphrontHTMLResponse' => 'AphrontResponse',
'AphrontHTTPProxyResponse' => 'AphrontResponse',
'AphrontHTTPSink' => 'Phobject',
'AphrontHTTPSinkTestCase' => 'PhabricatorTestCase',
'AphrontIsolatedDatabaseConnectionTestCase' => 'PhabricatorTestCase',
'AphrontIsolatedHTTPSink' => 'AphrontHTTPSink',
'AphrontJSONResponse' => 'AphrontResponse',
'AphrontJavelinView' => 'AphrontView',
'AphrontKeyboardShortcutsAvailableView' => 'AphrontView',
'AphrontListFilterView' => 'AphrontView',
'AphrontMalformedRequestException' => 'AphrontException',
'AphrontMoreView' => 'AphrontView',
'AphrontMultiColumnView' => 'AphrontView',
'AphrontMySQLDatabaseConnectionTestCase' => 'PhabricatorTestCase',
'AphrontNullView' => 'AphrontView',
'AphrontPHPHTTPSink' => 'AphrontHTTPSink',
'AphrontPageView' => 'AphrontView',
'AphrontPlainTextResponse' => 'AphrontResponse',
'AphrontProgressBarView' => 'AphrontBarView',
'AphrontProxyResponse' => array(
'AphrontResponse',
'AphrontResponseProducerInterface',
),
'AphrontRedirectResponse' => 'AphrontResponse',
'AphrontRedirectResponseTestCase' => 'PhabricatorTestCase',
'AphrontReloadResponse' => 'AphrontRedirectResponse',
'AphrontRequest' => 'Phobject',
'AphrontRequestExceptionHandler' => 'Phobject',
'AphrontRequestTestCase' => 'PhabricatorTestCase',
'AphrontResponse' => 'Phobject',
'AphrontRoutingMap' => 'Phobject',
'AphrontRoutingResult' => 'Phobject',
'AphrontSideNavFilterView' => 'AphrontView',
'AphrontSite' => 'Phobject',
'AphrontStackTraceView' => 'AphrontView',
'AphrontStandaloneHTMLResponse' => 'AphrontHTMLResponse',
'AphrontTableView' => 'AphrontView',
'AphrontTagView' => 'AphrontView',
'AphrontTokenizerTemplateView' => 'AphrontView',
'AphrontTypeaheadTemplateView' => 'AphrontView',
'AphrontUnhandledExceptionResponse' => 'AphrontStandaloneHTMLResponse',
'AphrontView' => array(
'Phobject',
'PhutilSafeHTMLProducerInterface',
),
'AphrontWebpageResponse' => 'AphrontHTMLResponse',
'ArcanistConduitAPIMethod' => 'ConduitAPIMethod',
'AuditConduitAPIMethod' => 'ConduitAPIMethod',
'AuditQueryConduitAPIMethod' => 'AuditConduitAPIMethod',
'AuthManageProvidersCapability' => 'PhabricatorPolicyCapability',
'CalendarTimeUtil' => 'Phobject',
'CalendarTimeUtilTestCase' => 'PhabricatorTestCase',
'CelerityAPI' => 'Phobject',
'CelerityDefaultPostprocessor' => 'CelerityPostprocessor',
'CelerityHighContrastPostprocessor' => 'CelerityPostprocessor',
'CelerityLargeFontPostprocessor' => 'CelerityPostprocessor',
'CelerityManagementMapWorkflow' => 'CelerityManagementWorkflow',
'CelerityManagementWorkflow' => 'PhabricatorManagementWorkflow',
'CelerityPhabricatorResourceController' => 'CelerityResourceController',
'CelerityPhabricatorResources' => 'CelerityResourcesOnDisk',
'CelerityPhysicalResources' => 'CelerityResources',
'CelerityPhysicalResourcesTestCase' => 'PhabricatorTestCase',
'CelerityPostprocessor' => 'Phobject',
'CelerityPostprocessorTestCase' => 'PhabricatorTestCase',
'CelerityResourceController' => 'PhabricatorController',
'CelerityResourceGraph' => 'AbstractDirectedGraph',
'CelerityResourceMap' => 'Phobject',
'CelerityResourceMapGenerator' => 'Phobject',
'CelerityResourceTransformer' => 'Phobject',
'CelerityResourceTransformerTestCase' => 'PhabricatorTestCase',
'CelerityResources' => 'Phobject',
'CelerityResourcesOnDisk' => 'CelerityPhysicalResources',
'CeleritySpriteGenerator' => 'Phobject',
'CelerityStaticResourceResponse' => 'Phobject',
'ChatLogConduitAPIMethod' => 'ConduitAPIMethod',
'ChatLogQueryConduitAPIMethod' => 'ChatLogConduitAPIMethod',
'ChatLogRecordConduitAPIMethod' => 'ChatLogConduitAPIMethod',
'ConduitAPIMethod' => array(
'Phobject',
'PhabricatorPolicyInterface',
),
'ConduitAPIMethodTestCase' => 'PhabricatorTestCase',
'ConduitAPIRequest' => 'Phobject',
'ConduitAPIResponse' => 'Phobject',
'ConduitApplicationNotInstalledException' => 'ConduitMethodNotFoundException',
'ConduitCall' => 'Phobject',
'ConduitCallTestCase' => 'PhabricatorTestCase',
'ConduitConnectConduitAPIMethod' => 'ConduitAPIMethod',
'ConduitConnectionGarbageCollector' => 'PhabricatorGarbageCollector',
'ConduitDeprecatedCallSetupCheck' => 'PhabricatorSetupCheck',
'ConduitException' => 'Exception',
'ConduitGetCapabilitiesConduitAPIMethod' => 'ConduitAPIMethod',
'ConduitGetCertificateConduitAPIMethod' => 'ConduitAPIMethod',
'ConduitLogGarbageCollector' => 'PhabricatorGarbageCollector',
'ConduitMethodDoesNotExistException' => 'ConduitMethodNotFoundException',
'ConduitMethodNotFoundException' => 'ConduitException',
'ConduitPingConduitAPIMethod' => 'ConduitAPIMethod',
'ConduitQueryConduitAPIMethod' => 'ConduitAPIMethod',
'ConduitSSHWorkflow' => 'PhabricatorSSHWorkflow',
'ConduitTokenGarbageCollector' => 'PhabricatorGarbageCollector',
'ConpherenceColumnViewController' => 'ConpherenceController',
'ConpherenceConduitAPIMethod' => 'ConduitAPIMethod',
'ConpherenceConfigOptions' => 'PhabricatorApplicationConfigOptions',
'ConpherenceConstants' => 'Phobject',
'ConpherenceController' => 'PhabricatorController',
'ConpherenceCreateThreadConduitAPIMethod' => 'ConpherenceConduitAPIMethod',
'ConpherenceCreateThreadMailReceiver' => 'PhabricatorMailReceiver',
'ConpherenceDAO' => 'PhabricatorLiskDAO',
'ConpherenceDurableColumnView' => 'AphrontTagView',
'ConpherenceEditor' => 'PhabricatorApplicationTransactionEditor',
'ConpherenceFormDragAndDropUploadControl' => 'AphrontFormControl',
'ConpherenceFulltextQuery' => 'PhabricatorOffsetPagedQuery',
'ConpherenceHovercardEventListener' => 'PhabricatorEventListener',
'ConpherenceImageData' => 'ConpherenceConstants',
'ConpherenceIndex' => 'ConpherenceDAO',
'ConpherenceLayoutView' => 'AphrontView',
'ConpherenceListController' => 'ConpherenceController',
'ConpherenceMenuItemView' => 'AphrontTagView',
'ConpherenceNewRoomController' => 'ConpherenceController',
'ConpherenceNotificationPanelController' => 'ConpherenceController',
'ConpherenceParticipant' => 'ConpherenceDAO',
'ConpherenceParticipantCountQuery' => 'PhabricatorOffsetPagedQuery',
'ConpherenceParticipantQuery' => 'PhabricatorOffsetPagedQuery',
'ConpherenceParticipationStatus' => 'ConpherenceConstants',
'ConpherencePeopleWidgetView' => 'ConpherenceWidgetView',
'ConpherencePicCropControl' => 'AphrontFormControl',
'ConpherenceQueryThreadConduitAPIMethod' => 'ConpherenceConduitAPIMethod',
'ConpherenceQueryTransactionConduitAPIMethod' => 'ConpherenceConduitAPIMethod',
'ConpherenceReplyHandler' => 'PhabricatorMailReplyHandler',
'ConpherenceRoomListController' => 'ConpherenceController',
'ConpherenceRoomTestCase' => 'ConpherenceTestCase',
'ConpherenceSchemaSpec' => 'PhabricatorConfigSchemaSpec',
'ConpherenceSettings' => 'ConpherenceConstants',
'ConpherenceTestCase' => 'PhabricatorTestCase',
'ConpherenceThread' => array(
'ConpherenceDAO',
'PhabricatorPolicyInterface',
'PhabricatorApplicationTransactionInterface',
'PhabricatorMentionableInterface',
'PhabricatorDestructibleInterface',
),
'ConpherenceThreadIndexer' => 'PhabricatorSearchDocumentIndexer',
'ConpherenceThreadListView' => 'AphrontView',
'ConpherenceThreadMailReceiver' => 'PhabricatorObjectMailReceiver',
'ConpherenceThreadMembersPolicyRule' => 'PhabricatorPolicyRule',
'ConpherenceThreadQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'ConpherenceThreadRemarkupRule' => 'PhabricatorObjectRemarkupRule',
'ConpherenceThreadSearchEngine' => 'PhabricatorApplicationSearchEngine',
'ConpherenceTransaction' => 'PhabricatorApplicationTransaction',
'ConpherenceTransactionComment' => 'PhabricatorApplicationTransactionComment',
'ConpherenceTransactionQuery' => 'PhabricatorApplicationTransactionQuery',
'ConpherenceTransactionRenderer' => 'Phobject',
'ConpherenceTransactionView' => 'AphrontView',
'ConpherenceUpdateActions' => 'ConpherenceConstants',
'ConpherenceUpdateController' => 'ConpherenceController',
'ConpherenceUpdateThreadConduitAPIMethod' => 'ConpherenceConduitAPIMethod',
'ConpherenceViewController' => 'ConpherenceController',
'ConpherenceWidgetConfigConstants' => 'ConpherenceConstants',
'ConpherenceWidgetController' => 'ConpherenceController',
'ConpherenceWidgetView' => 'AphrontView',
'DarkConsoleController' => 'PhabricatorController',
'DarkConsoleCore' => 'Phobject',
'DarkConsoleDataController' => 'PhabricatorController',
'DarkConsoleErrorLogPlugin' => 'DarkConsolePlugin',
'DarkConsoleErrorLogPluginAPI' => 'Phobject',
'DarkConsoleEventPlugin' => 'DarkConsolePlugin',
'DarkConsoleEventPluginAPI' => 'PhabricatorEventListener',
'DarkConsolePlugin' => 'Phobject',
'DarkConsoleRequestPlugin' => 'DarkConsolePlugin',
'DarkConsoleServicesPlugin' => 'DarkConsolePlugin',
'DarkConsoleStartupPlugin' => 'DarkConsolePlugin',
'DarkConsoleXHProfPlugin' => 'DarkConsolePlugin',
'DarkConsoleXHProfPluginAPI' => 'Phobject',
'DefaultDatabaseConfigurationProvider' => array(
'Phobject',
'DatabaseConfigurationProvider',
),
'DifferentialAction' => 'Phobject',
'DifferentialActionEmailCommand' => 'MetaMTAEmailTransactionCommand',
'DifferentialActionMenuEventListener' => 'PhabricatorEventListener',
'DifferentialAddCommentView' => 'AphrontView',
'DifferentialAdjustmentMapTestCase' => 'PhutilTestCase',
'DifferentialAffectedPath' => 'DifferentialDAO',
'DifferentialApplyPatchField' => 'DifferentialCustomField',
'DifferentialAsanaRepresentationField' => 'DifferentialCustomField',
'DifferentialAuditorsField' => 'DifferentialStoredCustomField',
'DifferentialAuthorField' => 'DifferentialCustomField',
'DifferentialBlameRevisionField' => 'DifferentialStoredCustomField',
'DifferentialBlockHeraldAction' => 'HeraldAction',
'DifferentialBranchField' => 'DifferentialCustomField',
'DifferentialChangeHeraldFieldGroup' => 'HeraldFieldGroup',
'DifferentialChangeType' => 'Phobject',
'DifferentialChangesSinceLastUpdateField' => 'DifferentialCustomField',
'DifferentialChangeset' => array(
'DifferentialDAO',
'PhabricatorPolicyInterface',
),
'DifferentialChangesetDetailView' => 'AphrontView',
'DifferentialChangesetFileTreeSideNavBuilder' => 'Phobject',
'DifferentialChangesetHTMLRenderer' => 'DifferentialChangesetRenderer',
'DifferentialChangesetListView' => 'AphrontView',
'DifferentialChangesetOneUpRenderer' => 'DifferentialChangesetHTMLRenderer',
'DifferentialChangesetOneUpTestRenderer' => 'DifferentialChangesetTestRenderer',
'DifferentialChangesetParser' => 'Phobject',
'DifferentialChangesetParserTestCase' => 'PhabricatorTestCase',
'DifferentialChangesetQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'DifferentialChangesetRenderer' => 'Phobject',
'DifferentialChangesetTestRenderer' => 'DifferentialChangesetRenderer',
'DifferentialChangesetTwoUpRenderer' => 'DifferentialChangesetHTMLRenderer',
'DifferentialChangesetTwoUpTestRenderer' => 'DifferentialChangesetTestRenderer',
'DifferentialChangesetViewController' => 'DifferentialController',
'DifferentialCloseConduitAPIMethod' => 'DifferentialConduitAPIMethod',
'DifferentialCommentPreviewController' => 'DifferentialController',
'DifferentialCommentSaveController' => 'DifferentialController',
'DifferentialCommitMessageParser' => 'Phobject',
'DifferentialCommitMessageParserTestCase' => 'PhabricatorTestCase',
'DifferentialCommitsField' => 'DifferentialCustomField',
'DifferentialConduitAPIMethod' => 'ConduitAPIMethod',
'DifferentialConflictsField' => 'DifferentialCustomField',
'DifferentialController' => 'PhabricatorController',
'DifferentialCoreCustomField' => 'DifferentialCustomField',
'DifferentialCreateCommentConduitAPIMethod' => 'DifferentialConduitAPIMethod',
'DifferentialCreateDiffConduitAPIMethod' => 'DifferentialConduitAPIMethod',
'DifferentialCreateInlineConduitAPIMethod' => 'DifferentialConduitAPIMethod',
'DifferentialCreateMailReceiver' => 'PhabricatorMailReceiver',
'DifferentialCreateRawDiffConduitAPIMethod' => 'DifferentialConduitAPIMethod',
'DifferentialCreateRevisionConduitAPIMethod' => 'DifferentialConduitAPIMethod',
'DifferentialCustomField' => 'PhabricatorCustomField',
'DifferentialCustomFieldDependsOnParser' => 'PhabricatorCustomFieldMonogramParser',
'DifferentialCustomFieldDependsOnParserTestCase' => 'PhabricatorTestCase',
'DifferentialCustomFieldNumericIndex' => 'PhabricatorCustomFieldNumericIndexStorage',
'DifferentialCustomFieldRevertsParser' => 'PhabricatorCustomFieldMonogramParser',
'DifferentialCustomFieldRevertsParserTestCase' => 'PhabricatorTestCase',
'DifferentialCustomFieldStorage' => 'PhabricatorCustomFieldStorage',
'DifferentialCustomFieldStringIndex' => 'PhabricatorCustomFieldStringIndexStorage',
'DifferentialDAO' => 'PhabricatorLiskDAO',
'DifferentialDefaultViewCapability' => 'PhabricatorPolicyCapability',
'DifferentialDependenciesField' => 'DifferentialCustomField',
'DifferentialDependsOnField' => 'DifferentialCustomField',
'DifferentialDiff' => array(
'DifferentialDAO',
'PhabricatorPolicyInterface',
'HarbormasterBuildableInterface',
'PhabricatorApplicationTransactionInterface',
'PhabricatorDestructibleInterface',
),
'DifferentialDiffAffectedFilesHeraldField' => 'DifferentialDiffHeraldField',
'DifferentialDiffAuthorHeraldField' => 'DifferentialDiffHeraldField',
'DifferentialDiffAuthorProjectsHeraldField' => 'DifferentialDiffHeraldField',
'DifferentialDiffContentAddedHeraldField' => 'DifferentialDiffHeraldField',
'DifferentialDiffContentHeraldField' => 'DifferentialDiffHeraldField',
'DifferentialDiffContentRemovedHeraldField' => 'DifferentialDiffHeraldField',
'DifferentialDiffCreateController' => 'DifferentialController',
'DifferentialDiffEditor' => 'PhabricatorApplicationTransactionEditor',
'DifferentialDiffHeraldField' => 'HeraldField',
'DifferentialDiffHeraldFieldGroup' => 'HeraldFieldGroup',
'DifferentialDiffInlineCommentQuery' => 'PhabricatorDiffInlineCommentQuery',
'DifferentialDiffPHIDType' => 'PhabricatorPHIDType',
'DifferentialDiffProperty' => 'DifferentialDAO',
'DifferentialDiffQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'DifferentialDiffRepositoryHeraldField' => 'DifferentialDiffHeraldField',
'DifferentialDiffRepositoryProjectsHeraldField' => 'DifferentialDiffHeraldField',
'DifferentialDiffTestCase' => 'PhutilTestCase',
'DifferentialDiffTransaction' => 'PhabricatorApplicationTransaction',
'DifferentialDiffTransactionQuery' => 'PhabricatorApplicationTransactionQuery',
'DifferentialDiffViewController' => 'DifferentialController',
'DifferentialDoorkeeperRevisionFeedStoryPublisher' => 'DoorkeeperFeedStoryPublisher',
'DifferentialDraft' => 'DifferentialDAO',
'DifferentialEditPolicyField' => 'DifferentialCoreCustomField',
'DifferentialFieldParseException' => 'Exception',
'DifferentialFieldValidationException' => 'Exception',
'DifferentialFindConduitAPIMethod' => 'DifferentialConduitAPIMethod',
'DifferentialGetAllDiffsConduitAPIMethod' => 'DifferentialConduitAPIMethod',
'DifferentialGetCommitMessageConduitAPIMethod' => 'DifferentialConduitAPIMethod',
'DifferentialGetCommitPathsConduitAPIMethod' => 'DifferentialConduitAPIMethod',
'DifferentialGetDiffConduitAPIMethod' => 'DifferentialConduitAPIMethod',
'DifferentialGetRawDiffConduitAPIMethod' => 'DifferentialConduitAPIMethod',
'DifferentialGetRevisionCommentsConduitAPIMethod' => 'DifferentialConduitAPIMethod',
'DifferentialGetRevisionConduitAPIMethod' => 'DifferentialConduitAPIMethod',
'DifferentialGetWorkingCopy' => 'Phobject',
'DifferentialGitHubLandingStrategy' => 'DifferentialLandingStrategy',
'DifferentialGitSVNIDField' => 'DifferentialCustomField',
'DifferentialHarbormasterField' => 'DifferentialCustomField',
'DifferentialHiddenComment' => 'DifferentialDAO',
'DifferentialHostField' => 'DifferentialCustomField',
'DifferentialHostedGitLandingStrategy' => 'DifferentialLandingStrategy',
'DifferentialHostedMercurialLandingStrategy' => 'DifferentialLandingStrategy',
'DifferentialHovercardEventListener' => 'PhabricatorEventListener',
'DifferentialHunk' => array(
'DifferentialDAO',
'PhabricatorPolicyInterface',
),
'DifferentialHunkParser' => 'Phobject',
'DifferentialHunkParserTestCase' => 'PhabricatorTestCase',
'DifferentialHunkQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'DifferentialHunkTestCase' => 'PhutilTestCase',
'DifferentialInlineComment' => array(
'Phobject',
'PhabricatorInlineCommentInterface',
),
'DifferentialInlineCommentEditController' => 'PhabricatorInlineCommentController',
'DifferentialInlineCommentPreviewController' => 'PhabricatorInlineCommentPreviewController',
'DifferentialInlineCommentQuery' => 'PhabricatorOffsetPagedQuery',
'DifferentialJIRAIssuesField' => 'DifferentialStoredCustomField',
'DifferentialLandingActionMenuEventListener' => 'PhabricatorEventListener',
'DifferentialLandingStrategy' => 'Phobject',
'DifferentialLegacyHunk' => 'DifferentialHunk',
'DifferentialLineAdjustmentMap' => 'Phobject',
'DifferentialLintField' => 'DifferentialHarbormasterField',
'DifferentialLintStatus' => 'Phobject',
'DifferentialLocalCommitsView' => 'AphrontView',
'DifferentialManiphestTasksField' => 'DifferentialCoreCustomField',
'DifferentialModernHunk' => 'DifferentialHunk',
'DifferentialParseCacheGarbageCollector' => 'PhabricatorGarbageCollector',
'DifferentialParseCommitMessageConduitAPIMethod' => 'DifferentialConduitAPIMethod',
'DifferentialParseRenderTestCase' => 'PhabricatorTestCase',
'DifferentialPathField' => 'DifferentialCustomField',
'DifferentialPrimaryPaneView' => 'AphrontView',
'DifferentialProjectReviewersField' => 'DifferentialCustomField',
'DifferentialProjectsField' => 'DifferentialCoreCustomField',
'DifferentialQueryConduitAPIMethod' => 'DifferentialConduitAPIMethod',
'DifferentialQueryDiffsConduitAPIMethod' => 'DifferentialConduitAPIMethod',
'DifferentialRawDiffRenderer' => 'Phobject',
'DifferentialReleephRequestFieldSpecification' => 'Phobject',
'DifferentialRemarkupRule' => 'PhabricatorObjectRemarkupRule',
'DifferentialReplyHandler' => 'PhabricatorApplicationTransactionReplyHandler',
'DifferentialRepositoryField' => 'DifferentialCoreCustomField',
'DifferentialRepositoryLookup' => 'Phobject',
'DifferentialRequiredSignaturesField' => 'DifferentialCoreCustomField',
'DifferentialRevertPlanField' => 'DifferentialStoredCustomField',
'DifferentialReviewedByField' => 'DifferentialCoreCustomField',
'DifferentialReviewer' => 'Phobject',
'DifferentialReviewerForRevisionEdgeType' => 'PhabricatorEdgeType',
'DifferentialReviewerStatus' => 'Phobject',
'DifferentialReviewersAddBlockingReviewersHeraldAction' => 'DifferentialReviewersHeraldAction',
'DifferentialReviewersAddBlockingSelfHeraldAction' => 'DifferentialReviewersHeraldAction',
'DifferentialReviewersAddReviewersHeraldAction' => 'DifferentialReviewersHeraldAction',
'DifferentialReviewersAddSelfHeraldAction' => 'DifferentialReviewersHeraldAction',
'DifferentialReviewersField' => 'DifferentialCoreCustomField',
'DifferentialReviewersHeraldAction' => 'HeraldAction',
'DifferentialReviewersView' => 'AphrontView',
'DifferentialRevision' => array(
'DifferentialDAO',
'PhabricatorTokenReceiverInterface',
'PhabricatorPolicyInterface',
'PhabricatorExtendedPolicyInterface',
'PhabricatorFlaggableInterface',
'PhrequentTrackableInterface',
'HarbormasterBuildableInterface',
'PhabricatorSubscribableInterface',
'PhabricatorCustomFieldInterface',
'PhabricatorApplicationTransactionInterface',
'PhabricatorMentionableInterface',
'PhabricatorDestructibleInterface',
'PhabricatorProjectInterface',
),
'DifferentialRevisionAffectedFilesHeraldField' => 'DifferentialRevisionHeraldField',
'DifferentialRevisionAuthorHeraldField' => 'DifferentialRevisionHeraldField',
'DifferentialRevisionAuthorProjectsHeraldField' => 'DifferentialRevisionHeraldField',
'DifferentialRevisionCloseDetailsController' => 'DifferentialController',
'DifferentialRevisionContentAddedHeraldField' => 'DifferentialRevisionHeraldField',
'DifferentialRevisionContentHeraldField' => 'DifferentialRevisionHeraldField',
'DifferentialRevisionContentRemovedHeraldField' => 'DifferentialRevisionHeraldField',
'DifferentialRevisionControlSystem' => 'Phobject',
'DifferentialRevisionDependedOnByRevisionEdgeType' => 'PhabricatorEdgeType',
'DifferentialRevisionDependsOnRevisionEdgeType' => 'PhabricatorEdgeType',
'DifferentialRevisionDetailView' => 'AphrontView',
'DifferentialRevisionEditController' => 'DifferentialController',
'DifferentialRevisionHasCommitEdgeType' => 'PhabricatorEdgeType',
'DifferentialRevisionHasReviewerEdgeType' => 'PhabricatorEdgeType',
'DifferentialRevisionHasTaskEdgeType' => 'PhabricatorEdgeType',
'DifferentialRevisionHeraldField' => 'HeraldField',
'DifferentialRevisionHeraldFieldGroup' => 'HeraldFieldGroup',
'DifferentialRevisionIDField' => 'DifferentialCustomField',
'DifferentialRevisionLandController' => 'DifferentialController',
'DifferentialRevisionListController' => 'DifferentialController',
'DifferentialRevisionListView' => 'AphrontView',
'DifferentialRevisionMailReceiver' => 'PhabricatorObjectMailReceiver',
'DifferentialRevisionPHIDType' => 'PhabricatorPHIDType',
'DifferentialRevisionPackageHeraldField' => 'DifferentialRevisionHeraldField',
'DifferentialRevisionPackageOwnerHeraldField' => 'DifferentialRevisionHeraldField',
'DifferentialRevisionQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'DifferentialRevisionRepositoryHeraldField' => 'DifferentialRevisionHeraldField',
'DifferentialRevisionRepositoryProjectsHeraldField' => 'DifferentialRevisionHeraldField',
'DifferentialRevisionReviewersHeraldField' => 'DifferentialRevisionHeraldField',
'DifferentialRevisionSearchEngine' => 'PhabricatorApplicationSearchEngine',
'DifferentialRevisionStatus' => 'Phobject',
'DifferentialRevisionSummaryHeraldField' => 'DifferentialRevisionHeraldField',
'DifferentialRevisionTitleHeraldField' => 'DifferentialRevisionHeraldField',
'DifferentialRevisionUpdateHistoryView' => 'AphrontView',
'DifferentialRevisionViewController' => 'DifferentialController',
'DifferentialSchemaSpec' => 'PhabricatorConfigSchemaSpec',
'DifferentialSearchIndexer' => 'PhabricatorSearchDocumentIndexer',
'DifferentialSetDiffPropertyConduitAPIMethod' => 'DifferentialConduitAPIMethod',
'DifferentialStoredCustomField' => 'DifferentialCustomField',
'DifferentialSubscribersField' => 'DifferentialCoreCustomField',
'DifferentialSummaryField' => 'DifferentialCoreCustomField',
'DifferentialTestPlanField' => 'DifferentialCoreCustomField',
'DifferentialTitleField' => 'DifferentialCoreCustomField',
'DifferentialTransaction' => 'PhabricatorApplicationTransaction',
'DifferentialTransactionComment' => 'PhabricatorApplicationTransactionComment',
'DifferentialTransactionEditor' => 'PhabricatorApplicationTransactionEditor',
'DifferentialTransactionQuery' => 'PhabricatorApplicationTransactionQuery',
'DifferentialTransactionView' => 'PhabricatorApplicationTransactionView',
'DifferentialUnitField' => 'DifferentialHarbormasterField',
'DifferentialUnitStatus' => 'Phobject',
'DifferentialUnitTestResult' => 'Phobject',
'DifferentialUpdateRevisionConduitAPIMethod' => 'DifferentialConduitAPIMethod',
'DifferentialViewPolicyField' => 'DifferentialCoreCustomField',
'DiffusionAuditorDatasource' => 'PhabricatorTypeaheadCompositeDatasource',
'DiffusionAuditorFunctionDatasource' => 'PhabricatorTypeaheadCompositeDatasource',
'DiffusionAuditorsAddAuditorsHeraldAction' => 'DiffusionAuditorsHeraldAction',
'DiffusionAuditorsAddSelfHeraldAction' => 'DiffusionAuditorsHeraldAction',
'DiffusionAuditorsHeraldAction' => 'HeraldAction',
'DiffusionBlockHeraldAction' => 'HeraldAction',
'DiffusionBranchQueryConduitAPIMethod' => 'DiffusionQueryConduitAPIMethod',
'DiffusionBranchTableController' => 'DiffusionController',
'DiffusionBranchTableView' => 'DiffusionView',
'DiffusionBrowseController' => 'DiffusionController',
'DiffusionBrowseDirectoryController' => 'DiffusionBrowseController',
'DiffusionBrowseFileController' => 'DiffusionBrowseController',
'DiffusionBrowseMainController' => 'DiffusionBrowseController',
'DiffusionBrowseQueryConduitAPIMethod' => 'DiffusionQueryConduitAPIMethod',
'DiffusionBrowseResultSet' => 'Phobject',
'DiffusionBrowseSearchController' => 'DiffusionBrowseController',
'DiffusionBrowseTableView' => 'DiffusionView',
'DiffusionCachedResolveRefsQuery' => 'DiffusionLowLevelQuery',
'DiffusionChangeController' => 'DiffusionController',
'DiffusionChangeHeraldFieldGroup' => 'HeraldFieldGroup',
'DiffusionCommitAffectedFilesHeraldField' => 'DiffusionCommitHeraldField',
'DiffusionCommitAuthorHeraldField' => 'DiffusionCommitHeraldField',
'DiffusionCommitAutocloseHeraldField' => 'DiffusionCommitHeraldField',
'DiffusionCommitBranchesController' => 'DiffusionController',
'DiffusionCommitBranchesHeraldField' => 'DiffusionCommitHeraldField',
'DiffusionCommitCommitterHeraldField' => 'DiffusionCommitHeraldField',
'DiffusionCommitController' => 'DiffusionController',
'DiffusionCommitDiffContentAddedHeraldField' => 'DiffusionCommitHeraldField',
'DiffusionCommitDiffContentHeraldField' => 'DiffusionCommitHeraldField',
'DiffusionCommitDiffContentRemovedHeraldField' => 'DiffusionCommitHeraldField',
'DiffusionCommitDiffEnormousHeraldField' => 'DiffusionCommitHeraldField',
'DiffusionCommitEditController' => 'DiffusionController',
'DiffusionCommitHasRevisionEdgeType' => 'PhabricatorEdgeType',
'DiffusionCommitHasTaskEdgeType' => 'PhabricatorEdgeType',
'DiffusionCommitHash' => 'Phobject',
'DiffusionCommitHeraldField' => 'HeraldField',
'DiffusionCommitHeraldFieldGroup' => 'HeraldFieldGroup',
'DiffusionCommitHookEngine' => 'Phobject',
'DiffusionCommitHookRejectException' => 'Exception',
'DiffusionCommitMessageHeraldField' => 'DiffusionCommitHeraldField',
'DiffusionCommitPackageAuditHeraldField' => 'DiffusionCommitHeraldField',
'DiffusionCommitPackageHeraldField' => 'DiffusionCommitHeraldField',
'DiffusionCommitPackageOwnerHeraldField' => 'DiffusionCommitHeraldField',
'DiffusionCommitParentsQueryConduitAPIMethod' => 'DiffusionQueryConduitAPIMethod',
'DiffusionCommitQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'DiffusionCommitRef' => 'Phobject',
'DiffusionCommitRemarkupRule' => 'PhabricatorObjectRemarkupRule',
'DiffusionCommitRemarkupRuleTestCase' => 'PhabricatorTestCase',
'DiffusionCommitRepositoryHeraldField' => 'DiffusionCommitHeraldField',
'DiffusionCommitRepositoryProjectsHeraldField' => 'DiffusionCommitHeraldField',
'DiffusionCommitRevertedByCommitEdgeType' => 'PhabricatorEdgeType',
'DiffusionCommitRevertsCommitEdgeType' => 'PhabricatorEdgeType',
'DiffusionCommitReviewerHeraldField' => 'DiffusionCommitHeraldField',
'DiffusionCommitRevisionAcceptedHeraldField' => 'DiffusionCommitHeraldField',
'DiffusionCommitRevisionHeraldField' => 'DiffusionCommitHeraldField',
'DiffusionCommitRevisionReviewersHeraldField' => 'DiffusionCommitHeraldField',
'DiffusionCommitRevisionSubscribersHeraldField' => 'DiffusionCommitHeraldField',
'DiffusionCommitTagsController' => 'DiffusionController',
'DiffusionConduitAPIMethod' => 'ConduitAPIMethod',
'DiffusionController' => 'PhabricatorController',
'DiffusionCreateCommentConduitAPIMethod' => 'DiffusionConduitAPIMethod',
'DiffusionCreateRepositoriesCapability' => 'PhabricatorPolicyCapability',
'DiffusionDefaultEditCapability' => 'PhabricatorPolicyCapability',
'DiffusionDefaultPushCapability' => 'PhabricatorPolicyCapability',
'DiffusionDefaultViewCapability' => 'PhabricatorPolicyCapability',
'DiffusionDiffController' => 'DiffusionController',
'DiffusionDiffInlineCommentQuery' => 'PhabricatorDiffInlineCommentQuery',
'DiffusionDiffQueryConduitAPIMethod' => 'DiffusionQueryConduitAPIMethod',
'DiffusionDoorkeeperCommitFeedStoryPublisher' => 'DoorkeeperFeedStoryPublisher',
'DiffusionEmptyResultView' => 'DiffusionView',
'DiffusionExistsQueryConduitAPIMethod' => 'DiffusionQueryConduitAPIMethod',
'DiffusionExternalController' => 'DiffusionController',
'DiffusionExternalSymbolQuery' => 'Phobject',
'DiffusionExternalSymbolsSource' => 'Phobject',
'DiffusionFileContent' => 'Phobject',
'DiffusionFileContentQuery' => 'DiffusionQuery',
'DiffusionFileContentQueryConduitAPIMethod' => 'DiffusionQueryConduitAPIMethod',
'DiffusionFindSymbolsConduitAPIMethod' => 'DiffusionConduitAPIMethod',
'DiffusionGetCommitsConduitAPIMethod' => 'DiffusionConduitAPIMethod',
'DiffusionGetLintMessagesConduitAPIMethod' => 'DiffusionConduitAPIMethod',
'DiffusionGetRecentCommitsByPathConduitAPIMethod' => 'DiffusionConduitAPIMethod',
'DiffusionGitBranch' => 'Phobject',
'DiffusionGitBranchTestCase' => 'PhabricatorTestCase',
'DiffusionGitFileContentQuery' => 'DiffusionFileContentQuery',
'DiffusionGitFileContentQueryTestCase' => 'PhabricatorTestCase',
'DiffusionGitRawDiffQuery' => 'DiffusionRawDiffQuery',
'DiffusionGitReceivePackSSHWorkflow' => 'DiffusionGitSSHWorkflow',
'DiffusionGitRequest' => 'DiffusionRequest',
'DiffusionGitResponse' => 'AphrontResponse',
'DiffusionGitSSHWorkflow' => 'DiffusionSSHWorkflow',
'DiffusionGitUploadPackSSHWorkflow' => 'DiffusionGitSSHWorkflow',
'DiffusionHistoryController' => 'DiffusionController',
'DiffusionHistoryQueryConduitAPIMethod' => 'DiffusionQueryConduitAPIMethod',
'DiffusionHistoryTableView' => 'DiffusionView',
'DiffusionHovercardEventListener' => 'PhabricatorEventListener',
'DiffusionInlineCommentController' => 'PhabricatorInlineCommentController',
'DiffusionInlineCommentPreviewController' => 'PhabricatorInlineCommentPreviewController',
'DiffusionLastModifiedController' => 'DiffusionController',
'DiffusionLastModifiedQueryConduitAPIMethod' => 'DiffusionQueryConduitAPIMethod',
'DiffusionLintController' => 'DiffusionController',
'DiffusionLintCountQuery' => 'PhabricatorQuery',
'DiffusionLintDetailsController' => 'DiffusionController',
'DiffusionLintSaveRunner' => 'Phobject',
'DiffusionLookSoonConduitAPIMethod' => 'DiffusionConduitAPIMethod',
'DiffusionLowLevelCommitFieldsQuery' => 'DiffusionLowLevelQuery',
'DiffusionLowLevelCommitQuery' => 'DiffusionLowLevelQuery',
'DiffusionLowLevelGitRefQuery' => 'DiffusionLowLevelQuery',
'DiffusionLowLevelMercurialBranchesQuery' => 'DiffusionLowLevelQuery',
'DiffusionLowLevelMercurialPathsQuery' => 'DiffusionLowLevelQuery',
'DiffusionLowLevelParentsQuery' => 'DiffusionLowLevelQuery',
'DiffusionLowLevelQuery' => 'Phobject',
'DiffusionLowLevelResolveRefsQuery' => 'DiffusionLowLevelQuery',
'DiffusionMercurialFileContentQuery' => 'DiffusionFileContentQuery',
'DiffusionMercurialRawDiffQuery' => 'DiffusionRawDiffQuery',
'DiffusionMercurialRequest' => 'DiffusionRequest',
'DiffusionMercurialResponse' => 'AphrontResponse',
'DiffusionMercurialSSHWorkflow' => 'DiffusionSSHWorkflow',
'DiffusionMercurialServeSSHWorkflow' => 'DiffusionMercurialSSHWorkflow',
'DiffusionMercurialWireClientSSHProtocolChannel' => 'PhutilProtocolChannel',
'DiffusionMercurialWireProtocol' => 'Phobject',
'DiffusionMercurialWireSSHTestCase' => 'PhabricatorTestCase',
'DiffusionMergedCommitsQueryConduitAPIMethod' => 'DiffusionQueryConduitAPIMethod',
'DiffusionMirrorDeleteController' => 'DiffusionController',
'DiffusionMirrorEditController' => 'DiffusionController',
'DiffusionPathChange' => 'Phobject',
'DiffusionPathChangeQuery' => 'Phobject',
'DiffusionPathCompleteController' => 'DiffusionController',
'DiffusionPathIDQuery' => 'Phobject',
'DiffusionPathQuery' => 'Phobject',
'DiffusionPathQueryTestCase' => 'PhabricatorTestCase',
'DiffusionPathTreeController' => 'DiffusionController',
'DiffusionPathValidateController' => 'DiffusionController',
'DiffusionPhpExternalSymbolsSource' => 'DiffusionExternalSymbolsSource',
'DiffusionPreCommitContentAffectedFilesHeraldField' => 'DiffusionPreCommitContentHeraldField',
'DiffusionPreCommitContentAuthorHeraldField' => 'DiffusionPreCommitContentHeraldField',
'DiffusionPreCommitContentAuthorRawHeraldField' => 'DiffusionPreCommitContentHeraldField',
'DiffusionPreCommitContentBranchesHeraldField' => 'DiffusionPreCommitContentHeraldField',
'DiffusionPreCommitContentCommitterHeraldField' => 'DiffusionPreCommitContentHeraldField',
'DiffusionPreCommitContentCommitterRawHeraldField' => 'DiffusionPreCommitContentHeraldField',
'DiffusionPreCommitContentDiffContentAddedHeraldField' => 'DiffusionPreCommitContentHeraldField',
'DiffusionPreCommitContentDiffContentHeraldField' => 'DiffusionPreCommitContentHeraldField',
'DiffusionPreCommitContentDiffContentRemovedHeraldField' => 'DiffusionPreCommitContentHeraldField',
'DiffusionPreCommitContentDiffEnormousHeraldField' => 'DiffusionPreCommitContentHeraldField',
'DiffusionPreCommitContentHeraldField' => 'HeraldField',
'DiffusionPreCommitContentMergeHeraldField' => 'DiffusionPreCommitContentHeraldField',
'DiffusionPreCommitContentMessageHeraldField' => 'DiffusionPreCommitContentHeraldField',
'DiffusionPreCommitContentPusherHeraldField' => 'DiffusionPreCommitContentHeraldField',
'DiffusionPreCommitContentPusherIsCommitterHeraldField' => 'DiffusionPreCommitContentHeraldField',
'DiffusionPreCommitContentPusherProjectsHeraldField' => 'DiffusionPreCommitContentHeraldField',
'DiffusionPreCommitContentRepositoryHeraldField' => 'DiffusionPreCommitContentHeraldField',
'DiffusionPreCommitContentRepositoryProjectsHeraldField' => 'DiffusionPreCommitContentHeraldField',
'DiffusionPreCommitContentRevisionAcceptedHeraldField' => 'DiffusionPreCommitContentHeraldField',
'DiffusionPreCommitContentRevisionHeraldField' => 'DiffusionPreCommitContentHeraldField',
'DiffusionPreCommitContentRevisionReviewersHeraldField' => 'DiffusionPreCommitContentHeraldField',
'DiffusionPreCommitContentRevisionSubscribersHeraldField' => 'DiffusionPreCommitContentHeraldField',
'DiffusionPreCommitRefChangeHeraldField' => 'DiffusionPreCommitRefHeraldField',
'DiffusionPreCommitRefHeraldField' => 'HeraldField',
'DiffusionPreCommitRefHeraldFieldGroup' => 'HeraldFieldGroup',
'DiffusionPreCommitRefNameHeraldField' => 'DiffusionPreCommitRefHeraldField',
'DiffusionPreCommitRefPusherHeraldField' => 'DiffusionPreCommitRefHeraldField',
'DiffusionPreCommitRefPusherProjectsHeraldField' => 'DiffusionPreCommitRefHeraldField',
'DiffusionPreCommitRefRepositoryHeraldField' => 'DiffusionPreCommitRefHeraldField',
'DiffusionPreCommitRefRepositoryProjectsHeraldField' => 'DiffusionPreCommitRefHeraldField',
'DiffusionPreCommitRefTypeHeraldField' => 'DiffusionPreCommitRefHeraldField',
'DiffusionPushCapability' => 'PhabricatorPolicyCapability',
'DiffusionPushEventViewController' => 'DiffusionPushLogController',
'DiffusionPushLogController' => 'DiffusionController',
'DiffusionPushLogListController' => 'DiffusionPushLogController',
'DiffusionPushLogListView' => 'AphrontView',
'DiffusionPythonExternalSymbolsSource' => 'DiffusionExternalSymbolsSource',
'DiffusionQuery' => 'PhabricatorQuery',
'DiffusionQueryCommitsConduitAPIMethod' => 'DiffusionConduitAPIMethod',
'DiffusionQueryConduitAPIMethod' => 'DiffusionConduitAPIMethod',
'DiffusionQueryPathsConduitAPIMethod' => 'DiffusionQueryConduitAPIMethod',
'DiffusionRawDiffQuery' => 'DiffusionQuery',
'DiffusionRawDiffQueryConduitAPIMethod' => 'DiffusionQueryConduitAPIMethod',
'DiffusionReadmeView' => 'DiffusionView',
'DiffusionRefNotFoundException' => 'Exception',
'DiffusionRefTableController' => 'DiffusionController',
'DiffusionRefsQueryConduitAPIMethod' => 'DiffusionQueryConduitAPIMethod',
'DiffusionRenameHistoryQuery' => 'Phobject',
'DiffusionRepositoryByIDRemarkupRule' => 'PhabricatorObjectRemarkupRule',
'DiffusionRepositoryController' => 'DiffusionController',
'DiffusionRepositoryCreateController' => 'DiffusionRepositoryEditController',
'DiffusionRepositoryDatasource' => 'PhabricatorTypeaheadDatasource',
'DiffusionRepositoryDefaultController' => 'DiffusionController',
'DiffusionRepositoryEditActionsController' => 'DiffusionRepositoryEditController',
'DiffusionRepositoryEditActivateController' => 'DiffusionRepositoryEditController',
'DiffusionRepositoryEditBasicController' => 'DiffusionRepositoryEditController',
'DiffusionRepositoryEditBranchesController' => 'DiffusionRepositoryEditController',
'DiffusionRepositoryEditController' => 'DiffusionController',
'DiffusionRepositoryEditDangerousController' => 'DiffusionRepositoryEditController',
'DiffusionRepositoryEditDeleteController' => 'DiffusionRepositoryEditController',
'DiffusionRepositoryEditEncodingController' => 'DiffusionRepositoryEditController',
'DiffusionRepositoryEditHostingController' => 'DiffusionRepositoryEditController',
'DiffusionRepositoryEditMainController' => 'DiffusionRepositoryEditController',
'DiffusionRepositoryEditStagingController' => 'DiffusionRepositoryEditController',
'DiffusionRepositoryEditStorageController' => 'DiffusionRepositoryEditController',
'DiffusionRepositoryEditSubversionController' => 'DiffusionRepositoryEditController',
'DiffusionRepositoryEditUpdateController' => 'DiffusionRepositoryEditController',
'DiffusionRepositoryListController' => 'DiffusionController',
'DiffusionRepositoryNewController' => 'DiffusionController',
'DiffusionRepositoryPath' => 'Phobject',
'DiffusionRepositoryRef' => 'Phobject',
'DiffusionRepositoryRemarkupRule' => 'PhabricatorObjectRemarkupRule',
'DiffusionRepositorySymbolsController' => 'DiffusionRepositoryEditController',
'DiffusionRepositoryTag' => 'Phobject',
'DiffusionRequest' => 'Phobject',
'DiffusionResolveRefsConduitAPIMethod' => 'DiffusionQueryConduitAPIMethod',
'DiffusionResolveUserQuery' => 'Phobject',
'DiffusionSSHWorkflow' => 'PhabricatorSSHWorkflow',
'DiffusionSearchQueryConduitAPIMethod' => 'DiffusionQueryConduitAPIMethod',
'DiffusionServeController' => 'DiffusionController',
'DiffusionSetPasswordSettingsPanel' => 'PhabricatorSettingsPanel',
'DiffusionSetupException' => 'Exception',
'DiffusionSubversionSSHWorkflow' => 'DiffusionSSHWorkflow',
'DiffusionSubversionServeSSHWorkflow' => 'DiffusionSubversionSSHWorkflow',
'DiffusionSubversionWireProtocol' => 'Phobject',
'DiffusionSubversionWireProtocolTestCase' => 'PhabricatorTestCase',
'DiffusionSvnFileContentQuery' => 'DiffusionFileContentQuery',
'DiffusionSvnRawDiffQuery' => 'DiffusionRawDiffQuery',
'DiffusionSvnRequest' => 'DiffusionRequest',
'DiffusionSymbolController' => 'DiffusionController',
'DiffusionSymbolDatasource' => 'PhabricatorTypeaheadDatasource',
'DiffusionSymbolQuery' => 'PhabricatorOffsetPagedQuery',
'DiffusionTagListController' => 'DiffusionController',
'DiffusionTagListView' => 'DiffusionView',
'DiffusionTagsQueryConduitAPIMethod' => 'DiffusionQueryConduitAPIMethod',
'DiffusionURITestCase' => 'PhutilTestCase',
'DiffusionUpdateCoverageConduitAPIMethod' => 'DiffusionConduitAPIMethod',
'DiffusionView' => 'AphrontView',
'DivinerArticleAtomizer' => 'DivinerAtomizer',
'DivinerAtom' => 'Phobject',
'DivinerAtomCache' => 'DivinerDiskCache',
'DivinerAtomController' => 'DivinerController',
'DivinerAtomListController' => 'DivinerController',
'DivinerAtomPHIDType' => 'PhabricatorPHIDType',
'DivinerAtomQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'DivinerAtomRef' => 'Phobject',
'DivinerAtomSearchEngine' => 'PhabricatorApplicationSearchEngine',
'DivinerAtomSearchIndexer' => 'PhabricatorSearchDocumentIndexer',
'DivinerAtomizeWorkflow' => 'DivinerWorkflow',
'DivinerAtomizer' => 'Phobject',
'DivinerBookController' => 'DivinerController',
'DivinerBookDatasource' => 'PhabricatorTypeaheadDatasource',
'DivinerBookEditController' => 'DivinerController',
'DivinerBookItemView' => 'AphrontTagView',
'DivinerBookPHIDType' => 'PhabricatorPHIDType',
'DivinerBookQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'DivinerBookSearchIndexer' => 'PhabricatorSearchDocumentIndexer',
'DivinerController' => 'PhabricatorController',
'DivinerDAO' => 'PhabricatorLiskDAO',
'DivinerDefaultEditCapability' => 'PhabricatorPolicyCapability',
'DivinerDefaultRenderer' => 'DivinerRenderer',
'DivinerDefaultViewCapability' => 'PhabricatorPolicyCapability',
'DivinerDiskCache' => 'Phobject',
'DivinerFileAtomizer' => 'DivinerAtomizer',
'DivinerFindController' => 'DivinerController',
'DivinerGenerateWorkflow' => 'DivinerWorkflow',
'DivinerLiveAtom' => 'DivinerDAO',
'DivinerLiveBook' => array(
'DivinerDAO',
'PhabricatorPolicyInterface',
'PhabricatorProjectInterface',
'PhabricatorDestructibleInterface',
'PhabricatorApplicationTransactionInterface',
),
'DivinerLiveBookEditor' => 'PhabricatorApplicationTransactionEditor',
'DivinerLiveBookTransaction' => 'PhabricatorApplicationTransaction',
'DivinerLiveBookTransactionQuery' => 'PhabricatorApplicationTransactionQuery',
'DivinerLivePublisher' => 'DivinerPublisher',
'DivinerLiveSymbol' => array(
'DivinerDAO',
'PhabricatorPolicyInterface',
'PhabricatorMarkupInterface',
'PhabricatorDestructibleInterface',
),
'DivinerMainController' => 'DivinerController',
'DivinerPHPAtomizer' => 'DivinerAtomizer',
'DivinerParameterTableView' => 'AphrontTagView',
'DivinerPublishCache' => 'DivinerDiskCache',
'DivinerPublisher' => 'Phobject',
'DivinerRenderer' => 'Phobject',
'DivinerReturnTableView' => 'AphrontTagView',
'DivinerSchemaSpec' => 'PhabricatorConfigSchemaSpec',
'DivinerSectionView' => 'AphrontTagView',
'DivinerStaticPublisher' => 'DivinerPublisher',
'DivinerSymbolRemarkupRule' => 'PhutilRemarkupRule',
'DivinerWorkflow' => 'PhabricatorManagementWorkflow',
'DoorkeeperAsanaFeedWorker' => 'DoorkeeperFeedWorker',
'DoorkeeperAsanaRemarkupRule' => 'DoorkeeperRemarkupRule',
'DoorkeeperBridge' => 'Phobject',
'DoorkeeperBridgeAsana' => 'DoorkeeperBridge',
'DoorkeeperBridgeJIRA' => 'DoorkeeperBridge',
'DoorkeeperBridgeJIRATestCase' => 'PhabricatorTestCase',
'DoorkeeperDAO' => 'PhabricatorLiskDAO',
'DoorkeeperExternalObject' => array(
'DoorkeeperDAO',
'PhabricatorPolicyInterface',
),
'DoorkeeperExternalObjectQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'DoorkeeperFeedStoryPublisher' => 'Phobject',
'DoorkeeperFeedWorker' => 'FeedPushWorker',
'DoorkeeperImportEngine' => 'Phobject',
'DoorkeeperJIRAFeedWorker' => 'DoorkeeperFeedWorker',
'DoorkeeperJIRARemarkupRule' => 'DoorkeeperRemarkupRule',
'DoorkeeperMissingLinkException' => 'Exception',
'DoorkeeperObjectRef' => 'Phobject',
'DoorkeeperRemarkupRule' => 'PhutilRemarkupRule',
'DoorkeeperSchemaSpec' => 'PhabricatorConfigSchemaSpec',
'DoorkeeperTagView' => 'AphrontView',
'DoorkeeperTagsController' => 'PhabricatorController',
'DrydockAllocatorWorker' => 'PhabricatorWorker',
'DrydockApacheWebrootInterface' => 'DrydockWebrootInterface',
'DrydockBlueprint' => array(
'DrydockDAO',
'PhabricatorApplicationTransactionInterface',
'PhabricatorPolicyInterface',
'PhabricatorCustomFieldInterface',
),
'DrydockBlueprintController' => 'DrydockController',
'DrydockBlueprintCoreCustomField' => array(
'DrydockBlueprintCustomField',
'PhabricatorStandardCustomFieldInterface',
),
'DrydockBlueprintCreateController' => 'DrydockBlueprintController',
'DrydockBlueprintCustomField' => 'PhabricatorCustomField',
'DrydockBlueprintDatasource' => 'PhabricatorTypeaheadDatasource',
'DrydockBlueprintEditController' => 'DrydockBlueprintController',
'DrydockBlueprintEditor' => 'PhabricatorApplicationTransactionEditor',
'DrydockBlueprintImplementation' => 'Phobject',
'DrydockBlueprintImplementationTestCase' => 'PhabricatorTestCase',
'DrydockBlueprintListController' => 'DrydockBlueprintController',
'DrydockBlueprintPHIDType' => 'PhabricatorPHIDType',
'DrydockBlueprintQuery' => 'DrydockQuery',
'DrydockBlueprintScopeGuard' => 'Phobject',
'DrydockBlueprintSearchEngine' => 'PhabricatorApplicationSearchEngine',
'DrydockBlueprintTransaction' => 'PhabricatorApplicationTransaction',
'DrydockBlueprintTransactionQuery' => 'PhabricatorApplicationTransactionQuery',
'DrydockBlueprintViewController' => 'DrydockBlueprintController',
'DrydockCommandInterface' => 'DrydockInterface',
'DrydockConsoleController' => 'DrydockController',
'DrydockConstants' => 'Phobject',
'DrydockController' => 'PhabricatorController',
'DrydockCreateBlueprintsCapability' => 'PhabricatorPolicyCapability',
'DrydockDAO' => 'PhabricatorLiskDAO',
'DrydockDefaultEditCapability' => 'PhabricatorPolicyCapability',
'DrydockDefaultViewCapability' => 'PhabricatorPolicyCapability',
'DrydockFilesystemInterface' => 'DrydockInterface',
'DrydockInterface' => 'Phobject',
'DrydockLease' => array(
'DrydockDAO',
'PhabricatorPolicyInterface',
),
'DrydockLeaseController' => 'DrydockController',
'DrydockLeaseDatasource' => 'PhabricatorTypeaheadDatasource',
'DrydockLeaseListController' => 'DrydockLeaseController',
'DrydockLeaseListView' => 'AphrontView',
'DrydockLeasePHIDType' => 'PhabricatorPHIDType',
'DrydockLeaseQuery' => 'DrydockQuery',
'DrydockLeaseReleaseController' => 'DrydockLeaseController',
'DrydockLeaseSearchEngine' => 'PhabricatorApplicationSearchEngine',
'DrydockLeaseStatus' => 'DrydockConstants',
'DrydockLeaseViewController' => 'DrydockLeaseController',
'DrydockLocalCommandInterface' => 'DrydockCommandInterface',
'DrydockLog' => array(
'DrydockDAO',
'PhabricatorPolicyInterface',
),
'DrydockLogController' => 'DrydockController',
'DrydockLogListController' => 'DrydockLogController',
'DrydockLogListView' => 'AphrontView',
'DrydockLogQuery' => 'DrydockQuery',
'DrydockLogSearchEngine' => 'PhabricatorApplicationSearchEngine',
'DrydockManagementCloseWorkflow' => 'DrydockManagementWorkflow',
'DrydockManagementCreateResourceWorkflow' => 'DrydockManagementWorkflow',
'DrydockManagementLeaseWorkflow' => 'DrydockManagementWorkflow',
'DrydockManagementReleaseWorkflow' => 'DrydockManagementWorkflow',
'DrydockManagementWorkflow' => 'PhabricatorManagementWorkflow',
'DrydockPreallocatedHostBlueprintImplementation' => 'DrydockBlueprintImplementation',
'DrydockQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'DrydockResource' => array(
'DrydockDAO',
'PhabricatorPolicyInterface',
),
'DrydockResourceCloseController' => 'DrydockResourceController',
'DrydockResourceController' => 'DrydockController',
'DrydockResourceDatasource' => 'PhabricatorTypeaheadDatasource',
'DrydockResourceListController' => 'DrydockResourceController',
'DrydockResourceListView' => 'AphrontView',
'DrydockResourcePHIDType' => 'PhabricatorPHIDType',
'DrydockResourceQuery' => 'DrydockQuery',
'DrydockResourceSearchEngine' => 'PhabricatorApplicationSearchEngine',
'DrydockResourceStatus' => 'DrydockConstants',
'DrydockResourceViewController' => 'DrydockResourceController',
'DrydockSFTPFilesystemInterface' => 'DrydockFilesystemInterface',
'DrydockSSHCommandInterface' => 'DrydockCommandInterface',
'DrydockWebrootInterface' => 'DrydockInterface',
'DrydockWorkingCopyBlueprintImplementation' => 'DrydockBlueprintImplementation',
'FeedConduitAPIMethod' => 'ConduitAPIMethod',
'FeedPublishConduitAPIMethod' => 'FeedConduitAPIMethod',
'FeedPublisherHTTPWorker' => 'FeedPushWorker',
'FeedPublisherWorker' => 'FeedPushWorker',
'FeedPushWorker' => 'PhabricatorWorker',
'FeedQueryConduitAPIMethod' => 'FeedConduitAPIMethod',
'FeedStoryNotificationGarbageCollector' => 'PhabricatorGarbageCollector',
'FileAllocateConduitAPIMethod' => 'FileConduitAPIMethod',
'FileConduitAPIMethod' => 'ConduitAPIMethod',
'FileCreateMailReceiver' => 'PhabricatorMailReceiver',
'FileDownloadConduitAPIMethod' => 'FileConduitAPIMethod',
'FileInfoConduitAPIMethod' => 'FileConduitAPIMethod',
'FileMailReceiver' => 'PhabricatorObjectMailReceiver',
'FileQueryChunksConduitAPIMethod' => 'FileConduitAPIMethod',
'FileReplyHandler' => 'PhabricatorApplicationTransactionReplyHandler',
'FileUploadChunkConduitAPIMethod' => 'FileConduitAPIMethod',
'FileUploadConduitAPIMethod' => 'FileConduitAPIMethod',
'FileUploadHashConduitAPIMethod' => 'FileConduitAPIMethod',
'FilesDefaultViewCapability' => 'PhabricatorPolicyCapability',
'FlagConduitAPIMethod' => 'ConduitAPIMethod',
'FlagDeleteConduitAPIMethod' => 'FlagConduitAPIMethod',
'FlagEditConduitAPIMethod' => 'FlagConduitAPIMethod',
'FlagQueryConduitAPIMethod' => 'FlagConduitAPIMethod',
'FundBacker' => array(
'FundDAO',
'PhabricatorPolicyInterface',
'PhabricatorApplicationTransactionInterface',
),
'FundBackerCart' => 'PhortuneCartImplementation',
'FundBackerEditor' => 'PhabricatorApplicationTransactionEditor',
'FundBackerListController' => 'FundController',
'FundBackerPHIDType' => 'PhabricatorPHIDType',
'FundBackerProduct' => 'PhortuneProductImplementation',
'FundBackerQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'FundBackerSearchEngine' => 'PhabricatorApplicationSearchEngine',
'FundBackerTransaction' => 'PhabricatorApplicationTransaction',
'FundBackerTransactionQuery' => 'PhabricatorApplicationTransactionQuery',
'FundController' => 'PhabricatorController',
'FundCreateInitiativesCapability' => 'PhabricatorPolicyCapability',
'FundDAO' => 'PhabricatorLiskDAO',
'FundDefaultViewCapability' => 'PhabricatorPolicyCapability',
'FundInitiative' => array(
'FundDAO',
'PhabricatorPolicyInterface',
'PhabricatorProjectInterface',
'PhabricatorApplicationTransactionInterface',
'PhabricatorSubscribableInterface',
'PhabricatorMentionableInterface',
'PhabricatorFlaggableInterface',
'PhabricatorTokenReceiverInterface',
'PhabricatorDestructibleInterface',
),
'FundInitiativeBackController' => 'FundController',
'FundInitiativeCloseController' => 'FundController',
'FundInitiativeEditController' => 'FundController',
'FundInitiativeEditor' => 'PhabricatorApplicationTransactionEditor',
'FundInitiativeIndexer' => 'PhabricatorSearchDocumentIndexer',
'FundInitiativeListController' => 'FundController',
'FundInitiativePHIDType' => 'PhabricatorPHIDType',
'FundInitiativeQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'FundInitiativeRemarkupRule' => 'PhabricatorObjectRemarkupRule',
'FundInitiativeReplyHandler' => 'PhabricatorApplicationTransactionReplyHandler',
'FundInitiativeSearchEngine' => 'PhabricatorApplicationSearchEngine',
'FundInitiativeTransaction' => 'PhabricatorApplicationTransaction',
'FundInitiativeTransactionQuery' => 'PhabricatorApplicationTransactionQuery',
'FundInitiativeViewController' => 'FundController',
'FundSchemaSpec' => 'PhabricatorConfigSchemaSpec',
'HarbormasterArcLintBuildStepImplementation' => 'HarbormasterBuildStepImplementation',
'HarbormasterArcUnitBuildStepImplementation' => 'HarbormasterBuildStepImplementation',
'HarbormasterArtifact' => 'Phobject',
'HarbormasterAutotargetsTestCase' => 'PhabricatorTestCase',
'HarbormasterBuild' => array(
'HarbormasterDAO',
'PhabricatorApplicationTransactionInterface',
'PhabricatorPolicyInterface',
),
'HarbormasterBuildAbortedException' => 'Exception',
'HarbormasterBuildActionController' => 'HarbormasterController',
'HarbormasterBuildArcanistAutoplan' => 'HarbormasterBuildAutoplan',
'HarbormasterBuildArtifact' => array(
'HarbormasterDAO',
'PhabricatorPolicyInterface',
),
'HarbormasterBuildArtifactPHIDType' => 'PhabricatorPHIDType',
'HarbormasterBuildArtifactQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'HarbormasterBuildAutoplan' => 'Phobject',
'HarbormasterBuildCommand' => 'HarbormasterDAO',
'HarbormasterBuildDependencyDatasource' => 'PhabricatorTypeaheadDatasource',
'HarbormasterBuildEngine' => 'Phobject',
'HarbormasterBuildFailureException' => 'Exception',
'HarbormasterBuildGraph' => 'AbstractDirectedGraph',
'HarbormasterBuildLintMessage' => 'HarbormasterDAO',
'HarbormasterBuildLog' => array(
'HarbormasterDAO',
'PhabricatorPolicyInterface',
),
'HarbormasterBuildLogPHIDType' => 'PhabricatorPHIDType',
'HarbormasterBuildLogQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'HarbormasterBuildMessage' => array(
'HarbormasterDAO',
'PhabricatorPolicyInterface',
),
'HarbormasterBuildMessageQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'HarbormasterBuildPHIDType' => 'PhabricatorPHIDType',
'HarbormasterBuildPlan' => array(
'HarbormasterDAO',
'PhabricatorApplicationTransactionInterface',
'PhabricatorPolicyInterface',
'PhabricatorSubscribableInterface',
),
'HarbormasterBuildPlanDatasource' => 'PhabricatorTypeaheadDatasource',
'HarbormasterBuildPlanEditor' => 'PhabricatorApplicationTransactionEditor',
'HarbormasterBuildPlanPHIDType' => 'PhabricatorPHIDType',
'HarbormasterBuildPlanQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'HarbormasterBuildPlanSearchEngine' => 'PhabricatorApplicationSearchEngine',
'HarbormasterBuildPlanTransaction' => 'PhabricatorApplicationTransaction',
'HarbormasterBuildPlanTransactionQuery' => 'PhabricatorApplicationTransactionQuery',
'HarbormasterBuildQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'HarbormasterBuildStep' => array(
'HarbormasterDAO',
'PhabricatorApplicationTransactionInterface',
'PhabricatorPolicyInterface',
'PhabricatorCustomFieldInterface',
),
'HarbormasterBuildStepCoreCustomField' => array(
'HarbormasterBuildStepCustomField',
'PhabricatorStandardCustomFieldInterface',
),
'HarbormasterBuildStepCustomField' => 'PhabricatorCustomField',
'HarbormasterBuildStepEditor' => 'PhabricatorApplicationTransactionEditor',
'HarbormasterBuildStepGroup' => 'Phobject',
'HarbormasterBuildStepImplementation' => 'Phobject',
'HarbormasterBuildStepImplementationTestCase' => 'PhabricatorTestCase',
'HarbormasterBuildStepPHIDType' => 'PhabricatorPHIDType',
'HarbormasterBuildStepQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'HarbormasterBuildStepTransaction' => 'PhabricatorApplicationTransaction',
'HarbormasterBuildStepTransactionQuery' => 'PhabricatorApplicationTransactionQuery',
'HarbormasterBuildTarget' => array(
'HarbormasterDAO',
'PhabricatorPolicyInterface',
),
'HarbormasterBuildTargetPHIDType' => 'PhabricatorPHIDType',
'HarbormasterBuildTargetQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'HarbormasterBuildTransaction' => 'PhabricatorApplicationTransaction',
'HarbormasterBuildTransactionEditor' => 'PhabricatorApplicationTransactionEditor',
'HarbormasterBuildTransactionQuery' => 'PhabricatorApplicationTransactionQuery',
'HarbormasterBuildUnitMessage' => 'HarbormasterDAO',
'HarbormasterBuildViewController' => 'HarbormasterController',
'HarbormasterBuildWorker' => 'HarbormasterWorker',
'HarbormasterBuildable' => array(
'HarbormasterDAO',
'PhabricatorApplicationTransactionInterface',
'PhabricatorPolicyInterface',
'HarbormasterBuildableInterface',
),
'HarbormasterBuildableActionController' => 'HarbormasterController',
'HarbormasterBuildableListController' => 'HarbormasterController',
'HarbormasterBuildablePHIDType' => 'PhabricatorPHIDType',
'HarbormasterBuildableQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'HarbormasterBuildableSearchEngine' => 'PhabricatorApplicationSearchEngine',
'HarbormasterBuildableTransaction' => 'PhabricatorApplicationTransaction',
'HarbormasterBuildableTransactionEditor' => 'PhabricatorApplicationTransactionEditor',
'HarbormasterBuildableTransactionQuery' => 'PhabricatorApplicationTransactionQuery',
'HarbormasterBuildableViewController' => 'HarbormasterController',
'HarbormasterBuiltinBuildStepGroup' => 'HarbormasterBuildStepGroup',
'HarbormasterCommandBuildStepImplementation' => 'HarbormasterBuildStepImplementation',
'HarbormasterConduitAPIMethod' => 'ConduitAPIMethod',
'HarbormasterController' => 'PhabricatorController',
'HarbormasterCreateArtifactConduitAPIMethod' => 'HarbormasterConduitAPIMethod',
'HarbormasterDAO' => 'PhabricatorLiskDAO',
'HarbormasterExternalBuildStepGroup' => 'HarbormasterBuildStepGroup',
'HarbormasterFileArtifact' => 'HarbormasterArtifact',
'HarbormasterHTTPRequestBuildStepImplementation' => 'HarbormasterBuildStepImplementation',
'HarbormasterHostArtifact' => 'HarbormasterArtifact',
'HarbormasterLeaseHostBuildStepImplementation' => 'HarbormasterBuildStepImplementation',
'HarbormasterLintMessagesController' => 'HarbormasterController',
'HarbormasterLintPropertyView' => 'AphrontView',
'HarbormasterManagePlansCapability' => 'PhabricatorPolicyCapability',
'HarbormasterManagementBuildWorkflow' => 'HarbormasterManagementWorkflow',
'HarbormasterManagementUpdateWorkflow' => 'HarbormasterManagementWorkflow',
'HarbormasterManagementWorkflow' => 'PhabricatorManagementWorkflow',
'HarbormasterMessageType' => 'Phobject',
'HarbormasterObject' => 'HarbormasterDAO',
'HarbormasterOtherBuildStepGroup' => 'HarbormasterBuildStepGroup',
'HarbormasterPlanController' => 'HarbormasterController',
'HarbormasterPlanDisableController' => 'HarbormasterPlanController',
'HarbormasterPlanEditController' => 'HarbormasterPlanController',
'HarbormasterPlanListController' => 'HarbormasterPlanController',
'HarbormasterPlanRunController' => 'HarbormasterController',
'HarbormasterPlanViewController' => 'HarbormasterPlanController',
'HarbormasterPrototypeBuildStepGroup' => 'HarbormasterBuildStepGroup',
'HarbormasterPublishFragmentBuildStepImplementation' => 'HarbormasterBuildStepImplementation',
'HarbormasterQueryAutotargetsConduitAPIMethod' => 'HarbormasterConduitAPIMethod',
'HarbormasterQueryBuildablesConduitAPIMethod' => 'HarbormasterConduitAPIMethod',
'HarbormasterQueryBuildsConduitAPIMethod' => 'HarbormasterConduitAPIMethod',
'HarbormasterRemarkupRule' => 'PhabricatorObjectRemarkupRule',
'HarbormasterRunBuildPlansHeraldAction' => 'HeraldAction',
'HarbormasterSchemaSpec' => 'PhabricatorConfigSchemaSpec',
'HarbormasterScratchTable' => 'HarbormasterDAO',
'HarbormasterSendMessageConduitAPIMethod' => 'HarbormasterConduitAPIMethod',
'HarbormasterSleepBuildStepImplementation' => 'HarbormasterBuildStepImplementation',
'HarbormasterStepAddController' => 'HarbormasterController',
'HarbormasterStepDeleteController' => 'HarbormasterController',
'HarbormasterStepEditController' => 'HarbormasterController',
'HarbormasterTargetEngine' => 'Phobject',
'HarbormasterTargetWorker' => 'HarbormasterWorker',
'HarbormasterTestBuildStepGroup' => 'HarbormasterBuildStepGroup',
'HarbormasterThrowExceptionBuildStep' => 'HarbormasterBuildStepImplementation',
'HarbormasterUIEventListener' => 'PhabricatorEventListener',
'HarbormasterURIArtifact' => 'HarbormasterArtifact',
'HarbormasterUnitMessagesController' => 'HarbormasterController',
'HarbormasterUnitPropertyView' => 'AphrontView',
'HarbormasterUploadArtifactBuildStepImplementation' => 'HarbormasterBuildStepImplementation',
'HarbormasterWaitForPreviousBuildStepImplementation' => 'HarbormasterBuildStepImplementation',
'HarbormasterWorker' => 'PhabricatorWorker',
'HeraldAction' => 'Phobject',
'HeraldActionGroup' => 'HeraldGroup',
'HeraldActionRecord' => 'HeraldDAO',
'HeraldAdapter' => 'Phobject',
'HeraldAlwaysField' => 'HeraldField',
'HeraldAnotherRuleField' => 'HeraldField',
'HeraldApplicationActionGroup' => 'HeraldActionGroup',
'HeraldApplyTranscript' => 'Phobject',
'HeraldBasicFieldGroup' => 'HeraldFieldGroup',
'HeraldCommitAdapter' => array(
'HeraldAdapter',
'HarbormasterBuildableAdapterInterface',
),
'HeraldCondition' => 'HeraldDAO',
'HeraldConditionTranscript' => 'Phobject',
'HeraldContentSourceField' => 'HeraldField',
'HeraldController' => 'PhabricatorController',
'HeraldDAO' => 'PhabricatorLiskDAO',
'HeraldDifferentialAdapter' => 'HeraldAdapter',
'HeraldDifferentialDiffAdapter' => 'HeraldDifferentialAdapter',
'HeraldDifferentialRevisionAdapter' => array(
'HeraldDifferentialAdapter',
'HarbormasterBuildableAdapterInterface',
),
'HeraldDisableController' => 'HeraldController',
'HeraldDoNothingAction' => 'HeraldAction',
'HeraldEditFieldGroup' => 'HeraldFieldGroup',
'HeraldEffect' => 'Phobject',
'HeraldEmptyFieldValue' => 'HeraldFieldValue',
'HeraldEngine' => 'Phobject',
'HeraldField' => 'Phobject',
'HeraldFieldGroup' => 'HeraldGroup',
'HeraldFieldTestCase' => 'PhutilTestCase',
'HeraldFieldValue' => 'Phobject',
'HeraldGroup' => 'Phobject',
'HeraldInvalidActionException' => 'Exception',
'HeraldInvalidConditionException' => 'Exception',
'HeraldManageGlobalRulesCapability' => 'PhabricatorPolicyCapability',
'HeraldManiphestTaskAdapter' => 'HeraldAdapter',
'HeraldNewController' => 'HeraldController',
'HeraldNewObjectField' => 'HeraldField',
'HeraldNotifyActionGroup' => 'HeraldActionGroup',
'HeraldObjectTranscript' => 'Phobject',
'HeraldPholioMockAdapter' => 'HeraldAdapter',
'HeraldPonderQuestionAdapter' => 'HeraldAdapter',
'HeraldPreCommitAdapter' => 'HeraldAdapter',
'HeraldPreCommitContentAdapter' => 'HeraldPreCommitAdapter',
'HeraldPreCommitRefAdapter' => 'HeraldPreCommitAdapter',
'HeraldPreventActionGroup' => 'HeraldActionGroup',
'HeraldProjectsField' => 'HeraldField',
'HeraldRecursiveConditionsException' => 'Exception',
'HeraldRelatedFieldGroup' => 'HeraldFieldGroup',
'HeraldRemarkupRule' => 'PhabricatorObjectRemarkupRule',
'HeraldRepetitionPolicyConfig' => 'Phobject',
'HeraldRule' => array(
'HeraldDAO',
'PhabricatorApplicationTransactionInterface',
'PhabricatorFlaggableInterface',
'PhabricatorPolicyInterface',
'PhabricatorDestructibleInterface',
),
'HeraldRuleController' => 'HeraldController',
'HeraldRuleEditor' => 'PhabricatorApplicationTransactionEditor',
'HeraldRuleListController' => 'HeraldController',
'HeraldRulePHIDType' => 'PhabricatorPHIDType',
'HeraldRuleQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'HeraldRuleSearchEngine' => 'PhabricatorApplicationSearchEngine',
'HeraldRuleTestCase' => 'PhabricatorTestCase',
'HeraldRuleTransaction' => 'PhabricatorApplicationTransaction',
'HeraldRuleTransactionComment' => 'PhabricatorApplicationTransactionComment',
'HeraldRuleTranscript' => 'Phobject',
'HeraldRuleTypeConfig' => 'Phobject',
'HeraldRuleViewController' => 'HeraldController',
'HeraldSchemaSpec' => 'PhabricatorConfigSchemaSpec',
'HeraldSelectFieldValue' => 'HeraldFieldValue',
'HeraldSpaceField' => 'HeraldField',
'HeraldSubscribersField' => 'HeraldField',
'HeraldSupportActionGroup' => 'HeraldActionGroup',
'HeraldSupportFieldGroup' => 'HeraldFieldGroup',
'HeraldTestConsoleController' => 'HeraldController',
'HeraldTextFieldValue' => 'HeraldFieldValue',
'HeraldTokenizerFieldValue' => 'HeraldFieldValue',
'HeraldTransactionQuery' => 'PhabricatorApplicationTransactionQuery',
'HeraldTranscript' => array(
'HeraldDAO',
'PhabricatorPolicyInterface',
'PhabricatorDestructibleInterface',
),
'HeraldTranscriptController' => 'HeraldController',
'HeraldTranscriptGarbageCollector' => 'PhabricatorGarbageCollector',
'HeraldTranscriptListController' => 'HeraldController',
'HeraldTranscriptQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'HeraldTranscriptSearchEngine' => 'PhabricatorApplicationSearchEngine',
'HeraldTranscriptTestCase' => 'PhabricatorTestCase',
'HeraldUtilityActionGroup' => 'HeraldActionGroup',
'Javelin' => 'Phobject',
'JavelinReactorUIExample' => 'PhabricatorUIExample',
'JavelinUIExample' => 'PhabricatorUIExample',
'JavelinViewExampleServerView' => 'AphrontView',
'JavelinViewUIExample' => 'PhabricatorUIExample',
'LegalpadController' => 'PhabricatorController',
'LegalpadCreateDocumentsCapability' => 'PhabricatorPolicyCapability',
'LegalpadDAO' => 'PhabricatorLiskDAO',
'LegalpadDefaultEditCapability' => 'PhabricatorPolicyCapability',
'LegalpadDefaultViewCapability' => 'PhabricatorPolicyCapability',
'LegalpadDocument' => array(
'LegalpadDAO',
'PhabricatorPolicyInterface',
'PhabricatorSubscribableInterface',
'PhabricatorApplicationTransactionInterface',
'PhabricatorDestructibleInterface',
),
'LegalpadDocumentBody' => array(
'LegalpadDAO',
'PhabricatorMarkupInterface',
),
'LegalpadDocumentCommentController' => 'LegalpadController',
'LegalpadDocumentDatasource' => 'PhabricatorTypeaheadDatasource',
'LegalpadDocumentDoneController' => 'LegalpadController',
'LegalpadDocumentEditController' => 'LegalpadController',
'LegalpadDocumentEditor' => 'PhabricatorApplicationTransactionEditor',
'LegalpadDocumentListController' => 'LegalpadController',
'LegalpadDocumentManageController' => 'LegalpadController',
'LegalpadDocumentQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'LegalpadDocumentRemarkupRule' => 'PhabricatorObjectRemarkupRule',
'LegalpadDocumentSearchEngine' => 'PhabricatorApplicationSearchEngine',
'LegalpadDocumentSignController' => 'LegalpadController',
'LegalpadDocumentSignature' => array(
'LegalpadDAO',
'PhabricatorPolicyInterface',
),
'LegalpadDocumentSignatureAddController' => 'LegalpadController',
'LegalpadDocumentSignatureListController' => 'LegalpadController',
'LegalpadDocumentSignatureQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'LegalpadDocumentSignatureSearchEngine' => 'PhabricatorApplicationSearchEngine',
'LegalpadDocumentSignatureVerificationController' => 'LegalpadController',
'LegalpadDocumentSignatureViewController' => 'LegalpadController',
'LegalpadMailReceiver' => 'PhabricatorObjectMailReceiver',
'LegalpadObjectNeedsSignatureEdgeType' => 'PhabricatorEdgeType',
'LegalpadReplyHandler' => 'PhabricatorApplicationTransactionReplyHandler',
'LegalpadRequireSignatureHeraldAction' => 'HeraldAction',
'LegalpadSchemaSpec' => 'PhabricatorConfigSchemaSpec',
'LegalpadSignatureNeededByObjectEdgeType' => 'PhabricatorEdgeType',
'LegalpadTransaction' => 'PhabricatorApplicationTransaction',
'LegalpadTransactionComment' => 'PhabricatorApplicationTransactionComment',
'LegalpadTransactionQuery' => 'PhabricatorApplicationTransactionQuery',
'LegalpadTransactionView' => 'PhabricatorApplicationTransactionView',
'LiskChunkTestCase' => 'PhabricatorTestCase',
'LiskDAO' => 'Phobject',
'LiskDAOSet' => 'Phobject',
'LiskDAOTestCase' => 'PhabricatorTestCase',
'LiskEphemeralObjectException' => 'Exception',
'LiskFixtureTestCase' => 'PhabricatorTestCase',
'LiskIsolationTestCase' => 'PhabricatorTestCase',
'LiskIsolationTestDAO' => 'LiskDAO',
'LiskIsolationTestDAOException' => 'Exception',
'LiskMigrationIterator' => 'PhutilBufferedIterator',
'LiskRawMigrationIterator' => 'PhutilBufferedIterator',
'MacroConduitAPIMethod' => 'ConduitAPIMethod',
'MacroCreateMemeConduitAPIMethod' => 'MacroConduitAPIMethod',
'MacroQueryConduitAPIMethod' => 'MacroConduitAPIMethod',
'ManiphestAssignEmailCommand' => 'ManiphestEmailCommand',
'ManiphestAssigneeDatasource' => 'PhabricatorTypeaheadCompositeDatasource',
'ManiphestBatchEditController' => 'ManiphestController',
'ManiphestBulkEditCapability' => 'PhabricatorPolicyCapability',
'ManiphestClaimEmailCommand' => 'ManiphestEmailCommand',
'ManiphestCloseEmailCommand' => 'ManiphestEmailCommand',
'ManiphestConduitAPIMethod' => 'ConduitAPIMethod',
'ManiphestConfiguredCustomField' => array(
'ManiphestCustomField',
'PhabricatorStandardCustomFieldInterface',
),
'ManiphestConstants' => 'Phobject',
'ManiphestController' => 'PhabricatorController',
'ManiphestCreateMailReceiver' => 'PhabricatorMailReceiver',
'ManiphestCreateTaskConduitAPIMethod' => 'ManiphestConduitAPIMethod',
'ManiphestCustomField' => 'PhabricatorCustomField',
'ManiphestCustomFieldNumericIndex' => 'PhabricatorCustomFieldNumericIndexStorage',
'ManiphestCustomFieldStatusParser' => 'PhabricatorCustomFieldMonogramParser',
'ManiphestCustomFieldStatusParserTestCase' => 'PhabricatorTestCase',
'ManiphestCustomFieldStorage' => 'PhabricatorCustomFieldStorage',
'ManiphestCustomFieldStringIndex' => 'PhabricatorCustomFieldStringIndexStorage',
'ManiphestDAO' => 'PhabricatorLiskDAO',
'ManiphestDefaultEditCapability' => 'PhabricatorPolicyCapability',
'ManiphestDefaultViewCapability' => 'PhabricatorPolicyCapability',
'ManiphestEditAssignCapability' => 'PhabricatorPolicyCapability',
'ManiphestEditPoliciesCapability' => 'PhabricatorPolicyCapability',
'ManiphestEditPriorityCapability' => 'PhabricatorPolicyCapability',
'ManiphestEditProjectsCapability' => 'PhabricatorPolicyCapability',
'ManiphestEditStatusCapability' => 'PhabricatorPolicyCapability',
'ManiphestEmailCommand' => 'MetaMTAEmailTransactionCommand',
'ManiphestExcelDefaultFormat' => 'ManiphestExcelFormat',
'ManiphestExcelFormat' => 'Phobject',
'ManiphestExcelFormatTestCase' => 'PhabricatorTestCase',
'ManiphestExportController' => 'ManiphestController',
'ManiphestGetTaskTransactionsConduitAPIMethod' => 'ManiphestConduitAPIMethod',
'ManiphestHovercardEventListener' => 'PhabricatorEventListener',
'ManiphestInfoConduitAPIMethod' => 'ManiphestConduitAPIMethod',
'ManiphestNameIndex' => 'ManiphestDAO',
'ManiphestNameIndexEventListener' => 'PhabricatorEventListener',
'ManiphestPriorityEmailCommand' => 'ManiphestEmailCommand',
'ManiphestQueryConduitAPIMethod' => 'ManiphestConduitAPIMethod',
'ManiphestQueryStatusesConduitAPIMethod' => 'ManiphestConduitAPIMethod',
'ManiphestRemarkupRule' => 'PhabricatorObjectRemarkupRule',
'ManiphestReplyHandler' => 'PhabricatorApplicationTransactionReplyHandler',
'ManiphestReportController' => 'ManiphestController',
'ManiphestSchemaSpec' => 'PhabricatorConfigSchemaSpec',
'ManiphestSearchIndexer' => 'PhabricatorSearchDocumentIndexer',
'ManiphestStatusConfigOptionType' => 'PhabricatorConfigJSONOptionType',
'ManiphestStatusEmailCommand' => 'ManiphestEmailCommand',
'ManiphestSubpriorityController' => 'ManiphestController',
'ManiphestTask' => array(
'ManiphestDAO',
'PhabricatorSubscribableInterface',
'PhabricatorMarkupInterface',
'PhabricatorPolicyInterface',
'PhabricatorTokenReceiverInterface',
'PhabricatorFlaggableInterface',
'PhabricatorMentionableInterface',
'PhrequentTrackableInterface',
'PhabricatorCustomFieldInterface',
'PhabricatorDestructibleInterface',
'PhabricatorApplicationTransactionInterface',
'PhabricatorProjectInterface',
'PhabricatorSpacesInterface',
),
'ManiphestTaskAssignHeraldAction' => 'HeraldAction',
'ManiphestTaskAssignOtherHeraldAction' => 'ManiphestTaskAssignHeraldAction',
'ManiphestTaskAssignSelfHeraldAction' => 'ManiphestTaskAssignHeraldAction',
'ManiphestTaskAssigneeHeraldField' => 'ManiphestTaskHeraldField',
'ManiphestTaskAuthorHeraldField' => 'ManiphestTaskHeraldField',
'ManiphestTaskAuthorPolicyRule' => 'PhabricatorPolicyRule',
'ManiphestTaskClosedStatusDatasource' => 'PhabricatorTypeaheadDatasource',
'ManiphestTaskDependedOnByTaskEdgeType' => 'PhabricatorEdgeType',
'ManiphestTaskDependsOnTaskEdgeType' => 'PhabricatorEdgeType',
'ManiphestTaskDescriptionHeraldField' => 'ManiphestTaskHeraldField',
'ManiphestTaskDetailController' => 'ManiphestController',
'ManiphestTaskEditBulkJobType' => 'PhabricatorWorkerBulkJobType',
'ManiphestTaskEditController' => 'ManiphestController',
'ManiphestTaskHasCommitEdgeType' => 'PhabricatorEdgeType',
'ManiphestTaskHasMockEdgeType' => 'PhabricatorEdgeType',
'ManiphestTaskHasRevisionEdgeType' => 'PhabricatorEdgeType',
'ManiphestTaskHeraldField' => 'HeraldField',
'ManiphestTaskHeraldFieldGroup' => 'HeraldFieldGroup',
'ManiphestTaskListController' => 'ManiphestController',
'ManiphestTaskListView' => 'ManiphestView',
'ManiphestTaskMailReceiver' => 'PhabricatorObjectMailReceiver',
'ManiphestTaskOpenStatusDatasource' => 'PhabricatorTypeaheadDatasource',
'ManiphestTaskPHIDType' => 'PhabricatorPHIDType',
'ManiphestTaskPriority' => 'ManiphestConstants',
'ManiphestTaskPriorityDatasource' => 'PhabricatorTypeaheadDatasource',
'ManiphestTaskPriorityHeraldField' => 'ManiphestTaskHeraldField',
'ManiphestTaskQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'ManiphestTaskResultListView' => 'ManiphestView',
'ManiphestTaskSearchEngine' => 'PhabricatorApplicationSearchEngine',
'ManiphestTaskStatus' => 'ManiphestConstants',
'ManiphestTaskStatusDatasource' => 'PhabricatorTypeaheadDatasource',
'ManiphestTaskStatusFunctionDatasource' => 'PhabricatorTypeaheadCompositeDatasource',
'ManiphestTaskStatusHeraldField' => 'ManiphestTaskHeraldField',
'ManiphestTaskStatusTestCase' => 'PhabricatorTestCase',
'ManiphestTaskTestCase' => 'PhabricatorTestCase',
'ManiphestTaskTitleHeraldField' => 'ManiphestTaskHeraldField',
'ManiphestTransaction' => 'PhabricatorApplicationTransaction',
'ManiphestTransactionComment' => 'PhabricatorApplicationTransactionComment',
'ManiphestTransactionEditor' => 'PhabricatorApplicationTransactionEditor',
'ManiphestTransactionPreviewController' => 'ManiphestController',
'ManiphestTransactionQuery' => 'PhabricatorApplicationTransactionQuery',
'ManiphestTransactionSaveController' => 'ManiphestController',
'ManiphestUpdateConduitAPIMethod' => 'ManiphestConduitAPIMethod',
'ManiphestView' => 'AphrontView',
'MetaMTAEmailTransactionCommand' => 'Phobject',
'MetaMTAEmailTransactionCommandTestCase' => 'PhabricatorTestCase',
'MetaMTAMailReceivedGarbageCollector' => 'PhabricatorGarbageCollector',
'MetaMTAMailSentGarbageCollector' => 'PhabricatorGarbageCollector',
'MetaMTAReceivedMailStatus' => 'Phobject',
'MultimeterContext' => 'MultimeterDimension',
'MultimeterControl' => 'Phobject',
'MultimeterController' => 'PhabricatorController',
'MultimeterDAO' => 'PhabricatorLiskDAO',
'MultimeterDimension' => 'MultimeterDAO',
'MultimeterEvent' => 'MultimeterDAO',
'MultimeterEventGarbageCollector' => 'PhabricatorGarbageCollector',
'MultimeterHost' => 'MultimeterDimension',
'MultimeterLabel' => 'MultimeterDimension',
'MultimeterSampleController' => 'MultimeterController',
'MultimeterViewer' => 'MultimeterDimension',
'NuanceConduitAPIMethod' => 'ConduitAPIMethod',
'NuanceConsoleController' => 'NuanceController',
'NuanceController' => 'PhabricatorController',
'NuanceCreateItemConduitAPIMethod' => 'NuanceConduitAPIMethod',
'NuanceDAO' => 'PhabricatorLiskDAO',
'NuanceItem' => array(
'NuanceDAO',
'PhabricatorPolicyInterface',
'PhabricatorApplicationTransactionInterface',
),
'NuanceItemEditController' => 'NuanceController',
'NuanceItemEditor' => 'PhabricatorApplicationTransactionEditor',
'NuanceItemPHIDType' => 'PhabricatorPHIDType',
'NuanceItemQuery' => 'NuanceQuery',
'NuanceItemTransaction' => 'NuanceTransaction',
'NuanceItemTransactionComment' => 'PhabricatorApplicationTransactionComment',
'NuanceItemTransactionQuery' => 'PhabricatorApplicationTransactionQuery',
'NuanceItemViewController' => 'NuanceController',
'NuancePhabricatorFormSourceDefinition' => 'NuanceSourceDefinition',
'NuanceQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'NuanceQueue' => array(
'NuanceDAO',
'PhabricatorPolicyInterface',
'PhabricatorApplicationTransactionInterface',
),
'NuanceQueueDatasource' => 'PhabricatorTypeaheadDatasource',
'NuanceQueueEditController' => 'NuanceController',
'NuanceQueueEditor' => 'PhabricatorApplicationTransactionEditor',
'NuanceQueueListController' => 'NuanceController',
'NuanceQueuePHIDType' => 'PhabricatorPHIDType',
'NuanceQueueQuery' => 'NuanceQuery',
'NuanceQueueSearchEngine' => 'PhabricatorApplicationSearchEngine',
'NuanceQueueTransaction' => 'NuanceTransaction',
'NuanceQueueTransactionComment' => 'PhabricatorApplicationTransactionComment',
'NuanceQueueTransactionQuery' => 'PhabricatorApplicationTransactionQuery',
'NuanceQueueViewController' => 'NuanceController',
'NuanceRequestor' => array(
'NuanceDAO',
'PhabricatorPolicyInterface',
'PhabricatorApplicationTransactionInterface',
),
'NuanceRequestorEditController' => 'NuanceController',
'NuanceRequestorEditor' => 'PhabricatorApplicationTransactionEditor',
'NuanceRequestorPHIDType' => 'PhabricatorPHIDType',
'NuanceRequestorQuery' => 'NuanceQuery',
'NuanceRequestorSource' => 'NuanceDAO',
'NuanceRequestorTransaction' => 'NuanceTransaction',
'NuanceRequestorTransactionComment' => 'PhabricatorApplicationTransactionComment',
'NuanceRequestorTransactionQuery' => 'PhabricatorApplicationTransactionQuery',
'NuanceRequestorViewController' => 'NuanceController',
'NuanceSchemaSpec' => 'PhabricatorConfigSchemaSpec',
'NuanceSource' => array(
'NuanceDAO',
'PhabricatorApplicationTransactionInterface',
'PhabricatorPolicyInterface',
),
'NuanceSourceActionController' => 'NuanceController',
'NuanceSourceCreateController' => 'NuanceController',
'NuanceSourceDefaultEditCapability' => 'PhabricatorPolicyCapability',
'NuanceSourceDefaultViewCapability' => 'PhabricatorPolicyCapability',
'NuanceSourceDefinition' => 'Phobject',
'NuanceSourceDefinitionTestCase' => 'PhabricatorTestCase',
'NuanceSourceEditController' => 'NuanceController',
'NuanceSourceEditor' => 'PhabricatorApplicationTransactionEditor',
'NuanceSourceListController' => 'NuanceController',
'NuanceSourceManageCapability' => 'PhabricatorPolicyCapability',
'NuanceSourcePHIDType' => 'PhabricatorPHIDType',
'NuanceSourceQuery' => 'NuanceQuery',
'NuanceSourceSearchEngine' => 'PhabricatorApplicationSearchEngine',
'NuanceSourceTransaction' => 'NuanceTransaction',
'NuanceSourceTransactionComment' => 'PhabricatorApplicationTransactionComment',
'NuanceSourceTransactionQuery' => 'PhabricatorApplicationTransactionQuery',
'NuanceSourceViewController' => 'NuanceController',
'NuanceTransaction' => 'PhabricatorApplicationTransaction',
'OwnersConduitAPIMethod' => 'ConduitAPIMethod',
'OwnersPackageReplyHandler' => 'PhabricatorMailReplyHandler',
'OwnersQueryConduitAPIMethod' => 'OwnersConduitAPIMethod',
'PHIDConduitAPIMethod' => 'ConduitAPIMethod',
'PHIDInfoConduitAPIMethod' => 'PHIDConduitAPIMethod',
'PHIDLookupConduitAPIMethod' => 'PHIDConduitAPIMethod',
'PHIDQueryConduitAPIMethod' => 'PHIDConduitAPIMethod',
'PHUI' => 'Phobject',
'PHUIActionPanelExample' => 'PhabricatorUIExample',
'PHUIActionPanelView' => 'AphrontTagView',
'PHUIBadgeBoxView' => 'AphrontTagView',
'PHUIBadgeExample' => 'PhabricatorUIExample',
'PHUIBadgeMiniView' => 'AphrontTagView',
'PHUIBadgeView' => 'AphrontTagView',
'PHUIBoxExample' => 'PhabricatorUIExample',
'PHUIBoxView' => 'AphrontTagView',
'PHUIButtonBarExample' => 'PhabricatorUIExample',
'PHUIButtonBarView' => 'AphrontTagView',
'PHUIButtonExample' => 'PhabricatorUIExample',
'PHUIButtonView' => 'AphrontTagView',
'PHUICalendarDayView' => 'AphrontView',
'PHUICalendarListView' => 'AphrontTagView',
'PHUICalendarMonthView' => 'AphrontView',
'PHUICalendarWidgetView' => 'AphrontTagView',
'PHUIColorPalletteExample' => 'PhabricatorUIExample',
'PHUICrumbView' => 'AphrontView',
'PHUICrumbsView' => 'AphrontView',
'PHUIDiffInlineCommentDetailView' => 'PHUIDiffInlineCommentView',
'PHUIDiffInlineCommentEditView' => 'PHUIDiffInlineCommentView',
'PHUIDiffInlineCommentRowScaffold' => 'AphrontView',
'PHUIDiffInlineCommentTableScaffold' => 'AphrontView',
'PHUIDiffInlineCommentUndoView' => 'PHUIDiffInlineCommentView',
'PHUIDiffInlineCommentView' => 'AphrontView',
'PHUIDiffOneUpInlineCommentRowScaffold' => 'PHUIDiffInlineCommentRowScaffold',
'PHUIDiffRevealIconView' => 'AphrontView',
'PHUIDiffTableOfContentsItemView' => 'AphrontView',
'PHUIDiffTableOfContentsListView' => 'AphrontView',
'PHUIDiffTwoUpInlineCommentRowScaffold' => 'PHUIDiffInlineCommentRowScaffold',
'PHUIDocumentExample' => 'PhabricatorUIExample',
'PHUIDocumentView' => 'AphrontTagView',
'PHUIFeedStoryExample' => 'PhabricatorUIExample',
'PHUIFeedStoryView' => 'AphrontView',
'PHUIFormDividerControl' => 'AphrontFormControl',
'PHUIFormFreeformDateControl' => 'AphrontFormControl',
'PHUIFormInsetView' => 'AphrontView',
'PHUIFormLayoutView' => 'AphrontView',
'PHUIFormMultiSubmitControl' => 'AphrontFormControl',
'PHUIFormPageView' => 'AphrontView',
'PHUIHandleListView' => 'AphrontTagView',
'PHUIHandleTagListView' => 'AphrontTagView',
'PHUIHandleView' => 'AphrontView',
'PHUIHeaderView' => 'AphrontTagView',
'PHUIIconExample' => 'PhabricatorUIExample',
'PHUIIconView' => 'AphrontTagView',
'PHUIImageMaskExample' => 'PhabricatorUIExample',
'PHUIImageMaskView' => 'AphrontTagView',
'PHUIInfoExample' => 'PhabricatorUIExample',
'PHUIInfoPanelExample' => 'PhabricatorUIExample',
'PHUIInfoPanelView' => 'AphrontView',
'PHUIInfoView' => 'AphrontView',
'PHUIListExample' => 'PhabricatorUIExample',
'PHUIListItemView' => 'AphrontTagView',
'PHUIListView' => 'AphrontTagView',
'PHUIListViewTestCase' => 'PhabricatorTestCase',
'PHUIObjectBoxView' => 'AphrontView',
'PHUIObjectItemListExample' => 'PhabricatorUIExample',
'PHUIObjectItemListView' => 'AphrontTagView',
'PHUIObjectItemView' => 'AphrontTagView',
'PHUIPagedFormView' => 'AphrontView',
'PHUIPagerView' => 'AphrontView',
'PHUIPinboardItemView' => 'AphrontView',
'PHUIPinboardView' => 'AphrontView',
'PHUIPropertyGroupView' => 'AphrontTagView',
'PHUIPropertyListExample' => 'PhabricatorUIExample',
'PHUIPropertyListView' => 'AphrontView',
'PHUIRemarkupPreviewPanel' => 'AphrontTagView',
'PHUISpacesNamespaceContextView' => 'AphrontView',
'PHUIStatusItemView' => 'AphrontTagView',
'PHUIStatusListView' => 'AphrontTagView',
'PHUITagExample' => 'PhabricatorUIExample',
'PHUITagView' => 'AphrontTagView',
'PHUITextExample' => 'PhabricatorUIExample',
'PHUITextView' => 'AphrontTagView',
'PHUITimelineEventView' => 'AphrontView',
'PHUITimelineExample' => 'PhabricatorUIExample',
'PHUITimelineView' => 'AphrontView',
'PHUITwoColumnView' => 'AphrontTagView',
'PHUITypeaheadExample' => 'PhabricatorUIExample',
'PHUIWorkboardView' => 'AphrontTagView',
'PHUIWorkpanelView' => 'AphrontTagView',
'PassphraseAbstractKey' => 'Phobject',
'PassphraseConduitAPIMethod' => 'ConduitAPIMethod',
'PassphraseController' => 'PhabricatorController',
'PassphraseCredential' => array(
'PassphraseDAO',
'PhabricatorApplicationTransactionInterface',
'PhabricatorPolicyInterface',
'PhabricatorFlaggableInterface',
'PhabricatorSubscribableInterface',
'PhabricatorDestructibleInterface',
'PhabricatorSpacesInterface',
),
'PassphraseCredentialAuthorPolicyRule' => 'PhabricatorPolicyRule',
'PassphraseCredentialConduitController' => 'PassphraseController',
'PassphraseCredentialControl' => 'AphrontFormControl',
'PassphraseCredentialCreateController' => 'PassphraseController',
'PassphraseCredentialDestroyController' => 'PassphraseController',
'PassphraseCredentialEditController' => 'PassphraseController',
'PassphraseCredentialListController' => 'PassphraseController',
'PassphraseCredentialLockController' => 'PassphraseController',
'PassphraseCredentialPHIDType' => 'PhabricatorPHIDType',
'PassphraseCredentialPublicController' => 'PassphraseController',
'PassphraseCredentialQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PassphraseCredentialRevealController' => 'PassphraseController',
'PassphraseCredentialSearchEngine' => 'PhabricatorApplicationSearchEngine',
'PassphraseCredentialTransaction' => 'PhabricatorApplicationTransaction',
'PassphraseCredentialTransactionEditor' => 'PhabricatorApplicationTransactionEditor',
'PassphraseCredentialTransactionQuery' => 'PhabricatorApplicationTransactionQuery',
'PassphraseCredentialType' => 'Phobject',
'PassphraseCredentialTypeTestCase' => 'PhabricatorTestCase',
'PassphraseCredentialViewController' => 'PassphraseController',
'PassphraseDAO' => 'PhabricatorLiskDAO',
'PassphraseDefaultEditCapability' => 'PhabricatorPolicyCapability',
'PassphraseDefaultViewCapability' => 'PhabricatorPolicyCapability',
'PassphraseNoteCredentialType' => 'PassphraseCredentialType',
'PassphrasePasswordCredentialType' => 'PassphraseCredentialType',
'PassphrasePasswordKey' => 'PassphraseAbstractKey',
'PassphraseQueryConduitAPIMethod' => 'PassphraseConduitAPIMethod',
'PassphraseRemarkupRule' => 'PhabricatorObjectRemarkupRule',
'PassphraseSSHGeneratedKeyCredentialType' => 'PassphraseSSHPrivateKeyCredentialType',
'PassphraseSSHKey' => 'PassphraseAbstractKey',
'PassphraseSSHPrivateKeyCredentialType' => 'PassphraseCredentialType',
'PassphraseSSHPrivateKeyFileCredentialType' => 'PassphraseSSHPrivateKeyCredentialType',
'PassphraseSSHPrivateKeyTextCredentialType' => 'PassphraseSSHPrivateKeyCredentialType',
'PassphraseSchemaSpec' => 'PhabricatorConfigSchemaSpec',
'PassphraseSearchIndexer' => 'PhabricatorSearchDocumentIndexer',
'PassphraseSecret' => 'PassphraseDAO',
'PasteConduitAPIMethod' => 'ConduitAPIMethod',
'PasteCreateConduitAPIMethod' => 'PasteConduitAPIMethod',
'PasteCreateMailReceiver' => 'PhabricatorMailReceiver',
'PasteDefaultEditCapability' => 'PhabricatorPolicyCapability',
'PasteDefaultViewCapability' => 'PhabricatorPolicyCapability',
'PasteEmbedView' => 'AphrontView',
'PasteInfoConduitAPIMethod' => 'PasteConduitAPIMethod',
'PasteMailReceiver' => 'PhabricatorObjectMailReceiver',
'PasteQueryConduitAPIMethod' => 'PasteConduitAPIMethod',
'PasteReplyHandler' => 'PhabricatorApplicationTransactionReplyHandler',
'PeopleBrowseUserDirectoryCapability' => 'PhabricatorPolicyCapability',
'PeopleCreateUsersCapability' => 'PhabricatorPolicyCapability',
'PeopleUserLogGarbageCollector' => 'PhabricatorGarbageCollector',
'Phabricator404Controller' => 'PhabricatorController',
'PhabricatorAWSConfigOptions' => 'PhabricatorApplicationConfigOptions',
'PhabricatorAccessControlTestCase' => 'PhabricatorTestCase',
'PhabricatorAccessLog' => 'Phobject',
'PhabricatorAccessLogConfigOptions' => 'PhabricatorApplicationConfigOptions',
'PhabricatorAccountSettingsPanel' => 'PhabricatorSettingsPanel',
'PhabricatorActionListView' => 'AphrontView',
'PhabricatorActionView' => 'AphrontView',
'PhabricatorActivitySettingsPanel' => 'PhabricatorSettingsPanel',
'PhabricatorAdministratorsPolicyRule' => 'PhabricatorPolicyRule',
'PhabricatorAjaxRequestExceptionHandler' => 'PhabricatorRequestExceptionHandler',
'PhabricatorAlmanacApplication' => 'PhabricatorApplication',
'PhabricatorAmazonAuthProvider' => 'PhabricatorOAuth2AuthProvider',
'PhabricatorAnchorView' => 'AphrontView',
'PhabricatorAphlictManagementDebugWorkflow' => 'PhabricatorAphlictManagementWorkflow',
'PhabricatorAphlictManagementRestartWorkflow' => 'PhabricatorAphlictManagementWorkflow',
'PhabricatorAphlictManagementStartWorkflow' => 'PhabricatorAphlictManagementWorkflow',
'PhabricatorAphlictManagementStatusWorkflow' => 'PhabricatorAphlictManagementWorkflow',
'PhabricatorAphlictManagementStopWorkflow' => 'PhabricatorAphlictManagementWorkflow',
'PhabricatorAphlictManagementWorkflow' => 'PhabricatorManagementWorkflow',
'PhabricatorAphlictSetupCheck' => 'PhabricatorSetupCheck',
'PhabricatorAphrontBarUIExample' => 'PhabricatorUIExample',
'PhabricatorAphrontViewTestCase' => 'PhabricatorTestCase',
'PhabricatorAppSearchEngine' => 'PhabricatorApplicationSearchEngine',
'PhabricatorApplication' => array(
'Phobject',
'PhabricatorPolicyInterface',
),
'PhabricatorApplicationApplicationPHIDType' => 'PhabricatorPHIDType',
'PhabricatorApplicationConfigOptions' => 'Phobject',
'PhabricatorApplicationConfigurationPanel' => 'Phobject',
'PhabricatorApplicationConfigurationPanelTestCase' => 'PhabricatorTestCase',
'PhabricatorApplicationDatasource' => 'PhabricatorTypeaheadDatasource',
'PhabricatorApplicationDetailViewController' => 'PhabricatorApplicationsController',
'PhabricatorApplicationEditController' => 'PhabricatorApplicationsController',
'PhabricatorApplicationEmailCommandsController' => 'PhabricatorApplicationsController',
'PhabricatorApplicationLaunchView' => 'AphrontTagView',
'PhabricatorApplicationPanelController' => 'PhabricatorApplicationsController',
'PhabricatorApplicationQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PhabricatorApplicationSearchController' => 'PhabricatorSearchBaseController',
'PhabricatorApplicationSearchEngine' => 'Phobject',
'PhabricatorApplicationSearchEngineTestCase' => 'PhabricatorTestCase',
'PhabricatorApplicationSearchResultView' => 'Phobject',
'PhabricatorApplicationStatusView' => 'AphrontView',
'PhabricatorApplicationTestCase' => 'PhabricatorTestCase',
'PhabricatorApplicationTransaction' => array(
'PhabricatorLiskDAO',
'PhabricatorPolicyInterface',
'PhabricatorDestructibleInterface',
),
'PhabricatorApplicationTransactionComment' => array(
'PhabricatorLiskDAO',
'PhabricatorMarkupInterface',
'PhabricatorPolicyInterface',
'PhabricatorDestructibleInterface',
),
'PhabricatorApplicationTransactionCommentEditController' => 'PhabricatorApplicationTransactionController',
'PhabricatorApplicationTransactionCommentEditor' => 'PhabricatorEditor',
'PhabricatorApplicationTransactionCommentHistoryController' => 'PhabricatorApplicationTransactionController',
'PhabricatorApplicationTransactionCommentQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PhabricatorApplicationTransactionCommentQuoteController' => 'PhabricatorApplicationTransactionController',
'PhabricatorApplicationTransactionCommentRawController' => 'PhabricatorApplicationTransactionController',
'PhabricatorApplicationTransactionCommentRemoveController' => 'PhabricatorApplicationTransactionController',
'PhabricatorApplicationTransactionCommentView' => 'AphrontView',
'PhabricatorApplicationTransactionController' => 'PhabricatorController',
'PhabricatorApplicationTransactionDetailController' => 'PhabricatorApplicationTransactionController',
'PhabricatorApplicationTransactionEditor' => 'PhabricatorEditor',
'PhabricatorApplicationTransactionFeedStory' => 'PhabricatorFeedStory',
'PhabricatorApplicationTransactionNoEffectException' => 'Exception',
'PhabricatorApplicationTransactionNoEffectResponse' => 'AphrontProxyResponse',
'PhabricatorApplicationTransactionPublishWorker' => 'PhabricatorWorker',
'PhabricatorApplicationTransactionQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PhabricatorApplicationTransactionReplyHandler' => 'PhabricatorMailReplyHandler',
'PhabricatorApplicationTransactionResponse' => 'AphrontProxyResponse',
'PhabricatorApplicationTransactionShowOlderController' => 'PhabricatorApplicationTransactionController',
'PhabricatorApplicationTransactionStructureException' => 'Exception',
'PhabricatorApplicationTransactionTemplatedCommentQuery' => 'PhabricatorApplicationTransactionCommentQuery',
'PhabricatorApplicationTransactionTextDiffDetailView' => 'AphrontView',
'PhabricatorApplicationTransactionTransactionPHIDType' => 'PhabricatorPHIDType',
'PhabricatorApplicationTransactionValidationError' => 'Phobject',
'PhabricatorApplicationTransactionValidationException' => 'Exception',
'PhabricatorApplicationTransactionValidationResponse' => 'AphrontProxyResponse',
'PhabricatorApplicationTransactionValueController' => 'PhabricatorApplicationTransactionController',
'PhabricatorApplicationTransactionView' => 'AphrontView',
'PhabricatorApplicationUninstallController' => 'PhabricatorApplicationsController',
'PhabricatorApplicationsApplication' => 'PhabricatorApplication',
'PhabricatorApplicationsController' => 'PhabricatorController',
'PhabricatorApplicationsListController' => 'PhabricatorApplicationsController',
'PhabricatorAsanaAuthProvider' => 'PhabricatorOAuth2AuthProvider',
'PhabricatorAsanaConfigOptions' => 'PhabricatorApplicationConfigOptions',
'PhabricatorAsanaSubtaskHasObjectEdgeType' => 'PhabricatorEdgeType',
'PhabricatorAsanaTaskHasObjectEdgeType' => 'PhabricatorEdgeType',
'PhabricatorAuditActionConstants' => 'Phobject',
'PhabricatorAuditAddCommentController' => 'PhabricatorAuditController',
'PhabricatorAuditApplication' => 'PhabricatorApplication',
'PhabricatorAuditCommentEditor' => 'PhabricatorEditor',
'PhabricatorAuditCommitStatusConstants' => 'Phobject',
'PhabricatorAuditController' => 'PhabricatorController',
'PhabricatorAuditEditor' => 'PhabricatorApplicationTransactionEditor',
'PhabricatorAuditInlineComment' => array(
'Phobject',
'PhabricatorInlineCommentInterface',
),
'PhabricatorAuditListController' => 'PhabricatorAuditController',
'PhabricatorAuditListView' => 'AphrontView',
'PhabricatorAuditMailReceiver' => 'PhabricatorObjectMailReceiver',
'PhabricatorAuditManagementDeleteWorkflow' => 'PhabricatorAuditManagementWorkflow',
'PhabricatorAuditManagementWorkflow' => 'PhabricatorManagementWorkflow',
'PhabricatorAuditPreviewController' => 'PhabricatorAuditController',
'PhabricatorAuditReplyHandler' => 'PhabricatorApplicationTransactionReplyHandler',
'PhabricatorAuditStatusConstants' => 'Phobject',
'PhabricatorAuditTransaction' => 'PhabricatorApplicationTransaction',
'PhabricatorAuditTransactionComment' => 'PhabricatorApplicationTransactionComment',
'PhabricatorAuditTransactionQuery' => 'PhabricatorApplicationTransactionQuery',
'PhabricatorAuditTransactionView' => 'PhabricatorApplicationTransactionView',
'PhabricatorAuthAccountView' => 'AphrontView',
'PhabricatorAuthApplication' => 'PhabricatorApplication',
'PhabricatorAuthAuthFactorPHIDType' => 'PhabricatorPHIDType',
'PhabricatorAuthAuthProviderPHIDType' => 'PhabricatorPHIDType',
'PhabricatorAuthConduitAPIMethod' => 'ConduitAPIMethod',
'PhabricatorAuthConfirmLinkController' => 'PhabricatorAuthController',
'PhabricatorAuthController' => 'PhabricatorController',
'PhabricatorAuthDAO' => 'PhabricatorLiskDAO',
'PhabricatorAuthDisableController' => 'PhabricatorAuthProviderConfigController',
'PhabricatorAuthDowngradeSessionController' => 'PhabricatorAuthController',
'PhabricatorAuthEditController' => 'PhabricatorAuthProviderConfigController',
'PhabricatorAuthFactor' => 'Phobject',
'PhabricatorAuthFactorConfig' => 'PhabricatorAuthDAO',
'PhabricatorAuthFactorTestCase' => 'PhabricatorTestCase',
'PhabricatorAuthFinishController' => 'PhabricatorAuthController',
'PhabricatorAuthHighSecurityRequiredException' => 'Exception',
'PhabricatorAuthHighSecurityToken' => 'Phobject',
'PhabricatorAuthInvite' => array(
'PhabricatorUserDAO',
'PhabricatorPolicyInterface',
),
'PhabricatorAuthInviteAccountException' => 'PhabricatorAuthInviteDialogException',
'PhabricatorAuthInviteAction' => 'Phobject',
'PhabricatorAuthInviteActionTableView' => 'AphrontView',
'PhabricatorAuthInviteController' => 'PhabricatorAuthController',
'PhabricatorAuthInviteDialogException' => 'PhabricatorAuthInviteException',
'PhabricatorAuthInviteEngine' => 'Phobject',
'PhabricatorAuthInviteException' => 'Exception',
'PhabricatorAuthInviteInvalidException' => 'PhabricatorAuthInviteDialogException',
'PhabricatorAuthInviteLoginException' => 'PhabricatorAuthInviteDialogException',
'PhabricatorAuthInvitePHIDType' => 'PhabricatorPHIDType',
'PhabricatorAuthInviteQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PhabricatorAuthInviteRegisteredException' => 'PhabricatorAuthInviteException',
'PhabricatorAuthInviteSearchEngine' => 'PhabricatorApplicationSearchEngine',
'PhabricatorAuthInviteTestCase' => 'PhabricatorTestCase',
'PhabricatorAuthInviteVerifyException' => 'PhabricatorAuthInviteDialogException',
'PhabricatorAuthInviteWorker' => 'PhabricatorWorker',
'PhabricatorAuthLinkController' => 'PhabricatorAuthController',
'PhabricatorAuthListController' => 'PhabricatorAuthProviderConfigController',
'PhabricatorAuthLoginController' => 'PhabricatorAuthController',
'PhabricatorAuthLoginHandler' => 'Phobject',
'PhabricatorAuthManagementCachePKCS8Workflow' => 'PhabricatorAuthManagementWorkflow',
'PhabricatorAuthManagementLDAPWorkflow' => 'PhabricatorAuthManagementWorkflow',
'PhabricatorAuthManagementListFactorsWorkflow' => 'PhabricatorAuthManagementWorkflow',
'PhabricatorAuthManagementRecoverWorkflow' => 'PhabricatorAuthManagementWorkflow',
'PhabricatorAuthManagementRefreshWorkflow' => 'PhabricatorAuthManagementWorkflow',
'PhabricatorAuthManagementStripWorkflow' => 'PhabricatorAuthManagementWorkflow',
'PhabricatorAuthManagementTrustOAuthClientWorkflow' => 'PhabricatorAuthManagementWorkflow',
+ 'PhabricatorAuthManagementUnlimitWorkflow' => 'PhabricatorAuthManagementWorkflow',
'PhabricatorAuthManagementUntrustOAuthClientWorkflow' => 'PhabricatorAuthManagementWorkflow',
'PhabricatorAuthManagementVerifyWorkflow' => 'PhabricatorAuthManagementWorkflow',
'PhabricatorAuthManagementWorkflow' => 'PhabricatorManagementWorkflow',
'PhabricatorAuthNeedsApprovalController' => 'PhabricatorAuthController',
'PhabricatorAuthNeedsMultiFactorController' => 'PhabricatorAuthController',
'PhabricatorAuthNewController' => 'PhabricatorAuthProviderConfigController',
'PhabricatorAuthOldOAuthRedirectController' => 'PhabricatorAuthController',
'PhabricatorAuthOneTimeLoginController' => 'PhabricatorAuthController',
'PhabricatorAuthProvider' => 'Phobject',
'PhabricatorAuthProviderConfig' => array(
'PhabricatorAuthDAO',
'PhabricatorApplicationTransactionInterface',
'PhabricatorPolicyInterface',
),
'PhabricatorAuthProviderConfigController' => 'PhabricatorAuthController',
'PhabricatorAuthProviderConfigEditor' => 'PhabricatorApplicationTransactionEditor',
'PhabricatorAuthProviderConfigQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PhabricatorAuthProviderConfigTransaction' => 'PhabricatorApplicationTransaction',
'PhabricatorAuthProviderConfigTransactionQuery' => 'PhabricatorApplicationTransactionQuery',
'PhabricatorAuthQueryPublicKeysConduitAPIMethod' => 'PhabricatorAuthConduitAPIMethod',
'PhabricatorAuthRegisterController' => 'PhabricatorAuthController',
'PhabricatorAuthRevokeTokenController' => 'PhabricatorAuthController',
'PhabricatorAuthSSHKey' => array(
'PhabricatorAuthDAO',
'PhabricatorPolicyInterface',
),
'PhabricatorAuthSSHKeyController' => 'PhabricatorAuthController',
'PhabricatorAuthSSHKeyDeleteController' => 'PhabricatorAuthSSHKeyController',
'PhabricatorAuthSSHKeyEditController' => 'PhabricatorAuthSSHKeyController',
'PhabricatorAuthSSHKeyGenerateController' => 'PhabricatorAuthSSHKeyController',
'PhabricatorAuthSSHKeyQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PhabricatorAuthSSHKeyTableView' => 'AphrontView',
'PhabricatorAuthSSHPublicKey' => 'Phobject',
'PhabricatorAuthSession' => array(
'PhabricatorAuthDAO',
'PhabricatorPolicyInterface',
),
'PhabricatorAuthSessionEngine' => 'Phobject',
'PhabricatorAuthSessionGarbageCollector' => 'PhabricatorGarbageCollector',
'PhabricatorAuthSessionQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PhabricatorAuthSetupCheck' => 'PhabricatorSetupCheck',
'PhabricatorAuthStartController' => 'PhabricatorAuthController',
'PhabricatorAuthTemporaryToken' => array(
'PhabricatorAuthDAO',
'PhabricatorPolicyInterface',
),
'PhabricatorAuthTemporaryTokenGarbageCollector' => 'PhabricatorGarbageCollector',
'PhabricatorAuthTemporaryTokenQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PhabricatorAuthTerminateSessionController' => 'PhabricatorAuthController',
'PhabricatorAuthTryFactorAction' => 'PhabricatorSystemAction',
'PhabricatorAuthUnlinkController' => 'PhabricatorAuthController',
'PhabricatorAuthValidateController' => 'PhabricatorAuthController',
'PhabricatorAuthenticationConfigOptions' => 'PhabricatorApplicationConfigOptions',
'PhabricatorAutoEventListener' => 'PhabricatorEventListener',
'PhabricatorBadgeHasRecipientEdgeType' => 'PhabricatorEdgeType',
'PhabricatorBadgesApplication' => 'PhabricatorApplication',
'PhabricatorBadgesBadge' => array(
'PhabricatorBadgesDAO',
'PhabricatorPolicyInterface',
'PhabricatorApplicationTransactionInterface',
'PhabricatorSubscribableInterface',
'PhabricatorTokenReceiverInterface',
'PhabricatorFlaggableInterface',
'PhabricatorDestructibleInterface',
),
'PhabricatorBadgesCommentController' => 'PhabricatorBadgesController',
'PhabricatorBadgesController' => 'PhabricatorController',
'PhabricatorBadgesCreateCapability' => 'PhabricatorPolicyCapability',
'PhabricatorBadgesDAO' => 'PhabricatorLiskDAO',
'PhabricatorBadgesDefaultEditCapability' => 'PhabricatorPolicyCapability',
'PhabricatorBadgesEditController' => 'PhabricatorBadgesController',
'PhabricatorBadgesEditIconController' => 'PhabricatorBadgesController',
'PhabricatorBadgesEditRecipientsController' => 'PhabricatorBadgesController',
'PhabricatorBadgesEditor' => 'PhabricatorApplicationTransactionEditor',
'PhabricatorBadgesIcon' => 'Phobject',
'PhabricatorBadgesListController' => 'PhabricatorBadgesController',
'PhabricatorBadgesMailReceiver' => 'PhabricatorObjectMailReceiver',
'PhabricatorBadgesPHIDType' => 'PhabricatorPHIDType',
'PhabricatorBadgesQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PhabricatorBadgesRecipientsListView' => 'AphrontTagView',
'PhabricatorBadgesRemoveRecipientsController' => 'PhabricatorBadgesController',
'PhabricatorBadgesReplyHandler' => 'PhabricatorApplicationTransactionReplyHandler',
'PhabricatorBadgesSchemaSpec' => 'PhabricatorConfigSchemaSpec',
'PhabricatorBadgesSearchEngine' => 'PhabricatorApplicationSearchEngine',
'PhabricatorBadgesTransaction' => 'PhabricatorApplicationTransaction',
'PhabricatorBadgesTransactionComment' => 'PhabricatorApplicationTransactionComment',
'PhabricatorBadgesTransactionQuery' => 'PhabricatorApplicationTransactionQuery',
'PhabricatorBadgesViewController' => 'PhabricatorBadgesController',
'PhabricatorBarePageUIExample' => 'PhabricatorUIExample',
'PhabricatorBarePageView' => 'AphrontPageView',
'PhabricatorBaseURISetupCheck' => 'PhabricatorSetupCheck',
'PhabricatorBcryptPasswordHasher' => 'PhabricatorPasswordHasher',
'PhabricatorBinariesSetupCheck' => 'PhabricatorSetupCheck',
'PhabricatorBitbucketAuthProvider' => 'PhabricatorOAuth1AuthProvider',
'PhabricatorBot' => 'PhabricatorDaemon',
'PhabricatorBotChannel' => 'PhabricatorBotTarget',
'PhabricatorBotDebugLogHandler' => 'PhabricatorBotHandler',
'PhabricatorBotFeedNotificationHandler' => 'PhabricatorBotHandler',
'PhabricatorBotFlowdockProtocolAdapter' => 'PhabricatorStreamingProtocolAdapter',
'PhabricatorBotHandler' => 'Phobject',
'PhabricatorBotLogHandler' => 'PhabricatorBotHandler',
'PhabricatorBotMacroHandler' => 'PhabricatorBotHandler',
'PhabricatorBotMessage' => 'Phobject',
'PhabricatorBotObjectNameHandler' => 'PhabricatorBotHandler',
'PhabricatorBotSymbolHandler' => 'PhabricatorBotHandler',
'PhabricatorBotTarget' => 'Phobject',
'PhabricatorBotUser' => 'PhabricatorBotTarget',
'PhabricatorBotWhatsNewHandler' => 'PhabricatorBotHandler',
'PhabricatorBritishEnglishTranslation' => 'PhutilTranslation',
'PhabricatorBuiltinPatchList' => 'PhabricatorSQLPatchList',
'PhabricatorBusyUIExample' => 'PhabricatorUIExample',
'PhabricatorCacheDAO' => 'PhabricatorLiskDAO',
'PhabricatorCacheGeneralGarbageCollector' => 'PhabricatorGarbageCollector',
'PhabricatorCacheManagementPurgeWorkflow' => 'PhabricatorCacheManagementWorkflow',
'PhabricatorCacheManagementWorkflow' => 'PhabricatorManagementWorkflow',
'PhabricatorCacheMarkupGarbageCollector' => 'PhabricatorGarbageCollector',
'PhabricatorCacheSchemaSpec' => 'PhabricatorConfigSchemaSpec',
'PhabricatorCacheSetupCheck' => 'PhabricatorSetupCheck',
'PhabricatorCacheSpec' => 'Phobject',
'PhabricatorCacheTTLGarbageCollector' => 'PhabricatorGarbageCollector',
'PhabricatorCaches' => 'Phobject',
'PhabricatorCachesTestCase' => 'PhabricatorTestCase',
'PhabricatorCalendarApplication' => 'PhabricatorApplication',
'PhabricatorCalendarController' => 'PhabricatorController',
'PhabricatorCalendarDAO' => 'PhabricatorLiskDAO',
'PhabricatorCalendarEvent' => array(
'PhabricatorCalendarDAO',
'PhabricatorPolicyInterface',
'PhabricatorProjectInterface',
'PhabricatorMarkupInterface',
'PhabricatorApplicationTransactionInterface',
'PhabricatorSubscribableInterface',
'PhabricatorTokenReceiverInterface',
'PhabricatorDestructibleInterface',
'PhabricatorMentionableInterface',
'PhabricatorFlaggableInterface',
'PhabricatorSpacesInterface',
),
'PhabricatorCalendarEventCancelController' => 'PhabricatorCalendarController',
'PhabricatorCalendarEventCommentController' => 'PhabricatorCalendarController',
'PhabricatorCalendarEventDragController' => 'PhabricatorCalendarController',
'PhabricatorCalendarEventEditController' => 'PhabricatorCalendarController',
'PhabricatorCalendarEventEditIconController' => 'PhabricatorCalendarController',
'PhabricatorCalendarEventEditor' => 'PhabricatorApplicationTransactionEditor',
'PhabricatorCalendarEventEmailCommand' => 'MetaMTAEmailTransactionCommand',
'PhabricatorCalendarEventInvitee' => array(
'PhabricatorCalendarDAO',
'PhabricatorPolicyInterface',
),
'PhabricatorCalendarEventInviteeQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PhabricatorCalendarEventJoinController' => 'PhabricatorCalendarController',
'PhabricatorCalendarEventListController' => 'PhabricatorCalendarController',
'PhabricatorCalendarEventMailReceiver' => 'PhabricatorObjectMailReceiver',
'PhabricatorCalendarEventPHIDType' => 'PhabricatorPHIDType',
'PhabricatorCalendarEventQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PhabricatorCalendarEventRSVPEmailCommand' => 'PhabricatorCalendarEventEmailCommand',
'PhabricatorCalendarEventSearchEngine' => 'PhabricatorApplicationSearchEngine',
'PhabricatorCalendarEventSearchIndexer' => 'PhabricatorSearchDocumentIndexer',
'PhabricatorCalendarEventTransaction' => 'PhabricatorApplicationTransaction',
'PhabricatorCalendarEventTransactionComment' => 'PhabricatorApplicationTransactionComment',
'PhabricatorCalendarEventTransactionQuery' => 'PhabricatorApplicationTransactionQuery',
'PhabricatorCalendarEventViewController' => 'PhabricatorCalendarController',
'PhabricatorCalendarHoliday' => 'PhabricatorCalendarDAO',
'PhabricatorCalendarHolidayTestCase' => 'PhabricatorTestCase',
'PhabricatorCalendarIcon' => 'Phobject',
'PhabricatorCalendarRemarkupRule' => 'PhabricatorObjectRemarkupRule',
'PhabricatorCalendarReplyHandler' => 'PhabricatorApplicationTransactionReplyHandler',
'PhabricatorCalendarSchemaSpec' => 'PhabricatorConfigSchemaSpec',
'PhabricatorCampfireProtocolAdapter' => 'PhabricatorStreamingProtocolAdapter',
'PhabricatorCelerityApplication' => 'PhabricatorApplication',
'PhabricatorCelerityTestCase' => 'PhabricatorTestCase',
'PhabricatorChangeParserTestCase' => 'PhabricatorWorkingCopyTestCase',
'PhabricatorChangesetResponse' => 'AphrontProxyResponse',
'PhabricatorChatLogApplication' => 'PhabricatorApplication',
'PhabricatorChatLogChannel' => array(
'PhabricatorChatLogDAO',
'PhabricatorPolicyInterface',
),
'PhabricatorChatLogChannelListController' => 'PhabricatorChatLogController',
'PhabricatorChatLogChannelLogController' => 'PhabricatorChatLogController',
'PhabricatorChatLogChannelQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PhabricatorChatLogController' => 'PhabricatorController',
'PhabricatorChatLogDAO' => 'PhabricatorLiskDAO',
'PhabricatorChatLogEvent' => array(
'PhabricatorChatLogDAO',
'PhabricatorPolicyInterface',
),
'PhabricatorChatLogQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PhabricatorChunkedFileStorageEngine' => 'PhabricatorFileStorageEngine',
'PhabricatorClusterConfigOptions' => 'PhabricatorApplicationConfigOptions',
'PhabricatorCommitBranchesField' => 'PhabricatorCommitCustomField',
'PhabricatorCommitCustomField' => 'PhabricatorCustomField',
'PhabricatorCommitMergedCommitsField' => 'PhabricatorCommitCustomField',
'PhabricatorCommitRepositoryField' => 'PhabricatorCommitCustomField',
'PhabricatorCommitSearchEngine' => 'PhabricatorApplicationSearchEngine',
'PhabricatorCommitTagsField' => 'PhabricatorCommitCustomField',
'PhabricatorCommonPasswords' => 'Phobject',
'PhabricatorConduitAPIController' => 'PhabricatorConduitController',
'PhabricatorConduitApplication' => 'PhabricatorApplication',
'PhabricatorConduitCertificateSettingsPanel' => 'PhabricatorSettingsPanel',
'PhabricatorConduitCertificateToken' => 'PhabricatorConduitDAO',
'PhabricatorConduitConnectionLog' => 'PhabricatorConduitDAO',
'PhabricatorConduitConsoleController' => 'PhabricatorConduitController',
'PhabricatorConduitController' => 'PhabricatorController',
'PhabricatorConduitDAO' => 'PhabricatorLiskDAO',
'PhabricatorConduitListController' => 'PhabricatorConduitController',
'PhabricatorConduitLogController' => 'PhabricatorConduitController',
'PhabricatorConduitLogQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PhabricatorConduitMethodCallLog' => array(
'PhabricatorConduitDAO',
'PhabricatorPolicyInterface',
),
'PhabricatorConduitMethodQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PhabricatorConduitRequestExceptionHandler' => 'PhabricatorRequestExceptionHandler',
'PhabricatorConduitSearchEngine' => 'PhabricatorApplicationSearchEngine',
'PhabricatorConduitTestCase' => 'PhabricatorTestCase',
'PhabricatorConduitToken' => array(
'PhabricatorConduitDAO',
'PhabricatorPolicyInterface',
),
'PhabricatorConduitTokenController' => 'PhabricatorConduitController',
'PhabricatorConduitTokenEditController' => 'PhabricatorConduitController',
'PhabricatorConduitTokenHandshakeController' => 'PhabricatorConduitController',
'PhabricatorConduitTokenQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PhabricatorConduitTokenTerminateController' => 'PhabricatorConduitController',
'PhabricatorConduitTokensSettingsPanel' => 'PhabricatorSettingsPanel',
'PhabricatorConfigAllController' => 'PhabricatorConfigController',
'PhabricatorConfigApplication' => 'PhabricatorApplication',
'PhabricatorConfigCacheController' => 'PhabricatorConfigController',
'PhabricatorConfigColumnSchema' => 'PhabricatorConfigStorageSchema',
'PhabricatorConfigConfigPHIDType' => 'PhabricatorPHIDType',
'PhabricatorConfigController' => 'PhabricatorController',
'PhabricatorConfigCoreSchemaSpec' => 'PhabricatorConfigSchemaSpec',
'PhabricatorConfigDatabaseController' => 'PhabricatorConfigController',
'PhabricatorConfigDatabaseIssueController' => 'PhabricatorConfigDatabaseController',
'PhabricatorConfigDatabaseSchema' => 'PhabricatorConfigStorageSchema',
'PhabricatorConfigDatabaseSource' => 'PhabricatorConfigProxySource',
'PhabricatorConfigDatabaseStatusController' => 'PhabricatorConfigDatabaseController',
'PhabricatorConfigDefaultSource' => 'PhabricatorConfigProxySource',
'PhabricatorConfigDictionarySource' => 'PhabricatorConfigSource',
'PhabricatorConfigEdgeModule' => 'PhabricatorConfigModule',
'PhabricatorConfigEditController' => 'PhabricatorConfigController',
'PhabricatorConfigEditor' => 'PhabricatorApplicationTransactionEditor',
'PhabricatorConfigEntry' => array(
'PhabricatorConfigEntryDAO',
'PhabricatorApplicationTransactionInterface',
'PhabricatorPolicyInterface',
),
'PhabricatorConfigEntryDAO' => 'PhabricatorLiskDAO',
'PhabricatorConfigEntryQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PhabricatorConfigFileSource' => 'PhabricatorConfigProxySource',
'PhabricatorConfigGroupController' => 'PhabricatorConfigController',
'PhabricatorConfigHistoryController' => 'PhabricatorConfigController',
'PhabricatorConfigIgnoreController' => 'PhabricatorConfigController',
'PhabricatorConfigIssueListController' => 'PhabricatorConfigController',
'PhabricatorConfigIssueViewController' => 'PhabricatorConfigController',
'PhabricatorConfigJSON' => 'Phobject',
'PhabricatorConfigJSONOptionType' => 'PhabricatorConfigOptionType',
'PhabricatorConfigKeySchema' => 'PhabricatorConfigStorageSchema',
'PhabricatorConfigListController' => 'PhabricatorConfigController',
'PhabricatorConfigLocalSource' => 'PhabricatorConfigProxySource',
'PhabricatorConfigManagementDeleteWorkflow' => 'PhabricatorConfigManagementWorkflow',
'PhabricatorConfigManagementGetWorkflow' => 'PhabricatorConfigManagementWorkflow',
'PhabricatorConfigManagementListWorkflow' => 'PhabricatorConfigManagementWorkflow',
'PhabricatorConfigManagementMigrateWorkflow' => 'PhabricatorConfigManagementWorkflow',
'PhabricatorConfigManagementSetWorkflow' => 'PhabricatorConfigManagementWorkflow',
'PhabricatorConfigManagementWorkflow' => 'PhabricatorManagementWorkflow',
'PhabricatorConfigModule' => 'Phobject',
'PhabricatorConfigModuleController' => 'PhabricatorConfigController',
'PhabricatorConfigOption' => array(
'Phobject',
'PhabricatorMarkupInterface',
),
'PhabricatorConfigOptionType' => 'Phobject',
'PhabricatorConfigPHIDModule' => 'PhabricatorConfigModule',
'PhabricatorConfigProxySource' => 'PhabricatorConfigSource',
'PhabricatorConfigPurgeCacheController' => 'PhabricatorConfigController',
'PhabricatorConfigRequestExceptionHandlerModule' => 'PhabricatorConfigModule',
'PhabricatorConfigResponse' => 'AphrontStandaloneHTMLResponse',
'PhabricatorConfigSchemaQuery' => 'Phobject',
'PhabricatorConfigSchemaSpec' => 'Phobject',
'PhabricatorConfigServerSchema' => 'PhabricatorConfigStorageSchema',
'PhabricatorConfigSiteModule' => 'PhabricatorConfigModule',
'PhabricatorConfigSiteSource' => 'PhabricatorConfigProxySource',
'PhabricatorConfigSource' => 'Phobject',
'PhabricatorConfigStackSource' => 'PhabricatorConfigSource',
'PhabricatorConfigStorageSchema' => 'Phobject',
'PhabricatorConfigTableSchema' => 'PhabricatorConfigStorageSchema',
'PhabricatorConfigTransaction' => 'PhabricatorApplicationTransaction',
'PhabricatorConfigTransactionQuery' => 'PhabricatorApplicationTransactionQuery',
'PhabricatorConfigValidationException' => 'Exception',
'PhabricatorConfigWelcomeController' => 'PhabricatorConfigController',
'PhabricatorConpherenceApplication' => 'PhabricatorApplication',
'PhabricatorConpherencePreferencesSettingsPanel' => 'PhabricatorSettingsPanel',
'PhabricatorConpherenceThreadPHIDType' => 'PhabricatorPHIDType',
'PhabricatorConsoleApplication' => 'PhabricatorApplication',
'PhabricatorContentSource' => 'Phobject',
'PhabricatorContentSourceView' => 'AphrontView',
'PhabricatorContributedToObjectEdgeType' => 'PhabricatorEdgeType',
'PhabricatorController' => 'AphrontController',
'PhabricatorCookies' => 'Phobject',
'PhabricatorCoreConfigOptions' => 'PhabricatorApplicationConfigOptions',
'PhabricatorCountdown' => array(
'PhabricatorCountdownDAO',
'PhabricatorPolicyInterface',
'PhabricatorFlaggableInterface',
'PhabricatorSubscribableInterface',
'PhabricatorApplicationTransactionInterface',
'PhabricatorTokenReceiverInterface',
'PhabricatorSpacesInterface',
'PhabricatorProjectInterface',
),
'PhabricatorCountdownApplication' => 'PhabricatorApplication',
'PhabricatorCountdownCommentController' => 'PhabricatorCountdownController',
'PhabricatorCountdownController' => 'PhabricatorController',
'PhabricatorCountdownCountdownPHIDType' => 'PhabricatorPHIDType',
'PhabricatorCountdownDAO' => 'PhabricatorLiskDAO',
'PhabricatorCountdownDefaultEditCapability' => 'PhabricatorPolicyCapability',
'PhabricatorCountdownDefaultViewCapability' => 'PhabricatorPolicyCapability',
'PhabricatorCountdownDeleteController' => 'PhabricatorCountdownController',
'PhabricatorCountdownEditController' => 'PhabricatorCountdownController',
'PhabricatorCountdownEditor' => 'PhabricatorApplicationTransactionEditor',
'PhabricatorCountdownListController' => 'PhabricatorCountdownController',
'PhabricatorCountdownMailReceiver' => 'PhabricatorObjectMailReceiver',
'PhabricatorCountdownQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PhabricatorCountdownRemarkupRule' => 'PhabricatorObjectRemarkupRule',
'PhabricatorCountdownReplyHandler' => 'PhabricatorApplicationTransactionReplyHandler',
'PhabricatorCountdownSchemaSpec' => 'PhabricatorConfigSchemaSpec',
'PhabricatorCountdownSearchEngine' => 'PhabricatorApplicationSearchEngine',
'PhabricatorCountdownTransaction' => 'PhabricatorApplicationTransaction',
'PhabricatorCountdownTransactionComment' => 'PhabricatorApplicationTransactionComment',
'PhabricatorCountdownTransactionQuery' => 'PhabricatorApplicationTransactionQuery',
'PhabricatorCountdownView' => 'AphrontTagView',
'PhabricatorCountdownViewController' => 'PhabricatorCountdownController',
'PhabricatorCredentialsUsedByObjectEdgeType' => 'PhabricatorEdgeType',
'PhabricatorCursorPagedPolicyAwareQuery' => 'PhabricatorPolicyAwareQuery',
'PhabricatorCustomField' => 'Phobject',
'PhabricatorCustomFieldAttachment' => 'Phobject',
'PhabricatorCustomFieldConfigOptionType' => 'PhabricatorConfigOptionType',
'PhabricatorCustomFieldDataNotAvailableException' => 'Exception',
'PhabricatorCustomFieldHeraldField' => 'HeraldField',
'PhabricatorCustomFieldHeraldFieldGroup' => 'HeraldFieldGroup',
'PhabricatorCustomFieldImplementationIncompleteException' => 'Exception',
'PhabricatorCustomFieldIndexStorage' => 'PhabricatorLiskDAO',
'PhabricatorCustomFieldList' => 'Phobject',
'PhabricatorCustomFieldMonogramParser' => 'Phobject',
'PhabricatorCustomFieldNotAttachedException' => 'Exception',
'PhabricatorCustomFieldNotProxyException' => 'Exception',
'PhabricatorCustomFieldNumericIndexStorage' => 'PhabricatorCustomFieldIndexStorage',
'PhabricatorCustomFieldStorage' => 'PhabricatorLiskDAO',
'PhabricatorCustomFieldStringIndexStorage' => 'PhabricatorCustomFieldIndexStorage',
'PhabricatorCustomHeaderConfigType' => 'PhabricatorConfigOptionType',
'PhabricatorDaemon' => 'PhutilDaemon',
'PhabricatorDaemonBulkJobListController' => 'PhabricatorDaemonController',
'PhabricatorDaemonBulkJobMonitorController' => 'PhabricatorDaemonController',
'PhabricatorDaemonBulkJobViewController' => 'PhabricatorDaemonController',
'PhabricatorDaemonConsoleController' => 'PhabricatorDaemonController',
'PhabricatorDaemonController' => 'PhabricatorController',
'PhabricatorDaemonDAO' => 'PhabricatorLiskDAO',
'PhabricatorDaemonEventListener' => 'PhabricatorEventListener',
'PhabricatorDaemonLog' => array(
'PhabricatorDaemonDAO',
'PhabricatorPolicyInterface',
),
'PhabricatorDaemonLogEvent' => 'PhabricatorDaemonDAO',
'PhabricatorDaemonLogEventGarbageCollector' => 'PhabricatorGarbageCollector',
'PhabricatorDaemonLogEventViewController' => 'PhabricatorDaemonController',
'PhabricatorDaemonLogEventsView' => 'AphrontView',
'PhabricatorDaemonLogGarbageCollector' => 'PhabricatorGarbageCollector',
'PhabricatorDaemonLogListController' => 'PhabricatorDaemonController',
'PhabricatorDaemonLogListView' => 'AphrontView',
'PhabricatorDaemonLogQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PhabricatorDaemonLogViewController' => 'PhabricatorDaemonController',
'PhabricatorDaemonManagementDebugWorkflow' => 'PhabricatorDaemonManagementWorkflow',
'PhabricatorDaemonManagementLaunchWorkflow' => 'PhabricatorDaemonManagementWorkflow',
'PhabricatorDaemonManagementListWorkflow' => 'PhabricatorDaemonManagementWorkflow',
'PhabricatorDaemonManagementLogWorkflow' => 'PhabricatorDaemonManagementWorkflow',
'PhabricatorDaemonManagementReloadWorkflow' => 'PhabricatorDaemonManagementWorkflow',
'PhabricatorDaemonManagementRestartWorkflow' => 'PhabricatorDaemonManagementWorkflow',
'PhabricatorDaemonManagementStartWorkflow' => 'PhabricatorDaemonManagementWorkflow',
'PhabricatorDaemonManagementStatusWorkflow' => 'PhabricatorDaemonManagementWorkflow',
'PhabricatorDaemonManagementStopWorkflow' => 'PhabricatorDaemonManagementWorkflow',
'PhabricatorDaemonManagementWorkflow' => 'PhabricatorManagementWorkflow',
'PhabricatorDaemonReference' => 'Phobject',
'PhabricatorDaemonTaskGarbageCollector' => 'PhabricatorGarbageCollector',
'PhabricatorDaemonTasksTableView' => 'AphrontView',
'PhabricatorDaemonsApplication' => 'PhabricatorApplication',
'PhabricatorDaemonsSetupCheck' => 'PhabricatorSetupCheck',
'PhabricatorDailyRoutineTriggerClock' => 'PhabricatorTriggerClock',
'PhabricatorDashboard' => array(
'PhabricatorDashboardDAO',
'PhabricatorApplicationTransactionInterface',
'PhabricatorPolicyInterface',
'PhabricatorFlaggableInterface',
'PhabricatorDestructibleInterface',
'PhabricatorProjectInterface',
),
'PhabricatorDashboardAddPanelController' => 'PhabricatorDashboardController',
'PhabricatorDashboardApplication' => 'PhabricatorApplication',
'PhabricatorDashboardController' => 'PhabricatorController',
'PhabricatorDashboardCopyController' => 'PhabricatorDashboardController',
'PhabricatorDashboardDAO' => 'PhabricatorLiskDAO',
'PhabricatorDashboardDashboardHasPanelEdgeType' => 'PhabricatorEdgeType',
'PhabricatorDashboardDashboardPHIDType' => 'PhabricatorPHIDType',
'PhabricatorDashboardEditController' => 'PhabricatorDashboardController',
'PhabricatorDashboardHistoryController' => 'PhabricatorDashboardController',
'PhabricatorDashboardInstall' => 'PhabricatorDashboardDAO',
'PhabricatorDashboardInstallController' => 'PhabricatorDashboardController',
'PhabricatorDashboardLayoutConfig' => 'Phobject',
'PhabricatorDashboardListController' => 'PhabricatorDashboardController',
'PhabricatorDashboardManageController' => 'PhabricatorDashboardController',
'PhabricatorDashboardMovePanelController' => 'PhabricatorDashboardController',
'PhabricatorDashboardPanel' => array(
'PhabricatorDashboardDAO',
'PhabricatorApplicationTransactionInterface',
'PhabricatorPolicyInterface',
'PhabricatorCustomFieldInterface',
'PhabricatorFlaggableInterface',
'PhabricatorProjectInterface',
'PhabricatorDestructibleInterface',
),
'PhabricatorDashboardPanelArchiveController' => 'PhabricatorDashboardController',
'PhabricatorDashboardPanelCoreCustomField' => array(
'PhabricatorDashboardPanelCustomField',
'PhabricatorStandardCustomFieldInterface',
),
'PhabricatorDashboardPanelCustomField' => 'PhabricatorCustomField',
'PhabricatorDashboardPanelEditController' => 'PhabricatorDashboardController',
'PhabricatorDashboardPanelHasDashboardEdgeType' => 'PhabricatorEdgeType',
'PhabricatorDashboardPanelListController' => 'PhabricatorDashboardController',
'PhabricatorDashboardPanelPHIDType' => 'PhabricatorPHIDType',
'PhabricatorDashboardPanelQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PhabricatorDashboardPanelRenderController' => 'PhabricatorDashboardController',
'PhabricatorDashboardPanelRenderingEngine' => 'Phobject',
'PhabricatorDashboardPanelSearchApplicationCustomField' => 'PhabricatorStandardCustomField',
'PhabricatorDashboardPanelSearchEngine' => 'PhabricatorApplicationSearchEngine',
'PhabricatorDashboardPanelSearchQueryCustomField' => 'PhabricatorStandardCustomField',
'PhabricatorDashboardPanelTabsCustomField' => 'PhabricatorStandardCustomField',
'PhabricatorDashboardPanelTransaction' => 'PhabricatorApplicationTransaction',
'PhabricatorDashboardPanelTransactionEditor' => 'PhabricatorApplicationTransactionEditor',
'PhabricatorDashboardPanelTransactionQuery' => 'PhabricatorApplicationTransactionQuery',
'PhabricatorDashboardPanelType' => 'Phobject',
'PhabricatorDashboardPanelViewController' => 'PhabricatorDashboardController',
'PhabricatorDashboardQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PhabricatorDashboardQueryPanelType' => 'PhabricatorDashboardPanelType',
'PhabricatorDashboardRemarkupRule' => 'PhabricatorObjectRemarkupRule',
'PhabricatorDashboardRemovePanelController' => 'PhabricatorDashboardController',
'PhabricatorDashboardRenderingEngine' => 'Phobject',
'PhabricatorDashboardSchemaSpec' => 'PhabricatorConfigSchemaSpec',
'PhabricatorDashboardSearchEngine' => 'PhabricatorApplicationSearchEngine',
'PhabricatorDashboardTabsPanelType' => 'PhabricatorDashboardPanelType',
'PhabricatorDashboardTextPanelType' => 'PhabricatorDashboardPanelType',
'PhabricatorDashboardTransaction' => 'PhabricatorApplicationTransaction',
'PhabricatorDashboardTransactionEditor' => 'PhabricatorApplicationTransactionEditor',
'PhabricatorDashboardTransactionQuery' => 'PhabricatorApplicationTransactionQuery',
'PhabricatorDashboardUninstallController' => 'PhabricatorDashboardController',
'PhabricatorDashboardViewController' => 'PhabricatorDashboardController',
'PhabricatorDataCacheSpec' => 'PhabricatorCacheSpec',
'PhabricatorDataNotAttachedException' => 'Exception',
'PhabricatorDatabaseSetupCheck' => 'PhabricatorSetupCheck',
'PhabricatorDateTimeSettingsPanel' => 'PhabricatorSettingsPanel',
'PhabricatorDebugController' => 'PhabricatorController',
'PhabricatorDefaultRequestExceptionHandler' => 'PhabricatorRequestExceptionHandler',
'PhabricatorDesktopNotificationsSettingsPanel' => 'PhabricatorSettingsPanel',
'PhabricatorDestructionEngine' => 'Phobject',
'PhabricatorDeveloperConfigOptions' => 'PhabricatorApplicationConfigOptions',
'PhabricatorDeveloperPreferencesSettingsPanel' => 'PhabricatorSettingsPanel',
'PhabricatorDiffInlineCommentQuery' => 'PhabricatorApplicationTransactionCommentQuery',
'PhabricatorDiffPreferencesSettingsPanel' => 'PhabricatorSettingsPanel',
'PhabricatorDifferenceEngine' => 'Phobject',
'PhabricatorDifferentialApplication' => 'PhabricatorApplication',
'PhabricatorDifferentialConfigOptions' => 'PhabricatorApplicationConfigOptions',
'PhabricatorDifferentialRevisionTestDataGenerator' => 'PhabricatorTestDataGenerator',
'PhabricatorDiffusionApplication' => 'PhabricatorApplication',
'PhabricatorDiffusionConfigOptions' => 'PhabricatorApplicationConfigOptions',
'PhabricatorDisabledUserController' => 'PhabricatorAuthController',
'PhabricatorDisplayPreferencesSettingsPanel' => 'PhabricatorSettingsPanel',
'PhabricatorDisqusAuthProvider' => 'PhabricatorOAuth2AuthProvider',
'PhabricatorDisqusConfigOptions' => 'PhabricatorApplicationConfigOptions',
'PhabricatorDivinerApplication' => 'PhabricatorApplication',
'PhabricatorDoorkeeperApplication' => 'PhabricatorApplication',
'PhabricatorDraft' => 'PhabricatorDraftDAO',
'PhabricatorDraftDAO' => 'PhabricatorLiskDAO',
'PhabricatorDrydockApplication' => 'PhabricatorApplication',
'PhabricatorEdgeConfig' => 'PhabricatorEdgeConstants',
'PhabricatorEdgeConstants' => 'Phobject',
'PhabricatorEdgeCycleException' => 'Exception',
'PhabricatorEdgeEditor' => 'Phobject',
'PhabricatorEdgeGraph' => 'AbstractDirectedGraph',
'PhabricatorEdgeQuery' => 'PhabricatorQuery',
'PhabricatorEdgeTestCase' => 'PhabricatorTestCase',
'PhabricatorEdgeType' => 'Phobject',
'PhabricatorEdgeTypeTestCase' => 'PhabricatorTestCase',
'PhabricatorEditor' => 'Phobject',
'PhabricatorElasticSearchEngine' => 'PhabricatorSearchEngine',
'PhabricatorElasticSearchSetupCheck' => 'PhabricatorSetupCheck',
'PhabricatorEmailAddressesSettingsPanel' => 'PhabricatorSettingsPanel',
'PhabricatorEmailFormatSettingsPanel' => 'PhabricatorSettingsPanel',
'PhabricatorEmailLoginController' => 'PhabricatorAuthController',
'PhabricatorEmailPreferencesSettingsPanel' => 'PhabricatorSettingsPanel',
'PhabricatorEmailVerificationController' => 'PhabricatorAuthController',
'PhabricatorEmbedFileRemarkupRule' => 'PhabricatorObjectRemarkupRule',
'PhabricatorEmojiRemarkupRule' => 'PhutilRemarkupRule',
'PhabricatorEmptyQueryException' => 'Exception',
'PhabricatorEnv' => 'Phobject',
'PhabricatorEnvTestCase' => 'PhabricatorTestCase',
'PhabricatorEvent' => 'PhutilEvent',
'PhabricatorEventEngine' => 'Phobject',
'PhabricatorEventListener' => 'PhutilEventListener',
'PhabricatorEventType' => 'PhutilEventType',
'PhabricatorExampleEventListener' => 'PhabricatorEventListener',
'PhabricatorExtendingPhabricatorConfigOptions' => 'PhabricatorApplicationConfigOptions',
'PhabricatorExtensionsSetupCheck' => 'PhabricatorSetupCheck',
'PhabricatorExternalAccount' => array(
'PhabricatorUserDAO',
'PhabricatorPolicyInterface',
),
'PhabricatorExternalAccountQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PhabricatorExternalAccountsSettingsPanel' => 'PhabricatorSettingsPanel',
'PhabricatorExtraConfigSetupCheck' => 'PhabricatorSetupCheck',
'PhabricatorFacebookAuthProvider' => 'PhabricatorOAuth2AuthProvider',
'PhabricatorFactAggregate' => 'PhabricatorFactDAO',
'PhabricatorFactApplication' => 'PhabricatorApplication',
'PhabricatorFactChartController' => 'PhabricatorFactController',
'PhabricatorFactController' => 'PhabricatorController',
'PhabricatorFactCountEngine' => 'PhabricatorFactEngine',
'PhabricatorFactCursor' => 'PhabricatorFactDAO',
'PhabricatorFactDAO' => 'PhabricatorLiskDAO',
'PhabricatorFactDaemon' => 'PhabricatorDaemon',
'PhabricatorFactEngine' => 'Phobject',
'PhabricatorFactEngineTestCase' => 'PhabricatorTestCase',
'PhabricatorFactHomeController' => 'PhabricatorFactController',
'PhabricatorFactLastUpdatedEngine' => 'PhabricatorFactEngine',
'PhabricatorFactManagementAnalyzeWorkflow' => 'PhabricatorFactManagementWorkflow',
'PhabricatorFactManagementCursorsWorkflow' => 'PhabricatorFactManagementWorkflow',
'PhabricatorFactManagementDestroyWorkflow' => 'PhabricatorFactManagementWorkflow',
'PhabricatorFactManagementListWorkflow' => 'PhabricatorFactManagementWorkflow',
'PhabricatorFactManagementStatusWorkflow' => 'PhabricatorFactManagementWorkflow',
'PhabricatorFactManagementWorkflow' => 'PhabricatorManagementWorkflow',
'PhabricatorFactRaw' => 'PhabricatorFactDAO',
'PhabricatorFactSimpleSpec' => 'PhabricatorFactSpec',
'PhabricatorFactSpec' => 'Phobject',
'PhabricatorFactUpdateIterator' => 'PhutilBufferedIterator',
'PhabricatorFeedApplication' => 'PhabricatorApplication',
'PhabricatorFeedBuilder' => 'Phobject',
'PhabricatorFeedConfigOptions' => 'PhabricatorApplicationConfigOptions',
'PhabricatorFeedController' => 'PhabricatorController',
'PhabricatorFeedDAO' => 'PhabricatorLiskDAO',
'PhabricatorFeedDetailController' => 'PhabricatorFeedController',
'PhabricatorFeedListController' => 'PhabricatorFeedController',
'PhabricatorFeedManagementRepublishWorkflow' => 'PhabricatorFeedManagementWorkflow',
'PhabricatorFeedManagementWorkflow' => 'PhabricatorManagementWorkflow',
'PhabricatorFeedQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PhabricatorFeedSearchEngine' => 'PhabricatorApplicationSearchEngine',
'PhabricatorFeedStory' => array(
'Phobject',
'PhabricatorPolicyInterface',
'PhabricatorMarkupInterface',
),
'PhabricatorFeedStoryData' => 'PhabricatorFeedDAO',
'PhabricatorFeedStoryNotification' => 'PhabricatorFeedDAO',
'PhabricatorFeedStoryPublisher' => 'Phobject',
'PhabricatorFeedStoryReference' => 'PhabricatorFeedDAO',
'PhabricatorFile' => array(
'PhabricatorFileDAO',
'PhabricatorApplicationTransactionInterface',
'PhabricatorTokenReceiverInterface',
'PhabricatorSubscribableInterface',
'PhabricatorFlaggableInterface',
'PhabricatorPolicyInterface',
'PhabricatorDestructibleInterface',
),
'PhabricatorFileBundleLoader' => 'Phobject',
'PhabricatorFileChunk' => array(
'PhabricatorFileDAO',
'PhabricatorPolicyInterface',
'PhabricatorDestructibleInterface',
),
'PhabricatorFileChunkIterator' => array(
'Phobject',
'Iterator',
),
'PhabricatorFileChunkQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PhabricatorFileCommentController' => 'PhabricatorFileController',
'PhabricatorFileComposeController' => 'PhabricatorFileController',
'PhabricatorFileController' => 'PhabricatorController',
'PhabricatorFileDAO' => 'PhabricatorLiskDAO',
'PhabricatorFileDataController' => 'PhabricatorFileController',
'PhabricatorFileDeleteController' => 'PhabricatorFileController',
'PhabricatorFileDropUploadController' => 'PhabricatorFileController',
'PhabricatorFileEditController' => 'PhabricatorFileController',
'PhabricatorFileEditor' => 'PhabricatorApplicationTransactionEditor',
'PhabricatorFileFilePHIDType' => 'PhabricatorPHIDType',
'PhabricatorFileHasObjectEdgeType' => 'PhabricatorEdgeType',
'PhabricatorFileImageMacro' => array(
'PhabricatorFileDAO',
'PhabricatorSubscribableInterface',
'PhabricatorApplicationTransactionInterface',
'PhabricatorFlaggableInterface',
'PhabricatorTokenReceiverInterface',
'PhabricatorPolicyInterface',
),
'PhabricatorFileImageTransform' => 'PhabricatorFileTransform',
'PhabricatorFileInfoController' => 'PhabricatorFileController',
'PhabricatorFileLinkListView' => 'AphrontView',
'PhabricatorFileLinkView' => 'AphrontView',
'PhabricatorFileListController' => 'PhabricatorFileController',
'PhabricatorFileQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PhabricatorFileSchemaSpec' => 'PhabricatorConfigSchemaSpec',
'PhabricatorFileSearchEngine' => 'PhabricatorApplicationSearchEngine',
'PhabricatorFileStorageBlob' => 'PhabricatorFileDAO',
'PhabricatorFileStorageConfigurationException' => 'Exception',
'PhabricatorFileStorageEngine' => 'Phobject',
'PhabricatorFileStorageEngineTestCase' => 'PhabricatorTestCase',
'PhabricatorFileTemporaryGarbageCollector' => 'PhabricatorGarbageCollector',
'PhabricatorFileTestCase' => 'PhabricatorTestCase',
'PhabricatorFileTestDataGenerator' => 'PhabricatorTestDataGenerator',
'PhabricatorFileThumbnailTransform' => 'PhabricatorFileImageTransform',
'PhabricatorFileTransaction' => 'PhabricatorApplicationTransaction',
'PhabricatorFileTransactionComment' => 'PhabricatorApplicationTransactionComment',
'PhabricatorFileTransactionQuery' => 'PhabricatorApplicationTransactionQuery',
'PhabricatorFileTransform' => 'Phobject',
'PhabricatorFileTransformController' => 'PhabricatorFileController',
'PhabricatorFileTransformListController' => 'PhabricatorFileController',
'PhabricatorFileTransformTestCase' => 'PhabricatorTestCase',
'PhabricatorFileUploadController' => 'PhabricatorFileController',
'PhabricatorFileUploadDialogController' => 'PhabricatorFileController',
'PhabricatorFileUploadException' => 'Exception',
'PhabricatorFileinfoSetupCheck' => 'PhabricatorSetupCheck',
'PhabricatorFilesApplication' => 'PhabricatorApplication',
'PhabricatorFilesApplicationStorageEnginePanel' => 'PhabricatorApplicationConfigurationPanel',
'PhabricatorFilesConfigOptions' => 'PhabricatorApplicationConfigOptions',
'PhabricatorFilesManagementCatWorkflow' => 'PhabricatorFilesManagementWorkflow',
'PhabricatorFilesManagementCompactWorkflow' => 'PhabricatorFilesManagementWorkflow',
'PhabricatorFilesManagementEnginesWorkflow' => 'PhabricatorFilesManagementWorkflow',
'PhabricatorFilesManagementMigrateWorkflow' => 'PhabricatorFilesManagementWorkflow',
'PhabricatorFilesManagementPurgeWorkflow' => 'PhabricatorFilesManagementWorkflow',
'PhabricatorFilesManagementRebuildWorkflow' => 'PhabricatorFilesManagementWorkflow',
'PhabricatorFilesManagementWorkflow' => 'PhabricatorManagementWorkflow',
'PhabricatorFilesOutboundRequestAction' => 'PhabricatorSystemAction',
'PhabricatorFlag' => array(
'PhabricatorFlagDAO',
'PhabricatorPolicyInterface',
),
'PhabricatorFlagAddFlagHeraldAction' => 'HeraldAction',
'PhabricatorFlagColor' => 'PhabricatorFlagConstants',
'PhabricatorFlagConstants' => 'Phobject',
'PhabricatorFlagController' => 'PhabricatorController',
'PhabricatorFlagDAO' => 'PhabricatorLiskDAO',
'PhabricatorFlagDeleteController' => 'PhabricatorFlagController',
'PhabricatorFlagEditController' => 'PhabricatorFlagController',
'PhabricatorFlagListController' => 'PhabricatorFlagController',
'PhabricatorFlagQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PhabricatorFlagSearchEngine' => 'PhabricatorApplicationSearchEngine',
'PhabricatorFlagSelectControl' => 'AphrontFormControl',
'PhabricatorFlaggableInterface' => 'PhabricatorPHIDInterface',
'PhabricatorFlagsApplication' => 'PhabricatorApplication',
'PhabricatorFlagsUIEventListener' => 'PhabricatorEventListener',
'PhabricatorFundApplication' => 'PhabricatorApplication',
'PhabricatorGDSetupCheck' => 'PhabricatorSetupCheck',
'PhabricatorGarbageCollector' => 'Phobject',
'PhabricatorGarbageCollectorConfigOptions' => 'PhabricatorApplicationConfigOptions',
'PhabricatorGestureUIExample' => 'PhabricatorUIExample',
'PhabricatorGitGraphStream' => 'PhabricatorRepositoryGraphStream',
'PhabricatorGitHubAuthProvider' => 'PhabricatorOAuth2AuthProvider',
'PhabricatorGlobalLock' => 'PhutilLock',
'PhabricatorGlobalUploadTargetView' => 'AphrontView',
'PhabricatorGoogleAuthProvider' => 'PhabricatorOAuth2AuthProvider',
'PhabricatorHandleList' => array(
'Phobject',
'Iterator',
'ArrayAccess',
'Countable',
),
'PhabricatorHandleObjectSelectorDataView' => 'Phobject',
'PhabricatorHandlePool' => 'Phobject',
'PhabricatorHandlePoolTestCase' => 'PhabricatorTestCase',
'PhabricatorHandleQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PhabricatorHarbormasterApplication' => 'PhabricatorApplication',
'PhabricatorHarbormasterConfigOptions' => 'PhabricatorApplicationConfigOptions',
'PhabricatorHash' => 'Phobject',
'PhabricatorHashTestCase' => 'PhabricatorTestCase',
'PhabricatorHelpApplication' => 'PhabricatorApplication',
'PhabricatorHelpController' => 'PhabricatorController',
'PhabricatorHelpDocumentationController' => 'PhabricatorHelpController',
'PhabricatorHelpEditorProtocolController' => 'PhabricatorHelpController',
'PhabricatorHelpKeyboardShortcutController' => 'PhabricatorHelpController',
'PhabricatorHeraldApplication' => 'PhabricatorApplication',
'PhabricatorHighSecurityRequestExceptionHandler' => 'PhabricatorRequestExceptionHandler',
'PhabricatorHomeApplication' => 'PhabricatorApplication',
'PhabricatorHomeController' => 'PhabricatorController',
'PhabricatorHomeMainController' => 'PhabricatorHomeController',
'PhabricatorHomePreferencesSettingsPanel' => 'PhabricatorSettingsPanel',
'PhabricatorHomeQuickCreateController' => 'PhabricatorHomeController',
'PhabricatorHovercardUIExample' => 'PhabricatorUIExample',
'PhabricatorHovercardView' => 'AphrontView',
'PhabricatorHunksManagementMigrateWorkflow' => 'PhabricatorHunksManagementWorkflow',
'PhabricatorHunksManagementWorkflow' => 'PhabricatorManagementWorkflow',
'PhabricatorIRCProtocolAdapter' => 'PhabricatorProtocolAdapter',
'PhabricatorIconRemarkupRule' => 'PhutilRemarkupRule',
'PhabricatorImageMacroRemarkupRule' => 'PhutilRemarkupRule',
'PhabricatorImageTransformer' => 'Phobject',
'PhabricatorImagemagickSetupCheck' => 'PhabricatorSetupCheck',
'PhabricatorInfrastructureTestCase' => 'PhabricatorTestCase',
'PhabricatorInlineCommentController' => 'PhabricatorController',
'PhabricatorInlineCommentInterface' => 'PhabricatorMarkupInterface',
'PhabricatorInlineCommentPreviewController' => 'PhabricatorController',
'PhabricatorInlineSummaryView' => 'AphrontView',
'PhabricatorInternationalizationManagementExtractWorkflow' => 'PhabricatorInternationalizationManagementWorkflow',
'PhabricatorInternationalizationManagementWorkflow' => 'PhabricatorManagementWorkflow',
'PhabricatorInvalidConfigSetupCheck' => 'PhabricatorSetupCheck',
'PhabricatorIteratedMD5PasswordHasher' => 'PhabricatorPasswordHasher',
'PhabricatorIteratedMD5PasswordHasherTestCase' => 'PhabricatorTestCase',
'PhabricatorJIRAAuthProvider' => 'PhabricatorOAuth1AuthProvider',
'PhabricatorJavelinLinter' => 'ArcanistLinter',
'PhabricatorJiraIssueHasObjectEdgeType' => 'PhabricatorEdgeType',
'PhabricatorJumpNavHandler' => 'Phobject',
'PhabricatorKeyValueDatabaseCache' => 'PhutilKeyValueCache',
'PhabricatorLDAPAuthProvider' => 'PhabricatorAuthProvider',
'PhabricatorLegalpadApplication' => 'PhabricatorApplication',
'PhabricatorLegalpadConfigOptions' => 'PhabricatorApplicationConfigOptions',
'PhabricatorLegalpadDocumentPHIDType' => 'PhabricatorPHIDType',
'PhabricatorLegalpadSignaturePolicyRule' => 'PhabricatorPolicyRule',
'PhabricatorLibraryTestCase' => 'PhutilLibraryTestCase',
'PhabricatorLipsumArtist' => 'Phobject',
'PhabricatorLipsumGenerateWorkflow' => 'PhabricatorLipsumManagementWorkflow',
'PhabricatorLipsumManagementWorkflow' => 'PhabricatorManagementWorkflow',
'PhabricatorLipsumMondrianArtist' => 'PhabricatorLipsumArtist',
'PhabricatorLiskDAO' => 'LiskDAO',
'PhabricatorLiskSerializer' => 'Phobject',
'PhabricatorListFilterUIExample' => 'PhabricatorUIExample',
'PhabricatorLocalDiskFileStorageEngine' => 'PhabricatorFileStorageEngine',
'PhabricatorLocalTimeTestCase' => 'PhabricatorTestCase',
'PhabricatorLocaleScopeGuard' => 'Phobject',
'PhabricatorLocaleScopeGuardTestCase' => 'PhabricatorTestCase',
'PhabricatorLogTriggerAction' => 'PhabricatorTriggerAction',
'PhabricatorLogoutController' => 'PhabricatorAuthController',
'PhabricatorLunarPhasePolicyRule' => 'PhabricatorPolicyRule',
'PhabricatorMacroApplication' => 'PhabricatorApplication',
'PhabricatorMacroAudioController' => 'PhabricatorMacroController',
'PhabricatorMacroCommentController' => 'PhabricatorMacroController',
'PhabricatorMacroConfigOptions' => 'PhabricatorApplicationConfigOptions',
'PhabricatorMacroController' => 'PhabricatorController',
'PhabricatorMacroDatasource' => 'PhabricatorTypeaheadDatasource',
'PhabricatorMacroDisableController' => 'PhabricatorMacroController',
'PhabricatorMacroEditController' => 'PhabricatorMacroController',
'PhabricatorMacroEditor' => 'PhabricatorApplicationTransactionEditor',
'PhabricatorMacroListController' => 'PhabricatorMacroController',
'PhabricatorMacroMacroPHIDType' => 'PhabricatorPHIDType',
'PhabricatorMacroMailReceiver' => 'PhabricatorObjectMailReceiver',
'PhabricatorMacroManageCapability' => 'PhabricatorPolicyCapability',
'PhabricatorMacroMemeController' => 'PhabricatorMacroController',
'PhabricatorMacroMemeDialogController' => 'PhabricatorMacroController',
'PhabricatorMacroQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PhabricatorMacroReplyHandler' => 'PhabricatorApplicationTransactionReplyHandler',
'PhabricatorMacroSearchEngine' => 'PhabricatorApplicationSearchEngine',
'PhabricatorMacroTransaction' => 'PhabricatorApplicationTransaction',
'PhabricatorMacroTransactionComment' => 'PhabricatorApplicationTransactionComment',
'PhabricatorMacroTransactionQuery' => 'PhabricatorApplicationTransactionQuery',
'PhabricatorMacroViewController' => 'PhabricatorMacroController',
'PhabricatorMailEmailHeraldField' => 'HeraldField',
'PhabricatorMailEmailHeraldFieldGroup' => 'HeraldFieldGroup',
'PhabricatorMailEmailSubjectHeraldField' => 'PhabricatorMailEmailHeraldField',
'PhabricatorMailImplementationAdapter' => 'Phobject',
'PhabricatorMailImplementationAmazonSESAdapter' => 'PhabricatorMailImplementationPHPMailerLiteAdapter',
'PhabricatorMailImplementationMailgunAdapter' => 'PhabricatorMailImplementationAdapter',
'PhabricatorMailImplementationPHPMailerAdapter' => 'PhabricatorMailImplementationAdapter',
'PhabricatorMailImplementationPHPMailerLiteAdapter' => 'PhabricatorMailImplementationAdapter',
'PhabricatorMailImplementationSendGridAdapter' => 'PhabricatorMailImplementationAdapter',
'PhabricatorMailImplementationTestAdapter' => 'PhabricatorMailImplementationAdapter',
'PhabricatorMailManagementListInboundWorkflow' => 'PhabricatorMailManagementWorkflow',
'PhabricatorMailManagementListOutboundWorkflow' => 'PhabricatorMailManagementWorkflow',
'PhabricatorMailManagementReceiveTestWorkflow' => 'PhabricatorMailManagementWorkflow',
'PhabricatorMailManagementResendWorkflow' => 'PhabricatorMailManagementWorkflow',
'PhabricatorMailManagementSendTestWorkflow' => 'PhabricatorMailManagementWorkflow',
'PhabricatorMailManagementShowInboundWorkflow' => 'PhabricatorMailManagementWorkflow',
'PhabricatorMailManagementShowOutboundWorkflow' => 'PhabricatorMailManagementWorkflow',
'PhabricatorMailManagementVolumeWorkflow' => 'PhabricatorMailManagementWorkflow',
'PhabricatorMailManagementWorkflow' => 'PhabricatorManagementWorkflow',
'PhabricatorMailOutboundMailHeraldAdapter' => 'HeraldAdapter',
'PhabricatorMailOutboundRoutingHeraldAction' => 'HeraldAction',
'PhabricatorMailOutboundRoutingSelfEmailHeraldAction' => 'PhabricatorMailOutboundRoutingHeraldAction',
'PhabricatorMailOutboundRoutingSelfNotificationHeraldAction' => 'PhabricatorMailOutboundRoutingHeraldAction',
'PhabricatorMailOutboundStatus' => 'Phobject',
'PhabricatorMailReceiver' => 'Phobject',
'PhabricatorMailReceiverTestCase' => 'PhabricatorTestCase',
'PhabricatorMailReplyHandler' => 'Phobject',
'PhabricatorMailRoutingRule' => 'Phobject',
'PhabricatorMailSetupCheck' => 'PhabricatorSetupCheck',
'PhabricatorMailTarget' => 'Phobject',
'PhabricatorMailgunConfigOptions' => 'PhabricatorApplicationConfigOptions',
'PhabricatorMainMenuSearchView' => 'AphrontView',
'PhabricatorMainMenuView' => 'AphrontView',
'PhabricatorManagementWorkflow' => 'PhutilArgumentWorkflow',
'PhabricatorManiphestApplication' => 'PhabricatorApplication',
'PhabricatorManiphestConfigOptions' => 'PhabricatorApplicationConfigOptions',
'PhabricatorManiphestTaskTestDataGenerator' => 'PhabricatorTestDataGenerator',
'PhabricatorMarkupCache' => 'PhabricatorCacheDAO',
'PhabricatorMarkupEngine' => 'Phobject',
'PhabricatorMarkupOneOff' => array(
'Phobject',
'PhabricatorMarkupInterface',
),
'PhabricatorMarkupPreviewController' => 'PhabricatorController',
'PhabricatorMemeRemarkupRule' => 'PhutilRemarkupRule',
'PhabricatorMentionRemarkupRule' => 'PhutilRemarkupRule',
'PhabricatorMercurialGraphStream' => 'PhabricatorRepositoryGraphStream',
'PhabricatorMetaMTAActor' => 'Phobject',
'PhabricatorMetaMTAActorQuery' => 'PhabricatorQuery',
'PhabricatorMetaMTAApplication' => 'PhabricatorApplication',
'PhabricatorMetaMTAApplicationEmail' => array(
'PhabricatorMetaMTADAO',
'PhabricatorPolicyInterface',
'PhabricatorApplicationTransactionInterface',
'PhabricatorDestructibleInterface',
'PhabricatorSpacesInterface',
),
'PhabricatorMetaMTAApplicationEmailDatasource' => 'PhabricatorTypeaheadDatasource',
'PhabricatorMetaMTAApplicationEmailEditor' => 'PhabricatorApplicationTransactionEditor',
'PhabricatorMetaMTAApplicationEmailHeraldField' => 'HeraldField',
'PhabricatorMetaMTAApplicationEmailPHIDType' => 'PhabricatorPHIDType',
'PhabricatorMetaMTAApplicationEmailPanel' => 'PhabricatorApplicationConfigurationPanel',
'PhabricatorMetaMTAApplicationEmailQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PhabricatorMetaMTAApplicationEmailTransaction' => 'PhabricatorApplicationTransaction',
'PhabricatorMetaMTAApplicationEmailTransactionQuery' => 'PhabricatorApplicationTransactionQuery',
'PhabricatorMetaMTAAttachment' => 'Phobject',
'PhabricatorMetaMTAConfigOptions' => 'PhabricatorApplicationConfigOptions',
'PhabricatorMetaMTAController' => 'PhabricatorController',
'PhabricatorMetaMTADAO' => 'PhabricatorLiskDAO',
'PhabricatorMetaMTAEmailBodyParser' => 'Phobject',
'PhabricatorMetaMTAEmailBodyParserTestCase' => 'PhabricatorTestCase',
'PhabricatorMetaMTAEmailHeraldAction' => 'HeraldAction',
'PhabricatorMetaMTAEmailOthersHeraldAction' => 'PhabricatorMetaMTAEmailHeraldAction',
'PhabricatorMetaMTAEmailSelfHeraldAction' => 'PhabricatorMetaMTAEmailHeraldAction',
'PhabricatorMetaMTAErrorMailAction' => 'PhabricatorSystemAction',
'PhabricatorMetaMTAMail' => array(
'PhabricatorMetaMTADAO',
'PhabricatorPolicyInterface',
),
'PhabricatorMetaMTAMailBody' => 'Phobject',
'PhabricatorMetaMTAMailBodyTestCase' => 'PhabricatorTestCase',
'PhabricatorMetaMTAMailHasRecipientEdgeType' => 'PhabricatorEdgeType',
'PhabricatorMetaMTAMailListController' => 'PhabricatorMetaMTAController',
'PhabricatorMetaMTAMailPHIDType' => 'PhabricatorPHIDType',
'PhabricatorMetaMTAMailQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PhabricatorMetaMTAMailSearchEngine' => 'PhabricatorApplicationSearchEngine',
'PhabricatorMetaMTAMailSection' => 'Phobject',
'PhabricatorMetaMTAMailTestCase' => 'PhabricatorTestCase',
'PhabricatorMetaMTAMailViewController' => 'PhabricatorMetaMTAController',
'PhabricatorMetaMTAMailableDatasource' => 'PhabricatorTypeaheadCompositeDatasource',
'PhabricatorMetaMTAMailableFunctionDatasource' => 'PhabricatorTypeaheadCompositeDatasource',
'PhabricatorMetaMTAMailgunReceiveController' => 'PhabricatorMetaMTAController',
'PhabricatorMetaMTAMailingList' => 'PhabricatorMetaMTADAO',
'PhabricatorMetaMTAMemberQuery' => 'PhabricatorQuery',
'PhabricatorMetaMTAPermanentFailureException' => 'Exception',
'PhabricatorMetaMTAReceivedMail' => 'PhabricatorMetaMTADAO',
'PhabricatorMetaMTAReceivedMailProcessingException' => 'Exception',
'PhabricatorMetaMTAReceivedMailTestCase' => 'PhabricatorTestCase',
'PhabricatorMetaMTASchemaSpec' => 'PhabricatorConfigSchemaSpec',
'PhabricatorMetaMTASendGridReceiveController' => 'PhabricatorMetaMTAController',
'PhabricatorMetaMTAWorker' => 'PhabricatorWorker',
'PhabricatorMetronomicTriggerClock' => 'PhabricatorTriggerClock',
'PhabricatorMultiColumnUIExample' => 'PhabricatorUIExample',
'PhabricatorMultiFactorSettingsPanel' => 'PhabricatorSettingsPanel',
'PhabricatorMultimeterApplication' => 'PhabricatorApplication',
'PhabricatorMustVerifyEmailController' => 'PhabricatorAuthController',
'PhabricatorMySQLConfigOptions' => 'PhabricatorApplicationConfigOptions',
'PhabricatorMySQLFileStorageEngine' => 'PhabricatorFileStorageEngine',
'PhabricatorMySQLSearchEngine' => 'PhabricatorSearchEngine',
'PhabricatorMySQLSetupCheck' => 'PhabricatorSetupCheck',
'PhabricatorNamedQuery' => array(
'PhabricatorSearchDAO',
'PhabricatorPolicyInterface',
),
'PhabricatorNamedQueryQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PhabricatorNavigationRemarkupRule' => 'PhutilRemarkupRule',
'PhabricatorNeverTriggerClock' => 'PhabricatorTriggerClock',
'PhabricatorNotificationBuilder' => 'Phobject',
'PhabricatorNotificationClearController' => 'PhabricatorNotificationController',
'PhabricatorNotificationClient' => 'Phobject',
'PhabricatorNotificationConfigOptions' => 'PhabricatorApplicationConfigOptions',
'PhabricatorNotificationController' => 'PhabricatorController',
'PhabricatorNotificationIndividualController' => 'PhabricatorNotificationController',
'PhabricatorNotificationListController' => 'PhabricatorNotificationController',
'PhabricatorNotificationPanelController' => 'PhabricatorNotificationController',
'PhabricatorNotificationQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PhabricatorNotificationSearchEngine' => 'PhabricatorApplicationSearchEngine',
'PhabricatorNotificationStatusController' => 'PhabricatorNotificationController',
'PhabricatorNotificationStatusView' => 'AphrontTagView',
'PhabricatorNotificationTestController' => 'PhabricatorNotificationController',
'PhabricatorNotificationTestFeedStory' => 'PhabricatorFeedStory',
'PhabricatorNotificationUIExample' => 'PhabricatorUIExample',
'PhabricatorNotificationsApplication' => 'PhabricatorApplication',
'PhabricatorNuanceApplication' => 'PhabricatorApplication',
'PhabricatorOAuth1AuthProvider' => 'PhabricatorOAuthAuthProvider',
'PhabricatorOAuth2AuthProvider' => 'PhabricatorOAuthAuthProvider',
'PhabricatorOAuthAuthProvider' => 'PhabricatorAuthProvider',
'PhabricatorOAuthClientAuthorization' => array(
'PhabricatorOAuthServerDAO',
'PhabricatorPolicyInterface',
),
'PhabricatorOAuthClientAuthorizationQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PhabricatorOAuthClientController' => 'PhabricatorOAuthServerController',
'PhabricatorOAuthClientDeleteController' => 'PhabricatorOAuthClientController',
'PhabricatorOAuthClientEditController' => 'PhabricatorOAuthClientController',
'PhabricatorOAuthClientListController' => 'PhabricatorOAuthClientController',
'PhabricatorOAuthClientSecretController' => 'PhabricatorOAuthClientController',
'PhabricatorOAuthClientViewController' => 'PhabricatorOAuthClientController',
'PhabricatorOAuthResponse' => 'AphrontResponse',
'PhabricatorOAuthServer' => 'Phobject',
'PhabricatorOAuthServerAccessToken' => 'PhabricatorOAuthServerDAO',
'PhabricatorOAuthServerApplication' => 'PhabricatorApplication',
'PhabricatorOAuthServerAuthController' => 'PhabricatorOAuthServerController',
'PhabricatorOAuthServerAuthorizationCode' => 'PhabricatorOAuthServerDAO',
'PhabricatorOAuthServerAuthorizationsSettingsPanel' => 'PhabricatorSettingsPanel',
'PhabricatorOAuthServerClient' => array(
'PhabricatorOAuthServerDAO',
'PhabricatorPolicyInterface',
'PhabricatorDestructibleInterface',
),
'PhabricatorOAuthServerClientAuthorizationPHIDType' => 'PhabricatorPHIDType',
'PhabricatorOAuthServerClientPHIDType' => 'PhabricatorPHIDType',
'PhabricatorOAuthServerClientQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PhabricatorOAuthServerClientSearchEngine' => 'PhabricatorApplicationSearchEngine',
'PhabricatorOAuthServerController' => 'PhabricatorController',
'PhabricatorOAuthServerCreateClientsCapability' => 'PhabricatorPolicyCapability',
'PhabricatorOAuthServerDAO' => 'PhabricatorLiskDAO',
'PhabricatorOAuthServerScope' => 'Phobject',
'PhabricatorOAuthServerTestCase' => 'PhabricatorTestCase',
'PhabricatorOAuthServerTestController' => 'PhabricatorOAuthServerController',
'PhabricatorOAuthServerTokenController' => 'PhabricatorOAuthServerController',
'PhabricatorObjectHandle' => array(
'Phobject',
'PhabricatorPolicyInterface',
),
'PhabricatorObjectHasAsanaSubtaskEdgeType' => 'PhabricatorEdgeType',
'PhabricatorObjectHasAsanaTaskEdgeType' => 'PhabricatorEdgeType',
'PhabricatorObjectHasContributorEdgeType' => 'PhabricatorEdgeType',
'PhabricatorObjectHasFileEdgeType' => 'PhabricatorEdgeType',
'PhabricatorObjectHasJiraIssueEdgeType' => 'PhabricatorEdgeType',
'PhabricatorObjectHasSubscriberEdgeType' => 'PhabricatorEdgeType',
'PhabricatorObjectHasUnsubscriberEdgeType' => 'PhabricatorEdgeType',
'PhabricatorObjectHasWatcherEdgeType' => 'PhabricatorEdgeType',
'PhabricatorObjectListQuery' => 'Phobject',
'PhabricatorObjectListQueryTestCase' => 'PhabricatorTestCase',
'PhabricatorObjectMailReceiver' => 'PhabricatorMailReceiver',
'PhabricatorObjectMailReceiverTestCase' => 'PhabricatorTestCase',
'PhabricatorObjectMentionedByObjectEdgeType' => 'PhabricatorEdgeType',
'PhabricatorObjectMentionsObjectEdgeType' => 'PhabricatorEdgeType',
'PhabricatorObjectQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PhabricatorObjectRemarkupRule' => 'PhutilRemarkupRule',
'PhabricatorObjectSelectorDialog' => 'Phobject',
'PhabricatorObjectUsesCredentialsEdgeType' => 'PhabricatorEdgeType',
'PhabricatorOffsetPagedQuery' => 'PhabricatorQuery',
'PhabricatorOneTimeTriggerClock' => 'PhabricatorTriggerClock',
'PhabricatorOpcodeCacheSpec' => 'PhabricatorCacheSpec',
'PhabricatorOwnerPathQuery' => 'Phobject',
'PhabricatorOwnersApplication' => 'PhabricatorApplication',
'PhabricatorOwnersConfigOptions' => 'PhabricatorApplicationConfigOptions',
'PhabricatorOwnersConfiguredCustomField' => array(
'PhabricatorOwnersCustomField',
'PhabricatorStandardCustomFieldInterface',
),
'PhabricatorOwnersController' => 'PhabricatorController',
'PhabricatorOwnersCustomField' => 'PhabricatorCustomField',
'PhabricatorOwnersCustomFieldNumericIndex' => 'PhabricatorCustomFieldNumericIndexStorage',
'PhabricatorOwnersCustomFieldStorage' => 'PhabricatorCustomFieldStorage',
'PhabricatorOwnersCustomFieldStringIndex' => 'PhabricatorCustomFieldStringIndexStorage',
'PhabricatorOwnersDAO' => 'PhabricatorLiskDAO',
'PhabricatorOwnersDetailController' => 'PhabricatorOwnersController',
'PhabricatorOwnersEditController' => 'PhabricatorOwnersController',
'PhabricatorOwnersListController' => 'PhabricatorOwnersController',
'PhabricatorOwnersOwner' => 'PhabricatorOwnersDAO',
'PhabricatorOwnersPackage' => array(
'PhabricatorOwnersDAO',
'PhabricatorPolicyInterface',
'PhabricatorApplicationTransactionInterface',
'PhabricatorCustomFieldInterface',
),
'PhabricatorOwnersPackageDatasource' => 'PhabricatorTypeaheadDatasource',
'PhabricatorOwnersPackageFunctionDatasource' => 'PhabricatorTypeaheadCompositeDatasource',
'PhabricatorOwnersPackageOwnerDatasource' => 'PhabricatorTypeaheadCompositeDatasource',
'PhabricatorOwnersPackagePHIDType' => 'PhabricatorPHIDType',
'PhabricatorOwnersPackageQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PhabricatorOwnersPackageSearchEngine' => 'PhabricatorApplicationSearchEngine',
'PhabricatorOwnersPackageTestCase' => 'PhabricatorTestCase',
'PhabricatorOwnersPackageTransaction' => 'PhabricatorApplicationTransaction',
'PhabricatorOwnersPackageTransactionEditor' => 'PhabricatorApplicationTransactionEditor',
'PhabricatorOwnersPackageTransactionQuery' => 'PhabricatorApplicationTransactionQuery',
'PhabricatorOwnersPath' => 'PhabricatorOwnersDAO',
'PhabricatorOwnersPathsController' => 'PhabricatorOwnersController',
'PhabricatorOwnersSearchField' => 'PhabricatorSearchTokenizerField',
'PhabricatorPHDConfigOptions' => 'PhabricatorApplicationConfigOptions',
'PhabricatorPHID' => 'Phobject',
'PhabricatorPHIDConstants' => 'Phobject',
'PhabricatorPHIDType' => 'Phobject',
'PhabricatorPHIDTypeTestCase' => 'PhutilTestCase',
'PhabricatorPHPASTApplication' => 'PhabricatorApplication',
'PhabricatorPHPConfigSetupCheck' => 'PhabricatorSetupCheck',
'PhabricatorPHPMailerConfigOptions' => 'PhabricatorApplicationConfigOptions',
'PhabricatorPagedFormUIExample' => 'PhabricatorUIExample',
'PhabricatorPagerUIExample' => 'PhabricatorUIExample',
'PhabricatorPassphraseApplication' => 'PhabricatorApplication',
'PhabricatorPasswordAuthProvider' => 'PhabricatorAuthProvider',
'PhabricatorPasswordHasher' => 'Phobject',
'PhabricatorPasswordHasherTestCase' => 'PhabricatorTestCase',
'PhabricatorPasswordHasherUnavailableException' => 'Exception',
'PhabricatorPasswordSettingsPanel' => 'PhabricatorSettingsPanel',
'PhabricatorPaste' => array(
'PhabricatorPasteDAO',
'PhabricatorSubscribableInterface',
'PhabricatorTokenReceiverInterface',
'PhabricatorFlaggableInterface',
'PhabricatorMentionableInterface',
'PhabricatorPolicyInterface',
'PhabricatorProjectInterface',
'PhabricatorDestructibleInterface',
'PhabricatorApplicationTransactionInterface',
'PhabricatorSpacesInterface',
),
'PhabricatorPasteApplication' => 'PhabricatorApplication',
'PhabricatorPasteCommentController' => 'PhabricatorPasteController',
'PhabricatorPasteConfigOptions' => 'PhabricatorApplicationConfigOptions',
'PhabricatorPasteController' => 'PhabricatorController',
'PhabricatorPasteDAO' => 'PhabricatorLiskDAO',
'PhabricatorPasteEditController' => 'PhabricatorPasteController',
'PhabricatorPasteEditor' => 'PhabricatorApplicationTransactionEditor',
'PhabricatorPasteListController' => 'PhabricatorPasteController',
'PhabricatorPastePastePHIDType' => 'PhabricatorPHIDType',
'PhabricatorPasteQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PhabricatorPasteRemarkupRule' => 'PhabricatorObjectRemarkupRule',
'PhabricatorPasteSchemaSpec' => 'PhabricatorConfigSchemaSpec',
'PhabricatorPasteSearchEngine' => 'PhabricatorApplicationSearchEngine',
'PhabricatorPasteTestDataGenerator' => 'PhabricatorTestDataGenerator',
'PhabricatorPasteTransaction' => 'PhabricatorApplicationTransaction',
'PhabricatorPasteTransactionComment' => 'PhabricatorApplicationTransactionComment',
'PhabricatorPasteTransactionQuery' => 'PhabricatorApplicationTransactionQuery',
'PhabricatorPasteViewController' => 'PhabricatorPasteController',
'PhabricatorPathSetupCheck' => 'PhabricatorSetupCheck',
'PhabricatorPeopleAnyOwnerDatasource' => 'PhabricatorTypeaheadDatasource',
'PhabricatorPeopleApplication' => 'PhabricatorApplication',
'PhabricatorPeopleApproveController' => 'PhabricatorPeopleController',
'PhabricatorPeopleCalendarController' => 'PhabricatorPeopleController',
'PhabricatorPeopleController' => 'PhabricatorController',
'PhabricatorPeopleCreateController' => 'PhabricatorPeopleController',
'PhabricatorPeopleDatasource' => 'PhabricatorTypeaheadDatasource',
'PhabricatorPeopleDeleteController' => 'PhabricatorPeopleController',
'PhabricatorPeopleDisableController' => 'PhabricatorPeopleController',
'PhabricatorPeopleEmpowerController' => 'PhabricatorPeopleController',
'PhabricatorPeopleExternalPHIDType' => 'PhabricatorPHIDType',
'PhabricatorPeopleHovercardEventListener' => 'PhabricatorEventListener',
'PhabricatorPeopleInviteController' => 'PhabricatorPeopleController',
'PhabricatorPeopleInviteListController' => 'PhabricatorPeopleInviteController',
'PhabricatorPeopleInviteSendController' => 'PhabricatorPeopleInviteController',
'PhabricatorPeopleLdapController' => 'PhabricatorPeopleController',
'PhabricatorPeopleListController' => 'PhabricatorPeopleController',
'PhabricatorPeopleLogQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PhabricatorPeopleLogSearchEngine' => 'PhabricatorApplicationSearchEngine',
'PhabricatorPeopleLogsController' => 'PhabricatorPeopleController',
'PhabricatorPeopleNewController' => 'PhabricatorPeopleController',
'PhabricatorPeopleNoOwnerDatasource' => 'PhabricatorTypeaheadDatasource',
'PhabricatorPeopleOwnerDatasource' => 'PhabricatorTypeaheadCompositeDatasource',
'PhabricatorPeopleProfileController' => 'PhabricatorPeopleController',
'PhabricatorPeopleProfileEditController' => 'PhabricatorPeopleController',
'PhabricatorPeopleProfilePictureController' => 'PhabricatorPeopleController',
'PhabricatorPeopleQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PhabricatorPeopleRenameController' => 'PhabricatorPeopleController',
'PhabricatorPeopleSearchEngine' => 'PhabricatorApplicationSearchEngine',
'PhabricatorPeopleTestDataGenerator' => 'PhabricatorTestDataGenerator',
'PhabricatorPeopleTransactionQuery' => 'PhabricatorApplicationTransactionQuery',
'PhabricatorPeopleUserFunctionDatasource' => 'PhabricatorTypeaheadCompositeDatasource',
'PhabricatorPeopleUserPHIDType' => 'PhabricatorPHIDType',
'PhabricatorPeopleWelcomeController' => 'PhabricatorPeopleController',
'PhabricatorPersonaAuthProvider' => 'PhabricatorAuthProvider',
'PhabricatorPhabricatorAuthProvider' => 'PhabricatorOAuth2AuthProvider',
'PhabricatorPhameApplication' => 'PhabricatorApplication',
'PhabricatorPhameBlogPHIDType' => 'PhabricatorPHIDType',
'PhabricatorPhameConfigOptions' => 'PhabricatorApplicationConfigOptions',
'PhabricatorPhamePostPHIDType' => 'PhabricatorPHIDType',
'PhabricatorPhluxApplication' => 'PhabricatorApplication',
'PhabricatorPholioApplication' => 'PhabricatorApplication',
'PhabricatorPholioConfigOptions' => 'PhabricatorApplicationConfigOptions',
'PhabricatorPholioMockTestDataGenerator' => 'PhabricatorTestDataGenerator',
'PhabricatorPhortuneApplication' => 'PhabricatorApplication',
'PhabricatorPhortuneManagementInvoiceWorkflow' => 'PhabricatorPhortuneManagementWorkflow',
'PhabricatorPhortuneManagementWorkflow' => 'PhabricatorManagementWorkflow',
'PhabricatorPhragmentApplication' => 'PhabricatorApplication',
'PhabricatorPhrequentApplication' => 'PhabricatorApplication',
'PhabricatorPhrequentConfigOptions' => 'PhabricatorApplicationConfigOptions',
'PhabricatorPhrictionApplication' => 'PhabricatorApplication',
'PhabricatorPhrictionConfigOptions' => 'PhabricatorApplicationConfigOptions',
'PhabricatorPhurlApplication' => 'PhabricatorApplication',
'PhabricatorPhurlController' => 'PhabricatorController',
'PhabricatorPhurlDAO' => 'PhabricatorLiskDAO',
'PhabricatorPhurlSchemaSpec' => 'PhabricatorConfigSchemaSpec',
'PhabricatorPhurlURL' => array(
'PhabricatorPhurlDAO',
'PhabricatorPolicyInterface',
'PhabricatorProjectInterface',
'PhabricatorApplicationTransactionInterface',
'PhabricatorSubscribableInterface',
'PhabricatorTokenReceiverInterface',
'PhabricatorDestructibleInterface',
'PhabricatorMentionableInterface',
'PhabricatorFlaggableInterface',
'PhabricatorSpacesInterface',
),
'PhabricatorPhurlURLEditController' => 'PhabricatorPhurlController',
'PhabricatorPhurlURLEditor' => 'PhabricatorApplicationTransactionEditor',
'PhabricatorPhurlURLListController' => 'PhabricatorPhurlController',
'PhabricatorPhurlURLPHIDType' => 'PhabricatorPHIDType',
'PhabricatorPhurlURLQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PhabricatorPhurlURLSearchEngine' => 'PhabricatorApplicationSearchEngine',
'PhabricatorPhurlURLTransaction' => 'PhabricatorApplicationTransaction',
'PhabricatorPhurlURLTransactionComment' => 'PhabricatorApplicationTransactionComment',
'PhabricatorPhurlURLTransactionQuery' => 'PhabricatorApplicationTransactionQuery',
'PhabricatorPhurlURLViewController' => 'PhabricatorPhurlController',
'PhabricatorPlatformSite' => 'PhabricatorSite',
'PhabricatorPolicies' => 'PhabricatorPolicyConstants',
'PhabricatorPolicy' => array(
'PhabricatorPolicyDAO',
'PhabricatorPolicyInterface',
'PhabricatorDestructibleInterface',
),
'PhabricatorPolicyApplication' => 'PhabricatorApplication',
'PhabricatorPolicyAwareQuery' => 'PhabricatorOffsetPagedQuery',
'PhabricatorPolicyAwareTestQuery' => 'PhabricatorPolicyAwareQuery',
'PhabricatorPolicyCanEditCapability' => 'PhabricatorPolicyCapability',
'PhabricatorPolicyCanJoinCapability' => 'PhabricatorPolicyCapability',
'PhabricatorPolicyCanViewCapability' => 'PhabricatorPolicyCapability',
'PhabricatorPolicyCapability' => 'Phobject',
'PhabricatorPolicyCapabilityTestCase' => 'PhabricatorTestCase',
'PhabricatorPolicyConfigOptions' => 'PhabricatorApplicationConfigOptions',
'PhabricatorPolicyConstants' => 'Phobject',
'PhabricatorPolicyController' => 'PhabricatorController',
'PhabricatorPolicyDAO' => 'PhabricatorLiskDAO',
'PhabricatorPolicyDataTestCase' => 'PhabricatorTestCase',
'PhabricatorPolicyEditController' => 'PhabricatorPolicyController',
'PhabricatorPolicyException' => 'Exception',
'PhabricatorPolicyExplainController' => 'PhabricatorPolicyController',
'PhabricatorPolicyFilter' => 'Phobject',
'PhabricatorPolicyInterface' => 'PhabricatorPHIDInterface',
'PhabricatorPolicyManagementShowWorkflow' => 'PhabricatorPolicyManagementWorkflow',
'PhabricatorPolicyManagementUnlockWorkflow' => 'PhabricatorPolicyManagementWorkflow',
'PhabricatorPolicyManagementWorkflow' => 'PhabricatorManagementWorkflow',
'PhabricatorPolicyPHIDTypePolicy' => 'PhabricatorPHIDType',
'PhabricatorPolicyQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PhabricatorPolicyRequestExceptionHandler' => 'PhabricatorRequestExceptionHandler',
'PhabricatorPolicyRule' => 'Phobject',
'PhabricatorPolicyTestCase' => 'PhabricatorTestCase',
'PhabricatorPolicyTestObject' => array(
'Phobject',
'PhabricatorPolicyInterface',
'PhabricatorExtendedPolicyInterface',
),
'PhabricatorPolicyType' => 'PhabricatorPolicyConstants',
'PhabricatorPonderApplication' => 'PhabricatorApplication',
'PhabricatorProject' => array(
'PhabricatorProjectDAO',
'PhabricatorApplicationTransactionInterface',
'PhabricatorFlaggableInterface',
'PhabricatorPolicyInterface',
'PhabricatorSubscribableInterface',
'PhabricatorCustomFieldInterface',
'PhabricatorDestructibleInterface',
),
'PhabricatorProjectAddHeraldAction' => 'PhabricatorProjectHeraldAction',
'PhabricatorProjectApplication' => 'PhabricatorApplication',
'PhabricatorProjectArchiveController' => 'PhabricatorProjectController',
'PhabricatorProjectBoardController' => 'PhabricatorProjectController',
'PhabricatorProjectBoardImportController' => 'PhabricatorProjectBoardController',
'PhabricatorProjectBoardReorderController' => 'PhabricatorProjectBoardController',
'PhabricatorProjectBoardViewController' => 'PhabricatorProjectBoardController',
'PhabricatorProjectColumn' => array(
'PhabricatorProjectDAO',
'PhabricatorApplicationTransactionInterface',
'PhabricatorPolicyInterface',
'PhabricatorDestructibleInterface',
),
'PhabricatorProjectColumnDetailController' => 'PhabricatorProjectBoardController',
'PhabricatorProjectColumnEditController' => 'PhabricatorProjectBoardController',
'PhabricatorProjectColumnHideController' => 'PhabricatorProjectBoardController',
'PhabricatorProjectColumnPHIDType' => 'PhabricatorPHIDType',
'PhabricatorProjectColumnPosition' => array(
'PhabricatorProjectDAO',
'PhabricatorPolicyInterface',
),
'PhabricatorProjectColumnPositionQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PhabricatorProjectColumnQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PhabricatorProjectColumnTransaction' => 'PhabricatorApplicationTransaction',
'PhabricatorProjectColumnTransactionEditor' => 'PhabricatorApplicationTransactionEditor',
'PhabricatorProjectColumnTransactionQuery' => 'PhabricatorApplicationTransactionQuery',
'PhabricatorProjectConfigOptions' => 'PhabricatorApplicationConfigOptions',
'PhabricatorProjectConfiguredCustomField' => array(
'PhabricatorProjectStandardCustomField',
'PhabricatorStandardCustomFieldInterface',
),
'PhabricatorProjectController' => 'PhabricatorController',
'PhabricatorProjectCustomField' => 'PhabricatorCustomField',
'PhabricatorProjectCustomFieldNumericIndex' => 'PhabricatorCustomFieldNumericIndexStorage',
'PhabricatorProjectCustomFieldStorage' => 'PhabricatorCustomFieldStorage',
'PhabricatorProjectCustomFieldStringIndex' => 'PhabricatorCustomFieldStringIndexStorage',
'PhabricatorProjectDAO' => 'PhabricatorLiskDAO',
'PhabricatorProjectDatasource' => 'PhabricatorTypeaheadDatasource',
'PhabricatorProjectDescriptionField' => 'PhabricatorProjectStandardCustomField',
'PhabricatorProjectEditDetailsController' => 'PhabricatorProjectController',
'PhabricatorProjectEditIconController' => 'PhabricatorProjectController',
'PhabricatorProjectEditPictureController' => 'PhabricatorProjectController',
'PhabricatorProjectEditorTestCase' => 'PhabricatorTestCase',
'PhabricatorProjectFeedController' => 'PhabricatorProjectController',
'PhabricatorProjectHeraldAction' => 'HeraldAction',
'PhabricatorProjectIcon' => 'Phobject',
'PhabricatorProjectListController' => 'PhabricatorProjectController',
'PhabricatorProjectLogicalAndDatasource' => 'PhabricatorTypeaheadCompositeDatasource',
'PhabricatorProjectLogicalDatasource' => 'PhabricatorTypeaheadCompositeDatasource',
'PhabricatorProjectLogicalOrNotDatasource' => 'PhabricatorTypeaheadCompositeDatasource',
'PhabricatorProjectLogicalUserDatasource' => 'PhabricatorTypeaheadCompositeDatasource',
'PhabricatorProjectLogicalViewerDatasource' => 'PhabricatorTypeaheadDatasource',
'PhabricatorProjectMemberOfProjectEdgeType' => 'PhabricatorEdgeType',
'PhabricatorProjectMembersDatasource' => 'PhabricatorTypeaheadCompositeDatasource',
'PhabricatorProjectMembersEditController' => 'PhabricatorProjectController',
'PhabricatorProjectMembersRemoveController' => 'PhabricatorProjectController',
'PhabricatorProjectMoveController' => 'PhabricatorProjectController',
'PhabricatorProjectNoProjectsDatasource' => 'PhabricatorTypeaheadDatasource',
'PhabricatorProjectObjectHasProjectEdgeType' => 'PhabricatorEdgeType',
'PhabricatorProjectOrUserDatasource' => 'PhabricatorTypeaheadCompositeDatasource',
'PhabricatorProjectOrUserFunctionDatasource' => 'PhabricatorTypeaheadCompositeDatasource',
'PhabricatorProjectProfileController' => 'PhabricatorProjectController',
'PhabricatorProjectProjectHasMemberEdgeType' => 'PhabricatorEdgeType',
'PhabricatorProjectProjectHasObjectEdgeType' => 'PhabricatorEdgeType',
'PhabricatorProjectProjectPHIDType' => 'PhabricatorPHIDType',
'PhabricatorProjectQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PhabricatorProjectRemoveHeraldAction' => 'PhabricatorProjectHeraldAction',
'PhabricatorProjectSchemaSpec' => 'PhabricatorConfigSchemaSpec',
'PhabricatorProjectSearchEngine' => 'PhabricatorApplicationSearchEngine',
'PhabricatorProjectSearchField' => 'PhabricatorSearchTokenizerField',
'PhabricatorProjectSearchIndexer' => 'PhabricatorSearchDocumentIndexer',
'PhabricatorProjectSlug' => 'PhabricatorProjectDAO',
'PhabricatorProjectStandardCustomField' => array(
'PhabricatorProjectCustomField',
'PhabricatorStandardCustomFieldInterface',
),
'PhabricatorProjectStatus' => 'Phobject',
'PhabricatorProjectTestDataGenerator' => 'PhabricatorTestDataGenerator',
'PhabricatorProjectTransaction' => 'PhabricatorApplicationTransaction',
'PhabricatorProjectTransactionEditor' => 'PhabricatorApplicationTransactionEditor',
'PhabricatorProjectTransactionQuery' => 'PhabricatorApplicationTransactionQuery',
'PhabricatorProjectUIEventListener' => 'PhabricatorEventListener',
'PhabricatorProjectUpdateController' => 'PhabricatorProjectController',
'PhabricatorProjectUserFunctionDatasource' => 'PhabricatorTypeaheadCompositeDatasource',
'PhabricatorProjectViewController' => 'PhabricatorProjectController',
'PhabricatorProjectWatchController' => 'PhabricatorProjectController',
'PhabricatorProjectsPolicyRule' => 'PhabricatorPolicyRule',
'PhabricatorProtocolAdapter' => 'Phobject',
'PhabricatorPygmentSetupCheck' => 'PhabricatorSetupCheck',
'PhabricatorQuery' => 'Phobject',
'PhabricatorQueryConstraint' => 'Phobject',
'PhabricatorQueryOrderItem' => 'Phobject',
'PhabricatorQueryOrderTestCase' => 'PhabricatorTestCase',
'PhabricatorQueryOrderVector' => array(
'Phobject',
'Iterator',
),
'PhabricatorRateLimitRequestExceptionHandler' => 'PhabricatorRequestExceptionHandler',
'PhabricatorRecaptchaConfigOptions' => 'PhabricatorApplicationConfigOptions',
'PhabricatorRecipientHasBadgeEdgeType' => 'PhabricatorEdgeType',
'PhabricatorRedirectController' => 'PhabricatorController',
'PhabricatorRefreshCSRFController' => 'PhabricatorAuthController',
'PhabricatorRegistrationProfile' => 'Phobject',
'PhabricatorReleephApplication' => 'PhabricatorApplication',
'PhabricatorReleephApplicationConfigOptions' => 'PhabricatorApplicationConfigOptions',
'PhabricatorRemarkupControl' => 'AphrontFormTextAreaControl',
'PhabricatorRemarkupCowsayBlockInterpreter' => 'PhutilRemarkupBlockInterpreter',
'PhabricatorRemarkupCustomBlockRule' => 'PhutilRemarkupBlockRule',
'PhabricatorRemarkupCustomInlineRule' => 'PhutilRemarkupRule',
'PhabricatorRemarkupFigletBlockInterpreter' => 'PhutilRemarkupBlockInterpreter',
- 'PhabricatorRemarkupGraphvizBlockInterpreter' => 'PhutilRemarkupBlockInterpreter',
'PhabricatorRemarkupUIExample' => 'PhabricatorUIExample',
'PhabricatorRepositoriesSetupCheck' => 'PhabricatorSetupCheck',
'PhabricatorRepository' => array(
'PhabricatorRepositoryDAO',
'PhabricatorApplicationTransactionInterface',
'PhabricatorPolicyInterface',
'PhabricatorFlaggableInterface',
'PhabricatorMarkupInterface',
'PhabricatorDestructibleInterface',
'PhabricatorProjectInterface',
'PhabricatorSpacesInterface',
),
'PhabricatorRepositoryAuditRequest' => array(
'PhabricatorRepositoryDAO',
'PhabricatorPolicyInterface',
),
'PhabricatorRepositoryBranch' => 'PhabricatorRepositoryDAO',
'PhabricatorRepositoryCommit' => array(
'PhabricatorRepositoryDAO',
'PhabricatorPolicyInterface',
'PhabricatorFlaggableInterface',
'PhabricatorProjectInterface',
'PhabricatorTokenReceiverInterface',
'PhabricatorSubscribableInterface',
'PhabricatorMentionableInterface',
'HarbormasterBuildableInterface',
'PhabricatorCustomFieldInterface',
'PhabricatorApplicationTransactionInterface',
),
'PhabricatorRepositoryCommitChangeParserWorker' => 'PhabricatorRepositoryCommitParserWorker',
'PhabricatorRepositoryCommitData' => 'PhabricatorRepositoryDAO',
'PhabricatorRepositoryCommitHeraldWorker' => 'PhabricatorRepositoryCommitParserWorker',
'PhabricatorRepositoryCommitMessageParserWorker' => 'PhabricatorRepositoryCommitParserWorker',
'PhabricatorRepositoryCommitOwnersWorker' => 'PhabricatorRepositoryCommitParserWorker',
'PhabricatorRepositoryCommitPHIDType' => 'PhabricatorPHIDType',
'PhabricatorRepositoryCommitParserWorker' => 'PhabricatorWorker',
'PhabricatorRepositoryCommitRef' => 'Phobject',
'PhabricatorRepositoryCommitSearchIndexer' => 'PhabricatorSearchDocumentIndexer',
'PhabricatorRepositoryConfigOptions' => 'PhabricatorApplicationConfigOptions',
'PhabricatorRepositoryDAO' => 'PhabricatorLiskDAO',
'PhabricatorRepositoryDiscoveryEngine' => 'PhabricatorRepositoryEngine',
'PhabricatorRepositoryEditor' => 'PhabricatorApplicationTransactionEditor',
'PhabricatorRepositoryEngine' => 'Phobject',
'PhabricatorRepositoryGitCommitChangeParserWorker' => 'PhabricatorRepositoryCommitChangeParserWorker',
'PhabricatorRepositoryGitCommitMessageParserWorker' => 'PhabricatorRepositoryCommitMessageParserWorker',
'PhabricatorRepositoryGraphCache' => 'Phobject',
'PhabricatorRepositoryGraphStream' => 'Phobject',
'PhabricatorRepositoryManagementCacheWorkflow' => 'PhabricatorRepositoryManagementWorkflow',
'PhabricatorRepositoryManagementDiscoverWorkflow' => 'PhabricatorRepositoryManagementWorkflow',
'PhabricatorRepositoryManagementEditWorkflow' => 'PhabricatorRepositoryManagementWorkflow',
'PhabricatorRepositoryManagementImportingWorkflow' => 'PhabricatorRepositoryManagementWorkflow',
'PhabricatorRepositoryManagementListPathsWorkflow' => 'PhabricatorRepositoryManagementWorkflow',
'PhabricatorRepositoryManagementListWorkflow' => 'PhabricatorRepositoryManagementWorkflow',
'PhabricatorRepositoryManagementLookupUsersWorkflow' => 'PhabricatorRepositoryManagementWorkflow',
'PhabricatorRepositoryManagementMarkImportedWorkflow' => 'PhabricatorRepositoryManagementWorkflow',
'PhabricatorRepositoryManagementMirrorWorkflow' => 'PhabricatorRepositoryManagementWorkflow',
'PhabricatorRepositoryManagementMovePathsWorkflow' => 'PhabricatorRepositoryManagementWorkflow',
'PhabricatorRepositoryManagementParentsWorkflow' => 'PhabricatorRepositoryManagementWorkflow',
'PhabricatorRepositoryManagementPullWorkflow' => 'PhabricatorRepositoryManagementWorkflow',
'PhabricatorRepositoryManagementRefsWorkflow' => 'PhabricatorRepositoryManagementWorkflow',
'PhabricatorRepositoryManagementReparseWorkflow' => 'PhabricatorRepositoryManagementWorkflow',
'PhabricatorRepositoryManagementUpdateWorkflow' => 'PhabricatorRepositoryManagementWorkflow',
'PhabricatorRepositoryManagementWorkflow' => 'PhabricatorManagementWorkflow',
'PhabricatorRepositoryMercurialCommitChangeParserWorker' => 'PhabricatorRepositoryCommitChangeParserWorker',
'PhabricatorRepositoryMercurialCommitMessageParserWorker' => 'PhabricatorRepositoryCommitMessageParserWorker',
'PhabricatorRepositoryMirror' => array(
'PhabricatorRepositoryDAO',
'PhabricatorPolicyInterface',
),
'PhabricatorRepositoryMirrorEngine' => 'PhabricatorRepositoryEngine',
'PhabricatorRepositoryMirrorPHIDType' => 'PhabricatorPHIDType',
'PhabricatorRepositoryMirrorQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PhabricatorRepositoryParsedChange' => 'Phobject',
'PhabricatorRepositoryPullEngine' => 'PhabricatorRepositoryEngine',
'PhabricatorRepositoryPullLocalDaemon' => 'PhabricatorDaemon',
'PhabricatorRepositoryPushEvent' => array(
'PhabricatorRepositoryDAO',
'PhabricatorPolicyInterface',
),
'PhabricatorRepositoryPushEventPHIDType' => 'PhabricatorPHIDType',
'PhabricatorRepositoryPushEventQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PhabricatorRepositoryPushLog' => array(
'PhabricatorRepositoryDAO',
'PhabricatorPolicyInterface',
),
'PhabricatorRepositoryPushLogPHIDType' => 'PhabricatorPHIDType',
'PhabricatorRepositoryPushLogQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PhabricatorRepositoryPushLogSearchEngine' => 'PhabricatorApplicationSearchEngine',
'PhabricatorRepositoryPushMailWorker' => 'PhabricatorWorker',
'PhabricatorRepositoryPushReplyHandler' => 'PhabricatorMailReplyHandler',
'PhabricatorRepositoryQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PhabricatorRepositoryRefCursor' => array(
'PhabricatorRepositoryDAO',
'PhabricatorPolicyInterface',
),
'PhabricatorRepositoryRefCursorQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PhabricatorRepositoryRefEngine' => 'PhabricatorRepositoryEngine',
'PhabricatorRepositoryRepositoryPHIDType' => 'PhabricatorPHIDType',
'PhabricatorRepositorySchemaSpec' => 'PhabricatorConfigSchemaSpec',
'PhabricatorRepositorySearchEngine' => 'PhabricatorApplicationSearchEngine',
'PhabricatorRepositoryStatusMessage' => 'PhabricatorRepositoryDAO',
'PhabricatorRepositorySvnCommitChangeParserWorker' => 'PhabricatorRepositoryCommitChangeParserWorker',
'PhabricatorRepositorySvnCommitMessageParserWorker' => 'PhabricatorRepositoryCommitMessageParserWorker',
'PhabricatorRepositorySymbol' => 'PhabricatorRepositoryDAO',
'PhabricatorRepositoryTestCase' => 'PhabricatorTestCase',
'PhabricatorRepositoryTransaction' => 'PhabricatorApplicationTransaction',
'PhabricatorRepositoryTransactionQuery' => 'PhabricatorApplicationTransactionQuery',
'PhabricatorRepositoryType' => 'Phobject',
'PhabricatorRepositoryURINormalizer' => 'Phobject',
'PhabricatorRepositoryURINormalizerTestCase' => 'PhabricatorTestCase',
'PhabricatorRepositoryURITestCase' => 'PhabricatorTestCase',
'PhabricatorRepositoryVCSPassword' => 'PhabricatorRepositoryDAO',
'PhabricatorRepositoryVersion' => 'Phobject',
'PhabricatorRequestExceptionHandler' => 'AphrontRequestExceptionHandler',
'PhabricatorResourceSite' => 'PhabricatorSite',
'PhabricatorRobotsController' => 'PhabricatorController',
'PhabricatorS3FileStorageEngine' => 'PhabricatorFileStorageEngine',
'PhabricatorSMS' => 'PhabricatorSMSDAO',
'PhabricatorSMSConfigOptions' => 'PhabricatorApplicationConfigOptions',
'PhabricatorSMSDAO' => 'PhabricatorLiskDAO',
'PhabricatorSMSDemultiplexWorker' => 'PhabricatorSMSWorker',
'PhabricatorSMSImplementationAdapter' => 'Phobject',
'PhabricatorSMSImplementationTestBlackholeAdapter' => 'PhabricatorSMSImplementationAdapter',
'PhabricatorSMSImplementationTwilioAdapter' => 'PhabricatorSMSImplementationAdapter',
'PhabricatorSMSManagementListOutboundWorkflow' => 'PhabricatorSMSManagementWorkflow',
'PhabricatorSMSManagementSendTestWorkflow' => 'PhabricatorSMSManagementWorkflow',
'PhabricatorSMSManagementShowOutboundWorkflow' => 'PhabricatorSMSManagementWorkflow',
'PhabricatorSMSManagementWorkflow' => 'PhabricatorManagementWorkflow',
'PhabricatorSMSSendWorker' => 'PhabricatorSMSWorker',
'PhabricatorSMSWorker' => 'PhabricatorWorker',
'PhabricatorSQLPatchList' => 'Phobject',
'PhabricatorSSHKeyGenerator' => 'Phobject',
'PhabricatorSSHKeysSettingsPanel' => 'PhabricatorSettingsPanel',
'PhabricatorSSHLog' => 'Phobject',
'PhabricatorSSHPassthruCommand' => 'Phobject',
'PhabricatorSSHWorkflow' => 'PhabricatorManagementWorkflow',
'PhabricatorSavedQuery' => array(
'PhabricatorSearchDAO',
'PhabricatorPolicyInterface',
),
'PhabricatorSavedQueryQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PhabricatorScheduleTaskTriggerAction' => 'PhabricatorTriggerAction',
'PhabricatorScopedEnv' => 'Phobject',
'PhabricatorSearchAbstractDocument' => 'Phobject',
'PhabricatorSearchApplication' => 'PhabricatorApplication',
'PhabricatorSearchApplicationSearchEngine' => 'PhabricatorApplicationSearchEngine',
'PhabricatorSearchApplicationStorageEnginePanel' => 'PhabricatorApplicationConfigurationPanel',
'PhabricatorSearchAttachController' => 'PhabricatorSearchBaseController',
'PhabricatorSearchBaseController' => 'PhabricatorController',
'PhabricatorSearchCheckboxesField' => 'PhabricatorSearchField',
'PhabricatorSearchConfigOptions' => 'PhabricatorApplicationConfigOptions',
'PhabricatorSearchController' => 'PhabricatorSearchBaseController',
'PhabricatorSearchCustomFieldProxyField' => 'PhabricatorSearchField',
'PhabricatorSearchDAO' => 'PhabricatorLiskDAO',
'PhabricatorSearchDatasource' => 'PhabricatorTypeaheadCompositeDatasource',
'PhabricatorSearchDatasourceField' => 'PhabricatorSearchTokenizerField',
'PhabricatorSearchDateControlField' => 'PhabricatorSearchField',
'PhabricatorSearchDateField' => 'PhabricatorSearchField',
'PhabricatorSearchDeleteController' => 'PhabricatorSearchBaseController',
'PhabricatorSearchDocument' => 'PhabricatorSearchDAO',
'PhabricatorSearchDocumentField' => 'PhabricatorSearchDAO',
'PhabricatorSearchDocumentFieldType' => 'Phobject',
'PhabricatorSearchDocumentIndexer' => 'Phobject',
'PhabricatorSearchDocumentQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PhabricatorSearchDocumentRelationship' => 'PhabricatorSearchDAO',
'PhabricatorSearchDocumentTypeDatasource' => 'PhabricatorTypeaheadDatasource',
'PhabricatorSearchEditController' => 'PhabricatorSearchBaseController',
'PhabricatorSearchEngine' => 'Phobject',
'PhabricatorSearchEngineTestCase' => 'PhabricatorTestCase',
'PhabricatorSearchField' => 'Phobject',
'PhabricatorSearchHovercardController' => 'PhabricatorSearchBaseController',
'PhabricatorSearchIndexer' => 'Phobject',
'PhabricatorSearchManagementIndexWorkflow' => 'PhabricatorSearchManagementWorkflow',
'PhabricatorSearchManagementInitWorkflow' => 'PhabricatorSearchManagementWorkflow',
'PhabricatorSearchManagementWorkflow' => 'PhabricatorManagementWorkflow',
'PhabricatorSearchOrderController' => 'PhabricatorSearchBaseController',
'PhabricatorSearchOrderField' => 'PhabricatorSearchField',
'PhabricatorSearchPreferencesSettingsPanel' => 'PhabricatorSettingsPanel',
'PhabricatorSearchRelationship' => 'Phobject',
'PhabricatorSearchResultView' => 'AphrontView',
'PhabricatorSearchSelectController' => 'PhabricatorSearchBaseController',
'PhabricatorSearchSelectField' => 'PhabricatorSearchField',
'PhabricatorSearchStringListField' => 'PhabricatorSearchField',
'PhabricatorSearchSubscribersField' => 'PhabricatorSearchTokenizerField',
'PhabricatorSearchTextField' => 'PhabricatorSearchField',
'PhabricatorSearchThreeStateField' => 'PhabricatorSearchField',
'PhabricatorSearchTokenizerField' => 'PhabricatorSearchField',
'PhabricatorSearchWorker' => 'PhabricatorWorker',
'PhabricatorSecurityConfigOptions' => 'PhabricatorApplicationConfigOptions',
'PhabricatorSecuritySetupCheck' => 'PhabricatorSetupCheck',
'PhabricatorSendGridConfigOptions' => 'PhabricatorApplicationConfigOptions',
'PhabricatorSessionsSettingsPanel' => 'PhabricatorSettingsPanel',
'PhabricatorSettingsAddEmailAction' => 'PhabricatorSystemAction',
'PhabricatorSettingsAdjustController' => 'PhabricatorController',
'PhabricatorSettingsApplication' => 'PhabricatorApplication',
'PhabricatorSettingsMainController' => 'PhabricatorController',
'PhabricatorSettingsPanel' => 'Phobject',
'PhabricatorSetupCheck' => 'Phobject',
'PhabricatorSetupCheckTestCase' => 'PhabricatorTestCase',
'PhabricatorSetupIssue' => 'Phobject',
'PhabricatorSetupIssueUIExample' => 'PhabricatorUIExample',
'PhabricatorSetupIssueView' => 'AphrontView',
'PhabricatorSite' => 'AphrontSite',
'PhabricatorSlowvoteApplication' => 'PhabricatorApplication',
'PhabricatorSlowvoteChoice' => 'PhabricatorSlowvoteDAO',
'PhabricatorSlowvoteCloseController' => 'PhabricatorSlowvoteController',
'PhabricatorSlowvoteCommentController' => 'PhabricatorSlowvoteController',
'PhabricatorSlowvoteController' => 'PhabricatorController',
'PhabricatorSlowvoteDAO' => 'PhabricatorLiskDAO',
'PhabricatorSlowvoteDefaultViewCapability' => 'PhabricatorPolicyCapability',
'PhabricatorSlowvoteEditController' => 'PhabricatorSlowvoteController',
'PhabricatorSlowvoteEditor' => 'PhabricatorApplicationTransactionEditor',
'PhabricatorSlowvoteListController' => 'PhabricatorSlowvoteController',
'PhabricatorSlowvoteMailReceiver' => 'PhabricatorObjectMailReceiver',
'PhabricatorSlowvoteOption' => 'PhabricatorSlowvoteDAO',
'PhabricatorSlowvotePoll' => array(
'PhabricatorSlowvoteDAO',
'PhabricatorApplicationTransactionInterface',
'PhabricatorPolicyInterface',
'PhabricatorSubscribableInterface',
'PhabricatorFlaggableInterface',
'PhabricatorTokenReceiverInterface',
'PhabricatorProjectInterface',
'PhabricatorDestructibleInterface',
'PhabricatorSpacesInterface',
),
'PhabricatorSlowvotePollController' => 'PhabricatorSlowvoteController',
'PhabricatorSlowvotePollPHIDType' => 'PhabricatorPHIDType',
'PhabricatorSlowvoteQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PhabricatorSlowvoteReplyHandler' => 'PhabricatorApplicationTransactionReplyHandler',
'PhabricatorSlowvoteSchemaSpec' => 'PhabricatorConfigSchemaSpec',
'PhabricatorSlowvoteSearchEngine' => 'PhabricatorApplicationSearchEngine',
'PhabricatorSlowvoteTransaction' => 'PhabricatorApplicationTransaction',
'PhabricatorSlowvoteTransactionComment' => 'PhabricatorApplicationTransactionComment',
'PhabricatorSlowvoteTransactionQuery' => 'PhabricatorApplicationTransactionQuery',
'PhabricatorSlowvoteVoteController' => 'PhabricatorSlowvoteController',
'PhabricatorSlug' => 'Phobject',
'PhabricatorSlugTestCase' => 'PhabricatorTestCase',
'PhabricatorSortTableUIExample' => 'PhabricatorUIExample',
'PhabricatorSourceCodeView' => 'AphrontView',
'PhabricatorSpacesApplication' => 'PhabricatorApplication',
'PhabricatorSpacesArchiveController' => 'PhabricatorSpacesController',
'PhabricatorSpacesCapabilityCreateSpaces' => 'PhabricatorPolicyCapability',
'PhabricatorSpacesCapabilityDefaultEdit' => 'PhabricatorPolicyCapability',
'PhabricatorSpacesCapabilityDefaultView' => 'PhabricatorPolicyCapability',
'PhabricatorSpacesController' => 'PhabricatorController',
'PhabricatorSpacesDAO' => 'PhabricatorLiskDAO',
'PhabricatorSpacesEditController' => 'PhabricatorSpacesController',
'PhabricatorSpacesInterface' => 'PhabricatorPHIDInterface',
'PhabricatorSpacesListController' => 'PhabricatorSpacesController',
'PhabricatorSpacesNamespace' => array(
'PhabricatorSpacesDAO',
'PhabricatorPolicyInterface',
'PhabricatorApplicationTransactionInterface',
'PhabricatorDestructibleInterface',
),
'PhabricatorSpacesNamespaceDatasource' => 'PhabricatorTypeaheadDatasource',
'PhabricatorSpacesNamespaceEditor' => 'PhabricatorApplicationTransactionEditor',
'PhabricatorSpacesNamespacePHIDType' => 'PhabricatorPHIDType',
'PhabricatorSpacesNamespaceQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PhabricatorSpacesNamespaceSearchEngine' => 'PhabricatorApplicationSearchEngine',
'PhabricatorSpacesNamespaceTransaction' => 'PhabricatorApplicationTransaction',
'PhabricatorSpacesNamespaceTransactionQuery' => 'PhabricatorApplicationTransactionQuery',
'PhabricatorSpacesNoAccessController' => 'PhabricatorSpacesController',
'PhabricatorSpacesRemarkupRule' => 'PhabricatorObjectRemarkupRule',
'PhabricatorSpacesSchemaSpec' => 'PhabricatorConfigSchemaSpec',
'PhabricatorSpacesSearchField' => 'PhabricatorSearchTokenizerField',
'PhabricatorSpacesTestCase' => 'PhabricatorTestCase',
'PhabricatorSpacesViewController' => 'PhabricatorSpacesController',
'PhabricatorStandardCustomField' => 'PhabricatorCustomField',
'PhabricatorStandardCustomFieldBool' => 'PhabricatorStandardCustomField',
'PhabricatorStandardCustomFieldCredential' => 'PhabricatorStandardCustomField',
'PhabricatorStandardCustomFieldDate' => 'PhabricatorStandardCustomField',
'PhabricatorStandardCustomFieldHeader' => 'PhabricatorStandardCustomField',
'PhabricatorStandardCustomFieldInt' => 'PhabricatorStandardCustomField',
'PhabricatorStandardCustomFieldLink' => 'PhabricatorStandardCustomField',
'PhabricatorStandardCustomFieldPHIDs' => 'PhabricatorStandardCustomField',
'PhabricatorStandardCustomFieldRemarkup' => 'PhabricatorStandardCustomField',
'PhabricatorStandardCustomFieldSelect' => 'PhabricatorStandardCustomField',
'PhabricatorStandardCustomFieldText' => 'PhabricatorStandardCustomField',
'PhabricatorStandardCustomFieldUsers' => 'PhabricatorStandardCustomFieldPHIDs',
'PhabricatorStandardPageView' => 'PhabricatorBarePageView',
'PhabricatorStandardSelectCustomFieldDatasource' => 'PhabricatorTypeaheadDatasource',
'PhabricatorStatusController' => 'PhabricatorController',
'PhabricatorStatusUIExample' => 'PhabricatorUIExample',
'PhabricatorStorageFixtureScopeGuard' => 'Phobject',
'PhabricatorStorageManagementAPI' => 'Phobject',
'PhabricatorStorageManagementAdjustWorkflow' => 'PhabricatorStorageManagementWorkflow',
'PhabricatorStorageManagementDatabasesWorkflow' => 'PhabricatorStorageManagementWorkflow',
'PhabricatorStorageManagementDestroyWorkflow' => 'PhabricatorStorageManagementWorkflow',
'PhabricatorStorageManagementDumpWorkflow' => 'PhabricatorStorageManagementWorkflow',
'PhabricatorStorageManagementProbeWorkflow' => 'PhabricatorStorageManagementWorkflow',
'PhabricatorStorageManagementQuickstartWorkflow' => 'PhabricatorStorageManagementWorkflow',
'PhabricatorStorageManagementRenamespaceWorkflow' => 'PhabricatorStorageManagementWorkflow',
'PhabricatorStorageManagementShellWorkflow' => 'PhabricatorStorageManagementWorkflow',
'PhabricatorStorageManagementStatusWorkflow' => 'PhabricatorStorageManagementWorkflow',
'PhabricatorStorageManagementUpgradeWorkflow' => 'PhabricatorStorageManagementWorkflow',
'PhabricatorStorageManagementWorkflow' => 'PhabricatorManagementWorkflow',
'PhabricatorStoragePatch' => 'Phobject',
'PhabricatorStorageSchemaSpec' => 'PhabricatorConfigSchemaSpec',
'PhabricatorStorageSetupCheck' => 'PhabricatorSetupCheck',
'PhabricatorStreamingProtocolAdapter' => 'PhabricatorProtocolAdapter',
'PhabricatorSubscribedToObjectEdgeType' => 'PhabricatorEdgeType',
'PhabricatorSubscribersQuery' => 'PhabricatorQuery',
'PhabricatorSubscriptionTriggerClock' => 'PhabricatorTriggerClock',
'PhabricatorSubscriptionsAddSelfHeraldAction' => 'PhabricatorSubscriptionsHeraldAction',
'PhabricatorSubscriptionsAddSubscribersHeraldAction' => 'PhabricatorSubscriptionsHeraldAction',
'PhabricatorSubscriptionsApplication' => 'PhabricatorApplication',
'PhabricatorSubscriptionsEditController' => 'PhabricatorController',
'PhabricatorSubscriptionsEditor' => 'PhabricatorEditor',
'PhabricatorSubscriptionsHeraldAction' => 'HeraldAction',
'PhabricatorSubscriptionsListController' => 'PhabricatorController',
'PhabricatorSubscriptionsRemoveSelfHeraldAction' => 'PhabricatorSubscriptionsHeraldAction',
'PhabricatorSubscriptionsRemoveSubscribersHeraldAction' => 'PhabricatorSubscriptionsHeraldAction',
'PhabricatorSubscriptionsSubscribeEmailCommand' => 'MetaMTAEmailTransactionCommand',
'PhabricatorSubscriptionsSubscribersPolicyRule' => 'PhabricatorPolicyRule',
'PhabricatorSubscriptionsTransactionController' => 'PhabricatorController',
'PhabricatorSubscriptionsUIEventListener' => 'PhabricatorEventListener',
'PhabricatorSubscriptionsUnsubscribeEmailCommand' => 'MetaMTAEmailTransactionCommand',
'PhabricatorSupportApplication' => 'PhabricatorApplication',
'PhabricatorSyntaxHighlighter' => 'Phobject',
'PhabricatorSyntaxHighlightingConfigOptions' => 'PhabricatorApplicationConfigOptions',
'PhabricatorSystemAction' => 'Phobject',
'PhabricatorSystemActionEngine' => 'Phobject',
'PhabricatorSystemActionGarbageCollector' => 'PhabricatorGarbageCollector',
'PhabricatorSystemActionLog' => 'PhabricatorSystemDAO',
'PhabricatorSystemActionRateLimitException' => 'Exception',
'PhabricatorSystemApplication' => 'PhabricatorApplication',
'PhabricatorSystemDAO' => 'PhabricatorLiskDAO',
'PhabricatorSystemDestructionGarbageCollector' => 'PhabricatorGarbageCollector',
'PhabricatorSystemDestructionLog' => 'PhabricatorSystemDAO',
'PhabricatorSystemRemoveDestroyWorkflow' => 'PhabricatorSystemRemoveWorkflow',
'PhabricatorSystemRemoveLogWorkflow' => 'PhabricatorSystemRemoveWorkflow',
'PhabricatorSystemRemoveWorkflow' => 'PhabricatorManagementWorkflow',
'PhabricatorSystemSelectEncodingController' => 'PhabricatorController',
'PhabricatorSystemSelectHighlightController' => 'PhabricatorController',
'PhabricatorTOTPAuthFactor' => 'PhabricatorAuthFactor',
'PhabricatorTOTPAuthFactorTestCase' => 'PhabricatorTestCase',
'PhabricatorTaskmasterDaemon' => 'PhabricatorDaemon',
'PhabricatorTestApplication' => 'PhabricatorApplication',
'PhabricatorTestCase' => 'PhutilTestCase',
'PhabricatorTestController' => 'PhabricatorController',
'PhabricatorTestDataGenerator' => 'Phobject',
'PhabricatorTestNoCycleEdgeType' => 'PhabricatorEdgeType',
'PhabricatorTestStorageEngine' => 'PhabricatorFileStorageEngine',
'PhabricatorTestWorker' => 'PhabricatorWorker',
'PhabricatorTime' => 'Phobject',
'PhabricatorTimeGuard' => 'Phobject',
'PhabricatorTimeTestCase' => 'PhabricatorTestCase',
'PhabricatorTimezoneSetupCheck' => 'PhabricatorSetupCheck',
'PhabricatorToken' => array(
'PhabricatorTokenDAO',
'PhabricatorPolicyInterface',
),
'PhabricatorTokenController' => 'PhabricatorController',
'PhabricatorTokenCount' => 'PhabricatorTokenDAO',
'PhabricatorTokenCountQuery' => 'PhabricatorOffsetPagedQuery',
'PhabricatorTokenDAO' => 'PhabricatorLiskDAO',
'PhabricatorTokenGiveController' => 'PhabricatorTokenController',
'PhabricatorTokenGiven' => array(
'PhabricatorTokenDAO',
'PhabricatorPolicyInterface',
),
'PhabricatorTokenGivenController' => 'PhabricatorTokenController',
'PhabricatorTokenGivenEditor' => 'PhabricatorEditor',
'PhabricatorTokenGivenFeedStory' => 'PhabricatorFeedStory',
'PhabricatorTokenGivenQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PhabricatorTokenLeaderController' => 'PhabricatorTokenController',
'PhabricatorTokenQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PhabricatorTokenReceiverQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PhabricatorTokenTokenPHIDType' => 'PhabricatorPHIDType',
'PhabricatorTokenUIEventListener' => 'PhabricatorEventListener',
'PhabricatorTokensApplication' => 'PhabricatorApplication',
'PhabricatorTokensSettingsPanel' => 'PhabricatorSettingsPanel',
'PhabricatorTooltipUIExample' => 'PhabricatorUIExample',
'PhabricatorTransactions' => 'Phobject',
'PhabricatorTransactionsApplication' => 'PhabricatorApplication',
'PhabricatorTransformedFile' => 'PhabricatorFileDAO',
'PhabricatorTranslationsConfigOptions' => 'PhabricatorApplicationConfigOptions',
'PhabricatorTriggerAction' => 'Phobject',
'PhabricatorTriggerClock' => 'Phobject',
'PhabricatorTriggerClockTestCase' => 'PhabricatorTestCase',
'PhabricatorTriggerDaemon' => 'PhabricatorDaemon',
'PhabricatorTrivialTestCase' => 'PhabricatorTestCase',
'PhabricatorTwitchAuthProvider' => 'PhabricatorOAuth2AuthProvider',
'PhabricatorTwitterAuthProvider' => 'PhabricatorOAuth1AuthProvider',
'PhabricatorTypeaheadApplication' => 'PhabricatorApplication',
'PhabricatorTypeaheadCompositeDatasource' => 'PhabricatorTypeaheadDatasource',
'PhabricatorTypeaheadDatasource' => 'Phobject',
'PhabricatorTypeaheadDatasourceController' => 'PhabricatorController',
'PhabricatorTypeaheadFunctionHelpController' => 'PhabricatorTypeaheadDatasourceController',
'PhabricatorTypeaheadInvalidTokenException' => 'Exception',
'PhabricatorTypeaheadModularDatasourceController' => 'PhabricatorTypeaheadDatasourceController',
'PhabricatorTypeaheadMonogramDatasource' => 'PhabricatorTypeaheadDatasource',
'PhabricatorTypeaheadResult' => 'Phobject',
'PhabricatorTypeaheadRuntimeCompositeDatasource' => 'PhabricatorTypeaheadCompositeDatasource',
'PhabricatorTypeaheadTokenView' => 'AphrontTagView',
'PhabricatorUIConfigOptions' => 'PhabricatorApplicationConfigOptions',
'PhabricatorUIExample' => 'Phobject',
'PhabricatorUIExampleRenderController' => 'PhabricatorController',
'PhabricatorUIExamplesApplication' => 'PhabricatorApplication',
'PhabricatorUSEnglishTranslation' => 'PhutilTranslation',
'PhabricatorUnitsTestCase' => 'PhabricatorTestCase',
'PhabricatorUnsubscribedFromObjectEdgeType' => 'PhabricatorEdgeType',
'PhabricatorUser' => array(
'PhabricatorUserDAO',
'PhutilPerson',
'PhabricatorPolicyInterface',
'PhabricatorCustomFieldInterface',
'PhabricatorDestructibleInterface',
'PhabricatorSSHPublicKeyInterface',
'PhabricatorFlaggableInterface',
'PhabricatorApplicationTransactionInterface',
),
'PhabricatorUserBlurbField' => 'PhabricatorUserCustomField',
'PhabricatorUserConfigOptions' => 'PhabricatorApplicationConfigOptions',
'PhabricatorUserConfiguredCustomField' => array(
'PhabricatorUserCustomField',
'PhabricatorStandardCustomFieldInterface',
),
'PhabricatorUserConfiguredCustomFieldStorage' => 'PhabricatorCustomFieldStorage',
'PhabricatorUserCustomField' => 'PhabricatorCustomField',
'PhabricatorUserCustomFieldNumericIndex' => 'PhabricatorCustomFieldNumericIndexStorage',
'PhabricatorUserCustomFieldStringIndex' => 'PhabricatorCustomFieldStringIndexStorage',
'PhabricatorUserDAO' => 'PhabricatorLiskDAO',
'PhabricatorUserEditor' => 'PhabricatorEditor',
'PhabricatorUserEditorTestCase' => 'PhabricatorTestCase',
'PhabricatorUserEmail' => 'PhabricatorUserDAO',
'PhabricatorUserEmailTestCase' => 'PhabricatorTestCase',
'PhabricatorUserLog' => array(
'PhabricatorUserDAO',
'PhabricatorPolicyInterface',
),
'PhabricatorUserLogView' => 'AphrontView',
'PhabricatorUserPreferences' => 'PhabricatorUserDAO',
'PhabricatorUserProfile' => 'PhabricatorUserDAO',
'PhabricatorUserProfileEditor' => 'PhabricatorApplicationTransactionEditor',
'PhabricatorUserRealNameField' => 'PhabricatorUserCustomField',
'PhabricatorUserRolesField' => 'PhabricatorUserCustomField',
'PhabricatorUserSchemaSpec' => 'PhabricatorConfigSchemaSpec',
'PhabricatorUserSearchIndexer' => 'PhabricatorSearchDocumentIndexer',
'PhabricatorUserSinceField' => 'PhabricatorUserCustomField',
'PhabricatorUserStatusField' => 'PhabricatorUserCustomField',
'PhabricatorUserTestCase' => 'PhabricatorTestCase',
'PhabricatorUserTitleField' => 'PhabricatorUserCustomField',
'PhabricatorUserTransaction' => 'PhabricatorApplicationTransaction',
'PhabricatorUsersPolicyRule' => 'PhabricatorPolicyRule',
'PhabricatorUsersSearchField' => 'PhabricatorSearchTokenizerField',
'PhabricatorVCSResponse' => 'AphrontResponse',
'PhabricatorVeryWowEnglishTranslation' => 'PhutilTranslation',
'PhabricatorViewerDatasource' => 'PhabricatorTypeaheadDatasource',
'PhabricatorWatcherHasObjectEdgeType' => 'PhabricatorEdgeType',
'PhabricatorWordPressAuthProvider' => 'PhabricatorOAuth2AuthProvider',
'PhabricatorWorker' => 'Phobject',
'PhabricatorWorkerActiveTask' => 'PhabricatorWorkerTask',
'PhabricatorWorkerArchiveTask' => 'PhabricatorWorkerTask',
'PhabricatorWorkerArchiveTaskQuery' => 'PhabricatorQuery',
'PhabricatorWorkerBulkJob' => array(
'PhabricatorWorkerDAO',
'PhabricatorPolicyInterface',
'PhabricatorSubscribableInterface',
'PhabricatorApplicationTransactionInterface',
'PhabricatorDestructibleInterface',
),
'PhabricatorWorkerBulkJobCreateWorker' => 'PhabricatorWorkerBulkJobWorker',
'PhabricatorWorkerBulkJobEditor' => 'PhabricatorApplicationTransactionEditor',
'PhabricatorWorkerBulkJobPHIDType' => 'PhabricatorPHIDType',
'PhabricatorWorkerBulkJobQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PhabricatorWorkerBulkJobSearchEngine' => 'PhabricatorApplicationSearchEngine',
'PhabricatorWorkerBulkJobTaskWorker' => 'PhabricatorWorkerBulkJobWorker',
'PhabricatorWorkerBulkJobTestCase' => 'PhabricatorTestCase',
'PhabricatorWorkerBulkJobTransaction' => 'PhabricatorApplicationTransaction',
'PhabricatorWorkerBulkJobTransactionQuery' => 'PhabricatorApplicationTransactionQuery',
'PhabricatorWorkerBulkJobType' => 'Phobject',
'PhabricatorWorkerBulkJobWorker' => 'PhabricatorWorker',
'PhabricatorWorkerBulkTask' => 'PhabricatorWorkerDAO',
'PhabricatorWorkerDAO' => 'PhabricatorLiskDAO',
'PhabricatorWorkerLeaseQuery' => 'PhabricatorQuery',
'PhabricatorWorkerManagementCancelWorkflow' => 'PhabricatorWorkerManagementWorkflow',
'PhabricatorWorkerManagementExecuteWorkflow' => 'PhabricatorWorkerManagementWorkflow',
'PhabricatorWorkerManagementFloodWorkflow' => 'PhabricatorWorkerManagementWorkflow',
'PhabricatorWorkerManagementFreeWorkflow' => 'PhabricatorWorkerManagementWorkflow',
'PhabricatorWorkerManagementRetryWorkflow' => 'PhabricatorWorkerManagementWorkflow',
'PhabricatorWorkerManagementWorkflow' => 'PhabricatorManagementWorkflow',
'PhabricatorWorkerPermanentFailureException' => 'Exception',
'PhabricatorWorkerSchemaSpec' => 'PhabricatorConfigSchemaSpec',
'PhabricatorWorkerTask' => 'PhabricatorWorkerDAO',
'PhabricatorWorkerTaskData' => 'PhabricatorWorkerDAO',
'PhabricatorWorkerTaskDetailController' => 'PhabricatorDaemonController',
'PhabricatorWorkerTestCase' => 'PhabricatorTestCase',
'PhabricatorWorkerTrigger' => array(
'PhabricatorWorkerDAO',
'PhabricatorDestructibleInterface',
'PhabricatorPolicyInterface',
),
'PhabricatorWorkerTriggerEvent' => 'PhabricatorWorkerDAO',
'PhabricatorWorkerTriggerManagementFireWorkflow' => 'PhabricatorWorkerTriggerManagementWorkflow',
'PhabricatorWorkerTriggerManagementWorkflow' => 'PhabricatorManagementWorkflow',
'PhabricatorWorkerTriggerPHIDType' => 'PhabricatorPHIDType',
'PhabricatorWorkerTriggerQuery' => 'PhabricatorPolicyAwareQuery',
'PhabricatorWorkerYieldException' => 'Exception',
'PhabricatorWorkingCopyDiscoveryTestCase' => 'PhabricatorWorkingCopyTestCase',
'PhabricatorWorkingCopyPullTestCase' => 'PhabricatorWorkingCopyTestCase',
'PhabricatorWorkingCopyTestCase' => 'PhabricatorTestCase',
'PhabricatorXHPASTViewController' => 'PhabricatorController',
'PhabricatorXHPASTViewDAO' => 'PhabricatorLiskDAO',
'PhabricatorXHPASTViewFrameController' => 'PhabricatorXHPASTViewController',
'PhabricatorXHPASTViewFramesetController' => 'PhabricatorXHPASTViewController',
'PhabricatorXHPASTViewInputController' => 'PhabricatorXHPASTViewPanelController',
'PhabricatorXHPASTViewPanelController' => 'PhabricatorXHPASTViewController',
'PhabricatorXHPASTViewParseTree' => 'PhabricatorXHPASTViewDAO',
'PhabricatorXHPASTViewRunController' => 'PhabricatorXHPASTViewController',
'PhabricatorXHPASTViewStreamController' => 'PhabricatorXHPASTViewPanelController',
'PhabricatorXHPASTViewTreeController' => 'PhabricatorXHPASTViewPanelController',
'PhabricatorXHProfApplication' => 'PhabricatorApplication',
'PhabricatorXHProfController' => 'PhabricatorController',
'PhabricatorXHProfDAO' => 'PhabricatorLiskDAO',
'PhabricatorXHProfProfileController' => 'PhabricatorXHProfController',
'PhabricatorXHProfProfileSymbolView' => 'PhabricatorXHProfProfileView',
'PhabricatorXHProfProfileTopLevelView' => 'PhabricatorXHProfProfileView',
'PhabricatorXHProfProfileView' => 'AphrontView',
'PhabricatorXHProfSample' => 'PhabricatorXHProfDAO',
'PhabricatorXHProfSampleListController' => 'PhabricatorXHProfController',
'PhabricatorYoutubeRemarkupRule' => 'PhutilRemarkupRule',
'PhameBasicBlogSkin' => 'PhameBlogSkin',
'PhameBasicTemplateBlogSkin' => 'PhameBasicBlogSkin',
'PhameBlog' => array(
'PhameDAO',
'PhabricatorPolicyInterface',
'PhabricatorMarkupInterface',
'PhabricatorSubscribableInterface',
'PhabricatorFlaggableInterface',
'PhabricatorProjectInterface',
'PhabricatorApplicationTransactionInterface',
),
'PhameBlogDeleteController' => 'PhameController',
'PhameBlogEditController' => 'PhameController',
'PhameBlogEditor' => 'PhabricatorApplicationTransactionEditor',
'PhameBlogFeedController' => 'PhameController',
'PhameBlogListController' => 'PhameController',
'PhameBlogLiveController' => 'PhameController',
'PhameBlogQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PhameBlogSearchEngine' => 'PhabricatorApplicationSearchEngine',
'PhameBlogSite' => 'PhameSite',
'PhameBlogSkin' => 'PhabricatorController',
'PhameBlogTransaction' => 'PhabricatorApplicationTransaction',
'PhameBlogViewController' => 'PhameController',
'PhameCelerityResources' => 'CelerityResources',
'PhameConduitAPIMethod' => 'ConduitAPIMethod',
'PhameController' => 'PhabricatorController',
'PhameCreatePostConduitAPIMethod' => 'PhameConduitAPIMethod',
'PhameDAO' => 'PhabricatorLiskDAO',
'PhamePost' => array(
'PhameDAO',
'PhabricatorPolicyInterface',
'PhabricatorMarkupInterface',
'PhabricatorFlaggableInterface',
'PhabricatorProjectInterface',
'PhabricatorApplicationTransactionInterface',
'PhabricatorSubscribableInterface',
'PhabricatorTokenReceiverInterface',
),
'PhamePostDeleteController' => 'PhameController',
'PhamePostEditController' => 'PhameController',
'PhamePostEditor' => 'PhabricatorApplicationTransactionEditor',
'PhamePostFramedController' => 'PhameController',
'PhamePostListController' => 'PhameController',
'PhamePostNewController' => 'PhameController',
'PhamePostNotLiveController' => 'PhameController',
'PhamePostPreviewController' => 'PhameController',
'PhamePostPublishController' => 'PhameController',
'PhamePostQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PhamePostSearchEngine' => 'PhabricatorApplicationSearchEngine',
'PhamePostTransaction' => 'PhabricatorApplicationTransaction',
'PhamePostTransactionQuery' => 'PhabricatorApplicationTransactionQuery',
'PhamePostUnpublishController' => 'PhameController',
'PhamePostView' => 'AphrontView',
'PhamePostViewController' => 'PhameController',
'PhameQueryConduitAPIMethod' => 'PhameConduitAPIMethod',
'PhameQueryPostsConduitAPIMethod' => 'PhameConduitAPIMethod',
'PhameResourceController' => 'CelerityResourceController',
'PhameSchemaSpec' => 'PhabricatorConfigSchemaSpec',
'PhameSite' => 'PhabricatorSite',
'PhameSkinSpecification' => 'Phobject',
'PhluxController' => 'PhabricatorController',
'PhluxDAO' => 'PhabricatorLiskDAO',
'PhluxEditController' => 'PhluxController',
'PhluxListController' => 'PhluxController',
'PhluxTransaction' => 'PhabricatorApplicationTransaction',
'PhluxTransactionQuery' => 'PhabricatorApplicationTransactionQuery',
'PhluxVariable' => array(
'PhluxDAO',
'PhabricatorApplicationTransactionInterface',
'PhabricatorFlaggableInterface',
'PhabricatorPolicyInterface',
),
'PhluxVariableEditor' => 'PhabricatorApplicationTransactionEditor',
'PhluxVariablePHIDType' => 'PhabricatorPHIDType',
'PhluxVariableQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PhluxViewController' => 'PhluxController',
'PholioActionMenuEventListener' => 'PhabricatorEventListener',
'PholioController' => 'PhabricatorController',
'PholioDAO' => 'PhabricatorLiskDAO',
'PholioDefaultEditCapability' => 'PhabricatorPolicyCapability',
'PholioDefaultViewCapability' => 'PhabricatorPolicyCapability',
'PholioImage' => array(
'PholioDAO',
'PhabricatorMarkupInterface',
'PhabricatorPolicyInterface',
),
'PholioImagePHIDType' => 'PhabricatorPHIDType',
'PholioImageQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PholioImageUploadController' => 'PholioController',
'PholioInlineController' => 'PholioController',
'PholioInlineListController' => 'PholioController',
'PholioMock' => array(
'PholioDAO',
'PhabricatorMarkupInterface',
'PhabricatorPolicyInterface',
'PhabricatorSubscribableInterface',
'PhabricatorTokenReceiverInterface',
'PhabricatorFlaggableInterface',
'PhabricatorApplicationTransactionInterface',
'PhabricatorProjectInterface',
'PhabricatorDestructibleInterface',
'PhabricatorSpacesInterface',
'PhabricatorMentionableInterface',
),
'PholioMockAuthorHeraldField' => 'PholioMockHeraldField',
'PholioMockCommentController' => 'PholioController',
'PholioMockDescriptionHeraldField' => 'PholioMockHeraldField',
'PholioMockEditController' => 'PholioController',
'PholioMockEditor' => 'PhabricatorApplicationTransactionEditor',
'PholioMockEmbedView' => 'AphrontView',
'PholioMockHasTaskEdgeType' => 'PhabricatorEdgeType',
'PholioMockHeraldField' => 'HeraldField',
'PholioMockHeraldFieldGroup' => 'HeraldFieldGroup',
'PholioMockImagesView' => 'AphrontView',
'PholioMockListController' => 'PholioController',
'PholioMockMailReceiver' => 'PhabricatorObjectMailReceiver',
'PholioMockNameHeraldField' => 'PholioMockHeraldField',
'PholioMockPHIDType' => 'PhabricatorPHIDType',
'PholioMockQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PholioMockSearchEngine' => 'PhabricatorApplicationSearchEngine',
'PholioMockThumbGridView' => 'AphrontView',
'PholioMockViewController' => 'PholioController',
'PholioRemarkupRule' => 'PhabricatorObjectRemarkupRule',
'PholioReplyHandler' => 'PhabricatorApplicationTransactionReplyHandler',
'PholioSchemaSpec' => 'PhabricatorConfigSchemaSpec',
'PholioSearchIndexer' => 'PhabricatorSearchDocumentIndexer',
'PholioTransaction' => 'PhabricatorApplicationTransaction',
'PholioTransactionComment' => 'PhabricatorApplicationTransactionComment',
'PholioTransactionQuery' => 'PhabricatorApplicationTransactionQuery',
'PholioTransactionView' => 'PhabricatorApplicationTransactionView',
'PholioUploadedImageView' => 'AphrontView',
'PhortuneAccount' => array(
'PhortuneDAO',
'PhabricatorApplicationTransactionInterface',
'PhabricatorPolicyInterface',
),
'PhortuneAccountEditController' => 'PhortuneController',
'PhortuneAccountEditor' => 'PhabricatorApplicationTransactionEditor',
'PhortuneAccountHasMemberEdgeType' => 'PhabricatorEdgeType',
'PhortuneAccountListController' => 'PhortuneController',
'PhortuneAccountPHIDType' => 'PhabricatorPHIDType',
'PhortuneAccountQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PhortuneAccountTransaction' => 'PhabricatorApplicationTransaction',
'PhortuneAccountTransactionQuery' => 'PhabricatorApplicationTransactionQuery',
'PhortuneAccountViewController' => 'PhortuneController',
'PhortuneAdHocCart' => 'PhortuneCartImplementation',
'PhortuneAdHocProduct' => 'PhortuneProductImplementation',
'PhortuneCart' => array(
'PhortuneDAO',
'PhabricatorApplicationTransactionInterface',
'PhabricatorPolicyInterface',
),
'PhortuneCartAcceptController' => 'PhortuneCartController',
'PhortuneCartCancelController' => 'PhortuneCartController',
'PhortuneCartCheckoutController' => 'PhortuneCartController',
'PhortuneCartController' => 'PhortuneController',
'PhortuneCartEditor' => 'PhabricatorApplicationTransactionEditor',
'PhortuneCartImplementation' => 'Phobject',
'PhortuneCartListController' => 'PhortuneController',
'PhortuneCartPHIDType' => 'PhabricatorPHIDType',
'PhortuneCartQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PhortuneCartReplyHandler' => 'PhabricatorApplicationTransactionReplyHandler',
'PhortuneCartSearchEngine' => 'PhabricatorApplicationSearchEngine',
'PhortuneCartTransaction' => 'PhabricatorApplicationTransaction',
'PhortuneCartTransactionQuery' => 'PhabricatorApplicationTransactionQuery',
'PhortuneCartUpdateController' => 'PhortuneCartController',
'PhortuneCartViewController' => 'PhortuneCartController',
'PhortuneCharge' => array(
'PhortuneDAO',
'PhabricatorPolicyInterface',
),
'PhortuneChargeListController' => 'PhortuneController',
'PhortuneChargePHIDType' => 'PhabricatorPHIDType',
'PhortuneChargeQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PhortuneChargeSearchEngine' => 'PhabricatorApplicationSearchEngine',
'PhortuneChargeTableView' => 'AphrontView',
'PhortuneConstants' => 'Phobject',
'PhortuneController' => 'PhabricatorController',
'PhortuneCreditCardForm' => 'Phobject',
'PhortuneCurrency' => 'Phobject',
'PhortuneCurrencySerializer' => 'PhabricatorLiskSerializer',
'PhortuneCurrencyTestCase' => 'PhabricatorTestCase',
'PhortuneDAO' => 'PhabricatorLiskDAO',
'PhortuneErrCode' => 'PhortuneConstants',
'PhortuneLandingController' => 'PhortuneController',
'PhortuneMemberHasAccountEdgeType' => 'PhabricatorEdgeType',
'PhortuneMemberHasMerchantEdgeType' => 'PhabricatorEdgeType',
'PhortuneMerchant' => array(
'PhortuneDAO',
'PhabricatorApplicationTransactionInterface',
'PhabricatorPolicyInterface',
),
'PhortuneMerchantCapability' => 'PhabricatorPolicyCapability',
'PhortuneMerchantController' => 'PhortuneController',
'PhortuneMerchantEditController' => 'PhortuneMerchantController',
'PhortuneMerchantEditor' => 'PhabricatorApplicationTransactionEditor',
'PhortuneMerchantHasMemberEdgeType' => 'PhabricatorEdgeType',
'PhortuneMerchantInvoiceCreateController' => 'PhortuneMerchantController',
'PhortuneMerchantListController' => 'PhortuneMerchantController',
'PhortuneMerchantPHIDType' => 'PhabricatorPHIDType',
'PhortuneMerchantQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PhortuneMerchantSearchEngine' => 'PhabricatorApplicationSearchEngine',
'PhortuneMerchantTransaction' => 'PhabricatorApplicationTransaction',
'PhortuneMerchantTransactionQuery' => 'PhabricatorApplicationTransactionQuery',
'PhortuneMerchantViewController' => 'PhortuneMerchantController',
'PhortuneMonthYearExpiryControl' => 'AphrontFormControl',
'PhortuneNotImplementedException' => 'Exception',
'PhortuneOrderTableView' => 'AphrontView',
'PhortunePayPalPaymentProvider' => 'PhortunePaymentProvider',
'PhortunePaymentMethod' => array(
'PhortuneDAO',
'PhabricatorPolicyInterface',
),
'PhortunePaymentMethodCreateController' => 'PhortuneController',
'PhortunePaymentMethodDisableController' => 'PhortuneController',
'PhortunePaymentMethodEditController' => 'PhortuneController',
'PhortunePaymentMethodPHIDType' => 'PhabricatorPHIDType',
'PhortunePaymentMethodQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PhortunePaymentProvider' => 'Phobject',
'PhortunePaymentProviderConfig' => array(
'PhortuneDAO',
'PhabricatorPolicyInterface',
),
'PhortunePaymentProviderConfigEditor' => 'PhabricatorApplicationTransactionEditor',
'PhortunePaymentProviderConfigQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PhortunePaymentProviderConfigTransaction' => 'PhabricatorApplicationTransaction',
'PhortunePaymentProviderConfigTransactionQuery' => 'PhabricatorApplicationTransactionQuery',
'PhortunePaymentProviderPHIDType' => 'PhabricatorPHIDType',
'PhortunePaymentProviderTestCase' => 'PhabricatorTestCase',
'PhortuneProduct' => array(
'PhortuneDAO',
'PhabricatorPolicyInterface',
),
'PhortuneProductImplementation' => 'Phobject',
'PhortuneProductListController' => 'PhabricatorController',
'PhortuneProductPHIDType' => 'PhabricatorPHIDType',
'PhortuneProductQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PhortuneProductViewController' => 'PhortuneController',
'PhortuneProviderActionController' => 'PhortuneController',
'PhortuneProviderDisableController' => 'PhortuneMerchantController',
'PhortuneProviderEditController' => 'PhortuneMerchantController',
'PhortunePurchase' => array(
'PhortuneDAO',
'PhabricatorPolicyInterface',
),
'PhortunePurchasePHIDType' => 'PhabricatorPHIDType',
'PhortunePurchaseQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PhortuneSchemaSpec' => 'PhabricatorConfigSchemaSpec',
'PhortuneStripePaymentProvider' => 'PhortunePaymentProvider',
'PhortuneSubscription' => array(
'PhortuneDAO',
'PhabricatorPolicyInterface',
),
'PhortuneSubscriptionCart' => 'PhortuneCartImplementation',
'PhortuneSubscriptionEditController' => 'PhortuneController',
'PhortuneSubscriptionImplementation' => 'Phobject',
'PhortuneSubscriptionListController' => 'PhortuneController',
'PhortuneSubscriptionPHIDType' => 'PhabricatorPHIDType',
'PhortuneSubscriptionProduct' => 'PhortuneProductImplementation',
'PhortuneSubscriptionQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PhortuneSubscriptionSearchEngine' => 'PhabricatorApplicationSearchEngine',
'PhortuneSubscriptionTableView' => 'AphrontView',
'PhortuneSubscriptionViewController' => 'PhortuneController',
'PhortuneSubscriptionWorker' => 'PhabricatorWorker',
'PhortuneTestPaymentProvider' => 'PhortunePaymentProvider',
'PhortuneWePayPaymentProvider' => 'PhortunePaymentProvider',
'PhragmentBrowseController' => 'PhragmentController',
'PhragmentCanCreateCapability' => 'PhabricatorPolicyCapability',
'PhragmentConduitAPIMethod' => 'ConduitAPIMethod',
'PhragmentController' => 'PhabricatorController',
'PhragmentCreateController' => 'PhragmentController',
'PhragmentDAO' => 'PhabricatorLiskDAO',
'PhragmentFragment' => array(
'PhragmentDAO',
'PhabricatorPolicyInterface',
),
'PhragmentFragmentPHIDType' => 'PhabricatorPHIDType',
'PhragmentFragmentQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PhragmentFragmentVersion' => array(
'PhragmentDAO',
'PhabricatorPolicyInterface',
),
'PhragmentFragmentVersionPHIDType' => 'PhabricatorPHIDType',
'PhragmentFragmentVersionQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PhragmentGetPatchConduitAPIMethod' => 'PhragmentConduitAPIMethod',
'PhragmentHistoryController' => 'PhragmentController',
'PhragmentPatchController' => 'PhragmentController',
'PhragmentPatchUtil' => 'Phobject',
'PhragmentPolicyController' => 'PhragmentController',
'PhragmentQueryFragmentsConduitAPIMethod' => 'PhragmentConduitAPIMethod',
'PhragmentRevertController' => 'PhragmentController',
'PhragmentSchemaSpec' => 'PhabricatorConfigSchemaSpec',
'PhragmentSnapshot' => array(
'PhragmentDAO',
'PhabricatorPolicyInterface',
),
'PhragmentSnapshotChild' => array(
'PhragmentDAO',
'PhabricatorPolicyInterface',
),
'PhragmentSnapshotChildQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PhragmentSnapshotCreateController' => 'PhragmentController',
'PhragmentSnapshotDeleteController' => 'PhragmentController',
'PhragmentSnapshotPHIDType' => 'PhabricatorPHIDType',
'PhragmentSnapshotPromoteController' => 'PhragmentController',
'PhragmentSnapshotQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PhragmentSnapshotViewController' => 'PhragmentController',
'PhragmentUpdateController' => 'PhragmentController',
'PhragmentVersionController' => 'PhragmentController',
'PhragmentZIPController' => 'PhragmentController',
'PhrequentConduitAPIMethod' => 'ConduitAPIMethod',
'PhrequentController' => 'PhabricatorController',
'PhrequentDAO' => 'PhabricatorLiskDAO',
'PhrequentListController' => 'PhrequentController',
'PhrequentPopConduitAPIMethod' => 'PhrequentConduitAPIMethod',
'PhrequentPushConduitAPIMethod' => 'PhrequentConduitAPIMethod',
'PhrequentSearchEngine' => 'PhabricatorApplicationSearchEngine',
'PhrequentTimeBlock' => 'Phobject',
'PhrequentTimeBlockTestCase' => 'PhabricatorTestCase',
'PhrequentTimeSlices' => 'Phobject',
'PhrequentTrackController' => 'PhrequentController',
'PhrequentTrackingConduitAPIMethod' => 'PhrequentConduitAPIMethod',
'PhrequentTrackingEditor' => 'PhabricatorEditor',
'PhrequentUIEventListener' => 'PhabricatorEventListener',
'PhrequentUserTime' => array(
'PhrequentDAO',
'PhabricatorPolicyInterface',
),
'PhrequentUserTimeQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PhrictionChangeType' => 'PhrictionConstants',
'PhrictionConduitAPIMethod' => 'ConduitAPIMethod',
'PhrictionConstants' => 'Phobject',
'PhrictionContent' => array(
'PhrictionDAO',
'PhabricatorMarkupInterface',
),
'PhrictionController' => 'PhabricatorController',
'PhrictionCreateConduitAPIMethod' => 'PhrictionConduitAPIMethod',
'PhrictionDAO' => 'PhabricatorLiskDAO',
'PhrictionDeleteController' => 'PhrictionController',
'PhrictionDiffController' => 'PhrictionController',
'PhrictionDocument' => array(
'PhrictionDAO',
'PhabricatorPolicyInterface',
'PhabricatorSubscribableInterface',
'PhabricatorFlaggableInterface',
'PhabricatorTokenReceiverInterface',
'PhabricatorDestructibleInterface',
'PhabricatorApplicationTransactionInterface',
),
'PhrictionDocumentAuthorHeraldField' => 'PhrictionDocumentHeraldField',
'PhrictionDocumentContentHeraldField' => 'PhrictionDocumentHeraldField',
'PhrictionDocumentController' => 'PhrictionController',
'PhrictionDocumentHeraldAdapter' => 'HeraldAdapter',
'PhrictionDocumentHeraldField' => 'HeraldField',
'PhrictionDocumentHeraldFieldGroup' => 'HeraldFieldGroup',
'PhrictionDocumentPHIDType' => 'PhabricatorPHIDType',
'PhrictionDocumentPathHeraldField' => 'PhrictionDocumentHeraldField',
'PhrictionDocumentQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PhrictionDocumentStatus' => 'PhrictionConstants',
'PhrictionDocumentTitleHeraldField' => 'PhrictionDocumentHeraldField',
'PhrictionEditConduitAPIMethod' => 'PhrictionConduitAPIMethod',
'PhrictionEditController' => 'PhrictionController',
'PhrictionHistoryConduitAPIMethod' => 'PhrictionConduitAPIMethod',
'PhrictionHistoryController' => 'PhrictionController',
'PhrictionInfoConduitAPIMethod' => 'PhrictionConduitAPIMethod',
'PhrictionListController' => 'PhrictionController',
'PhrictionMoveController' => 'PhrictionController',
'PhrictionNewController' => 'PhrictionController',
'PhrictionRemarkupRule' => 'PhutilRemarkupRule',
'PhrictionReplyHandler' => 'PhabricatorApplicationTransactionReplyHandler',
'PhrictionSchemaSpec' => 'PhabricatorConfigSchemaSpec',
'PhrictionSearchEngine' => 'PhabricatorApplicationSearchEngine',
'PhrictionSearchIndexer' => 'PhabricatorSearchDocumentIndexer',
'PhrictionTransaction' => 'PhabricatorApplicationTransaction',
'PhrictionTransactionComment' => 'PhabricatorApplicationTransactionComment',
'PhrictionTransactionEditor' => 'PhabricatorApplicationTransactionEditor',
'PhrictionTransactionQuery' => 'PhabricatorApplicationTransactionQuery',
'PolicyLockOptionType' => 'PhabricatorConfigJSONOptionType',
'PonderAddAnswerView' => 'AphrontView',
'PonderAnswer' => array(
'PonderDAO',
'PhabricatorApplicationTransactionInterface',
'PhabricatorMarkupInterface',
'PonderVotableInterface',
'PhabricatorPolicyInterface',
'PhabricatorFlaggableInterface',
'PhabricatorSubscribableInterface',
'PhabricatorDestructibleInterface',
),
'PonderAnswerCommentController' => 'PonderController',
'PonderAnswerEditController' => 'PonderController',
'PonderAnswerEditor' => 'PonderEditor',
'PonderAnswerHasVotingUserEdgeType' => 'PhabricatorEdgeType',
'PonderAnswerHistoryController' => 'PonderController',
'PonderAnswerMailReceiver' => 'PhabricatorObjectMailReceiver',
'PonderAnswerPHIDType' => 'PhabricatorPHIDType',
'PonderAnswerQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PonderAnswerReplyHandler' => 'PhabricatorApplicationTransactionReplyHandler',
'PonderAnswerSaveController' => 'PonderController',
'PonderAnswerStatus' => 'PonderConstants',
'PonderAnswerTransaction' => 'PhabricatorApplicationTransaction',
'PonderAnswerTransactionComment' => 'PhabricatorApplicationTransactionComment',
'PonderAnswerTransactionQuery' => 'PhabricatorApplicationTransactionQuery',
'PonderAnswerView' => 'AphrontTagView',
'PonderConstants' => 'Phobject',
'PonderController' => 'PhabricatorController',
'PonderDAO' => 'PhabricatorLiskDAO',
'PonderDefaultViewCapability' => 'PhabricatorPolicyCapability',
'PonderEditor' => 'PhabricatorApplicationTransactionEditor',
'PonderFooterView' => 'AphrontTagView',
'PonderHelpfulSaveController' => 'PonderController',
'PonderModerateCapability' => 'PhabricatorPolicyCapability',
'PonderQuestion' => array(
'PonderDAO',
'PhabricatorApplicationTransactionInterface',
'PhabricatorMarkupInterface',
'PhabricatorSubscribableInterface',
'PhabricatorFlaggableInterface',
'PhabricatorPolicyInterface',
'PhabricatorTokenReceiverInterface',
'PhabricatorProjectInterface',
'PhabricatorDestructibleInterface',
'PhabricatorSpacesInterface',
),
'PonderQuestionCommentController' => 'PonderController',
'PonderQuestionEditController' => 'PonderController',
'PonderQuestionEditor' => 'PonderEditor',
'PonderQuestionHistoryController' => 'PonderController',
'PonderQuestionListController' => 'PonderController',
'PonderQuestionMailReceiver' => 'PhabricatorObjectMailReceiver',
'PonderQuestionPHIDType' => 'PhabricatorPHIDType',
'PonderQuestionQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PonderQuestionReplyHandler' => 'PhabricatorApplicationTransactionReplyHandler',
'PonderQuestionSearchEngine' => 'PhabricatorApplicationSearchEngine',
'PonderQuestionStatus' => 'PonderConstants',
'PonderQuestionStatusController' => 'PonderController',
'PonderQuestionTransaction' => 'PhabricatorApplicationTransaction',
'PonderQuestionTransactionComment' => 'PhabricatorApplicationTransactionComment',
'PonderQuestionTransactionQuery' => 'PhabricatorApplicationTransactionQuery',
'PonderQuestionViewController' => 'PonderController',
'PonderRemarkupRule' => 'PhabricatorObjectRemarkupRule',
'PonderSchemaSpec' => 'PhabricatorConfigSchemaSpec',
'PonderSearchIndexer' => 'PhabricatorSearchDocumentIndexer',
'PonderVote' => 'PonderConstants',
'PonderVoteEditor' => 'PhabricatorEditor',
'PonderVotingUserHasAnswerEdgeType' => 'PhabricatorEdgeType',
'ProjectAddProjectsEmailCommand' => 'MetaMTAEmailTransactionCommand',
'ProjectBoardTaskCard' => 'Phobject',
'ProjectCanLockProjectsCapability' => 'PhabricatorPolicyCapability',
'ProjectConduitAPIMethod' => 'ConduitAPIMethod',
'ProjectCreateConduitAPIMethod' => 'ProjectConduitAPIMethod',
'ProjectCreateProjectsCapability' => 'PhabricatorPolicyCapability',
'ProjectDefaultEditCapability' => 'PhabricatorPolicyCapability',
'ProjectDefaultJoinCapability' => 'PhabricatorPolicyCapability',
'ProjectDefaultViewCapability' => 'PhabricatorPolicyCapability',
'ProjectQueryConduitAPIMethod' => 'ProjectConduitAPIMethod',
'ProjectRemarkupRule' => 'PhabricatorObjectRemarkupRule',
'ProjectRemarkupRuleTestCase' => 'PhabricatorTestCase',
'ProjectReplyHandler' => 'PhabricatorApplicationTransactionReplyHandler',
'QueryFormattingTestCase' => 'PhabricatorTestCase',
'ReleephAuthorFieldSpecification' => 'ReleephFieldSpecification',
'ReleephBranch' => array(
'ReleephDAO',
'PhabricatorApplicationTransactionInterface',
'PhabricatorPolicyInterface',
),
'ReleephBranchAccessController' => 'ReleephBranchController',
'ReleephBranchCommitFieldSpecification' => 'ReleephFieldSpecification',
'ReleephBranchController' => 'ReleephController',
'ReleephBranchCreateController' => 'ReleephProductController',
'ReleephBranchEditController' => 'ReleephBranchController',
'ReleephBranchEditor' => 'PhabricatorEditor',
'ReleephBranchHistoryController' => 'ReleephBranchController',
'ReleephBranchNamePreviewController' => 'ReleephController',
'ReleephBranchPHIDType' => 'PhabricatorPHIDType',
'ReleephBranchPreviewView' => 'AphrontFormControl',
'ReleephBranchQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'ReleephBranchSearchEngine' => 'PhabricatorApplicationSearchEngine',
'ReleephBranchTemplate' => 'Phobject',
'ReleephBranchTransaction' => 'PhabricatorApplicationTransaction',
'ReleephBranchTransactionQuery' => 'PhabricatorApplicationTransactionQuery',
'ReleephBranchViewController' => 'ReleephBranchController',
'ReleephCommitFinder' => 'Phobject',
'ReleephCommitFinderException' => 'Exception',
'ReleephCommitMessageFieldSpecification' => 'ReleephFieldSpecification',
'ReleephConduitAPIMethod' => 'ConduitAPIMethod',
'ReleephController' => 'PhabricatorController',
'ReleephDAO' => 'PhabricatorLiskDAO',
'ReleephDefaultFieldSelector' => 'ReleephFieldSelector',
'ReleephDependsOnFieldSpecification' => 'ReleephFieldSpecification',
'ReleephDiffChurnFieldSpecification' => 'ReleephFieldSpecification',
'ReleephDiffMessageFieldSpecification' => 'ReleephFieldSpecification',
'ReleephDiffSizeFieldSpecification' => 'ReleephFieldSpecification',
'ReleephFieldParseException' => 'Exception',
'ReleephFieldSelector' => 'Phobject',
'ReleephFieldSpecification' => array(
'PhabricatorCustomField',
'PhabricatorMarkupInterface',
),
'ReleephGetBranchesConduitAPIMethod' => 'ReleephConduitAPIMethod',
'ReleephIntentFieldSpecification' => 'ReleephFieldSpecification',
'ReleephLevelFieldSpecification' => 'ReleephFieldSpecification',
'ReleephOriginalCommitFieldSpecification' => 'ReleephFieldSpecification',
'ReleephProductActionController' => 'ReleephProductController',
'ReleephProductController' => 'ReleephController',
'ReleephProductCreateController' => 'ReleephProductController',
'ReleephProductEditController' => 'ReleephProductController',
'ReleephProductEditor' => 'PhabricatorApplicationTransactionEditor',
'ReleephProductHistoryController' => 'ReleephProductController',
'ReleephProductListController' => 'ReleephController',
'ReleephProductPHIDType' => 'PhabricatorPHIDType',
'ReleephProductQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'ReleephProductSearchEngine' => 'PhabricatorApplicationSearchEngine',
'ReleephProductTransaction' => 'PhabricatorApplicationTransaction',
'ReleephProductTransactionQuery' => 'PhabricatorApplicationTransactionQuery',
'ReleephProductViewController' => 'ReleephProductController',
'ReleephProject' => array(
'ReleephDAO',
'PhabricatorApplicationTransactionInterface',
'PhabricatorPolicyInterface',
),
'ReleephQueryBranchesConduitAPIMethod' => 'ReleephConduitAPIMethod',
'ReleephQueryProductsConduitAPIMethod' => 'ReleephConduitAPIMethod',
'ReleephQueryRequestsConduitAPIMethod' => 'ReleephConduitAPIMethod',
'ReleephReasonFieldSpecification' => 'ReleephFieldSpecification',
'ReleephRequest' => array(
'ReleephDAO',
'PhabricatorApplicationTransactionInterface',
'PhabricatorPolicyInterface',
'PhabricatorCustomFieldInterface',
),
'ReleephRequestActionController' => 'ReleephRequestController',
'ReleephRequestCommentController' => 'ReleephRequestController',
'ReleephRequestConduitAPIMethod' => 'ReleephConduitAPIMethod',
'ReleephRequestController' => 'ReleephController',
'ReleephRequestDifferentialCreateController' => 'ReleephController',
'ReleephRequestEditController' => 'ReleephBranchController',
'ReleephRequestMailReceiver' => 'PhabricatorObjectMailReceiver',
'ReleephRequestPHIDType' => 'PhabricatorPHIDType',
'ReleephRequestQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'ReleephRequestReplyHandler' => 'PhabricatorApplicationTransactionReplyHandler',
'ReleephRequestSearchEngine' => 'PhabricatorApplicationSearchEngine',
'ReleephRequestStatus' => 'Phobject',
'ReleephRequestTransaction' => 'PhabricatorApplicationTransaction',
'ReleephRequestTransactionComment' => 'PhabricatorApplicationTransactionComment',
'ReleephRequestTransactionQuery' => 'PhabricatorApplicationTransactionQuery',
'ReleephRequestTransactionalEditor' => 'PhabricatorApplicationTransactionEditor',
'ReleephRequestTypeaheadControl' => 'AphrontFormControl',
'ReleephRequestTypeaheadController' => 'PhabricatorTypeaheadDatasourceController',
'ReleephRequestView' => 'AphrontView',
'ReleephRequestViewController' => 'ReleephBranchController',
'ReleephRequestorFieldSpecification' => 'ReleephFieldSpecification',
'ReleephRevisionFieldSpecification' => 'ReleephFieldSpecification',
'ReleephSeverityFieldSpecification' => 'ReleephLevelFieldSpecification',
'ReleephSummaryFieldSpecification' => 'ReleephFieldSpecification',
'ReleephWorkCanPushConduitAPIMethod' => 'ReleephConduitAPIMethod',
'ReleephWorkGetAuthorInfoConduitAPIMethod' => 'ReleephConduitAPIMethod',
'ReleephWorkGetBranchCommitMessageConduitAPIMethod' => 'ReleephConduitAPIMethod',
'ReleephWorkGetBranchConduitAPIMethod' => 'ReleephConduitAPIMethod',
'ReleephWorkGetCommitMessageConduitAPIMethod' => 'ReleephConduitAPIMethod',
'ReleephWorkNextRequestConduitAPIMethod' => 'ReleephConduitAPIMethod',
'ReleephWorkRecordConduitAPIMethod' => 'ReleephConduitAPIMethod',
'ReleephWorkRecordPickStatusConduitAPIMethod' => 'ReleephConduitAPIMethod',
'RemarkupProcessConduitAPIMethod' => 'ConduitAPIMethod',
'RepositoryConduitAPIMethod' => 'ConduitAPIMethod',
'RepositoryCreateConduitAPIMethod' => 'RepositoryConduitAPIMethod',
'RepositoryQueryConduitAPIMethod' => 'RepositoryConduitAPIMethod',
'ShellLogView' => 'AphrontView',
'SlowvoteConduitAPIMethod' => 'ConduitAPIMethod',
'SlowvoteEmbedView' => 'AphrontView',
'SlowvoteInfoConduitAPIMethod' => 'SlowvoteConduitAPIMethod',
'SlowvoteRemarkupRule' => 'PhabricatorObjectRemarkupRule',
'SubscriptionListDialogBuilder' => 'Phobject',
'SubscriptionListStringBuilder' => 'Phobject',
'TokenConduitAPIMethod' => 'ConduitAPIMethod',
'TokenGiveConduitAPIMethod' => 'TokenConduitAPIMethod',
'TokenGivenConduitAPIMethod' => 'TokenConduitAPIMethod',
'TokenQueryConduitAPIMethod' => 'TokenConduitAPIMethod',
'UserConduitAPIMethod' => 'ConduitAPIMethod',
'UserDisableConduitAPIMethod' => 'UserConduitAPIMethod',
'UserEnableConduitAPIMethod' => 'UserConduitAPIMethod',
'UserFindConduitAPIMethod' => 'UserConduitAPIMethod',
'UserQueryConduitAPIMethod' => 'UserConduitAPIMethod',
'UserWhoAmIConduitAPIMethod' => 'UserConduitAPIMethod',
),
));
diff --git a/src/applications/auth/factor/PhabricatorTOTPAuthFactor.php b/src/applications/auth/factor/PhabricatorTOTPAuthFactor.php
index f99a5f4a3..8c29eb7d1 100644
--- a/src/applications/auth/factor/PhabricatorTOTPAuthFactor.php
+++ b/src/applications/auth/factor/PhabricatorTOTPAuthFactor.php
@@ -1,308 +1,305 @@
<?php
final class PhabricatorTOTPAuthFactor extends PhabricatorAuthFactor {
const TEMPORARY_TOKEN_TYPE = 'mfa:totp:key';
public function getFactorKey() {
return 'totp';
}
public function getFactorName() {
return pht('Mobile Phone App (TOTP)');
}
public function getFactorDescription() {
return pht(
'Attach a mobile authenticator application (like Authy '.
'or Google Authenticator) to your account. When you need to '.
'authenticate, you will enter a code shown on your phone.');
}
public function processAddFactorForm(
AphrontFormView $form,
AphrontRequest $request,
PhabricatorUser $user) {
$key = $request->getStr('totpkey');
if (strlen($key)) {
// If the user is providing a key, make sure it's a key we generated.
// This raises the barrier to theoretical attacks where an attacker might
// provide a known key (such attacks are already prevented by CSRF, but
// this is a second barrier to overcome).
// (We store and verify the hash of the key, not the key itself, to limit
// how useful the data in the table is to an attacker.)
$temporary_token = id(new PhabricatorAuthTemporaryTokenQuery())
->setViewer($user)
->withObjectPHIDs(array($user->getPHID()))
->withTokenTypes(array(self::TEMPORARY_TOKEN_TYPE))
->withExpired(false)
->withTokenCodes(array(PhabricatorHash::digest($key)))
->executeOne();
if (!$temporary_token) {
// If we don't have a matching token, regenerate the key below.
$key = null;
}
}
if (!strlen($key)) {
$key = self::generateNewTOTPKey();
// Mark this key as one we generated, so the user is allowed to submit
// a response for it.
$unguarded = AphrontWriteGuard::beginScopedUnguardedWrites();
id(new PhabricatorAuthTemporaryToken())
->setObjectPHID($user->getPHID())
->setTokenType(self::TEMPORARY_TOKEN_TYPE)
->setTokenExpires(time() + phutil_units('1 hour in seconds'))
->setTokenCode(PhabricatorHash::digest($key))
->save();
unset($unguarded);
}
$code = $request->getStr('totpcode');
$e_code = true;
if ($request->getExists('totp')) {
$okay = self::verifyTOTPCode(
$user,
new PhutilOpaqueEnvelope($key),
$code);
if ($okay) {
$config = $this->newConfigForUser($user)
->setFactorName(pht('Mobile App (TOTP)'))
->setFactorSecret($key);
return $config;
} else {
if (!strlen($code)) {
$e_code = pht('Required');
} else {
$e_code = pht('Invalid');
}
}
}
$form->addHiddenInput('totp', true);
$form->addHiddenInput('totpkey', $key);
$form->appendRemarkupInstructions(
pht(
'First, download an authenticator application on your phone. Two '.
'applications which work well are **Authy** and **Google '.
'Authenticator**, but any other TOTP application should also work.'));
$form->appendInstructions(
pht(
'Launch the application on your phone, and add a new entry for '.
'this Phabricator install. When prompted, scan the QR code or '.
'manually enter the key shown below into the application.'));
$prod_uri = new PhutilURI(PhabricatorEnv::getProductionURI('/'));
$issuer = $prod_uri->getDomain();
$uri = urisprintf(
'otpauth://totp/%s:%s?secret=%s&issuer=%s',
$issuer,
$user->getUsername(),
$key,
$issuer);
$qrcode = $this->renderQRCode($uri);
$form->appendChild($qrcode);
$form->appendChild(
id(new AphrontFormStaticControl())
->setLabel(pht('Key'))
->setValue(phutil_tag('strong', array(), $key)));
$form->appendInstructions(
pht(
'(If given an option, select that this key is "Time Based", not '.
'"Counter Based".)'));
$form->appendInstructions(
pht(
'After entering the key, the application should display a numeric '.
'code. Enter that code below to confirm that you have configured '.
'the authenticator correctly:'));
$form->appendChild(
id(new AphrontFormTextControl())
->setLabel(pht('TOTP Code'))
->setName('totpcode')
->setValue($code)
->setError($e_code));
}
public function renderValidateFactorForm(
PhabricatorAuthFactorConfig $config,
AphrontFormView $form,
PhabricatorUser $viewer,
$validation_result) {
if (!$validation_result) {
$validation_result = array();
}
$form->appendChild(
id(new AphrontFormTextControl())
->setName($this->getParameterName($config, 'totpcode'))
->setLabel(pht('App Code'))
->setCaption(pht('Factor Name: %s', $config->getFactorName()))
->setValue(idx($validation_result, 'value'))
->setError(idx($validation_result, 'error', true)));
}
public function processValidateFactorForm(
PhabricatorAuthFactorConfig $config,
PhabricatorUser $viewer,
AphrontRequest $request) {
$code = $request->getStr($this->getParameterName($config, 'totpcode'));
$key = new PhutilOpaqueEnvelope($config->getFactorSecret());
if (self::verifyTOTPCode($viewer, $key, $code)) {
return array(
'error' => null,
'value' => $code,
'valid' => true,
);
} else {
return array(
'error' => strlen($code) ? pht('Invalid') : pht('Required'),
'value' => $code,
'valid' => false,
);
}
}
public static function generateNewTOTPKey() {
return strtoupper(Filesystem::readRandomCharacters(16));
}
public static function verifyTOTPCode(
PhabricatorUser $user,
PhutilOpaqueEnvelope $key,
$code) {
- // TODO: This should use rate limiting to prevent multiple attempts in a
- // short period of time.
-
$now = (int)(time() / 30);
// Allow the user to enter a code a few minutes away on either side, in
// case the server or client has some clock skew.
for ($offset = -2; $offset <= 2; $offset++) {
$real = self::getTOTPCode($key, $now + $offset);
if (phutil_hashes_are_identical($real, $code)) {
return true;
}
}
// TODO: After validating a code, this should mark it as used and prevent
// it from being reused.
return false;
}
public static function base32Decode($buf) {
$buf = strtoupper($buf);
$map = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567';
$map = str_split($map);
$map = array_flip($map);
$out = '';
$len = strlen($buf);
$acc = 0;
$bits = 0;
for ($ii = 0; $ii < $len; $ii++) {
$chr = $buf[$ii];
$val = $map[$chr];
$acc = $acc << 5;
$acc = $acc + $val;
$bits += 5;
if ($bits >= 8) {
$bits = $bits - 8;
$out .= chr(($acc & (0xFF << $bits)) >> $bits);
}
}
return $out;
}
public static function getTOTPCode(PhutilOpaqueEnvelope $key, $timestamp) {
$binary_timestamp = pack('N*', 0).pack('N*', $timestamp);
$binary_key = self::base32Decode($key->openEnvelope());
$hash = hash_hmac('sha1', $binary_timestamp, $binary_key, true);
// See RFC 4226.
$offset = ord($hash[19]) & 0x0F;
$code = ((ord($hash[$offset + 0]) & 0x7F) << 24) |
((ord($hash[$offset + 1]) & 0xFF) << 16) |
((ord($hash[$offset + 2]) & 0xFF) << 8) |
((ord($hash[$offset + 3]) ) );
$code = ($code % 1000000);
$code = str_pad($code, 6, '0', STR_PAD_LEFT);
return $code;
}
/**
* @phutil-external-symbol class QRcode
*/
private function renderQRCode($uri) {
$root = dirname(phutil_get_library_root('phabricator'));
require_once $root.'/externals/phpqrcode/phpqrcode.php';
$lines = QRcode::text($uri);
$total_width = 240;
$cell_size = floor($total_width / count($lines));
$rows = array();
foreach ($lines as $line) {
$cells = array();
for ($ii = 0; $ii < strlen($line); $ii++) {
if ($line[$ii] == '1') {
$color = '#000';
} else {
$color = '#fff';
}
$cells[] = phutil_tag(
'td',
array(
'width' => $cell_size,
'height' => $cell_size,
'style' => 'background: '.$color,
),
'');
}
$rows[] = phutil_tag('tr', array(), $cells);
}
return phutil_tag(
'table',
array(
'style' => 'margin: 24px auto;',
),
$rows);
}
}
diff --git a/src/applications/auth/management/PhabricatorAuthManagementUnlimitWorkflow.php b/src/applications/auth/management/PhabricatorAuthManagementUnlimitWorkflow.php
new file mode 100644
index 000000000..843a5f70c
--- /dev/null
+++ b/src/applications/auth/management/PhabricatorAuthManagementUnlimitWorkflow.php
@@ -0,0 +1,67 @@
+<?php
+
+final class PhabricatorAuthManagementUnlimitWorkflow
+ extends PhabricatorAuthManagementWorkflow {
+
+ protected function didConstruct() {
+ $this
+ ->setName('unlimit')
+ ->setExamples('**unlimit** --user __username__ --all')
+ ->setSynopsis(
+ pht(
+ 'Reset action counters so a user can continue taking '.
+ 'rate-limited actions.'))
+ ->setArguments(
+ array(
+ array(
+ 'name' => 'user',
+ 'param' => 'username',
+ 'help' => pht('Reset action counters for this user.'),
+ ),
+ array(
+ 'name' => 'all',
+ 'help' => pht('Reset all counters.'),
+ ),
+ ));
+ }
+
+ public function execute(PhutilArgumentParser $args) {
+ $username = $args->getArg('user');
+ if (!strlen($username)) {
+ throw new PhutilArgumentUsageException(
+ pht(
+ 'Use %s to choose a user to reset actions for.', '--user'));
+ }
+
+ $user = id(new PhabricatorPeopleQuery())
+ ->setViewer($this->getViewer())
+ ->withUsernames(array($username))
+ ->executeOne();
+ if (!$user) {
+ throw new PhutilArgumentUsageException(
+ pht(
+ 'No user exists with username "%s".',
+ $username));
+ }
+
+ $all = $args->getArg('all');
+ if (!$all) {
+ // TODO: Eventually, let users reset specific actions. For now, we
+ // require `--all` so that usage won't change when you can reset in a
+ // more tailored way.
+ throw new PhutilArgumentUsageException(
+ pht(
+ 'Specify %s to reset all action counters.', '--all'));
+ }
+
+ $count = PhabricatorSystemActionEngine::resetActions(
+ array(
+ $user->getPHID(),
+ ));
+
+ echo pht('Reset %s action(s).', new PhutilNumber($count))."\n";
+
+ return 0;
+ }
+
+}
diff --git a/src/applications/macro/controller/PhabricatorMacroViewController.php b/src/applications/macro/controller/PhabricatorMacroViewController.php
index 8915954fc..02a6f0d34 100644
--- a/src/applications/macro/controller/PhabricatorMacroViewController.php
+++ b/src/applications/macro/controller/PhabricatorMacroViewController.php
@@ -1,175 +1,176 @@
<?php
final class PhabricatorMacroViewController
extends PhabricatorMacroController {
public function shouldAllowPublic() {
return true;
}
public function handleRequest(AphrontRequest $request) {
$viewer = $request->getViewer();
$id = $request->getURIData('id');
$macro = id(new PhabricatorMacroQuery())
->setViewer($viewer)
->withIDs(array($id))
->needFiles(true)
->executeOne();
if (!$macro) {
return new Aphront404Response();
}
$file = $macro->getFile();
$title_short = pht('Macro "%s"', $macro->getName());
$title_long = pht('Image Macro "%s"', $macro->getName());
$actions = $this->buildActionView($macro);
$crumbs = $this->buildApplicationCrumbs();
$crumbs->addTextCrumb(
$title_short,
$this->getApplicationURI('/view/'.$macro->getID().'/'));
$properties = $this->buildPropertyView($macro, $actions);
if ($file) {
$file_view = new PHUIPropertyListView();
$file_view->addImageContent(
phutil_tag(
'img',
array(
'src' => $file->getViewURI(),
'class' => 'phabricator-image-macro-hero',
)));
}
$timeline = $this->buildTransactionTimeline(
$macro,
new PhabricatorMacroTransactionQuery());
$header = id(new PHUIHeaderView())
->setUser($viewer)
->setPolicyObject($macro)
->setHeader($title_long);
if (!$macro->getIsDisabled()) {
$header->setStatus('fa-check', 'bluegrey', pht('Active'));
} else {
$header->setStatus('fa-ban', 'red', pht('Archived'));
}
$is_serious = PhabricatorEnv::getEnvConfig('phabricator.serious-business');
$comment_header = $is_serious
? pht('Add Comment')
: pht('Grovel in Awe');
$draft = PhabricatorDraft::newFromUserAndKey($viewer, $macro->getPHID());
$add_comment_form = id(new PhabricatorApplicationTransactionCommentView())
->setUser($viewer)
->setObjectPHID($macro->getPHID())
->setDraft($draft)
->setHeaderText($comment_header)
->setAction($this->getApplicationURI('/comment/'.$macro->getID().'/'))
->setSubmitButtonName(pht('Add Comment'));
$object_box = id(new PHUIObjectBoxView())
->setHeader($header)
->addPropertyList($properties);
if ($file_view) {
$object_box->addPropertyList($file_view);
}
return $this->buildApplicationPage(
array(
$crumbs,
$object_box,
$timeline,
$add_comment_form,
),
array(
'title' => $title_short,
+ 'pageObjects' => array($macro->getPHID()),
));
}
private function buildActionView(PhabricatorFileImageMacro $macro) {
$can_manage = $this->hasApplicationCapability(
PhabricatorMacroManageCapability::CAPABILITY);
$request = $this->getRequest();
$view = id(new PhabricatorActionListView())
->setUser($request->getUser())
->setObject($macro)
->setObjectURI($request->getRequestURI())
->addAction(
id(new PhabricatorActionView())
->setName(pht('Edit Macro'))
->setHref($this->getApplicationURI('/edit/'.$macro->getID().'/'))
->setDisabled(!$can_manage)
->setWorkflow(!$can_manage)
->setIcon('fa-pencil'));
$view->addAction(
id(new PhabricatorActionView())
->setName(pht('Edit Audio'))
->setHref($this->getApplicationURI('/audio/'.$macro->getID().'/'))
->setDisabled(!$can_manage)
->setWorkflow(!$can_manage)
->setIcon('fa-music'));
if ($macro->getIsDisabled()) {
$view->addAction(
id(new PhabricatorActionView())
->setName(pht('Activate Macro'))
->setHref($this->getApplicationURI('/disable/'.$macro->getID().'/'))
->setWorkflow(true)
->setDisabled(!$can_manage)
->setIcon('fa-check'));
} else {
$view->addAction(
id(new PhabricatorActionView())
->setName(pht('Archive Macro'))
->setHref($this->getApplicationURI('/disable/'.$macro->getID().'/'))
->setWorkflow(true)
->setDisabled(!$can_manage)
->setIcon('fa-ban'));
}
return $view;
}
private function buildPropertyView(
PhabricatorFileImageMacro $macro,
PhabricatorActionListView $actions) {
$viewer = $this->getViewer();
$view = id(new PHUIPropertyListView())
->setUser($this->getRequest()->getUser())
->setObject($macro)
->setActionList($actions);
switch ($macro->getAudioBehavior()) {
case PhabricatorFileImageMacro::AUDIO_BEHAVIOR_ONCE:
$view->addProperty(pht('Audio Behavior'), pht('Play Once'));
break;
case PhabricatorFileImageMacro::AUDIO_BEHAVIOR_LOOP:
$view->addProperty(pht('Audio Behavior'), pht('Loop'));
break;
}
$audio_phid = $macro->getAudioPHID();
if ($audio_phid) {
$view->addProperty(
pht('Audio'),
$viewer->renderHandle($audio_phid));
}
$view->invokeWillRenderEvent();
return $view;
}
}
diff --git a/src/applications/paste/controller/PhabricatorPasteViewController.php b/src/applications/paste/controller/PhabricatorPasteViewController.php
index 0273636d0..382d683f3 100644
--- a/src/applications/paste/controller/PhabricatorPasteViewController.php
+++ b/src/applications/paste/controller/PhabricatorPasteViewController.php
@@ -1,214 +1,216 @@
<?php
/**
* group paste
*/
final class PhabricatorPasteViewController extends PhabricatorPasteController {
private $highlightMap;
public function shouldAllowPublic() {
return true;
}
public function willProcessRequest(array $data) {
$raw_lines = idx($data, 'lines');
$map = array();
if ($raw_lines) {
$lines = explode('-', $raw_lines);
$first = idx($lines, 0, 0);
$last = idx($lines, 1);
if ($last) {
$min = min($first, $last);
$max = max($first, $last);
$map = array_fuse(range($min, $max));
} else {
$map[$first] = $first;
}
}
$this->highlightMap = $map;
}
public function handleRequest(AphrontRequest $request) {
$viewer = $request->getViewer();
$id = $request->getURIData('id');
$paste = id(new PhabricatorPasteQuery())
->setViewer($viewer)
->withIDs(array($id))
->needContent(true)
->executeOne();
if (!$paste) {
return new Aphront404Response();
}
$file = id(new PhabricatorFileQuery())
->setViewer($viewer)
->withPHIDs(array($paste->getFilePHID()))
->executeOne();
if (!$file) {
return new Aphront400Response();
}
$forks = id(new PhabricatorPasteQuery())
->setViewer($viewer)
->withParentPHIDs(array($paste->getPHID()))
->execute();
$fork_phids = mpull($forks, 'getPHID');
$header = $this->buildHeaderView($paste);
$actions = $this->buildActionView($viewer, $paste, $file);
$properties = $this->buildPropertyView($paste, $fork_phids, $actions);
$object_box = id(new PHUIObjectBoxView())
->setHeader($header)
->addPropertyList($properties);
$source_code = $this->buildSourceCodeView(
$paste,
null,
$this->highlightMap);
- $source_code = id(new PHUIBoxView())
- ->appendChild($source_code)
- ->addMargin(PHUI::MARGIN_LARGE_LEFT)
- ->addMargin(PHUI::MARGIN_LARGE_RIGHT)
- ->addMargin(PHUI::MARGIN_LARGE_TOP);
+ require_celerity_resource('paste-css');
+ $source_code = phutil_tag(
+ 'div',
+ array(
+ 'class' => 'container-of-paste',
+ ),
+ $source_code);
$crumbs = $this->buildApplicationCrumbs($this->buildSideNavView())
->addTextCrumb('P'.$paste->getID(), '/P'.$paste->getID());
$timeline = $this->buildTransactionTimeline(
$paste,
new PhabricatorPasteTransactionQuery());
$is_serious = PhabricatorEnv::getEnvConfig('phabricator.serious-business');
$add_comment_header = $is_serious
? pht('Add Comment')
: pht('Eat Paste');
$draft = PhabricatorDraft::newFromUserAndKey($viewer, $paste->getPHID());
$add_comment_form = id(new PhabricatorApplicationTransactionCommentView())
->setUser($viewer)
->setObjectPHID($paste->getPHID())
->setDraft($draft)
->setHeaderText($add_comment_header)
->setAction($this->getApplicationURI('/comment/'.$paste->getID().'/'))
->setSubmitButtonName(pht('Add Comment'));
return $this->buildApplicationPage(
array(
$crumbs,
$object_box,
$source_code,
$timeline,
$add_comment_form,
),
array(
'title' => $paste->getFullName(),
'pageObjects' => array($paste->getPHID()),
));
}
private function buildHeaderView(PhabricatorPaste $paste) {
$title = (nonempty($paste->getTitle())) ?
$paste->getTitle() : pht('(An Untitled Masterwork)');
if ($paste->isArchived()) {
$header_icon = 'fa-ban';
$header_name = pht('Archived');
$header_color = 'dark';
} else {
$header_icon = 'fa-check';
$header_name = pht('Active');
$header_color = 'bluegrey';
}
$header = id(new PHUIHeaderView())
->setHeader($title)
->setUser($this->getRequest()->getUser())
->setStatus($header_icon, $header_color, $header_name)
->setPolicyObject($paste);
return $header;
}
private function buildActionView(
PhabricatorUser $viewer,
PhabricatorPaste $paste,
PhabricatorFile $file) {
$can_edit = PhabricatorPolicyFilter::hasCapability(
$viewer,
$paste,
PhabricatorPolicyCapability::CAN_EDIT);
$can_fork = $viewer->isLoggedIn();
$fork_uri = $this->getApplicationURI('/create/?parent='.$paste->getID());
return id(new PhabricatorActionListView())
->setUser($viewer)
->setObject($paste)
->setObjectURI($this->getRequest()->getRequestURI())
->addAction(
id(new PhabricatorActionView())
->setName(pht('Edit Paste'))
->setIcon('fa-pencil')
->setDisabled(!$can_edit)
->setWorkflow(!$can_edit)
->setHref($this->getApplicationURI('/edit/'.$paste->getID().'/')))
->addAction(
id(new PhabricatorActionView())
->setName(pht('Fork This Paste'))
->setIcon('fa-code-fork')
->setDisabled(!$can_fork)
->setWorkflow(!$can_fork)
->setHref($fork_uri))
->addAction(
id(new PhabricatorActionView())
->setName(pht('View Raw File'))
->setIcon('fa-file-text-o')
->setHref($file->getBestURI()));
}
private function buildPropertyView(
PhabricatorPaste $paste,
array $child_phids,
PhabricatorActionListView $actions) {
$viewer = $this->getViewer();
$properties = id(new PHUIPropertyListView())
->setUser($viewer)
->setObject($paste)
->setActionList($actions);
$properties->addProperty(
pht('Author'),
$viewer->renderHandle($paste->getAuthorPHID()));
$properties->addProperty(
pht('Created'),
phabricator_datetime($paste->getDateCreated(), $viewer));
if ($paste->getParentPHID()) {
$properties->addProperty(
pht('Forked From'),
$viewer->renderHandle($paste->getParentPHID()));
}
if ($child_phids) {
$properties->addProperty(
pht('Forks'),
$viewer->renderHandleList($child_phids));
}
$descriptions = PhabricatorPolicyQuery::renderPolicyDescriptions(
$viewer,
$paste);
return $properties;
}
}
diff --git a/src/applications/system/engine/PhabricatorSystemActionEngine.php b/src/applications/system/engine/PhabricatorSystemActionEngine.php
index 8f463c588..b6a8e2671 100644
--- a/src/applications/system/engine/PhabricatorSystemActionEngine.php
+++ b/src/applications/system/engine/PhabricatorSystemActionEngine.php
@@ -1,170 +1,201 @@
<?php
final class PhabricatorSystemActionEngine extends Phobject {
/**
* Prepare to take an action, throwing an exception if the user has exceeded
* the rate limit.
*
* The `$actors` are a list of strings. Normally this will be a list of
* user PHIDs, but some systems use other identifiers (like email
* addresses). Each actor's score threshold is tracked independently. If
* any actor exceeds the rate limit for the action, this method throws.
*
* The `$action` defines the actual thing being rate limited, and sets the
* limit.
*
* You can pass either a positive, zero, or negative `$score` to this method:
*
* - If the score is positive, the user is given that many points toward
* the rate limit after the limit is checked. Over time, this will cause
* them to hit the rate limit and be prevented from taking further
* actions.
* - If the score is zero, the rate limit is checked but no score changes
* are made. This allows you to check for a rate limit before beginning
* a workflow, so the user doesn't fill in a form only to get rate limited
* at the end.
* - If the score is negative, the user is credited points, allowing them
* to take more actions than the limit normally permits. By awarding
* points for failed actions and credits for successful actions, a
* system can be sensitive to failure without overly restricting
* legitimate uses.
*
* If any actor is exceeding their rate limit, this method throws a
* @{class:PhabricatorSystemActionRateLimitException}.
*
* @param list<string> List of actors.
* @param PhabricatorSystemAction Action being taken.
* @param float Score or credit, see above.
* @return void
*/
public static function willTakeAction(
array $actors,
PhabricatorSystemAction $action,
$score) {
// If the score for this action is negative, we're giving the user a credit,
// so don't bother checking if they're blocked or not.
if ($score >= 0) {
$blocked = self::loadBlockedActors($actors, $action, $score);
if ($blocked) {
foreach ($blocked as $actor => $actor_score) {
throw new PhabricatorSystemActionRateLimitException(
$action,
$actor_score);
}
}
}
if ($score != 0) {
$unguarded = AphrontWriteGuard::beginScopedUnguardedWrites();
self::recordAction($actors, $action, $score);
unset($unguarded);
}
}
public static function loadBlockedActors(
array $actors,
PhabricatorSystemAction $action,
$score) {
$scores = self::loadScores($actors, $action);
$window = self::getWindow();
$blocked = array();
foreach ($scores as $actor => $actor_score) {
// For the purposes of checking for a block, we just use the raw
// persistent score and do not include the score for this action. This
// allows callers to test for a block without adding any points and get
// the same result they would if they were adding points: we only
// trigger a rate limit when the persistent score exceeds the threshold.
if ($action->shouldBlockActor($actor, $actor_score)) {
// When reporting the results, we do include the points for this
// action. This makes the error messages more clear, since they
// more accurately report the number of actions the user has really
// tried to take.
$blocked[$actor] = $actor_score + ($score / $window);
}
}
return $blocked;
}
public static function loadScores(
array $actors,
PhabricatorSystemAction $action) {
if (!$actors) {
return array();
}
$actor_hashes = array();
foreach ($actors as $actor) {
$actor_hashes[] = PhabricatorHash::digestForIndex($actor);
}
$log = new PhabricatorSystemActionLog();
$window = self::getWindow();
$conn_r = $log->establishConnection('r');
$scores = queryfx_all(
$conn_r,
'SELECT actorIdentity, SUM(score) totalScore FROM %T
WHERE action = %s AND actorHash IN (%Ls)
AND epoch >= %d GROUP BY actorHash',
$log->getTableName(),
$action->getActionConstant(),
$actor_hashes,
(time() - $window));
$scores = ipull($scores, 'totalScore', 'actorIdentity');
foreach ($scores as $key => $score) {
$scores[$key] = $score / $window;
}
$scores = $scores + array_fill_keys($actors, 0);
return $scores;
}
private static function recordAction(
array $actors,
PhabricatorSystemAction $action,
$score) {
$log = new PhabricatorSystemActionLog();
$conn_w = $log->establishConnection('w');
$sql = array();
foreach ($actors as $actor) {
$sql[] = qsprintf(
$conn_w,
'(%s, %s, %s, %f, %d)',
PhabricatorHash::digestForIndex($actor),
$actor,
$action->getActionConstant(),
$score,
time());
}
foreach (PhabricatorLiskDAO::chunkSQL($sql) as $chunk) {
queryfx(
$conn_w,
'INSERT INTO %T (actorHash, actorIdentity, action, score, epoch)
VALUES %Q',
$log->getTableName(),
$chunk);
}
}
private static function getWindow() {
// Limit queries to the last hour of data so we don't need to look at as
// many rows. We can use an arbitrarily larger window instead (we normalize
// scores to actions per second) but all the actions we care about limiting
// have a limit much higher than one action per hour.
return phutil_units('1 hour in seconds');
}
+
+ /**
+ * Reset all action counts for actions taken by some set of actors in the
+ * previous action window.
+ *
+ * @param list<string> Actors to reset counts for.
+ * @return int Number of actions cleared.
+ */
+ public static function resetActions(array $actors) {
+ $log = new PhabricatorSystemActionLog();
+ $conn_w = $log->establishConnection('w');
+
+ $now = PhabricatorTime::getNow();
+
+ $hashes = array();
+ foreach ($actors as $actor) {
+ $hashes[] = PhabricatorHash::digestForIndex($actor);
+ }
+
+ queryfx(
+ $conn_w,
+ 'DELETE FROM %T
+ WHERE actorHash IN (%Ls) AND epoch BETWEEN %d AND %d',
+ $log->getTableName(),
+ $hashes,
+ $now - self::getWindow(),
+ $now);
+
+ return $conn_w->getAffectedRows();
+ }
+
}
diff --git a/src/applications/uiexample/examples/PHUIActionPanelExample.php b/src/applications/uiexample/examples/PHUIActionPanelExample.php
index cbffbf612..c57617a56 100644
--- a/src/applications/uiexample/examples/PHUIActionPanelExample.php
+++ b/src/applications/uiexample/examples/PHUIActionPanelExample.php
@@ -1,99 +1,92 @@
<?php
final class PHUIActionPanelExample extends PhabricatorUIExample {
public function getName() {
return pht('Action Panel');
}
public function getDescription() {
return pht('A panel with strong tendencies for inciting ACTION!');
}
public function renderExample() {
$view = id(new AphrontMultiColumnView())
- ->setFluidLayout(true)
- ->setBorder(true);
+ ->setFluidLayout(true);
/* Action Panels */
$panel1 = id(new PHUIActionPanelView())
->setFontIcon('fa-book')
->setHeader(pht('Read Documentation'))
->setHref('#')
->setSubHeader(pht('Reading is a common way to learn about things.'))
- ->setStatus(pht('Carrots help you see better.'))
- ->setState(PHUIActionPanelView::STATE_NONE);
+ ->setState(PHUIActionPanelView::COLOR_BLUE);
$view->addColumn($panel1);
$panel2 = id(new PHUIActionPanelView())
->setFontIcon('fa-server')
->setHeader(pht('Launch Instance'))
->setHref('#')
->setSubHeader(pht("Maybe this is what you're likely here for."))
- ->setStatus(pht('You have no instances.'))
- ->setState(PHUIActionPanelView::STATE_ERROR);
+ ->setState(PHUIActionPanelView::COLOR_RED);
$view->addColumn($panel2);
$panel3 = id(new PHUIActionPanelView())
->setFontIcon('fa-group')
->setHeader(pht('Code with Friends'))
->setHref('#')
->setSubHeader(pht('Writing code is much more fun with friends!'))
- ->setStatus(pht('You need more friends.'))
- ->setState(PHUIActionPanelView::STATE_WARN);
+ ->setState(PHUIActionPanelView::COLOR_YELLOW);
$view->addColumn($panel3);
$panel4 = id(new PHUIActionPanelView())
->setFontIcon('fa-cloud-download')
->setHeader(pht('Download Data'))
->setHref('#')
->setSubHeader(pht('Need a backup of all your kitten memes?'))
- ->setStatus(pht('Building Download'))
- ->setState(PHUIActionPanelView::STATE_PROGRESS);
+ ->setState(PHUIActionPanelView::COLOR_PINK);
$view->addColumn($panel4);
$view2 = id(new AphrontMultiColumnView())
- ->setFluidLayout(true)
- ->setBorder(true);
+ ->setFluidLayout(true);
/* Action Panels */
$panel1 = id(new PHUIActionPanelView())
->setFontIcon('fa-credit-card')
->setHeader(pht('Account Balance'))
->setHref('#')
->setSubHeader(pht('You were last billed $2,245.12 on Dec 12, 2014.'))
- ->setStatus(pht('Account in good standing.'))
- ->setState(PHUIActionPanelView::STATE_SUCCESS);
+ ->setState(PHUIActionPanelView::COLOR_GREEN);
$view2->addColumn($panel1);
$panel2 = id(new PHUIActionPanelView())
- ->setBigText('148')
+ ->setBigText(true)
->setHeader(pht('Instance Users'))
->setHref('#')
->setSubHeader(
- pht('You currently have 140 active and 8 inactive accounts'));
+ pht('148'));
$view2->addColumn($panel2);
$panel3 = id(new PHUIActionPanelView())
- ->setBigText('March 12')
+ ->setBigText(true)
->setHeader(pht('Next Maintenance Window'))
->setHref('#')
->setSubHeader(
- pht('At 6:00 am PST, Phacility will conduct weekly maintenence.'))
- ->setStatus(pht('Very Important!'))
- ->setState(PHUIActionPanelView::STATE_ERROR);
+ pht('March 12'))
+ ->setState(PHUIActionPanelView::COLOR_ORANGE);
$view2->addColumn($panel3);
$panel4 = id(new PHUIActionPanelView())
- ->setBigText('1,113,377')
+ ->setBigText(true)
->setHeader(pht('Lines of Code'))
->setHref('#')
- ->setSubHeader(pht('Your team has reviewed lots of code!'));
+ ->setSubHeader(pht('1,113,377'))
+ ->setState(PHUIActionPanelView::COLOR_INDIGO);
$view2->addColumn($panel4);
$view = phutil_tag_div('mlb', $view);
return phutil_tag_div('ml', array($view, $view2));
}
}
diff --git a/src/infrastructure/markup/interpreter/PhabricatorRemarkupCowsayBlockInterpreter.php b/src/infrastructure/markup/interpreter/PhabricatorRemarkupCowsayBlockInterpreter.php
index d1c4de115..66801d957 100644
--- a/src/infrastructure/markup/interpreter/PhabricatorRemarkupCowsayBlockInterpreter.php
+++ b/src/infrastructure/markup/interpreter/PhabricatorRemarkupCowsayBlockInterpreter.php
@@ -1,60 +1,68 @@
<?php
final class PhabricatorRemarkupCowsayBlockInterpreter
extends PhutilRemarkupBlockInterpreter {
public function getInterpreterName() {
return 'cowsay';
}
public function markupContent($content, array $argv) {
- if (!Filesystem::binaryExists('cowsay')) {
- return $this->markupError(
- pht(
- 'Unable to locate the `%s` binary. Install cowsay.',
- 'cowsay'));
- }
-
- $bin = idx($argv, 'think') ? 'cowthink' : 'cowsay';
+ $action = idx($argv, 'think') ? 'think' : 'say';
$eyes = idx($argv, 'eyes', 'oo');
$tongue = idx($argv, 'tongue', ' ');
- $cow = idx($argv, 'cow', 'default');
-
- // NOTE: Strip this aggressively to prevent nonsense like
- // `cow=/etc/passwd`. We could build a whiltelist with `cowsay -l`.
- $cow = preg_replace('/[^a-z.-]+/', '', $cow);
-
- $future = new ExecFuture(
- '%s -e %s -T %s -f %s ',
- $bin,
- $eyes,
- $tongue,
- $cow);
-
- $future->setTimeout(15);
- $future->write($content);
-
- list($err, $stdout, $stderr) = $future->resolve();
-
- if ($err) {
- return $this->markupError(
- pht(
- 'Execution of `%s` failed: %s',
- 'cowsay',
- $stderr));
+
+ $map = self::getCowMap();
+
+ $cow = idx($argv, 'cow');
+ $cow = phutil_utf8_strtolower($cow);
+ if (empty($map[$cow])) {
+ $cow = 'default';
}
+ $result = id(new PhutilCowsay())
+ ->setTemplate($map[$cow])
+ ->setAction($action)
+ ->setEyes($eyes)
+ ->setTongue($tongue)
+ ->setText($content)
+ ->renderCow();
if ($this->getEngine()->isTextMode()) {
- return $stdout;
+ return $result;
}
return phutil_tag(
'div',
array(
'class' => 'PhabricatorMonospaced remarkup-cowsay',
),
- $stdout);
+ $result);
+ }
+
+ private static function getCowMap() {
+ $root = dirname(phutil_get_library_root('phabricator'));
+
+ $directories = array(
+ $root.'/externals/cowsay/cows/',
+ $root.'/resources/cows/builtin/',
+ $root.'/resources/cows/custom/',
+ );
+
+ $map = array();
+ foreach ($directories as $directory) {
+ foreach (Filesystem::listDirectory($directory, false) as $cow_file) {
+ $matches = null;
+ if (!preg_match('/^(.*)\.cow\z/', $cow_file, $matches)) {
+ continue;
+ }
+ $cow_name = $matches[1];
+ $cow_name = phutil_utf8_strtolower($cow_name);
+ $map[$cow_name] = Filesystem::readFile($directory.$cow_file);
+ }
+ }
+
+ return $map;
}
}
diff --git a/src/infrastructure/markup/interpreter/PhabricatorRemarkupFigletBlockInterpreter.php b/src/infrastructure/markup/interpreter/PhabricatorRemarkupFigletBlockInterpreter.php
index c1b0d5805..e823d7bde 100644
--- a/src/infrastructure/markup/interpreter/PhabricatorRemarkupFigletBlockInterpreter.php
+++ b/src/infrastructure/markup/interpreter/PhabricatorRemarkupFigletBlockInterpreter.php
@@ -1,47 +1,65 @@
<?php
final class PhabricatorRemarkupFigletBlockInterpreter
extends PhutilRemarkupBlockInterpreter {
public function getInterpreterName() {
return 'figlet';
}
+ /**
+ * @phutil-external-symbol class Text_Figlet
+ */
public function markupContent($content, array $argv) {
- if (!Filesystem::binaryExists('figlet')) {
- return $this->markupError(
- pht(
- 'Unable to locate the `%s` binary. Install figlet.',
- 'figlet'));
- }
+ $map = self::getFigletMap();
- $font = idx($argv, 'font', 'standard');
- $safe_font = preg_replace('/[^0-9a-zA-Z-_.]/', '', $font);
- $future = id(new ExecFuture('figlet -f %s', $safe_font))
- ->setTimeout(15)
- ->write(trim($content, "\n"));
+ $font = idx($argv, 'font');
+ $font = phutil_utf8_strtolower($font);
+ if (empty($map[$font])) {
+ $font = 'standard';
+ }
- list($err, $stdout, $stderr) = $future->resolve();
+ $root = dirname(phutil_get_library_root('phabricator'));
+ require_once $root.'/externals/pear-figlet/Text/Figlet.php';
- if ($err) {
- return $this->markupError(
- pht(
- 'Execution of `%s` failed: %s',
- 'figlet',
- $stderr));
- }
+ $figlet = new Text_Figlet();
+ $figlet->loadFont($map[$font]);
+ $result = $figlet->lineEcho($content);
if ($this->getEngine()->isTextMode()) {
- return $stdout;
+ return $result;
}
return phutil_tag(
'div',
array(
'class' => 'PhabricatorMonospaced remarkup-figlet',
),
- $stdout);
+ $result);
+ }
+
+ private static function getFigletMap() {
+ $root = dirname(phutil_get_library_root('phabricator'));
+
+ $dirs = array(
+ $root.'/externals/figlet/fonts/',
+ $root.'/externals/pear-figlet/fonts/',
+ $root.'/resources/figlet/custom/',
+ );
+
+ $map = array();
+ foreach ($dirs as $dir) {
+ foreach (Filesystem::listDirectory($dir, false) as $file) {
+ if (preg_match('/\.flf\z/', $file)) {
+ $name = phutil_utf8_strtolower($file);
+ $name = preg_replace('/\.flf\z/', '', $name);
+ $map[$name] = $dir.$file;
+ }
+ }
+ }
+
+ return $map;
}
}
diff --git a/src/infrastructure/markup/interpreter/PhabricatorRemarkupGraphvizBlockInterpreter.php b/src/infrastructure/markup/interpreter/PhabricatorRemarkupGraphvizBlockInterpreter.php
deleted file mode 100644
index 5ccf4fb7a..000000000
--- a/src/infrastructure/markup/interpreter/PhabricatorRemarkupGraphvizBlockInterpreter.php
+++ /dev/null
@@ -1,65 +0,0 @@
-<?php
-
-final class PhabricatorRemarkupGraphvizBlockInterpreter
- extends PhutilRemarkupBlockInterpreter {
-
- public function getInterpreterName() {
- return 'dot';
- }
-
- public function markupContent($content, array $argv) {
- if (!Filesystem::binaryExists('dot')) {
- return $this->markupError(
- pht(
- 'Unable to locate the `%s` binary. Install Graphviz.',
- 'dot'));
- }
-
- $width = $this->parseDimension(idx($argv, 'width'));
-
- $future = id(new ExecFuture('dot -T%s', 'png'))
- ->setTimeout(15)
- ->write(trim($content));
-
- list($err, $stdout, $stderr) = $future->resolve();
-
- if ($err) {
- return $this->markupError(
- pht(
- 'Execution of `%s` failed (#%d), check your syntax: %s',
- 'dot',
- $err,
- $stderr));
- }
-
- $file = PhabricatorFile::buildFromFileDataOrHash(
- $stdout,
- array(
- 'name' => 'graphviz.png',
- ));
-
- if ($this->getEngine()->isTextMode()) {
- return '<'.$file->getBestURI().'>';
- }
-
- $img = phutil_tag(
- 'img',
- array(
- 'src' => $file->getBestURI(),
- 'width' => nonempty($width, null),
- ));
- return phutil_tag_div('phabricator-remarkup-embed-image-full', $img);
- }
-
- // TODO: This is duplicated from PhabricatorEmbedFileRemarkupRule since they
- // do not share a base class.
- private function parseDimension($string) {
- $string = trim($string);
-
- if (preg_match('/^(?:\d*\\.)?\d+%?$/', $string)) {
- return $string;
- }
-
- return null;
- }
-}
diff --git a/src/view/phui/PHUIActionPanelView.php b/src/view/phui/PHUIActionPanelView.php
index ad260f203..bfe44ba13 100644
--- a/src/view/phui/PHUIActionPanelView.php
+++ b/src/view/phui/PHUIActionPanelView.php
@@ -1,173 +1,139 @@
<?php
final class PHUIActionPanelView extends AphrontTagView {
private $href;
private $fontIcon;
private $header;
private $subHeader;
private $bigText;
private $state;
private $status;
- const STATE_WARN = 'phui-action-panel-warn';
- const STATE_INFO = 'phui-action-panel-info';
- const STATE_ERROR = 'phui-action-panel-error';
- const STATE_SUCCESS = 'phui-action-panel-success';
- const STATE_PROGRESS = 'phui-action-panel-progress';
- const STATE_NONE = 'phui-action-panel-none';
+ const COLOR_RED = 'phui-action-panel-red';
+ const COLOR_ORANGE = 'phui-action-panel-orange';
+ const COLOR_YELLOW = 'phui-action-panel-yellow';
+ const COLOR_GREEN = 'phui-action-panel-green';
+ const COLOR_BLUE = 'phui-action-panel-blue';
+ const COLOR_INDIGO = 'phui-action-panel-indigo';
+ const COLOR_VIOLET = 'phui-action-panel-violet';
+ const COLOR_PINK = 'phui-action-panel-pink';
public function setHref($href) {
$this->href = $href;
return $this;
}
public function setFontIcon($image) {
$this->fontIcon = $image;
return $this;
}
public function setBigText($text) {
$this->bigText = $text;
return $this;
}
public function setHeader($header) {
$this->header = $header;
return $this;
}
public function setSubHeader($sub) {
$this->subHeader = $sub;
return $this;
}
public function setState($state) {
$this->state = $state;
return $this;
}
public function setStatus($text) {
$this->status = $text;
return $this;
}
- protected function getStateIcon() {
- $icon = new PHUIIconView();
- switch ($this->state) {
- case self::STATE_WARN:
- $icon->setIconFont('fa-exclamation-circle msr');
- break;
- case self::STATE_INFO:
- $icon->setIconFont('fa-info-circle msr');
- break;
- case self::STATE_ERROR:
- $icon->setIconFont('fa-exclamation-triangle msr');
- break;
- case self::STATE_PROGRESS:
- $icon->setIconFont('fa-refresh ph-spin msr');
- break;
- case self::STATE_SUCCESS:
- $icon->setIconFont('fa-check msr');
- break;
- case self::STATE_NONE:
- return null;
- break;
- }
- return $icon;
+ protected function getTagName() {
+ return 'div';
}
protected function getTagAttributes() {
require_celerity_resource('phui-action-panel-css');
$classes = array();
$classes[] = 'phui-action-panel';
- if ($this->status) {
- $classes[] = 'phui-action-panel-has-status';
+ if ($this->state) {
$classes[] = $this->state;
-
+ }
+ if ($this->bigText) {
+ $classes[] = 'phui-action-panel-bigtext';
}
return array(
'class' => implode(' ', $classes),
);
-
}
protected function getTagContent() {
$icon = null;
- if ($this->fontIcon || $this->bigText) {
- if ($this->fontIcon) {
- $fonticon = id(new PHUIIconView())
- ->setIconFont($this->fontIcon);
- } else {
- $fonticon = phutil_tag(
- 'span',
- array(
- 'class' => 'phui-action-panel-bigtext',
- ),
- $this->bigText);
- }
- if ($this->href) {
- $fonticon = phutil_tag(
- 'a',
- array(
- 'href' => $this->href,
- ),
- $fonticon);
- }
+ if ($this->fontIcon) {
+ $fonticon = id(new PHUIIconView())
+ ->setIconFont($this->fontIcon);
$icon = phutil_tag(
- 'div',
+ 'span',
array(
'class' => 'phui-action-panel-icon',
),
$fonticon);
}
$header = null;
if ($this->header) {
- $header = $this->header;
- if ($this->href) {
- $header = phutil_tag(
- 'a',
- array(
- 'href' => $this->href,
- ),
- $this->header);
- }
$header = phutil_tag(
- 'div',
+ 'span',
array(
'class' => 'phui-action-panel-header',
),
- $header);
+ $this->header);
}
$subheader = null;
if ($this->subHeader) {
$subheader = phutil_tag(
- 'div',
+ 'span',
array(
'class' => 'phui-action-panel-subheader',
),
$this->subHeader);
}
- $status = null;
- if ($this->status && $this->state) {
- $state_icon = $this->getStateIcon();
- $status = phutil_tag(
- ($this->href) ? 'a' : 'div',
- array(
- 'class' => 'phui-action-panel-status',
- 'href' => ($this->href) ? $this->href : null,
- ),
- array($state_icon, $this->status));
- }
-
- return array($icon, $header, $subheader, $status);
+ $row = phutil_tag(
+ 'span',
+ array(
+ 'class' => 'phui-action-panel-row',
+ ),
+ array(
+ $icon,
+ $subheader,
+ ));
+
+ $table = phutil_tag(
+ 'span',
+ array(
+ 'class' => 'phui-action-panel-table',
+ ),
+ $row);
+
+ return phutil_tag(
+ 'a',
+ array(
+ 'href' => $this->href,
+ 'class' => 'phui-action-panel-hitarea',
+ ),
+ array($header, $table));
}
}
diff --git a/webroot/rsrc/css/application/paste/paste.css b/webroot/rsrc/css/application/paste/paste.css
index b9b2fe2dd..ae53a577e 100644
--- a/webroot/rsrc/css/application/paste/paste.css
+++ b/webroot/rsrc/css/application/paste/paste.css
@@ -1,27 +1,35 @@
/**
* @provides paste-css
*/
+.container-of-paste {
+ margin: 16px;
+}
+
+.device .container-of-paste {
+ margin: 8px;
+}
+
.paste-embed {
background: {$sh-yellowbackground};
border: 1px solid {$sh-lightyellowborder};
border-radius: 3px;
}
.paste-embed .phabricator-source-code-container {
border: none;
}
.paste-embed-head {
border-bottom: 1px solid {$sh-lightyellowborder};
padding: 8px 12px;
}
.paste-embed-head a {
color: {$darkbluetext};
font-weight: bold;
}
.paste-embed-body {
overflow-y: auto;
}
diff --git a/webroot/rsrc/css/core/remarkup.css b/webroot/rsrc/css/core/remarkup.css
index 9a3906f3b..98dad91a2 100644
--- a/webroot/rsrc/css/core/remarkup.css
+++ b/webroot/rsrc/css/core/remarkup.css
@@ -1,541 +1,541 @@
/**
* @provides phabricator-remarkup-css
*/
.phabricator-remarkup {
line-height: 1.51em;
word-break: break-word;
}
.phabricator-remarkup p {
margin: 0 0 12px;
}
.PhabricatorMonospaced,
.phabricator-remarkup .remarkup-code-block .remarkup-code {
font: 10px/13px "Menlo", "Consolas", "Monaco", monospace;
}
.platform-windows .PhabricatorMonospaced,
.platform-windows .phabricator-remarkup .remarkup-code-block .remarkup-code {
font: 11px/13px "Menlo", "Consolas", "Monaco", monospace;
}
.phabricator-remarkup .remarkup-code-block {
margin: 12px 0;
white-space: pre;
}
.phabricator-remarkup .remarkup-code-header {
padding: 2px 8px;
font-size: 13px;
font-weight: bold;
background: {$sh-yellowbackground};
display: inline-block;
}
.phabricator-remarkup .code-block-counterexample .remarkup-code-header {
background-color: {$sh-redbackground};
}
.phabricator-remarkup .remarkup-code-block pre {
- background: {$sh-yellowbackground};
+ background: #FFFEF5;
border: 1px solid {$sh-lightyellowborder};
display: block;
- color: #000000;
+ color: #000;
overflow: auto;
- padding: 12px 8px;
+ padding: 8px;
}
.phabricator-remarkup pre.remarkup-counterexample {
border: 1px solid {$sh-lightredborder};
background-color: {$sh-redbackground};
}
.phabricator-remarkup tt.remarkup-monospaced {
color: #000;
background: rgba(71,87,120,0.1);
padding: 1px 4px;
border-radius: 3px;
white-space: pre-wrap;
}
/* NOTE: You can currently produce this with [[link | `name`]]. Restore the
link color. */
.phabricator-remarkup a tt.remarkup-monospaced {
color: {$anchor};
}
.phabricator-remarkup ul.remarkup-list {
list-style: disc;
margin: 12px 0 12px 30px;
}
.phabricator-remarkup ol.remarkup-list {
list-style: decimal;
margin: 12px 0 12px 30px;
}
.phabricator-remarkup ol ol.remarkup-list {
list-style: upper-alpha;
}
.phabricator-remarkup ol ol ol.remarkup-list {
list-style: lower-alpha;
}
.phabricator-remarkup ol ol ol ol.remarkup-list {
list-style: lower-roman;
}
.phabricator-remarkup ul.remarkup-list-with-checkmarks {
list-style: none;
margin-left: 18px;
}
.phabricator-remarkup .remarkup-list-with-checkmarks input {
margin-right: 2px;
}
.phabricator-remarkup .remarkup-list-with-checkmarks .remarkup-checked-item {
color: {$greytext};
}
.phabricator-remarkup ul.remarkup-list ol.remarkup-list,
.phabricator-remarkup ul.remarkup-list ul.remarkup-list,
.phabricator-remarkup ol.remarkup-list ol.remarkup-list,
.phabricator-remarkup ol.remarkup-list ul.remarkup-list {
margin: 4px 0 4px 24px;
}
.phabricator-remarkup .remarkup-list-item {
line-height: 1.6em;
}
.phabricator-remarkup li.phantom-item,
.phabricator-remarkup li.phantom-item {
list-style-type: none;
}
.phabricator-remarkup h1.remarkup-header {
font-size: 24px;
line-height: 1.625em;
margin: 24px 0 4px;
}
.phabricator-remarkup h2.remarkup-header {
font-size: 20px;
line-height: 1.5em;
margin: 20px 0 4px;
}
.phabricator-remarkup h3.remarkup-header {
font-size: 18px;
line-height: 1.375em;
margin: 20px 0 4px;
}
.phabricator-remarkup h4.remarkup-header {
font-size: 16px;
line-height: 1.25em;
margin: 12px 0 4px;
}
.phabricator-remarkup h5.remarkup-header {
font-size: 15px;
line-height: 1.125em;
margin: 8px 0 4px;
}
.phabricator-remarkup h6.remarkup-header {
font-size: 14px;
line-height: 1em;
margin: 4px 0;
}
.phabricator-remarkup .remarkup-header + .remarkup-header {
margin-top: 0px;
}
.phabricator-remarkup blockquote {
border-left: 3px solid {$sh-blueborder};
color: {$darkbluetext};
font-style: italic;
margin: 4px 0 12px 0;
padding: 8px 12px;
background-color: {$lightbluebackground};
}
.phabricator-remarkup blockquote blockquote {
background-color: rgba(175,175,175, .1);
}
.phabricator-remarkup blockquote em {
font-style: normal;
}
.phabricator-remarkup blockquote div.remarkup-reply-head {
font-style: normal;
padding-bottom: 4px;
}
.phabricator-remarkup blockquote div.remarkup-reply-head
.phui-tag-core {
background-color: transparent;
border: none;
padding: 0;
color: {$darkbluetext};
}
.phabricator-remarkup img.remarkup-proxy-image {
max-width: 640px;
max-height: 640px;
}
.phabricator-remarkup audio {
display: block;
margin: 16px auto;
min-width: 240px;
width: 50%;
}
.phabricator-remarkup-mention-exists {
font-weight: bold;
background: #e6f3ff;
}
.phabricator-remarkup-mention-disabled {
font-weight: bold;
background: #dddddd;
}
.phui-remarkup-preview .phabricator-remarkup-mention-unknown,
.aphront-panel-preview .phabricator-remarkup-mention-unknown {
font-weight: bold;
background: #ffaaaa;
}
.phabricator-remarkup-mention-nopermission .phui-tag-core {
background: {$lightgreybackground};
color: {$lightgreytext};
}
.phabricator-remarkup .remarkup-note {
margin: 16px 0;
padding: 12px;
border-left: 3px solid {$blue};
background: {$lightblue};
}
.phabricator-remarkup .remarkup-warning {
margin: 16px 0;
padding: 12px;
border-left: 3px solid {$yellow};
background: {$lightyellow};
}
.phabricator-remarkup .remarkup-important {
margin: 16px 0;
padding: 12px;
border-left: 3px solid {$red};
background: {$lightred};
}
.phabricator-remarkup .remarkup-note .remarkup-monospaced,
.phabricator-remarkup .remarkup-important .remarkup-monospaced,
.phabricator-remarkup .remarkup-warning .remarkup-monospaced {
background-color: rgba(150,150,150,.2);
}
.phabricator-remarkup .remarkup-note-word {
font-weight: bold;
color: {$darkbluetext};
}
.phabricator-remarkup-toc {
float: right;
border-left: 1px solid {$lightblueborder};
background: #fff;
width: 160px;
padding-left: 8px;
margin: 0 0 4px 8px;
}
.phabricator-remarkup-toc-header {
font-size: 13px;
line-height: 13px;
color: {$darkbluetext};
font-weight: bold;
margin-bottom: 4px;
}
.phabricator-remarkup-toc ul {
padding: 0;
margin: 0;
list-style: none;
overflow: hidden;
}
.phabricator-remarkup-toc ul ul {
margin: 0 0 0 8px;
}
.phabricator-remarkup-toc ul li {
padding: 0;
margin: 0;
font-size: 12px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.phabricator-remarkup-embed-layout-right {
text-align: right;
}
.phabricator-remarkup-embed-layout-center {
text-align: center;
}
.phabricator-remarkup-embed-layout-inline {
display: inline;
}
.phabricator-remarkup-embed-float-right {
float: right;
margin: .5em 1em 0;
}
.phabricator-remarkup-embed-layout-link {
padding-left: 20px;
background: url(/rsrc/image/icon/fatcow/page_white_put.png) 0 0 no-repeat;
}
.phabricator-remarkup-embed-float-left {
float: left;
margin: .5em 1em 0;
}
.phabricator-remarkup-embed-image {
display: inline-block;
border: 3px solid white;
box-shadow: 1px 1px 2px rgba(0, 0, 0, 0.20);
}
.phabricator-remarkup-embed-image-full {
display: inline-block;
max-width: 100%;
}
.phabricator-remarkup-embed-image-full img {
height: auto;
max-width: 100%;
}
.phabricator-remarkup table.remarkup-table {
border-collapse: separate;
border-spacing: 1px;
background: {$lightblueborder};
margin: 12px 0;
word-break: normal;
}
.phabricator-remarkup table.remarkup-table th {
font-weight: bold;
padding: 4px 6px;
background: {$lightbluebackground};
}
.phabricator-remarkup table.remarkup-table td {
background: #ffffff;
padding: 3px 6px;
}
body div.phabricator-remarkup.remarkup-has-toc
.phabricator-remarkup-toc + .remarkup-header {
margin-top: 0;
padding-top: 0;
}
body .phabricator-remarkup p:first-child,
body .phabricator-remarkup ul.remarkup-list:first-child,
body .phabricator-remarkup ol.remarkup-list:first-child,
body .phabricator-remarkup .remarkup-code-block:first-child,
body .phabricator-remarkup h1.remarkup-header:first-child,
body .phabricator-remarkup h2.remarkup-header:first-child,
body .phabricator-remarkup h3.remarkup-header:first-child,
body .phabricator-remarkup h4.remarkup-header:first-child,
body .phabricator-remarkup h5.remarkup-header:first-child,
body .phabricator-remarkup h6.remarkup-header:first-child,
body .phabricator-remarkup blockquote:first-child,
body .phabricator-remarkup table.remarkup-table:first-child,
body .phabricator-remarkup .remarkup-note:first-child {
margin-top: 0;
}
body .phabricator-remarkup p:last-child,
body .phabricator-remarkup ul.remarkup-list:last-child,
body .phabricator-remarkup ol.remarkup-list:last-child,
body .phabricator-remarkup .remarkup-code-block:last-child,
body .phabricator-remarkup h1.remarkup-header:last-child,
body .phabricator-remarkup h2.remarkup-header:last-child,
body .phabricator-remarkup h3.remarkup-header:last-child,
body .phabricator-remarkup h4.remarkup-header:last-child,
body .phabricator-remarkup h5.remarkup-header:last-child,
body .phabricator-remarkup h6.remarkup-header:last-child,
body .phabricator-remarkup blockquote:last-child,
body .phabricator-remarkup table.remarkup-table:last-child,
body .phabricator-remarkup .remarkup-note:last-child {
margin-bottom: 0;
}
.remarkup-assist-textarea {
border-left-color: {$blueborder};
border-right-color: {$blueborder};
border-bottom-color: {$blueborder};
border-top-color: {$thinblueborder};
border-radius: 0;
box-shadow: none;
-webkit-box-shadow: none;
/* Set line height explicitly so the metrics <var /> and the real textarea
are forced to the same value. */
line-height: 1.25em;
/* Prevent Safari and Chrome users from dragging the textarea any wider,
because the top bar won't resize along with it. */
resize: vertical;
}
var.remarkup-assist-textarea {
/* This is an invisible element used to measure the size of text in the
textarea so we can float typeaheads over the cursor position. */
display: block;
border-color: orange;
box-sizing: border-box;
padding: 4px 6px;
white-space: pre-wrap;
visibility: hidden;
}
.remarkup-assist-textarea:focus {
border: 1px solid rgba(82, 168, 236, 0.8);
}
.remarkup-assist-bar {
height: 26px;
border-width: 1px 1px 0;
border-style: solid;
border-top-color: {$blueborder};
border-left-color: {$blueborder};
border-right-color: {$blueborder};
background: {$lightbluebackground};
overflow: hidden;
}
.remarkup-assist-button {
display: block;
padding: 4px 5px;
float: left;
}
.remarkup-assist-button:hover {
background-color: rgba(100,100,100,.15);
}
.remarkup-assist-button:hover .phui-icon-view.phui-font-fa {
color: {$darkbluetext};
}
.remarkup-assist-button:active {
outline: none;
}
.remarkup-assist-button:focus {
outline: none;
}
.remarkup-assist-separator {
display: block;
float: left;
margin: 7px 4px;
height: 14px;
width: 0px;
border-right: 1px solid #cccccc;
}
.remarkup-interpreter-error {
padding: 8px;
border: 1px solid {$sh-redborder};
background-color: {$sh-redbackground};
}
.remarkup-cowsay {
white-space: pre-wrap;
}
.remarkup-figlet {
white-space: pre-wrap;
}
.remarkup-assist {
width: 14px;
height: 14px;
overflow: hidden;
text-align: center;
vertical-align: middle;
}
.remarkup-assist-right {
float: right;
}
.jx-order-mask {
background: white;
opacity: 1.0;
}
.remarkup-control-fullscreen-mode {
position: fixed;
top: -1px;
bottom: -1px;
left: -1px;
right: -1px;
}
.remarkup-control-fullscreen-mode textarea.remarkup-assist-textarea {
position: absolute;
top: 27px;
left: 0;
right: 0;
bottom: 0;
/* NOTE: This doesn't work in Firefox, there's a JS behavior to correct it. */
height: auto;
border-width: 1px 0 0 0;
outline: none;
}
.phabricator-image-macro-hero {
margin: auto;
max-width: 95%;
}
.phabricator-remarkup-macro {
height: auto;
max-width: 100%;
}
.remarkup-nav-sequence-arrow {
color: {$lightgreytext};
}
.phabricator-remarkup hr {
background: {$thinblueborder};
margin: 24px 0;
}
diff --git a/webroot/rsrc/css/layout/phabricator-source-code-view.css b/webroot/rsrc/css/layout/phabricator-source-code-view.css
index 047a30459..4bd57fcfc 100644
--- a/webroot/rsrc/css/layout/phabricator-source-code-view.css
+++ b/webroot/rsrc/css/layout/phabricator-source-code-view.css
@@ -1,74 +1,74 @@
/**
* @provides phabricator-source-code-view-css
*/
.phabricator-source-code-container {
- background: #fff;
overflow-x: auto;
overflow-y: hidden;
border: 1px solid {$sh-lightyellowborder};
border-radius: 3px;
- background-color: #FCFBF7;
+ background-color: #FFFEF5;
}
.phui-object-item .phabricator-source-code-container {
margin-left: 8px;
}
.phabricator-source-code-view tr:first-child * {
padding-top: 8px;
}
.phabricator-source-code-view tr:last-child * {
padding-bottom: 8px;
}
.phabricator-source-code {
white-space: pre-wrap;
padding: 2px 8px 1px;
width: 100%;
}
.phabricator-source-line {
background-color: {$sh-yellowbackground};
text-align: right;
padding: 2px 6px 1px 12px;
border-right: 1px solid {$sh-lightyellowborder};
color: {$sh-yellowtext};
/* When the user selects rows of source, don't visibly select the line
numbers beside them. We use JS to strip the line numbers out when the user
copies the text. */
-moz-user-select: -moz-none;
-khtml-user-select: none;
-webkit-user-select: none;
-ms-user-select: none;
user-select: none;
+ white-space: nowrap;
}
th.phabricator-source-line a {
color: {$darkbluetext};
}
th.phabricator-source-line:hover {
background: {$sh-lightyellowborder};
cursor: pointer;
}
.phabricator-source-highlight {
background: {$sh-yellowbackground};
}
.phabricator-source-code-summary {
padding-bottom: 8px;
}
/* If a Paste has enormously long lines, truncate them in the summary on the
list page. They'll be fully visible on the Paste itself. */
.phabricator-source-code-summary .phabricator-source-code-container {
overflow-x: hidden;
}
.phabricator-source-code-summary .phabricator-source-code {
white-space: nowrap;
}
diff --git a/webroot/rsrc/css/phui/phui-action-panel.css b/webroot/rsrc/css/phui/phui-action-panel.css
index 0c9aa2c83..6d7c566de 100644
--- a/webroot/rsrc/css/phui/phui-action-panel.css
+++ b/webroot/rsrc/css/phui/phui-action-panel.css
@@ -1,131 +1,226 @@
/**
* @provides phui-action-panel-css
*/
.phui-action-panel {
position: relative;
+ background-color: #fff;
+ border: 1px solid {$lightblueborder};
+ border-radius: 3px;
+ margin: 0 8px;
+ min-height: 108px;
+ overflow: hidden;
}
-.phui-action-panel-has-status.phui-action-panel {
- padding-bottom: 44px;
+.device .phui-action-panel {
+ margin: 0;
}
-.phui-action-panel-icon {
- height: 128px;
- line-height: 160px;
- text-align: center;
- vertical-align: bottom;
+.phui-action-panel-hitarea {
+ display: block;
+}
+
+.device-desktop .phui-action-panel-hitarea:hover {
+ text-decoration: none;
+ background-color: rgba(255,255,255,.25);
+}
+
+.device-desktop .phui-action-panel-hitarea:hover .phui-icon-view {
+ margin-top: -4px;
+ transition-duration: .2s;
}
-.phui-action-panel-bigtext {
- font-size: 40px;
- color: {$lightgreytext};
- line-height: 96px;
+.phui-action-panel-table {
+ display: table;
+ height: 80px;
+ width: 100%;
+}
+
+.phui-action-panel-row {
+ display: table-row;
+}
+
+.phui-action-panel-icon {
+ width: 64px;
+ text-align: center;
+ vertical-align: middle;
+ display: table-cell;
}
.phui-action-panel-icon a {
display: block;
}
.phui-action-panel-icon a:hover .phui-icon-view,
.phui-action-panel-icon a:hover .phui-action-panel-bigtext {
color: {$blue};
}
.phui-action-panel-icon a:hover {
text-decoration: none;
}
.phui-action-panel-icon .phui-icon-view {
- font-size: 64px;
- color: {$lightgreytext};
+ font-size: 36px;
+ color: {$lightbluetext};
}
.phui-action-panel-header {
- padding: 0 8px 4px 8px;
+ padding: 8px;
+ border-bottom: 1px solid {$thinblueborder};
font-weight: bold;
- font-size: {$biggerfontsize};
+ white-space: nowrap;
+ overflow: hidden;
color: {$darkbluetext};
+ display: block;
}
-.phui-action-panel-header a {
- color: {$blue};
+.phui-action-panel-bigtext .phui-action-panel-subheader {
+ font-size: 28px;
+ color: {$darkbluetext};
+ text-align: center;
+ padding: 0 8px;
}
.phui-action-panel-subheader {
- padding: 0 8px 4px 8px;
- font-size: {$normalfontsize};
- color: {$bluetext};
+ display: table-cell;
+ vertical-align: middle;
+ color: {$darkbluetext};
+ padding: 8px 8px 8px 0;
+}
+
+.phui-action-panel-subheader a {
+ text-decoraction: none;
}
.phui-action-panel-status {
padding: 8px 12px;
position: absolute;
bottom: 0;
left: 0;
right: 0;
}
.phui-action-panel-status:hover {
text-decoration: none;
}
-.phui-action-panel-none .phui-action-panel-status {
- background-color: {$lightgreybackground};
- border-left: 4px solid {$greyborder};
- color: {$greytext};
+/* - Red -------------------------------------------------------------------- */
+
+.phui-action-panel-red {
+ background-color: {$sh-redbackground};
+ border-color: {$sh-redborder};
}
-.phui-action-panel-warn .phui-action-panel-status .phui-icon-view {
- color: {$greytext};
+.phui-action-panel-red .phui-action-panel-icon .phui-icon-view {
+ color: {$sh-redicon};
}
-.phui-action-panel-warn .phui-action-panel-status {
- background-color: {$lightyellow};
- border-left: 4px solid #bc7837;
- color: #bc7837;
+.phui-action-panel-red .phui-action-panel-header {
+ border-color: {$sh-lightredborder};
}
-.phui-action-panel-warn .phui-action-panel-status .phui-icon-view {
- color: #bc7837;
+/* - Orange ----------------------------------------------------------------- */
+
+.phui-action-panel-orange {
+ background-color: {$sh-orangebackground};
+ border-color: {$sh-orangeborder};
}
-.phui-action-panel-error .phui-action-panel-status {
- background-color: {$lightred};
- border-left: 4px solid {$red};
- color: {$red};
+.phui-action-panel-orange .phui-action-panel-icon .phui-icon-view {
+ color: {$sh-orangeicon};
}
-.phui-action-panel-error .phui-action-panel-status .phui-icon-view {
- color: {$red};
+.phui-action-panel-orange .phui-action-panel-header {
+ border-color: {$sh-lightorangeborder};
}
-.phui-action-panel-info .phui-action-panel-status {
- background-color: {$lightblue};
- border-left: 4px solid {$blue};
- color: {$blue};
+/* - Yellow ----------------------------------------------------------------- */
+
+.phui-action-panel-yellow {
+ background-color: {$sh-yellowbackground};
+ border-color: {$sh-yellowborder};
}
-.phui-action-panel-info .phui-action-panel-status .phui-icon-view {
- color: {$blue};
+.phui-action-panel-yellow .phui-action-panel-icon .phui-icon-view {
+ color: {$sh-yellowicon};
}
-.phui-action-panel-success .phui-action-panel-status {
- background-color: {$lightgreen};
- color: {$green};
- border-left: 4px solid {$green};
+.phui-action-panel-yellow .phui-action-panel-header {
+ border-color: {$sh-lightyellowborder};
}
-.phui-action-panel-success .phui-action-panel-status .phui-icon-view {
- color: {$green};
+/* - Green ------------------------------------------------------------------ */
+
+.phui-action-panel-green {
+ background-color: {$sh-greenbackground};
+ border-color: {$sh-greenborder};
}
-.phui-action-panel-progress .phui-action-panel-status {
- background-color: {$lightblue};
- color: {$blue};
- border-left: 4px solid {$blue};
+.phui-action-panel-green .phui-action-panel-icon .phui-icon-view {
+ color: {$sh-greenicon};
}
-.phui-action-panel-progress .phui-action-panel-status .phui-icon-view {
- color: {$blue};
+.phui-action-panel-green .phui-action-panel-header {
+ border-color: {$sh-lightgreenborder};
+}
+
+/* - Blue ------------------------------------------------------------------- */
+
+.phui-action-panel-blue {
+ background-color: {$sh-bluebackground};
+ border-color: {$sh-blueborder};
+}
+
+.phui-action-panel-blue .phui-action-panel-icon .phui-icon-view {
+ color: {$sh-blueicon};
+}
+
+.phui-action-panel-blue .phui-action-panel-header {
+ border-color: {$sh-lightblueborder};
+}
+
+/* - Indigo ----------------------------------------------------------------- */
+
+.phui-action-panel-indigo {
+ background-color: {$sh-indigobackground};
+ border-color: {$sh-indigoborder};
+}
+
+.phui-action-panel-indigo .phui-action-panel-icon .phui-icon-view {
+ color: {$sh-indigoicon};
+}
+
+.phui-action-panel-indigo .phui-action-panel-header {
+ border-color: {$sh-lightindigoborder};
+}
+
+/* - Violet ----------------------------------------------------------------- */
+
+.phui-action-panel-violet {
+ background-color: {$sh-violetbackground};
+ border-color: {$sh-violetborder};
+}
+
+.phui-action-panel-violet .phui-action-panel-icon .phui-icon-view {
+ color: {$sh-violeticon};
+}
+
+.phui-action-panel-violet .phui-action-panel-header {
+ border-color: {$sh-lightvioletborder};
+}
+
+/* - Pink ------------------------------------------------------------------- */
+
+.phui-action-panel-pink {
+ background-color: {$sh-pinkbackground};
+ border-color: {$sh-violetborder};
+}
+
+.phui-action-panel-pink .phui-action-panel-icon .phui-icon-view {
+ color: {$sh-pinkicon};
+}
+
+.phui-action-panel-pink .phui-action-panel-header {
+ border-color: {$sh-lightpinkborder};
}
Event Timeline
Log In to Comment