0e423dec5437 — Duncan Ross Palmer 1 year, 2 months ago
Merged develop into default
9 files changed, 1417 insertions(+), 3 deletions(-)

A => .hgignore
A => ChangeLog.txt
M Makefile
M README.md
A => bin/raw2c
A => t/Makefile
A => t/data/ref.c
A => t/data/ref.h
A => t/raw2c.pl
A => .hgignore +2 -0
@@ 0,0 1,2 @@ 
+syntax: glob
+.*.sw?

          
A => ChangeLog.txt +22 -0
@@ 0,0 1,22 @@ 
+1.0.0
+-----
+  * Mon Aug 26 00:41:08 2019 +0000, 5374e943bf36: To reduce build time dependencies for libhoratio, we need to port raw2c into a Perl-pure alternative
+  * Mon Aug 26 10:02:02 2019 +0000, 041d3747af2a: Initial changes to build system
+  * Mon Aug 26 10:02:19 2019 +0000, c768ba828a0c: Added test data
+  * Mon Aug 26 10:17:02 2019 +0000, b66a8bdfedaf: Initial code which doesn't do anything.
+  * Mon Aug 26 10:31:03 2019 +0000, 060781e0bfc7: Start doing some TDD
+  * Mon Aug 26 10:33:13 2019 +0000, 5330eaf5d371: Test syntax() method
+  * Mon Aug 26 10:41:45 2019 +0000, 2db2f7cc8a3a: getHead test
+  * Mon Aug 26 10:56:00 2019 +0000, 9f95ad4a9522: use Test::Module::Runnable
+  * Mon Aug 26 11:14:47 2019 +0000, ec0b7b8ca7a9: Do randChar
+  * Mon Aug 26 11:28:11 2019 +0000, 572734b5745d: Write randomSymbol
+  * Mon Aug 26 11:29:51 2019 +0000, 1269000a789c: Use sut slot in tester framework
+  * Mon Aug 26 13:45:41 2019 +0000, 948c632088e8: Start work on options parser
+  * Mon Aug 26 13:59:33 2019 +0000, 23570d232f0b: Handle parsing of all flags correctly
+  * Mon Aug 26 14:15:52 2019 +0000, 6c01ca045449: main function now triggers options parsing
+  * Mon Aug 26 18:16:32 2019 +0000, 5ea99e7be35b: Finish command-line argument processing
+  * Mon Aug 26 20:27:16 2019 +0000, 2d85d900e1d3: Migrate over all code -- working now, but all bytes are zeroed
+  * Mon Aug 26 20:42:48 2019 +0000, 70e46a8cd312: Fix a bug which may be present in the raw2c C version ref processing the last byte in the file
+  * Mon Aug 26 20:44:23 2019 +0000, 9250802f70ad: fix up path in reference data
+  * Mon Aug 26 20:46:20 2019 +0000, b7940c1fae5d: Another symbolName -> symbol
+  * Mon Aug 26 20:47:13 2019 +0000, 4f32101da337: Missing copyright notice in unit test

          
M Makefile +5 -0
@@ 1,3 1,5 @@ 
+#!/usr/bin/env make -f
+
 all:
 	@echo "Nothing to do"
 

          
@@ 5,4 7,7 @@ check : test
 test : all
 	cd t && make test
 
+clean:
+	cd t && make clean
+
 install : all

          
M README.md +3 -3
@@ 5,7 5,7 @@ This README would normally document what
 ### What is this repository for? ###
 
 * Scripts to help pre-process and build complex applications
-* VERSION 0.0.0
+* VERSION 1.0.0
 
 ### How do I get set up? ###
 

          
@@ 16,9 16,9 @@ This README would normally document what
 ### Contribution guidelines ###
 
 * All tests are under the t/ directory in the form t/script/function.t
-* All code reviews are performed as pull requests into the develop branch of the repository at https://bitbucket.org/2E0EOL/build-scripts
+* All code reviews are performed as pull requests into the develop branch of the repository at https://hg.sr.ht/~m6kvm/build-scripts
 * The directory bin/ contains scripts, it should never contain compiled binaries.
 
 ### Who do I talk to? ###
 
-* Maintainer: David Duncan Ross Palmer, 2E0EOL <palmer@overchat.org>
+* Maintainer: Duncan Ross Palmer, 2E0EOL <palmer@overchat.org>

          
A => bin/raw2c +431 -0
@@ 0,0 1,431 @@ 
+#!/usr/bin/env perl
+#
+# raw2c (Pure Perl Edition)
+# Copyright (c) 2019, Duncan Ross Palmer (2E0EOL) and others,
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are met:
+#
+#     * Redistributions of source code must retain the above copyright notice,
+#       this list of conditions and the following disclaimer.
+#
+#     * Redistributions in binary form must reproduce the above copyright
+#       notice, this list of conditions and the following disclaimer in the
+#       documentation and/or other materials provided with the distribution.
+#
+#     * Neither the name of the Daybo Logic nor the names of its contributors
+#       may be used to endorse or promote products derived from this software
+#       without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+#
+
+package FileOrDir;
+use strict;
+use warnings;
+
+sub new {
+	my ($class) = @_;
+
+	return bless({
+		handle => undef,
+		isDir => undef,
+		fileInfo => undef,
+	}, $class);
+}
+
+sub handle {
+	my ($self, @args) = @_;
+	($self->{handle}) = @args if (scalar(@args));
+	return $self->{handle};
+}
+
+sub fileInfo {
+	my ($self, @args) = @_;
+	($self->{fileInfo}) = @args if (scalar(@args));
+	return $self->{fileInfo};
+}
+
+sub isDir {
+	my ($self, @args) = @_;
+
+	if (scalar(@args)) {
+		if (defined($self->{isDir})) {
+			die('Cannot set isDir on same object twice');
+		} else {
+			($self->{isDir}) = @args;
+		}
+	}
+
+	return $self->{isDir};
+}
+
+package Options;
+use strict;
+use warnings;
+
+sub new {
+	my ($class) = @_;
+
+	return bless({
+		quiet          => 0,
+		nullTerminator => 0,
+		symbol         => '',
+		header         => '',
+		inputFileName  => '',
+		outputFileName => '',
+		recurse        => 0,
+	}, $class);
+}
+
+sub quiet {
+	my ($self, @args) = @_;
+	($self->{quiet}) = @args if (scalar(@args));
+	return $self->{quiet};
+}
+
+sub inputFileName {
+	my ($self, @args) = @_;
+	($self->{inputFileName}) = @args if (scalar(@args));
+	return $self->{inputFileName};
+}
+
+sub outputFileName {
+	my ($self, @args) = @_;
+	($self->{outputFileName}) = @args if (scalar(@args));
+	return $self->{outputFileName};
+}
+
+sub symbol {
+	my ($self, @args) = @_;
+	($self->{symbol}) = @args if (scalar(@args));
+	return $self->{symbol};
+}
+
+sub nullTerminator {
+	my ($self, @args) = @_;
+	($self->{nulllTerminator}) = @args if (scalar(@args));
+	return $self->{nulllTerminator};
+}
+
+sub recurse {
+	my ($self, @args) = @_;
+	($self->{recurse}) = @args if (scalar(@args));
+	return $self->{recurse};
+}
+
+sub header {
+	my ($self, @args) = @_;
+	($self->{header}) = @args if (scalar(@args));
+	return $self->{header};
+}
+
+package OptionsParser;
+use strict;
+use warnings;
+
+sub new {
+	my ($class) = @_;
+	return bless({}, $class);
+}
+
+sub randChar {
+	my $validChars = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_';
+	my $randOffset = int(rand(length($validChars)));
+	return substr($validChars, $randOffset, 1);
+}
+
+sub randomSymbol {
+	my $buffer = '';
+	$buffer .= randChar() foreach (0..19);
+	return '__rawimage_' . $buffer;
+}
+
+sub parse {
+	my ($self, $argumentVector) = @_;
+
+	my $options = Options->new();
+
+	for (my $i = 0; $i < scalar(@$argumentVector); $i++) {
+		my $arg = $argumentVector->[$i];
+		if ($arg eq '-q') {
+			$options->quiet(1);
+		} elsif ($arg eq '-n') {
+			$options->nullTerminator(1);
+		} elsif ($arg eq '-r') {
+			$options->recurse(1);
+		} elsif ($arg =~ m/^--symbol=(\w+)$/o) {
+			$options->symbol($1);
+		} elsif ($arg =~ m/^--header=(.*)$/o) {
+			$options->header($1);
+		} else { # Must be a filename
+			if (!$options->inputFileName) {
+				$options->inputFileName($arg);
+			} elsif (!$options->outputFileName) {
+				$options->outputFileName($arg);
+			} else {
+				die("Too many filenames specified: $arg");
+			}
+		}
+	}
+
+	if (!$options->inputFileName || !$options->outputFileName) {
+		die('Must specify input & output filenames');
+	}
+
+	if (!$options->symbol) {
+		if (!$options->quiet) {
+			print("No symbol name was specified, a random symbol will be generated.\n");
+		}
+
+		$options->symbol($self->randomSymbol());
+	}
+
+	return $options;
+}
+
+package Main;
+use strict;
+use warnings;
+use Carp qw(confess);
+use English qw(-no_match_vars);
+use Fcntl 'S_ISDIR';
+use File::stat;
+use IO::File;
+use POSIX qw(EXIT_FAILURE EXIT_SUCCESS);
+
+sub new {
+	my ($class) = @_;
+	return bless({
+		optionsParser => OptionsParser->new(),
+		options => undef,
+	}, $class);
+}
+
+sub optionsParser {
+	my ($self) = @_;
+	return $self->{optionsParser};
+}
+
+sub options {
+	my ($self, @args) = @_;
+	($self->{options}) = @args if (scalar(@args));
+	return $self->{options};
+}
+
+sub getHead() {
+	return "/*\n  This file was autogenerated by raw2c, by Duncan Ross Palmer.\n  Visit http://www.daybologic.co.uk\n*/\n\n";
+}
+
+sub syntax {
+	print(
+		"Syntax: [-q] [-n] [--symbol=__symbol] <binary_file> <source_file>[.c]\n" .
+		"-q disables non-critical output\n" .
+		"-n adds a NULL terminator\n" .
+		"--symbol The string following this is the public symbol for the image, else it is random\n" .
+		"binary_file is a file such as a JPEG or executable image, it may even be source\n" .
+		"source_file is a new C file to write which will contain the binary as a raw array.\n"
+	);
+
+	return;
+}
+
+sub title {
+	print("raw2c by Duncan Ross Palmer\n");
+	return;
+}
+
+sub initFileOrDir {
+	my ($fileOrDir, $isDir) = @_;
+
+	$fileOrDir->isDir($isDir);
+	$fileOrDir->handle(undef);
+
+	return;
+}
+
+sub fileSizeWarning {
+	my ($fileName, $sz) = @_;
+
+	my $threshold = (64 * 1024) -1;
+
+	if ($threshold > $sz) {
+		return;
+	}
+
+	printf(
+		STDERR
+		"WARNING! \"%s\" is over %lu bytes, on 16-bit architectures, this could overflow a segment\n" .
+		"\tFor large files, consider using librttb; https://hg.sr.ht/~m6kvm/rttb\n",
+		$fileName, $threshold,
+	);
+
+	return;
+}
+
+sub openFiles {
+	my ($self, $pInput, $pOutput, $pHeader) = @_;
+
+	# Find out if the input is a directory
+	my $fileInfo = stat($self->options->inputFileName);
+	if ($fileInfo) {
+		$pInput->fileInfo($fileInfo);
+	} else {
+		printf(STDERR "Cannot stat %s\n", $self->options->inputFileName);
+		return EXIT_FAILURE;
+	}
+
+	initFileOrDir($pInput, S_ISDIR($fileInfo->mode));
+
+	# Find out if the file is "too large" and warn user
+	fileSizeWarning($self->options->inputFileName, $pInput->fileInfo->size);
+
+	initFileOrDir($pOutput, S_ISDIR($fileInfo->mode));
+
+	# Open the files or directories
+	if ($pInput->isDir) {
+		confess('TODO');
+	} else {
+		if (!$pInput->handle(IO::File->new($self->options->inputFileName, 'r'))) {
+			printf("Can\'t open input file \"%s\"\n", $self->options->inputFileName);
+			return EXIT_FAILURE;
+		}
+	}
+
+	if ($pOutput->isDir) {
+		confess('TODO');
+	} else {
+		if (!$pOutput->handle(IO::File->new($self->options->outputFileName, 'w'))) {
+			print("Can\'t open output file \"%s\"\n", $self->options->outputFileName);
+			$pInput->handle->close(); # Cleanup one that worked
+			return EXIT_FAILURE;
+		}
+	}
+
+	if ($self->options->header) {
+		initFileOrDir($pHeader, S_ISDIR($fileInfo->mode)); # FIXME: Seems to me we're reusing stat -- could be a bug in C version too
+		if (!$pHeader->handle(IO::File->new($self->options->header, 'w'))) {
+			printf("Can\'t open header file \"%s\"\n", $self->options->header);
+
+			# Cleanup file which worked
+			$pInput->handle->close();
+			$pOutput->handle->close();
+
+			return EXIT_FAILURE;
+		}
+	}
+
+	return EXIT_SUCCESS;
+}
+
+sub makeHeader {
+	my ($self, $pHeader) = @_;
+
+	confess('Assertion failed') if ($pHeader->isDir);
+#	rewind(pHeader->handle.file);
+
+	my $handle = $pHeader->handle;
+	print($handle getHead()); # Put top comment into source
+	printf($handle "extern const char %s[];\n", $self->options->symbol);
+
+	return;
+}
+
+sub makeSource {
+	my ($self, $pIn, $pOut) = @_;
+
+	my ($counter, $length) = (0);
+
+	confess('Assertion failed') if ($pIn->isDir);
+	#rewind(pIn->handle.file);
+	confess('Assertion failed') if ($pOut->isDir);
+	#rewind(pOut->handle.file);
+	$length = $pIn->fileInfo->size;
+	$length++ if ($self->options->nullTerminator);
+
+	my $pOutHandle = $pOut->handle;
+	print($pOutHandle getHead()); # Put top comment into source
+
+	if ($self->options->header) {
+		printf($pOutHandle "#include \"%s\"\n", $self->options->header);
+	}
+
+	printf($pOutHandle "const char %s[] = {\n\t", $self->options->symbol);
+	while ($counter < $length) {
+
+		my $thisByte = '';
+		my $readResult;
+
+		my $pInHandle = $pIn->handle;
+		if ($readResult = read($pInHandle, my $bytes, 1)) {
+			$thisByte = $bytes;
+		}
+
+		if ($readResult >= 1) {
+			printf($pOutHandle "\'\\x%02X\'", ord($thisByte));
+		}
+
+		if ($counter+1 < $length) { # More to go
+			print($pOutHandle ', ');
+		}
+
+		# Seperate half paragraph boundries
+		if (0 == ((1+$counter) % 8)) {
+			print($pOutHandle "\n\t");
+		}
+
+		$counter++;
+	}
+
+	# FIXME: This logic may be wrong in the C version
+	if ($self->options->nullTerminator) { # A null terminator
+		printf($pOutHandle "\'\\x%02X\'", 0);
+	}
+
+	printf($pOutHandle "\n};\n");
+	return;
+}
+
+sub main {
+	my ($self) = @_;
+	srand($PID + (time() % 100_000));
+
+	my ($input, $output, $header) = (
+		FileOrDir->new(),
+		FileOrDir->new(),
+		FileOrDir->new(),
+	);
+
+	$self->options($self->optionsParser->parse(\@ARGV));
+
+	title() unless ($self->options->quiet);
+
+	return EXIT_FAILURE if ($self->openFiles($input, $output, $header));
+
+	$self->makeHeader($header) if ($self->options->header);
+	$self->makeSource($input, $output);
+
+	# Close files
+	$input->handle->close();
+	$output->handle->close();
+	$header->handle->close();
+
+	return EXIT_SUCCESS;
+}
+
+package main;
+use strict;
+use warnings;
+
+exit(Main->new->main()) unless (caller());

          
A => t/Makefile +12 -0
@@ 0,0 1,12 @@ 
+#!/usr/bin/env make -f
+
+clean:
+	rm -fr data/output
+
+all:
+	mkdir -p data/output
+
+test: all
+	../bin/raw2c --header=data/output/blobs.h --symbol=__rawimage_DB4r4knLS -q data/horatio.png data/output/horatio.c
+	diff -u data/ref.c data/output/horatio.c
+	diff -u data/ref.h data/output/blobs.h

          
A => t/data/ref.c +769 -0
@@ 0,0 1,769 @@ 
+/*
+  This file was autogenerated by raw2c, by Duncan Ross Palmer.
+  Visit http://www.daybologic.co.uk
+*/
+
+#include "data/output/blobs.h"
+const char __rawimage_DB4r4knLS[] = {
+	'\x89', '\x50', '\x4E', '\x47', '\x0D', '\x0A', '\x1A', '\x0A', 
+	'\x00', '\x00', '\x00', '\x0D', '\x49', '\x48', '\x44', '\x52', 
+	'\x00', '\x00', '\x00', '\x30', '\x00', '\x00', '\x00', '\x30', 
+	'\x08', '\x06', '\x00', '\x00', '\x00', '\x57', '\x02', '\xF9', 
+	'\x87', '\x00', '\x00', '\x17', '\x8C', '\x49', '\x44', '\x41', 
+	'\x54', '\x68', '\xDE', '\x4D', '\x9A', '\x69', '\x8C', '\x9D', 
+	'\xF7', '\x75', '\xDE', '\x7F', '\xFF', '\xE5', '\x5D', '\xEF', 
+	'\x3E', '\x77', '\xEE', '\x90', '\x9C', '\x19', '\x0E', '\x87', 
+	'\x1C', '\x52', '\x14', '\x29', '\x8A', '\xA4', '\x64', '\x89', 
+	'\xA2', '\x64', '\x59', '\x5E', '\x62', '\x5B', '\x71', '\xEB', 
+	'\xC4', '\x48', '\x51', '\xB5', '\xA9', '\x81', '\x02', '\x05', 
+	'\x8A', '\x34', '\x41', '\x83', '\x22', '\x71', '\x9B', '\xF6', 
+	'\x4B', '\x81', '\x80', '\xFD', '\xD4', '\x2F', '\xFD', '\xD2', 
+	'\x3A', '\x28', '\x90', '\x36', '\x70', '\x11', '\xB7', '\x29', 
+	'\x02', '\xC4', '\xD9', '\x6A', '\xD4', '\x6E', '\x6C', '\xCB', 
+	'\x4B', '\xE4', '\x5A', '\xDE', '\x24', '\x4B', '\x94', '\xB8', 
+	'\x48', '\xDC', '\xD7', '\xE1', '\xCC', '\x70', '\x96', '\x3B', 
+	'\x77', '\x7B', '\x97', '\xFF', '\xD2', '\x0F', '\xEF', '\xA5', 
+	'\xD4', '\x17', '\xB8', '\x33', '\x98', '\x3B', '\x83', '\xF7', 
+	'\x9E', '\x73', '\xFE', '\xE7', '\x79', '\xCE', '\xF3', '\x9C', 
+	'\x77', '\xC4', '\xBF', '\xA9', '\x45', '\xDE', '\x79', '\x8F', 
+	'\x14', '\x02', '\x81', '\xC7', '\x7A', '\x10', '\x2A', '\x64', 
+	'\xE9', '\xEF', '\xBF', '\x42', '\xEF', '\x85', '\xB3', '\xEC', 
+	'\x3D', '\x78', '\x90', '\x99', '\x5E', '\x8F', '\x28', '\x4E', 
+	'\x08', '\x82', '\x10', '\x63', '\x4B', '\x10', '\x8A', '\xBB', 
+	'\x77', '\x57', '\xF9', '\xE3', '\xAF', '\x7E', '\x95', '\xBF', 
+	'\xFA', '\x8B', '\xAF', '\x31', '\x1C', '\x0C', '\x68', '\x34', 
+	'\x5A', '\x34', '\x9B', '\x4D', '\x16', '\x17', '\x97', '\x78', 
+	'\xE1', '\xC5', '\x97', '\xE8', '\x74', '\xDB', '\xAC', '\x1C', 
+	'\x7E', '\x8C', '\x38', '\xD0', '\xEC', '\xEE', '\x6C', '\xD1', 
+	'\xDF', '\x59', '\xE3', '\x1B', '\xFF', '\xE7', '\x3B', '\xDC', 
+	'\xB8', '\x7E', '\x1B', '\x04', '\xDC', '\xB9', '\x7D', '\x13', 
+	'\xE7', '\x0C', '\xC6', '\x58', '\xC2', '\x20', '\xA6', '\xD5', 
+	'\x4A', '\x79', '\xE6', '\xF4', '\x51', '\xFE', '\xE9', '\x3F', 
+	'\xFB', '\x6D', '\x7A', '\xBD', '\x19', '\xCA', '\xD2', '\xF2', 
+	'\x07', '\xFF', '\xF9', '\xBF', '\xF2', '\xF3', '\x9F', '\xBF', 
+	'\xC1', '\xED', '\xDB', '\x77', '\xB0', '\xD6', '\xF2', '\xE8', 
+	'\x5A', '\x92', '\x92', '\x53', '\x5A', '\xD2', '\xC4', '\xA0', 
+	'\x5E', '\x0C', '\xD5', '\x39', '\x29', '\x04', '\x4A', '\x00', 
+	'\x08', '\x9C', '\x00', '\xEB', '\x3C', '\x4B', '\x9F', '\xFA', 
+	'\x14', '\xDD', '\x83', '\x4B', '\x34', '\xDA', '\x1D', '\xE2', 
+	'\xB4', '\x86', '\xC7', '\x93', '\xE7', '\x13', '\x06', '\xBB', 
+	'\x7D', '\x4C', '\x69', '\xA9', '\xD5', '\x13', '\x16', '\x17', 
+	'\x16', '\xB9', '\x74', '\xF9', '\x22', '\xC3', '\xC1', '\x80', 
+	'\x33', '\xCF', '\xBF', '\xC4', '\xD9', '\x17', '\x3F', '\xC5', 
+	'\x33', '\x67', '\x9E', '\xE1', '\xE8', '\xD1', '\x23', '\xF4', 
+	'\x66', '\x67', '\xA9', '\xD7', '\x12', '\xA2', '\x30', '\xC0', 
+	'\x94', '\x23', '\xC6', '\x99', '\x21', '\x4A', '\x9B', '\x6C', 
+	'\x6D', '\x6F', '\x81', '\x17', '\xEC', '\xEC', '\x6C', '\xA1', 
+	'\x95', '\x46', '\xEB', '\x00', '\xF0', '\x48', '\xA5', '\x50', 
+	'\x5A', '\x31', '\xDA', '\xDD', '\xA0', '\x5E', '\xAB', '\xD1', 
+	'\x6C', '\xB6', '\x79', '\xFA', '\xE9', '\x93', '\x9C', '\x38', 
+	'\x79', '\x82', '\x7E', '\x7F', '\x97', '\x5B', '\x37', '\x6F', 
+	'\x01', '\x20', '\x84', '\x64', '\x28', '\xA0', '\xE1', '\xA1', 
+	'\x27', '\x40', '\x7D', '\x34', '\xD4', '\xE7', '\xA4', '\x00', 
+	'\x89', '\xC0', '\x03', '\xCE', '\x83', '\xF7', '\x8E', '\xA3', 
+	'\xBF', '\xF6', '\x0A', '\xF5', '\xF9', '\x79', '\xA2', '\x5A', 
+	'\x0B', '\xA9', '\x34', '\xCE', '\x09', '\xB2', '\x2C', '\x67', 
+	'\x75', '\xF5', '\x16', '\x1B', '\x0F', '\xEE', '\xB2', '\xB9', 
+	'\xB1', '\xCE', '\xAB', '\xAF', '\x7E', '\x9B', '\xAB', '\x57', 
+	'\xAF', '\x33', '\xBF', '\xB0', '\xCC', '\xD3', '\x67', '\x9E', 
+	'\xE3', '\xC8', '\x91', '\xC3', '\xEC', '\xE9', '\xCD', '\xA0', 
+	'\xA5', '\x27', '\x8D', '\x03', '\xD6', '\xD7', '\x1E', '\xE0', 
+	'\x7C', '\x89', '\x75', '\x16', '\x1D', '\xD4', '\xC1', '\x3B', 
+	'\x1E', '\xDC', '\x7F', '\x40', '\x9E', '\x0D', '\x99', '\x8C', 
+	'\x27', '\xD4', '\x1B', '\x0D', '\x0E', '\x1E', '\x5A', '\x61', 
+	'\x6B', '\x6B', '\x87', '\x20', '\x08', '\x50', '\x3A', '\x62', 
+	'\xBB', '\xBF', '\xC3', '\x95', '\xAB', '\xD7', '\x88', '\xE3', 
+	'\x88', '\x85', '\xF9', '\xFD', '\xB4', '\x3B', '\x6D', '\x4E', 
+	'\x9D', '\x3A', '\xC9', '\x9D', '\x3B', '\x77', '\xB9', '\x77', 
+	'\xEF', '\x3E', '\x4C', '\xE3', '\x2C', '\xBC', '\xAF', '\x12', 
+	'\x78', '\x21', '\xD4', '\xE7', '\x04', '\xE0', '\x85', '\xC7', 
+	'\xFB', '\xEA', '\x97', '\xDE', '\x7B', '\x3A', '\x4F', '\x9C', 
+	'\x20', '\xDC', '\xD3', '\x63', '\x52', '\x4C', '\xD8', '\xD9', 
+	'\x1D', '\x71', '\xFB', '\xD6', '\x4D', '\x2E', '\x5E', '\x78', 
+	'\x9B', '\x77', '\xDE', '\x7E', '\x8B', '\xF5', '\x8D', '\x87', 
+	'\xEC', '\xF4', '\xFB', '\xBC', '\xF1', '\xC6', '\x1B', '\xEC', 
+	'\xEC', '\xF4', '\x89', '\xE3', '\x98', '\xD9', '\x99', '\x0E', 
+	'\x51', '\xA0', '\x10', '\x78', '\x9C', '\x2D', '\x69', '\x34', 
+	'\xEA', '\xD4', '\x6A', '\x09', '\x6B', '\x1B', '\x0F', '\xD1', 
+	'\x2A', '\xC0', '\x98', '\x82', '\xCD', '\x8D', '\x4D', '\xCE', 
+	'\x9F', '\x3F', '\x4F', '\x92', '\x46', '\x68', '\x25', '\x01', 
+	'\xC9', '\xCA', '\x63', '\x47', '\x88', '\xE2', '\x3A', '\x42', 
+	'\x28', '\x56', '\x57', '\xEF', '\x11', '\x04', '\x21', '\x77', 
+	'\xEE', '\xDE', '\xE7', '\xE2', '\xC5', '\xF7', '\xC8', '\xCB', 
+	'\x8C', '\xF6', '\xCC', '\x0C', '\xAD', '\x56', '\x87', '\xB3', 
+	'\xCF', '\x9F', '\xE5', '\xC4', '\x89', '\x13', '\x94', '\x45', 
+	'\x49', '\xB3', '\x39', '\xC3', '\xE6', '\x70', '\x88', '\xB0', 
+	'\x25', '\xEA', '\xA3', '\xA1', '\x3A', '\xE7', '\xAB', '\xC3', 
+	'\xC1', '\x4F', '\xDB', '\xC8', '\x7B', '\xC1', '\x68', '\x7B', 
+	'\x1B', '\x13', '\x26', '\x8C', '\xAD', '\xE5', '\xC6', '\xF5', 
+	'\x6B', '\xBC', '\xFD', '\xD6', '\x1B', '\xDC', '\xB8', '\x7E', 
+	'\x8B', '\x9D', '\xFE', '\x08', '\x21', '\x03', '\x92', '\x5A', 
+	'\x9D', '\x7A', '\xBD', '\xC6', '\xD2', '\xD2', '\x0A', '\xED', 
+	'\x56', '\x83', '\xEE', '\x4C', '\x97', '\xD9', '\xDE', '\x1C', 
+	'\x8D', '\x46', '\x13', '\xEB', '\x0C', '\x4A', '\x6A', '\xE2', 
+	'\x24', '\xA1', '\x51', '\x6B', '\x22', '\x84', '\x62', '\x3C', 
+	'\x9A', '\x70', '\xED', '\xDA', '\x65', '\xEE', '\x3E', '\xD8', 
+	'\xE0', '\xF4', '\x53', '\x4F', '\xE3', '\xAD', '\x61', '\x7B', 
+	'\x7B', '\x17', '\x21', '\x05', '\x67', '\x3F', '\xF6', '\x09', 
+	'\x4E', '\x9E', '\x3E', '\xCD', '\x24', '\x2B', '\xD8', '\xD8', 
+	'\xD8', '\x66', '\x34', '\xDC', '\x65', '\x3C', '\x9E', '\x70', 
+	'\xE1', '\xC2', '\x65', '\xAE', '\x5D', '\xBB', '\x46', '\x18', 
+	'\x06', '\x34', '\x1A', '\x75', '\x16', '\x16', '\x16', '\x78', 
+	'\xF6', '\xD9', '\x67', '\x39', '\xFB', '\xDC', '\xF3', '\x2C', 
+	'\xEE', '\x3F', '\xC4', '\x8F', '\x7E', '\xF1', '\x26', '\xEA', 
+	'\xC5', '\x50', '\x9F', '\xC3', '\x7B', '\x10', '\x20', '\xAA', 
+	'\x2F', '\x08', '\x29', '\x29', '\xB6', '\xB7', '\x18', '\xBC', 
+	'\x77', '\x99', '\xED', '\x1B', '\x37', '\xB9', '\x75', '\xEB', 
+	'\x16', '\x0F', '\x73', '\xCB', '\xA8', '\x30', '\x0C', '\x47', 
+	'\x23', '\xE2', '\xB8', '\xC6', '\x64', '\x32', '\x42', '\xA9', 
+	'\xAA', '\x6A', '\xE7', '\xCF', '\x9F', '\xE7', '\xF2', '\xE5', 
+	'\x4B', '\x5C', '\xBF', '\x7E', '\x83', '\xDE', '\xDC', '\x3E', 
+	'\xBA', '\x33', '\x5D', '\x26', '\x79', '\x01', '\xDE', '\x31', 
+	'\x1C', '\x6E', '\x93', '\x4D', '\x26', '\x5C', '\xB8', '\x78', 
+	'\x81', '\x71', '\x36', '\x61', '\x6E', '\xDF', '\x7E', '\x0E', 
+	'\x2D', '\x1F', '\x60', '\x66', '\xA6', '\x45', '\x10', '\xD7', 
+	'\x18', '\x0E', '\x47', '\x3C', '\x73', '\xE6', '\x0C', '\x27', 
+	'\x4F', '\x9D', '\xE2', '\xD8', '\xF1', '\xE3', '\x74', '\xF7', 
+	'\x2C', '\xB2', '\xDB', '\x1F', '\xB0', '\xBB', '\xBB', '\x4B', 
+	'\x96', '\x65', '\xF4', '\xFB', '\x43', '\x7E', '\xF6', '\xD3', 
+	'\x9F', '\x32', '\x99', '\x64', '\x74', '\xBB', '\x33', '\xD4', 
+	'\xEA', '\x35', '\xDA', '\xED', '\x19', '\x64', '\x90', '\xF0', 
+	'\x9D', '\xD7', '\xBE', '\x8F', '\x7A', '\x21', '\x54', '\xE7', 
+	'\x84', '\x10', '\x7C', '\x78', '\xC9', '\x47', '\xE7', '\x01', 
+	'\x45', '\xC9', '\xFA', '\xC3', '\x2D', '\xDE', '\xCD', '\x0D', 
+	'\xCD', '\xFD', '\x07', '\x38', '\x79', '\xEA', '\x38', '\x4A', 
+	'\x82', '\x77', '\x25', '\x93', '\xF1', '\x98', '\x49', '\x56', 
+	'\xD2', '\x6E', '\xB7', '\xD9', '\xDC', '\x7C', '\xC8', '\xEC', 
+	'\x6C', '\x17', '\x67', '\x0C', '\x71', '\x14', '\x92', '\x26', 
+	'\x09', '\x41', '\x94', '\x02', '\xE0', '\x6C', '\xCE', '\x70', 
+	'\xB4', '\xC3', '\x78', '\x3C', '\xA6', '\xD7', '\x5B', '\xC2', 
+	'\x96', '\x13', '\xE2', '\x28', '\x60', '\x71', '\x71', '\x89', 
+	'\xA3', '\xC7', '\x9E', '\x20', '\x0C', '\x42', '\xB2', '\x2C', 
+	'\x63', '\x65', '\xE5', '\x30', '\xBD', '\xDE', '\x1C', '\x87', 
+	'\x0E', '\x1F', '\x61', '\x79', '\x79', '\x3F', '\xA5', '\xB7', 
+	'\x2C', '\x2E', '\x3F', '\x8E', '\x0A', '\x6B', '\x58', '\x93', 
+	'\x71', '\xEB', '\xE6', '\x6D', '\xDE', '\x79', '\xE7', '\x1D', 
+	'\x36', '\x36', '\x1E', '\x22', '\x80', '\xB9', '\x3D', '\xF3', 
+	'\x6C', '\x6E', '\x6C', '\xA2', '\x01', '\xDC', '\x34', '\xEC', 
+	'\x47', '\x69', '\x78', '\x3C', '\x1E', '\x18', '\x09', '\xC9', 
+	'\xD5', '\x28', '\xE1', '\xD4', '\xCB', '\x5F', '\xE0', '\xCC', 
+	'\x0B', '\xCF', '\x71', '\x60', '\xFF', '\x3E', '\x6E', '\xDD', 
+	'\x7C', '\x8F', '\xBF', '\xFD', '\xDE', '\xB7', '\xE9', '\xF7', 
+	'\x77', '\x38', '\x78', '\x68', '\x85', '\xB4', '\xDE', '\x62', 
+	'\x71', '\x71', '\x9E', '\xD9', '\xD9', '\x05', '\xEA', '\xB5', 
+	'\x90', '\xB5', '\xF5', '\x87', '\x0C', '\x86', '\xBB', '\xC4', 
+	'\x49', '\x4A', '\x2D', '\x69', '\x10', '\x44', '\x29', '\xDE', 
+	'\x95', '\x1C', '\x3B', '\xF6', '\x38', '\xB3', '\xBD', '\xFD', 
+	'\x5C', '\xBE', '\x7C', '\x81', '\xCD', '\x87', '\x9B', '\xB4', 
+	'\x9A', '\x2D', '\xBA', '\xB3', '\x5D', '\x6A', '\x49', '\xC2', 
+	'\x85', '\x0B', '\x17', '\x28', '\xB2', '\x31', '\x81', '\x96', 
+	'\xD4', '\xD2', '\x1A', '\xFB', '\xF7', '\x2F', '\xB0', '\xBC', 
+	'\x7F', '\x3F', '\x8F', '\x9F', '\x3C', '\x83', '\xF1', '\x92', 
+	'\x37', '\x7F', '\xFE', '\x33', '\x7E', '\xFE', '\xDA', '\xB7', 
+	'\x58', '\xBB', '\x7F', '\x87', '\xF5', '\xB5', '\x75', '\x82', 
+	'\x20', '\xA2', '\x51', '\x6F', '\x30', '\xB7', '\x67', '\x4F', 
+	'\x85', '\x01', '\x31', '\xAD', '\xB9', '\x98', '\x22', '\x5C', 
+	'\x08', '\xC8', '\x90', '\x5C', '\x52', '\x01', '\x93', '\xE5', 
+	'\x15', '\x7E', '\xF9', '\x0B', '\xBF', '\xCA', '\xFE', '\xA5', 
+	'\x25', '\x1A', '\xF5', '\x3A', '\xCD', '\x7A', '\xC2', '\xFC', 
+	'\xFC', '\x5E', '\xD2', '\x34', '\x25', '\xAD', '\xD5', '\x29', 
+	'\x26', '\x63', '\x86', '\xC3', '\x11', '\x47', '\x1E', '\x3B', 
+	'\x8E', '\xF7', '\x25', '\x45', '\x61', '\x39', '\xF1', '\xC4', 
+	'\x93', '\xCC', '\x74', '\xDB', '\x8C', '\x27', '\x05', '\x4B', 
+	'\x8B', '\x0B', '\xB4', '\xDA', '\x33', '\xF4', '\x7A', '\x73', 
+	'\xA4', '\x69', '\x8C', '\xB3', '\x86', '\xD5', '\xD5', '\xBB', 
+	'\x5C', '\xBB', '\x7A', '\x83', '\x7E', '\xBF', '\xCF', '\x4C', 
+	'\xA7', '\xC1', '\x78', '\x3C', '\x22', '\xCB', '\x26', '\x94', 
+	'\x85', '\xA1', '\xD7', '\x9B', '\xC5', '\x96', '\x05', '\x33', 
+	'\xAD', '\x26', '\x69', '\x92', '\x52', '\x4E', '\x26', '\x3C', 
+	'\x79', '\xF2', '\x49', '\x8A', '\xD2', '\xB0', '\xDB', '\x1F', 
+	'\x70', '\xEB', '\xE6', '\x0D', '\xEA', '\xF5', '\x1A', '\xBD', 
+	'\xB9', '\x39', '\xEA', '\x69', '\x13', '\xF5', '\x42', '\xA0', 
+	'\xCE', '\x79', '\x3E', '\xC4', '\x80', '\x04', '\xAC', '\xD0', 
+	'\x9C', '\x57', '\x11', '\xB7', '\xDB', '\x2D', '\x8E', '\x9D', 
+	'\x3E', '\xCD', '\x13', '\x27', '\x4E', '\x32', '\xB7', '\x67', 
+	'\x1F', '\x51', '\x18', '\xD0', '\xDF', '\xD9', '\xC4', '\x58', 
+	'\xC3', '\x4C', '\xA7', '\x45', '\xB3', '\x51', '\xE7', '\xFD', 
+	'\x2B', '\xD7', '\xD8', '\xE9', '\x0F', '\x58', '\x59', '\x59', 
+	'\xA1', '\xD7', '\xEB', '\x32', '\xDB', '\xEB', '\x71', '\xF8', 
+	'\xB1', '\xC7', '\x69', '\x35', '\x1B', '\x74', '\x67', '\x67', 
+	'\x69', '\xCD', '\xCC', '\x92', '\xD6', '\x9B', '\x24', '\xA1', 
+	'\x26', '\x0C', '\x15', '\x61', '\xA0', '\x19', '\x8F', '\xC7', 
+	'\x5C', '\xBD', '\x72', '\x91', '\xF5', '\xF5', '\x0D', '\x6E', 
+	'\xDF', '\x5D', '\x63', '\xFF', '\xFE', '\x05', '\x4C', '\x59', 
+	'\xF2', '\xFE', '\xC5', '\x77', '\x99', '\x8C', '\x2B', '\x6C', 
+	'\x0D', '\x47', '\x43', '\x9A', '\xB5', '\x88', '\x7B', '\xB7', 
+	'\x6F', '\x30', '\xEC', '\x6F', '\x71', '\xF4', '\xC8', '\x41', 
+	'\x56', '\x57', '\xEF', '\xB3', '\xBD', '\xD5', '\xE7', '\xFE', 
+	'\x83', '\x35', '\x94', '\x54', '\x28', '\x19', '\xA0', '\xDD', 
+	'\x34', '\x70', '\x3F', '\x6D', '\x1F', '\x83', '\x64', '\x55', 
+	'\xC7', '\xAC', '\xD6', '\x6B', '\xCC', '\xCE', '\xCF', '\x23', 
+	'\x05', '\xDC', '\xB8', '\x79', '\x0B', '\x63', '\x2C', '\xC3', 
+	'\xFE', '\x43', '\x76', '\x77', '\x37', '\xE9', '\xCE', '\x76', 
+	'\x98', '\xDF', '\xB7', '\x88', '\x56', '\x03', '\x6A', '\x49', 
+	'\x40', '\xAD', '\x96', '\x70', '\xF5', '\xEA', '\x55', '\x4E', 
+	'\x9F', '\x3E', '\xC9', '\xFE', '\xA5', '\xFD', '\x34', '\x5B', 
+	'\x1D', '\x70', '\x05', '\x4A', '\x81', '\x92', '\x92', '\x30', 
+	'\x50', '\x08', '\xA0', '\x28', '\x2C', '\x93', '\x2C', '\x27', 
+	'\x9B', '\x0C', '\x89', '\xA3', '\x88', '\x66', '\xB3', '\x45', 
+	'\x6F', '\xAE', '\x87', '\xC4', '\x30', '\x1C', '\x8F', '\x89', 
+	'\x93', '\x88', '\xCB', '\x97', '\x2E', '\xE1', '\x9C', '\x27', 
+	'\x8A', '\x02', '\xFA', '\xBB', '\x9B', '\x48', '\x05', '\x0F', 
+	'\x1E', '\xAC', '\xE1', '\xAD', '\xA1', '\x59', '\x4B', '\x39', 
+	'\xB0', '\x7C', '\x90', '\xB4', '\xD9', '\xE5', '\xDA', '\xF5', 
+	'\x5B', '\xBC', '\x77', '\xE9', '\x12', '\xBA', '\x62', '\x20', 
+	'\x81', '\x44', '\x60', '\x84', '\xA4', '\x1F', '\xA5', '\x5C', 
+	'\x15', '\x9A', '\xC7', '\x9F', '\x7A', '\x9A', '\xA7', '\x9E', 
+	'\x79', '\x96', '\xD1', '\x64', '\xC8', '\xBD', '\x3B', '\x77', 
+	'\x99', '\x8C', '\x77', '\x58', '\x39', '\x74', '\x88', '\x3D', 
+	'\x7B', '\x3A', '\x34', '\x1B', '\x29', '\x45', '\x91', '\x31', 
+	'\x19', '\x0D', '\x49', '\x93', '\x3A', '\xC7', '\x8F', '\xCF', 
+	'\x83', '\x0C', '\xE9', '\xCC', '\xCC', '\x92', '\xA6', '\x75', 
+	'\x02', '\x2D', '\x68', '\xB6', '\xE6', '\x18', '\x0E', '\xB6', 
+	'\xD0', '\xCA', '\x53', '\xAB', '\x25', '\x28', '\xAD', '\x70', 
+	'\xC6', '\x12', '\x46', '\x8A', '\x6E', '\xB7', '\x43', '\xA3', 
+	'\xD9', '\xE4', '\x9D', '\x77', '\x2E', '\xF3', '\xEE', '\xC5', 
+	'\x2B', '\x3C', '\xF5', '\x54', '\x9D', '\x7D', '\xF3', '\xF3', 
+	'\x58', '\x9B', '\x53', '\xAF', '\xD5', '\x28', '\x0A', '\x70', 
+	'\x4E', '\x10', '\x04', '\x06', '\x21', '\x15', '\x69', '\x92', 
+	'\x22', '\xA4', '\xE0', '\xCC', '\xD9', '\x8F', '\x12', '\xBD', 
+	'\xFD', '\x36', '\x4A', '\x2B', '\xDE', '\x7E', '\x70', '\x87', 
+	'\x28', '\x8A', '\xD1', '\x7E', '\x0A', '\x5E', '\xEB', '\xE1', 
+	'\xA2', '\x83', '\xBB', '\x4A', '\x33', '\x89', '\x42', '\x4E', 
+	'\xF5', '\xBA', '\x6C', '\xEF', '\xAC', '\x93', '\x95', '\x8E', 
+	'\xB3', '\x67', '\x9F', '\xE5', '\xE0', '\xC1', '\x25', '\x6A', 
+	'\x69', '\x8C', '\x94', '\x82', '\x30', '\x90', '\x64', '\xA3', 
+	'\x01', '\xAF', '\x7E', '\xFB', '\x7B', '\xCC', '\x74', '\xBB', 
+	'\x1C', '\x3B', '\xFE', '\x24', '\xB5', '\x5A', '\x42', '\x92', 
+	'\xD6', '\xA9', '\xA5', '\x75', '\x94', '\x12', '\x44', '\x71', 
+	'\x4C', '\x1C', '\xEF', '\xA1', '\xD9', '\x6A', '\xA3', '\xB5', 
+	'\xC4', '\x19', '\x43', '\x69', '\x0A', '\x84', '\xD2', '\xA8', 
+	'\x20', '\xE5', '\xF9', '\x17', '\x5E', '\x64', '\x69', '\xE9', 
+	'\x00', '\xD7', '\xAF', '\xBE', '\xC7', '\xFF', '\xFA', '\xFA', 
+	'\x37', '\xE9', '\xCC', '\xEC', '\xE5', '\x33', '\x2F', '\x7F', 
+	'\x1A', '\xBC', '\xA0', '\xDB', '\x49', '\x88', '\x92', '\x19', 
+	'\x36', '\xD6', '\x57', '\x59', '\x5C', '\x58', '\xE2', '\x66', 
+	'\x79', '\x83', '\xF7', '\x2E', '\x5D', '\xE1', '\xC8', '\xD1', 
+	'\xC7', '\xE9', '\xB4', '\x1A', '\xBC', '\xF9', '\xE6', '\x4F', 
+	'\x71', '\xAE', '\x44', '\x07', '\x29', '\x1A', '\x5F', '\xB1', 
+	'\xCE', '\xC4', '\x03', '\x41', '\xC8', '\x4C', '\x18', '\x50', 
+	'\xB6', '\x9B', '\x28', '\x05', '\x7B', '\xF6', '\xCC', '\x93', 
+	'\xD6', '\x5B', '\x2C', '\x2D', '\x2E', '\x10', '\x87', '\x9A', 
+	'\x24', '\x8E', '\x08', '\x02', '\x85', '\xB5', '\x05', '\x61', 
+	'\xA8', '\x79', '\xFC', '\xF1', '\xA3', '\x6C', '\xEF', '\x66', 
+	'\x28', '\xA9', '\xE8', '\x76', '\xBB', '\x84', '\x51', '\x40', 
+	'\x18', '\xC6', '\xA4', '\xB5', '\x3A', '\x5A', '\x49', '\x92', 
+	'\x24', '\xA9', '\xD8', '\xA5', '\x56', '\x03', '\x3C', '\x88', 
+	'\x00', '\xA1', '\x15', '\x82', '\x92', '\x20', '\x4A', '\xD9', 
+	'\xBB', '\x77', '\x91', '\x5A', '\x9A', '\x30', '\x18', '\x0E', 
+	'\xB8', '\x70', '\xE1', '\x1A', '\x6F', '\xBD', '\xF9', '\x26', 
+	'\x2B', '\x2B', '\xCB', '\x24', '\x49', '\x4C', '\xB7', '\x3B', 
+	'\xE1', '\xC1', '\x83', '\x07', '\xCC', '\xCE', '\xF6', '\x18', 
+	'\x0C', '\xB6', '\x78', '\xEB', '\xAD', '\x37', '\x48', '\xD3', 
+	'\x88', '\x3B', '\x77', '\xEE', '\x30', '\xB7', '\x67', '\x9E', 
+	'\x95', '\xA3', '\x33', '\x8C', '\x47', '\x19', '\x5A', '\x08', 
+	'\x28', '\xBC', '\x60', '\x53', '\x6A', '\x96', '\x8F', '\x1D', 
+	'\x83', '\x3D', '\x73', '\x8C', '\xE2', '\x88', '\xE3', '\x4F', 
+	'\x3E', '\x4D', '\xB3', '\xD5', '\xA2', '\x37', '\xD7', '\xA5', 
+	'\xD3', '\x69', '\x91', '\xA4', '\x35', '\xA2', '\x38', '\x62', 
+	'\x32', '\xDA', '\x25', '\xCF', '\x0B', '\xB2', '\xE1', '\x90', 
+	'\x83', '\x4B', '\x7B', '\xD9', '\x5B', '\x0A', '\x92', '\x34', 
+	'\x21', '\xAD', '\xB5', '\x88', '\x23', '\x85', '\xD6', '\x8A', 
+	'\x50', '\x4B', '\x94', '\x74', '\xE0', '\x1D', '\x52', '\x0A', 
+	'\xCA', '\xB2', '\x04', '\x1D', '\x72', '\xED', '\xFD', '\x77', 
+	'\x79', '\xF3', '\xB5', '\x1F', '\x90', '\x8F', '\x26', '\x3C', 
+	'\x71', '\xF6', '\xA3', '\x1C', '\x58', '\x3E', '\x44', '\xB3', 
+	'\xDD', '\xE2', '\x33', '\x8D', '\x06', '\xCF', '\x3C', '\xBB', 
+	'\xC9', '\x9D', '\xBB', '\xF7', '\x18', '\x0D', '\x0B', '\xC0', 
+	'\x71', '\xE5', '\xFD', '\xF7', '\x70', '\xDE', '\x21', '\x85', 
+	'\x45', '\x0A', '\x45', '\x1C', '\x45', '\xDC', '\xBC', '\x79', 
+	'\x1D', '\x67', '\x1D', '\x9D', '\xEE', '\x5E', '\xB4', '\x12', 
+	'\x98', '\xD2', '\xA0', '\x9E', '\x0F', '\xF4', '\x39', '\x2F', 
+	'\x3C', '\x4E', '\x68', '\x6E', '\x4B', '\xC5', '\xBD', '\x22', 
+	'\x67', '\x7E', '\xF9', '\x08', '\x4F', '\x9C', '\x3C', '\xCD', 
+	'\xF2', '\x81', '\x83', '\x68', '\x6D', '\x49', '\x93', '\x3A', 
+	'\xF5', '\xE6', '\x0C', '\xD6', '\x3A', '\x2E', '\xBE', '\xF3', 
+	'\x06', '\x5F', '\xFB', '\x93', '\xAF', '\xF2', '\x83', '\x1F', 
+	'\xFC', '\x98', '\xA2', '\xB4', '\xC4', '\x49', '\x95', '\x98', 
+	'\xB5', '\x05', '\x52', '\x08', '\xE2', '\x24', '\xC1', '\x7B', 
+	'\x8F', '\xC0', '\x23', '\x84', '\xC7', '\x0B', '\x81', '\x97', 
+	'\x21', '\xDF', '\xF9', '\xC6', '\x37', '\xF8', '\x8D', '\xFF', 
+	'\xF0', '\x4D', '\xFE', '\x62', '\x72', '\x94', '\x6F', '\x6D', 
+	'\x36', '\x39', '\xFF', '\x7F', '\x5F', '\x67', '\x5F', '\x5C', 
+	'\xB0', '\xB0', '\xB8', '\x48', '\xA3', '\xD1', '\xA4', '\xD1', 
+	'\x6C', '\xA0', '\xA5', '\xC7', '\x14', '\x13', '\xEE', '\xDD', 
+	'\xB9', '\xC5', '\x37', '\xFF', '\xE6', '\x5B', '\x78', '\x0F', 
+	'\xC6', '\x64', '\xDC', '\xBA', '\x79', '\x0B', '\xA9', '\x24', 
+	'\xBB', '\xBB', '\x03', '\x36', '\xB7', '\xB7', '\x58', '\xDC', 
+	'\xBF', '\xC4', '\xC6', '\xC6', '\x06', '\xD7', '\xAF', '\x5D', 
+	'\x41', '\x3D', '\x17', '\xC8', '\x73', '\xA5', '\x17', '\x8C', 
+	'\xC2', '\x98', '\xF0', '\xC0', '\x32', '\xEB', '\x93', '\x31', 
+	'\x7B', '\x17', '\x16', '\x59', '\x39', '\xB4', '\x42', '\x18', 
+	'\x4A', '\xC2', '\x28', '\xA0', '\xD9', '\x6C', '\x63', '\xAC', 
+	'\xE5', '\xE2', '\xBB', '\x6F', '\xF3', '\x07', '\x7F', '\xF9', 
+	'\x3A', '\xAF', '\xAF', '\xA5', '\xDC', '\xBF', '\xB7', '\xCA', 
+	'\xCD', '\x77', '\x5F', '\x67', '\xEF', '\xDE', '\x3D', '\x1C', 
+	'\x39', '\xF2', '\x18', '\x45', '\x91', '\x57', '\xC2', '\x2E', 
+	'\x49', '\x08', '\x82', '\x80', '\x30', '\x8C', '\x08', '\xC3', 
+	'\x08', '\x53', '\x3A', '\xFE', '\xFA', '\xCF', '\xFE', '\x9C', 
+	'\x2F', '\xFF', '\xD9', '\xCF', '\x79', '\x7F', '\xEE', '\x69', 
+	'\xFC', '\x9B', '\x7F', '\x8A', '\xBA', '\xF5', '\x33', '\xD6', 
+	'\x96', '\x3F', '\xC9', '\xF5', '\x9F', '\xFD', '\x94', '\x86', 
+	'\x59', '\xA7', '\x56', '\xAB', '\xD3', '\xDF', '\xED', '\x13', 
+	'\x06', '\x1A', '\xE1', '\x4B', '\xCA', '\xB2', '\xC4', '\x98', 
+	'\x92', '\x56', '\xBB', '\x4B', '\x59', '\x96', '\x48', '\x60', 
+	'\xE5', '\xF0', '\x21', '\x1E', '\x3C', '\x58', '\x65', '\x67', 
+	'\xA7', '\xCF', '\x9E', '\xBD', '\xF3', '\x84', '\x51', '\x48', 
+	'\xA7', '\xD3', '\x42', '\x3D', '\x13', '\x04', '\xE7', '\xFA', 
+	'\x3A', '\xC1', '\x34', '\x9A', '\xA8', '\x66', '\x83', '\x21', 
+	'\xD0', '\xED', '\xF5', '\x98', '\x9B', '\xEB', '\x30', '\xDB', 
+	'\xEB', '\xA1', '\x84', '\xA7', '\x35', '\xD3', '\xE3', '\xE1', 
+	'\xC6', '\x3A', '\xFF', '\xE5', '\x4F', '\xFE', '\x9C', '\xD7', 
+	'\x5E', '\xFB', '\x21', '\x3B', '\xB7', '\xCE', '\xC3', '\xBE', 
+	'\x27', '\x61', '\x77', '\x9D', '\xBC', '\xBF', '\xCE', '\x33', 
+	'\xCF', '\x3E', '\x45', '\xA8', '\x2D', '\x0F', '\xD6', '\xD6', 
+	'\x11', '\x42', '\xD3', '\xEB', '\xCD', '\x91', '\xA4', '\x09', 
+	'\x61', '\x18', '\xF1', '\x95', '\x2F', '\xFF', '\x27', '\xFE', 
+	'\xFA', '\xEB', '\x3F', '\xE0', '\xFA', '\xFC', '\xE7', '\x28', 
+	'\xEF', '\xFD', '\x90', '\xA5', '\xCD', '\x5F', '\x70', '\x68', 
+	'\x71', '\x81', '\xED', '\x52', '\x33', '\x4A', '\x96', '\xB9', 
+	'\xF7', '\xDD', '\xAF', '\x52', '\x4B', '\x34', '\x7B', '\xE6', 
+	'\xF7', '\xE1', '\xBC', '\x67', '\x30', '\x98', '\x20', '\x75', 
+	'\xC4', '\xD1', '\xC7', '\x8F', '\xE2', '\xAD', '\x63', '\x71', 
+	'\x61', '\x81', '\x34', '\x8D', '\xE8', '\x34', '\xEB', '\x78', 
+	'\x04', '\x83', '\xC1', '\x98', '\xC3', '\x47', '\x8E', '\x30', 
+	'\x19', '\x0F', '\x49', '\x92', '\x18', '\x3D', '\xF1', '\x82', 
+	'\xA1', '\x52', '\x24', '\x8D', '\x06', '\x22', '\x49', '\x78', 
+	'\xE2', '\xE8', '\x51', '\x0E', '\x1F', '\x7E', '\x0C', '\x93', 
+	'\x17', '\x58', '\xE7', '\xA9', '\x47', '\x31', '\x49', '\x12', 
+	'\xF1', '\xBF', '\xFF', '\xF2', '\x4F', '\xF9', '\xC1', '\xAB', 
+	'\xDF', '\x27', '\x5B', '\xBF', '\xC5', '\x47', '\x9E', '\x7D', 
+	'\x96', '\x63', '\x9F', '\x7D', '\x81', '\x1F', '\xBD', '\xBB', 
+	'\xC4', '\xE8', '\xF6', '\x77', '\x78', '\xB8', '\xB9', '\xCB', 
+	'\x33', '\x67', '\xCE', '\xB2', '\x6F', '\x09', '\xC2', '\xB8', 
+	'\x5E', '\x31', '\x50', '\x92', '\xE2', '\xD1', '\xCC', '\xAF', 
+	'\x1C', '\x45', '\x7E', '\xEB', '\xBB', '\xD4', '\x1E', '\xFC', 
+	'\x88', '\xDD', '\xCE', '\x32', '\x3B', '\x97', '\x5F', '\xE5', 
+	'\xE1', '\xBB', '\x6F', '\x61', '\x5F', '\xFA', '\x18', '\xF1', 
+	'\xC3', '\x6B', '\xD4', '\xD2', '\x88', '\x95', '\x63', '\x27', 
+	'\x08', '\xA3', '\x88', '\xAB', '\x57', '\xAE', '\x92', '\xA4', 
+	'\x31', '\x9D', '\xCE', '\x0C', '\x9D', '\x4E', '\x87', '\x6E', 
+	'\x77', '\x16', '\xA9', '\x02', '\xCA', '\x32', '\x67', '\x73', 
+	'\x63', '\x83', '\xE3', '\x61', '\x4A', '\x77', '\x76', '\x1F', 
+	'\x4A', '\xA7', '\x58', '\x07', '\xF7', '\xEF', '\xDD', '\x46', 
+	'\x7B', '\x21', '\x40', '\x69', '\x64', '\x10', '\x90', '\x4B', 
+	'\xC5', '\xD2', '\xCC', '\x2C', '\xB2', '\x1C', '\xB2', '\xD3', 
+	'\x37', '\x98', '\xB2', '\x24', '\x6D', '\xEC', '\xC1', '\x9A', 
+	'\x9C', '\x83', '\x87', '\x0F', '\xD3', '\x5B', '\x5A', '\x61', 
+	'\xE8', '\x05', '\x57', '\xEE', '\xAC', '\x73', '\xFB', '\xBD', 
+	'\x87', '\xEC', '\x1B', '\xDF', '\xE6', '\x95', '\x5F', '\x7F', 
+	'\x85', '\x8F', '\x9C', '\x79', '\x81', '\x56', '\x77', '\x16', 
+	'\xA9', '\x34', '\x81', '\xD6', '\x20', '\x2C', '\x79', '\x51', 
+	'\x02', '\x86', '\x97', '\x3E', '\xF3', '\x32', '\xC6', '\x79', 
+	'\xFE', '\xFB', '\x1F', '\xFD', '\x37', '\xB2', '\xD6', '\x22', 
+	'\x3B', '\x9F', '\xF8', '\x1D', '\x18', '\xF7', '\xD9', '\x3B', 
+	'\xBA', '\xCD', '\xE9', '\xCE', '\x3A', '\xFF', '\xF8', '\x4B', 
+	'\xBF', '\xCF', '\xE9', '\x8F', '\x9C', '\x62', '\x7B', '\x73', 
+	'\x8D', '\x27', '\x4E', '\x3C', '\x49', '\x5A', '\xAB', '\x23', 
+	'\xA5', '\x46', '\x29', '\x18', '\x8F', '\x06', '\xC4', '\x71', 
+	'\x0D', '\x53', '\x96', '\xE0', '\x25', '\x1E', '\x89', '\x71', 
+	'\x92', '\xC1', '\x60', '\x8C', '\x2D', '\x0B', '\xC2', '\x20', 
+	'\x40', '\x9D', '\x0A', '\xC2', '\x73', '\xBB', '\x71', '\xCA', 
+	'\x28', '\x8E', '\x10', '\xCD', '\x26', '\xDD', '\x5A', '\x88', 
+	'\xC9', '\xC7', '\x2C', '\x1E', '\x3E', '\xC6', '\xC1', '\x83', 
+	'\x07', '\x49', '\xD2', '\x1A', '\x65', '\x99', '\xB1', '\x77', 
+	'\xEF', '\x12', '\xB1', '\xCC', '\xB9', '\xC0', '\x21', '\xB2', 
+	'\x83', '\x1F', '\x63', '\xA6', '\x7C', '\xC8', '\x97', '\x7E', 
+	'\xE5', '\x23', '\x7C', '\xF2', '\x97', '\x3E', '\x4D', '\xBB', 
+	'\x33', '\x4B', '\x18', '\x86', '\x68', '\xA5', '\xF0', '\xDE', 
+	'\xE2', '\x4C', '\x49', '\x59', '\x4C', '\xB0', '\xA6', '\x44', 
+	'\x0A', '\xCF', '\xC2', '\xFE', '\x25', '\x0E', '\x1D', '\x5E', 
+	'\x61', '\xEB', '\xCD', '\x6F', '\x10', '\x3D', '\xBC', '\x46', 
+	'\x6F', '\x7C', '\x87', '\x97', '\x8F', '\xCD', '\xF0', '\xCF', 
+	'\x7F', '\xF7', '\x77', '\x38', '\x71', '\xEA', '\x14', '\x26', 
+	'\x9F', '\x20', '\xA4', '\x24', '\x89', '\x6B', '\x34', '\x9A', 
+	'\x2D', '\x1E', '\x89', '\xE3', '\x1B', '\xD7', '\x6F', '\x90', 
+	'\x65', '\x59', '\xA5', '\x10', '\x6C', '\x81', '\x52', '\x21', 
+	'\x71', '\x52', '\x67', '\x34', '\x1E', '\xE1', '\x9C', '\xC5', 
+	'\x98', '\x12', '\xF1', '\x5B', '\x49', '\xE4', '\xF3', '\xA8', 
+	'\xC6', '\x5A', '\xA3', '\x89', '\xD8', '\xB7', '\x87', '\x85', 
+	'\xF9', '\x3D', '\xAC', '\x9C', '\x3A', '\xCD', '\xCB', '\xBF', 
+	'\xF6', '\x0F', '\x49', '\xD3', '\x10', '\x70', '\x08', '\x11', 
+	'\x50', '\x18', '\xC3', '\xEE', '\xCE', '\x16', '\xDF', '\xFD', 
+	'\xDE', '\xF7', '\x58', '\xDB', '\x1E', '\xF2', '\xE9', '\x17', 
+	'\x9F', '\xE3', '\xC4', '\xC9', '\x27', '\x49', '\xD3', '\x06', 
+	'\x4A', '\x6B', '\x94', '\xD2', '\x20', '\x3C', '\x38', '\x83', 
+	'\x31', '\xE5', '\xD4', '\xD9', '\x95', '\x08', '\x21', '\xF0', 
+	'\xD3', '\x69', '\x39', '\x18', '\x64', '\xAC', '\x3D', '\xD8', 
+	'\xA0', '\x30', '\x96', '\x23', '\x47', '\x1F', '\x27', '\x8E', 
+	'\x42', '\x70', '\x86', '\xB2', '\x98', '\xF0', '\x60', '\x75', 
+	'\x95', '\x1B', '\x37', '\x6E', '\x32', '\xC9', '\x0C', '\xCD', 
+	'\x66', '\x9D', '\x5A', '\x9A', '\xB2', '\x7A', '\xFF', '\x3E', 
+	'\xED', '\x4E', '\x93', '\x56', '\xB3', '\x59', '\xDD', '\x07', 
+	'\xC9', '\x70', '\x30', '\xA0', '\x34', '\x86', '\xB5', '\xB5', 
+	'\x0D', '\xDE', '\x7F', '\xFF', '\x06', '\xDA', '\x3B', '\x8B', 
+	'\x9F', '\x0C', '\xA9', '\x05', '\x01', '\xC3', '\xC1', '\x2E', 
+	'\x8B', '\x2B', '\x1F', '\xE3', '\xE3', '\x9F', '\xFD', '\x55', 
+	'\x1A', '\xAD', '\x3A', '\xDE', '\x95', '\x98', '\xD2', '\x20', 
+	'\xA5', '\x98', '\x4A', '\xDD', '\x98', '\x17', '\x9E', '\x3B', 
+	'\x45', '\xA3', '\xD9', '\x9D', '\x56', '\xAA', '\x52', '\xB0', 
+	'\x52', '\x4A', '\xBC', '\x2B', '\x2B', '\x29', '\xEE', '\x4B', 
+	'\x10', '\xA0', '\x95', '\x42', '\x08', '\x85', '\x35', '\x25', 
+	'\x42', '\x29', '\xC0', '\xD3', '\x9B', '\xED', '\xD2', '\xE9', 
+	'\xCC', '\x90', '\x15', '\x86', '\x30', '\x0C', '\x2A', '\xFB', 
+	'\xE9', '\x2C', '\xC6', '\x38', '\xC2', '\x30', '\x66', '\xE5', 
+	'\xF0', '\x61', '\xC6', '\xA3', '\x8C', '\xC9', '\x64', '\x42', 
+	'\x9E', '\x4F', '\x58', '\x58', '\x5C', '\x20', '\xD0', '\x8A', 
+	'\x28', '\x8A', '\x09', '\x82', '\x88', '\x28', '\x4E', '\x68', 
+	'\xB7', '\xDA', '\x4C', '\x26', '\x23', '\x26', '\xE3', '\x09', 
+	'\x4A', '\x18', '\xB4', '\x05', '\x94', '\x0A', '\x38', '\x78', 
+	'\x70', '\x85', '\xE3', '\x5F', '\xFC', '\x27', '\x3C', '\xF9', 
+	'\xC2', '\x0B', '\x74', '\x66', '\x5B', '\xD5', '\x07', '\x88', 
+	'\x80', '\x52', '\x0B', '\xCA', '\xA2', '\xC0', '\x39', '\x03', 
+	'\xAE', '\xA0', '\xD5', '\x68', '\x13', '\x27', '\x09', '\x42', 
+	'\x08', '\xC2', '\x30', '\xC2', '\x79', '\x83', '\xF7', '\x1A', 
+	'\x67', '\x0D', '\x42', '\xA8', '\xA9', '\x93', '\x10', '\x78', 
+	'\xE7', '\x90', '\xAA', '\xFA', '\x1B', '\xE1', '\x05', '\x52', 
+	'\x07', '\xE8', '\x30', '\xC4', '\x18', '\x87', '\xF3', '\x63', 
+	'\xB4', '\x04', '\x67', '\x4A', '\x4C', '\x59', '\x22', '\x90', 
+	'\x34', '\x1A', '\x0D', '\xCA', '\xB2', '\xA0', '\xDD', '\x6A', 
+	'\x33', '\x1C', '\x8E', '\xC9', '\x26', '\x63', '\x5A', '\xAD', 
+	'\x0E', '\x59', '\x36', '\xC6', '\x7B', '\xD0', '\x2A', '\x00', 
+	'\x04', '\x51', '\x5C', '\x03', '\x21', '\xA8', '\xA5', '\x35', 
+	'\x8E', '\x1F', '\x3F', '\x86', '\x46', '\x4A', '\xEA', '\xB3', 
+	'\x3D', '\x9E', '\x78', '\xF9', '\xF3', '\x2C', '\x1F', '\x3F', 
+	'\x86', '\xB3', '\x05', '\x65', '\x9E', '\xA3', '\xA4', '\xC3', 
+	'\xBA', '\x02', '\x21', '\x40', '\xE2', '\xB1', '\x65', '\x86', 
+	'\x37', '\x06', '\xAD', '\x24', '\xD2', '\x3B', '\xB4', '\xD2', 
+	'\x78', '\x6F', '\x09', '\xC2', '\x84', '\x40', '\x2B', '\x4A', 
+	'\x0F', '\x81', '\x96', '\x20', '\xA2', '\xA9', '\x3E', '\xF4', 
+	'\x53', '\xAB', '\xE4', '\xF0', '\x52', '\x00', '\x0E', '\xE7', 
+	'\x0C', '\xDE', '\x5B', '\xA2', '\x40', '\x51', '\x14', '\x19', 
+	'\xC6', '\x94', '\x48', '\xA5', '\x29', '\x8A', '\x31', '\x81', 
+	'\xD6', '\x68', '\x19', '\x63', '\x9C', '\xA5', '\x56', '\xAF', 
+	'\x11', '\x85', '\x1A', '\x29', '\xA0', '\x56', '\xAB', '\xE3', 
+	'\x3D', '\x58', '\x6B', '\xA7', '\x1B', '\x13', '\x10', '\x48', 
+	'\xF6', '\xEE', '\x5B', '\x40', '\x07', '\x01', '\x3A', '\x8A', 
+	'\x9B', '\x34', '\xE7', '\x97', '\x10', '\xB1', '\x02', '\x67', 
+	'\xB0', '\x65', '\x46', '\x59', '\x46', '\x48', '\xED', '\xF1', 
+	'\xAE', '\x44', '\x4B', '\x81', '\x2D', '\x32', '\x6C', '\x91', 
+	'\x23', '\x1E', '\xF9', '\x66', '\x04', '\x2A', '\x50', '\x28', 
+	'\x25', '\x2A', '\x8B', '\x49', '\x81', '\x10', '\x1E', '\xE7', 
+	'\x0C', '\x5A', '\x6B', '\x94', '\xD6', '\x38', '\x1C', '\x4A', 
+	'\xEA', '\x0A', '\x80', '\xA6', '\xC4', '\xD9', '\x12', '\xE7', 
+	'\x2C', '\xCE', '\x3B', '\x9C', '\xF5', '\x3C', '\xD2', '\xEF', 
+	'\x79', '\x3E', '\x46', '\x4A', '\x81', '\x75', '\x06', '\x3C', 
+	'\x78', '\x07', '\x61', '\x10', '\x20', '\x89', '\x70', '\xCE', 
+	'\xE1', '\xFD', '\x74', '\xE5', '\x20', '\x3C', '\x92', '\xEA', 
+	'\x33', '\x80', '\x4A', '\xB2', '\x84', '\x11', '\x32', '\xEE', 
+	'\xCC', '\x30', '\x7B', '\xE8', '\x08', '\x4A', '\x06', '\xC4', 
+	'\x71', '\x4C', '\xB3', '\xDD', '\x25', '\x08', '\x23', '\xCA', 
+	'\x22', '\xA3', '\xCC', '\x86', '\x98', '\x7C', '\x4C', '\x39', 
+	'\x1E', '\x61', '\x4A', '\x8B', '\xB3', '\xD5', '\xA8', '\x57', 
+	'\x81', '\x42', '\x88', '\x4A', '\x2A', '\x38', '\x5B', '\xE2', 
+	'\xAD', '\x9F', '\x82', '\xD5', '\x60', '\x6C', '\x49', '\x69', 
+	'\x72', '\x1E', '\xB9', '\x3C', '\x60', '\x1A', '\xB8', '\xC5', 
+	'\xDA', '\x12', '\xEF', '\x2D', '\x52', '\x0A', '\x94', '\x94', 
+	'\x68', '\xAD', '\xA7', '\x38', '\x70', '\x14', '\xF9', '\x04', 
+	'\x21', '\x45', '\x55', '\x14', '\xA5', '\x09', '\x43', '\x8D', 
+	'\x73', '\x96', '\x3C', '\x9F', '\x4C', '\xB1', '\xE5', '\x11', 
+	'\xA2', '\xBA', '\x17', '\xDE', '\x01', '\x96', '\x34', '\x89', 
+	'\xD1', '\x93', '\xD1', '\x90', '\xFB', '\x17', '\xDF', '\xA6', 
+	'\xBD', '\x72', '\x00', '\x63', '\xAA', '\x11', '\xEE', '\xBC', 
+	'\xC1', '\xD9', '\x1C', '\x6F', '\x0B', '\x84', '\x82', '\x22', 
+	'\x9B', '\x20', '\x74', '\x8C', '\x54', '\x0A', '\x19', '\xA5', 
+	'\x55', '\xA5', '\xAC', '\x61', '\x34', '\xCC', '\x29', '\x8A', 
+	'\x3E', '\x52', '\x05', '\xA4', '\x69', '\x42', '\x9C', '\x44', 
+	'\x68', '\x1E', '\x25', '\xE3', '\x30', '\xC6', '\xF0', '\xA8', 
+	'\xD4', '\x52', '\x4A', '\x9C', '\xF3', '\x48', '\xA9', '\x71', 
+	'\xCE', '\x81', '\x70', '\x08', '\xEF', '\xD1', '\x5A', '\x63', 
+	'\xAC', '\xA7', '\x9C', '\x94', '\x24', '\x28', '\x84', '\x56', 
+	'\xD3', '\xA4', '\x3D', '\x81', '\x0E', '\x2B', '\xAB', '\x59', 
+	'\xE6', '\xE4', '\xF9', '\x04', '\xAD', '\x35', '\xDE', '\x7B', 
+	'\x3C', '\x12', '\x5B', '\x1A', '\x9C', '\xB3', '\xE8', '\xD1', 
+	'\xEE', '\x36', '\xCE', '\x3B', '\x1E', '\xBC', '\x77', '\x89', 
+	'\xCE', '\xA1', '\x43', '\x0C', '\x77', '\x36', '\xE9', '\xCC', 
+	'\xF5', '\x48', '\xEA', '\x51', '\xE5', '\x8D', '\x47', '\x7D', 
+	'\x9C', '\xF1', '\x04', '\x41', '\x4C', '\x18', '\x45', '\x14', 
+	'\x45', '\x46', '\x7F', '\xB7', '\xE4', '\xFD', '\x5F', '\xDC', 
+	'\xE0', '\xF5', '\xD7', '\x7F', '\xC6', '\x9D', '\x3B', '\x77', 
+	'\xD8', '\xDE', '\xEE', '\x73', '\xE0', '\xD0', '\x41', '\x7A', 
+	'\xB3', '\x33', '\x74', '\x3A', '\x6D', '\x8E', '\x1C', '\x7E', 
+	'\x8C', '\x17', '\x3F', '\x76', '\x96', '\x66', '\xA3', '\x02', 
+	'\xBB', '\x94', '\x0A', '\x21', '\xC4', '\xB4', '\x72', '\xFE', 
+	'\x03', '\x9E', '\x77', '\xAE', '\xFA', '\xD9', '\x39', '\x43', 
+	'\x1C', '\xA7', '\x64', '\xF9', '\x98', '\x46', '\xB3', '\x0B', 
+	'\x1E', '\xF2', '\x3C', '\xC7', '\x7B', '\x08', '\xC3', '\x18', 
+	'\xEF', '\x3C', '\x4A', '\x05', '\x64', '\xD9', '\x18', '\xCA', 
+	'\x82', '\x20', '\x4E', '\x41', '\x56', '\xEC', '\xA7', '\xAD', 
+	'\x33', '\x8C', '\x87', '\xBB', '\xDC', '\xFE', '\xC9', '\x4F', 
+	'\x08', '\xEA', '\x35', '\x0E', '\x9C', '\x79', '\x8E', '\x5A', 
+	'\x2D', '\x24', '\x8C', '\x5A', '\x08', '\x6F', '\xB1', '\xA5', 
+	'\xC1', '\x5B', '\xD0', '\x3A', '\x42', '\x48', '\x98', '\x8C', 
+	'\x06', '\xFC', '\xE1', '\x57', '\xFE', '\x07', '\x7F', '\xF3', 
+	'\xEA', '\xDF', '\xF2', '\xF0', '\xE1', '\x06', '\x42', '\x4A', 
+	'\xB4', '\x0A', '\x78', '\xFB', '\xFC', '\x5B', '\x4C', '\x46', 
+	'\x23', '\x94', '\x8E', '\x68', '\xB5', '\x5B', '\xFC', '\xE6', 
+	'\x6F', '\xFD', '\x06', '\xFF', '\xF2', '\x4B', '\xFF', '\x02', 
+	'\x81', '\xAD', '\x06', '\x9A', '\x54', '\x80', '\xC4', '\x7B', 
+	'\x87', '\x77', '\xFE', '\x03', '\x40', '\xBB', '\x47', '\x49', 
+	'\x21', '\xC8', '\xF3', '\x09', '\x0D', '\xEF', '\x11', '\x42', 
+	'\xE2', '\xBD', '\xA7', '\x28', '\x4A', '\xA4', '\xD4', '\x20', 
+	'\x5D', '\xB5', '\xB7', '\x75', '\x16', '\x15', '\x84', '\x94', 
+	'\x65', '\x89', '\xF5', '\x20', '\xA5', '\x42', '\x3A', '\xEF', 
+	'\x29', '\xCB', '\x82', '\x51', '\x7F', '\x8B', '\x46', '\x77', 
+	'\x9E', '\xE6', '\xCC', '\x2C', '\x52', '\x68', '\x26', '\x83', 
+	'\x11', '\xC5', '\x38', '\xC3', '\x66', '\xF9', '\x34', '\x80', 
+	'\xAA', '\x6C', '\x91', '\x96', '\xAC', '\xDE', '\xBF', '\xC3', 
+	'\xCE', '\xCE', '\x36', '\x42', '\x48', '\xA4', '\x90', '\x38', 
+	'\xEF', '\x28', '\x4B', '\x8B', '\x90', '\x02', '\xB0', '\xEC', 
+	'\xF6', '\x77', '\xF8', '\xF2', '\x7F', '\xFC', '\x32', '\x5F', 
+	'\xFD', '\xE3', '\xFF', '\x89', '\x12', '\x53', '\x24', '\x88', 
+	'\x0F', '\xD7', '\x35', '\x88', '\xAA', '\x9D', '\x9C', '\xF7', 
+	'\x15', '\xDD', '\x0A', '\x89', '\x75', '\x0E', '\xE7', '\x2C', 
+	'\xD6', '\x19', '\xAC', '\x2D', '\x01', '\x4F', '\xA0', '\x03', 
+	'\xAC', '\xB5', '\x8C', '\xC7', '\x43', '\x94', '\x92', '\x48', 
+	'\xA9', '\x91', '\x52', '\x53', '\x1A', '\x8B', '\x2D', '\xDD', 
+	'\x07', '\x4A', '\x15', '\x2F', '\x05', '\x7B', '\x1F', '\x3F', 
+	'\x41', '\x67', '\x79', '\x99', '\x41', '\xBF', '\xCF', '\xCE', 
+	'\xE6', '\x36', '\xE3', '\xDD', '\x11', '\x3B', '\x1B', '\x9B', 
+	'\x94', '\xD9', '\x18', '\x67', '\x2A', '\x79', '\x10', '\x04', 
+	'\x11', '\x93', '\x2C', '\xA3', '\x3F', '\x18', '\x22', '\x45', 
+	'\x05', '\xC2', '\x47', '\x50', '\xF5', '\xCE', '\x56', '\x09', 
+	'\xC9', '\xEA', '\x55', '\x14', '\x86', '\x57', '\x5F', '\xFD', 
+	'\x2E', '\xC6', '\x59', '\x9C', '\xAF', '\xA6', '\xB1', '\x73', 
+	'\x0E', '\x67', '\x2D', '\xCE', '\xD9', '\xA9', '\x67', '\x90', 
+	'\x48', '\xA1', '\x90', '\x42', '\x53', '\x16', '\x05', '\x79', 
+	'\x96', '\x63', '\x4D', '\xD5', '\xDB', '\x42', '\x7A', '\xAC', 
+	'\x2B', '\x51', '\x4A', '\xA0', '\xB5', '\x46', '\x0A', '\x85', 
+	'\x77', '\x1E', '\x90', '\x48', '\x15', '\x60', '\x8C', '\xA7', 
+	'\x28', '\x72', '\xB4', '\x00', '\x94', '\x54', '\x24', '\x71', 
+	'\x9D', '\xED', '\xEB', '\xD7', '\x88', '\xDB', '\x6D', '\x46', 
+	'\xC2', '\xA2', '\x92', '\x90', '\xD6', '\x5C', '\x17', '\x97', 
+	'\x0D', '\x48', '\x1B', '\xB2', '\x3A', '\x72', '\x21', '\x19', 
+	'\x0C', '\x87', '\x30', '\xAD', '\x9E', '\xB5', '\x06', '\xA5', 
+	'\x34', '\x42', '\xC8', '\x8A', '\x69', '\x9C', '\xAD', '\x48', 
+	'\x56', '\x7A', '\x82', '\x40', '\xD3', '\xE9', '\xCC', '\x20', 
+	'\x9C', '\x01', '\x2F', '\xB0', '\xC6', '\x4F', '\xE7', '\x43', 
+	'\xB5', '\x01', '\xB1', '\xCE', '\xE1', '\xAD', '\x03', '\xC0', 
+	'\x3A', '\xC3', '\x68', '\x34', '\x64', '\x7A', '\x38', '\x53', 
+	'\x27', '\x56', '\x81', '\xB9', '\x28', '\x26', '\x84', '\x61', 
+	'\x80', '\x35', '\x82', '\x28', '\xAC', '\x93', '\x17', '\x13', 
+	'\x04', '\x12', '\x63', '\x0C', '\x83', '\xED', '\xB5', '\x6A', 
+	'\x33', '\xE7', '\x9D', '\xE5', '\xF6', '\xF9', '\x37', '\xD8', 
+	'\xBC', '\x7F', '\x1B', '\x2F', '\x25', '\x49', '\xBB', '\xC5', 
+	'\xC1', '\x8F', '\x9E', '\xA1', '\xD5', '\x9D', '\xC1', '\x19', 
+	'\x41', '\x36', '\xEC', '\x63', '\x73', '\x43', '\x3E', '\x1E', 
+	'\x92', '\x26', '\x29', '\xF3', '\xFB', '\xF6', '\x72', '\xE5', 
+	'\xE6', '\x7D', '\x76', '\x77', '\x77', '\xB1', '\xD6', '\x22', 
+	'\xA5', '\x9F', '\xD2', '\xA3', '\x9A', '\x76', '\xB3', '\x60', 
+	'\xDF', '\xBE', '\x79', '\x3E', '\xFF', '\xB9', '\x4F', '\x91', 
+	'\x4D', '\xF2', '\x6A', '\xEB', '\x2D', '\x24', '\x42', '\x4A', 
+	'\xFC', '\x74', '\x85', '\xE3', '\x9D', '\xC3', '\x39', '\x8F', 
+	'\x92', '\x1A', '\x6B', '\x0D', '\xAD', '\xD6', '\x0C', '\x71', 
+	'\x9C', '\x22', '\x85', '\xA2', '\x28', '\x33', '\xF2', '\x2C', 
+	'\x23', '\x8E', '\xEB', '\x78', '\xE7', '\xC8', '\xF3', '\x0C', 
+	'\x29', '\x54', '\x35', '\x2B', '\x00', '\x6B', '\x1C', '\x42', 
+	'\x82', '\x71', '\x06', '\x75', '\x52', '\x89', '\x73', '\x1E', 
+	'\xC8', '\x8A', '\x8C', '\x51', '\x7F', '\x9B', '\xE1', '\xCE', 
+	'\x16', '\xE5', '\x78', '\x4C', '\x18', '\xD6', '\xC8', '\xFA', 
+	'\x7D', '\x36', '\x6F', '\xDD', '\xA4', '\xD6', '\x6E', '\x11', 
+	'\x25', '\x11', '\x61', '\x9C', '\x52', '\x6B', '\x77', '\xE9', 
+	'\x34', '\x53', '\x2E', '\x5C', '\xBA', '\xCC', '\xC6', '\xC3', 
+	'\x4D', '\xBC', '\xAF', '\xDA', '\xA1', '\x2A', '\x6F', '\xD5', 
+	'\x3E', '\xFB', '\xF6', '\x2D', '\xF0', '\xAF', '\xFF', '\xD5', 
+	'\x6F', '\xF3', '\xE9', '\x4F', '\x9C', '\x41', '\xE8', '\x10', 
+	'\x63', '\x0D', '\x4A', '\x6B', '\xAC', '\x75', '\x18', '\xEB', 
+	'\xB0', '\xD6', '\xE1', '\xAC', '\xAB', '\x5A', '\xCA', '\xFB', 
+	'\x0A', '\x03', '\xD6', '\x62', '\x8C', '\xC1', '\x9A', '\x6A', 
+	'\x78', '\x19', '\x63', '\x19', '\x0C', '\x76', '\x70', '\xCE', 
+	'\x21', '\x84', '\xA0', '\x2C', '\x0D', '\xA5', '\x31', '\x94', 
+	'\x45', '\x8E', '\x54', '\x0A', '\xE7', '\x1C', '\x59', '\x51', 
+	'\xA0', '\x4E', '\x2A', '\x7D', '\x6E', '\xBA', '\x9C', '\x9E', 
+	'\x4E', '\x3C', '\x41', '\x9E', '\xE5', '\xEC', '\xAC', '\x3E', 
+	'\x60', '\xE7', '\xFE', '\x3D', '\xF2', '\x2C', '\xA3', '\xB7', 
+	'\xBC', '\x4C', '\xDA', '\xAC', '\xA1', '\xA3', '\x88', '\x20', 
+	'\xA9', '\xD1', '\x6A', '\xD6', '\x49', '\x92', '\x90', '\x8B', 
+	'\x17', '\x2F', '\x33', '\x18', '\x8E', '\x79', '\x04', '\x84', 
+	'\x20', '\xD0', '\xEC', '\x5F', '\x5A', '\xE6', '\xF7', '\x7E', 
+	'\xEF', '\x77', '\xF9', '\xEC', '\x67', '\x3F', '\x09', '\xA6', 
+	'\xC0', '\x89', '\x10', '\xA4', '\x42', '\xA9', '\x00', '\x53', 
+	'\x5A', '\x10', '\x72', '\xCA', '\x32', '\x55', '\x12', '\x08', 
+	'\x81', '\x56', '\x21', '\xA3', '\xD1', '\x10', '\x6B', '\x4A', 
+	'\xB2', '\xC9', '\x88', '\x20', '\x8C', '\x29', '\x4D', '\x85', 
+	'\x29', '\xA5', '\x24', '\x42', '\x2A', '\x4C', '\x69', '\xB0', 
+	'\xD6', '\x62', '\xAD', '\x21', '\x08', '\x62', '\xB2', '\x2C', 
+	'\xC7', '\x5A', '\x83', '\x76', '\xD3', '\xE8', '\xAB', '\x22', 
+	'\x7A', '\x9C', '\xB7', '\x08', '\x24', '\x71', '\x94', '\x60', 
+	'\x0A', '\x43', '\x3E', '\x1E', '\x93', '\xB4', '\xDB', '\x8C', 
+	'\x87', '\xBB', '\x20', '\x03', '\xA2', '\x7A', '\x93', '\x7A', 
+	'\xA3', '\xCD', '\x17', '\xFE', '\xCE', '\xE7', '\x49', '\x92', 
+	'\x94', '\xEF', '\xBF', '\xF6', '\x63', '\xD6', '\xD7', '\x37', 
+	'\xC9', '\xF2', '\x8C', '\x27', '\x4E', '\x9C', '\xE4', '\x95', 
+	'\xBF', '\xF7', '\x2B', '\x2C', '\x2D', '\xEE', '\xC3', '\x5B', 
+	'\x83', '\xF5', '\x9E', '\x48', '\x07', '\xD5', '\x50', '\x2B', 
+	'\x0D', '\xD6', '\x79', '\xCA', '\x22', '\xC3', '\x3A', '\x83', 
+	'\x40', '\x56', '\x6A', '\xD6', '\x3A', '\x04', '\x92', '\x34', 
+	'\xAD', '\x61', '\xAD', '\x23', '\x1B', '\x0F', '\x29', '\xCB', 
+	'\x82', '\x3C', '\x1B', '\x91', '\xD6', '\x1B', '\x78', '\x57', 
+	'\xB5', '\x8C', '\x0E', '\x14', '\x5E', '\x38', '\x82', '\xA0', 
+	'\x86', '\x75', '\x9E', '\x5A', '\xA3', '\x46', '\x10', '\x45', 
+	'\x68', '\x2B', '\x3C', '\xC2', '\x7F', '\xF8', '\x78', '\xC9', 
+	'\xE1', '\xF1', '\x58', '\xB2', '\xC9', '\x08', '\x2F', '\x05', 
+	'\xF3', '\xA7', '\x9E', '\x20', '\x6A', '\xB4', '\xD9', '\xB8', 
+	'\x79', '\x85', '\x74', '\x30', '\xA1', '\x36', '\x33', '\x43', 
+	'\xB3', '\xB7', '\x87', '\xA8', '\xDE', '\xE6', '\x97', '\x3F', 
+	'\xF7', '\x77', '\x79', '\xE9', '\xE3', '\x1F', '\xA7', '\xB4', 
+	'\xB0', '\xBD', '\xD3', '\xA7', '\xDD', '\x6C', '\x92', '\x28', 
+	'\x4F', '\x12', '\xA7', '\x78', '\x63', '\x31', '\xCE', '\x13', 
+	'\x7A', '\x90', '\x32', '\xC4', '\x3A', '\x87', '\x92', '\x0A', 
+	'\x23', '\x2C', '\x52', '\x6A', '\xB2', '\xC9', '\x04', '\x89', 
+	'\x47', '\x87', '\x11', '\xF9', '\x70', '\x84', '\x9B', '\x9A', 
+	'\x06', '\xA5', '\x43', '\x4C', '\x59', '\x31', '\x5E', '\xA8', 
+	'\xE3', '\x6A', '\x4E', '\x78', '\x83', '\xD6', '\x31', '\xE5', 
+	'\x70', '\xF7', '\x03', '\x23', '\x13', '\x86', '\x09', '\xB9', 
+	'\x77', '\xE8', '\x47', '\x8F', '\x95', '\x98', '\x0E', '\x7D', 
+	'\x0F', '\x04', '\x3A', '\xAC', '\x18', '\x22', '\x08', '\xE9', 
+	'\x2E', '\x2C', '\x31', '\x19', '\x67', '\xAC', '\xDF', '\x59', 
+	'\x65', '\xDF', '\xA1', '\x88', '\x9D', '\xD5', '\x55', '\xA4', 
+	'\x0C', '\xA9', '\xCF', '\x4A', '\xE2', '\x5A', '\xB3', '\xD2', 
+	'\xE9', '\x49', '\x9D', '\x5E', '\x77', '\xC4', '\xB0', '\xDF', 
+	'\x67', '\x63', '\x6D', '\x8D', '\x60', '\x58', '\xD0', '\x69', 
+	'\xD6', '\xD1', '\x51', '\xCC', '\x78', '\x30', '\x26', '\x88', 
+	'\x62', '\x54', '\x10', '\xE1', '\x9C', '\x45', '\xCA', '\x00', 
+	'\x93', '\x4F', '\xAA', '\xCA', '\x22', '\x11', '\x46', '\x30', 
+	'\xC9', '\xC6', '\x58', '\x53', '\x52', '\xAB', '\xB7', '\xAA', 
+	'\x59', '\x60', '\x4B', '\x94', '\x0E', '\xF1', '\x54', '\x54', 
+	'\x5B', '\x9A', '\xA2', '\x7A', '\x4F', '\xAA', '\xEA', '\x51', 
+	'\x80', '\x74', '\x58', '\x67', '\xD9', '\xDC', '\x5C', '\xAB', 
+	'\x56', '\x8B', '\x95', '\xBE', '\x00', '\x27', '\xAA', '\x0C', 
+	'\x72', '\x53', '\x30', '\x26', '\xA7', '\xD7', '\x5D', '\xA6', 
+	'\xBB', '\x7F', '\x85', '\xDB', '\x17', '\xDE', '\x67', '\xFD', 
+	'\xD6', '\x5D', '\xE6', '\x0E', '\xAD', '\xB0', '\xB5', '\xB1', 
+	'\x8A', '\xB1', '\x86', '\x32', '\xCF', '\x89', '\x1A', '\x43', 
+	'\x94', '\xD6', '\x0C', '\xD6', '\x36', '\x19', '\x0F', '\x32', 
+	'\x56', '\xD7', '\xB7', '\xF8', '\xCA', '\x1F', '\xFE', '\x11', 
+	'\xB3', '\xDD', '\x1E', '\xBF', '\xFE', '\xC5', '\x7F', '\x40', 
+	'\xA8', '\x42', '\x9A', '\xBD', '\x2E', '\x32', '\x37', '\x6C', 
+	'\xF6', '\x37', '\xD1', '\xDD', '\x16', '\x71', '\x5A', '\xC3', 
+	'\xDA', '\x82', '\x20', '\x50', '\x15', '\x18', '\x27', '\x63', 
+	'\x4C', '\x3E', '\x24', '\x88', '\x12', '\x9C', '\xB7', '\xE0', 
+	'\xA1', '\xC8', '\x27', '\x24', '\x2A', '\x64', '\xB8', '\xBB', 
+	'\x4D', '\x94', '\xD4', '\x10', '\xC2', '\x51', '\x16', '\x25', 
+	'\x52', '\x05', '\x78', '\x20', '\xCF', '\x32', '\xA2', '\x24', 
+	'\x65', '\x30', '\x9A', '\xA0', '\x8E', '\x4B', '\x79', '\xEE', 
+	'\x43', '\xE5', '\xFE', '\xE1', '\xE5', '\x80', '\x30', '\x4D', 
+	'\x99', '\x0C', '\x77', '\xB9', '\xF2', '\x93', '\x1F', '\xE3', 
+	'\x8C', '\x45', '\x07', '\x21', '\xF5', '\x6E', '\x97', '\x20', 
+	'\x89', '\x99', '\x8C', '\x76', '\xF1', '\x4E', '\x30', '\x1E', 
+	'\x0C', '\xD8', '\xB8', '\x79', '\x9D', '\xC6', '\x56', '\x48', 
+	'\xB7', '\x4C', '\x79', '\xBE', '\x77', '\x94', '\x67', '\xE6', 
+	'\x1E', '\xA3', '\x96', '\x34', '\x68', '\xEA', '\x3A', '\xED', 
+	'\x2C', '\x44', '\x0D', '\x0D', '\xFF', '\xEE', '\xCB', '\xFF', 
+	'\x9E', '\xAF', '\x7D', '\xF3', '\xEB', '\x2C', '\x1F', '\x5C', 
+	'\x62', '\xEF', '\xBE', '\x39', '\x3C', '\xD5', '\xFD', '\xE2', 
+	'\x38', '\x46', '\x05', '\x1A', '\x29', '\x15', '\x4A', '\x2A', 
+	'\x84', '\x90', '\x08', '\x29', '\xF0', '\xDE', '\x53', '\x4E', 
+	'\xC5', '\x65', '\xA0', '\xA2', '\xEA', '\x34', '\x84', '\xC4', 
+	'\x3A', '\x43', '\x9E', '\xE7', '\x58', '\xE7', '\xB0', '\xD6', 
+	'\xA3', '\xED', '\x74', '\xBC', '\xDB', '\x0F', '\x9E', '\xCD', 
+	'\x7C', '\x20', '\xD5', '\xD9', '\x58', '\xBF', '\xCF', '\xC6', 
+	'\xDA', '\x2A', '\x2A', '\x08', '\x48', '\x87', '\xBB', '\x4C', 
+	'\x86', '\x23', '\x50', '\x01', '\x07', '\x92', '\x94', '\x38', 
+	'\x92', '\xF4', '\xB7', '\xD7', '\x28', '\xB2', '\x01', '\x61', 
+	'\xA6', '\x98', '\x89', '\xBB', '\xD4', '\xC2', '\x3A', '\xE1', 
+	'\x81', '\xF9', '\x6A', '\xFD', '\xE8', '\x1C', '\x51', '\x19', 
+	'\xD1', '\xAD', '\xB5', '\x78', '\xE0', '\x77', '\xB9', '\xBF', 
+	'\xB5', '\x49', '\x38', '\xD3', '\xE0', '\xE0', '\xCA', '\x41', 
+	'\xE2', '\x38', '\x24', '\xCF', '\x33', '\xF2', '\x7C', '\x84', 
+	'\xD6', '\x4D', '\x82', '\x30', '\x42', '\x29', '\x5D', '\x49', 
+	'\x73', '\x20', '\x8A', '\x6B', '\x8C', '\x47', '\x43', '\xE2', 
+	'\xA4', '\x86', '\x00', '\x8C', '\x2B', '\x51', '\x5A', '\x53', 
+	'\x96', '\x16', '\xAD', '\x43', '\x82', '\x20', '\x60', '\x6B', 
+	'\xA7', '\xCF', '\xDA', '\xDA', '\x1A', '\xDA', '\xFC', '\x7F', 
+	'\x41', '\x57', '\xED', '\x34', '\xC5', '\x83', '\x78', '\xF4', 
+	'\x9E', '\xC7', '\x95', '\x05', '\xFD', '\x9D', '\x2D', '\x26', 
+	'\xE3', '\x8C', '\xCB', '\x3F', '\x7E', '\x9D', '\xC2', '\xE5', 
+	'\x1C', '\x3F', '\x7B', '\x96', '\x28', '\x8C', '\x10', '\xAE', 
+	'\xA0', '\xEE', '\xEA', '\x44', '\xED', '\x98', '\x5A', '\xD8', 
+	'\x20', '\xCC', '\x34', '\x85', '\x9B', '\xA0', '\xB5', '\x25', 
+	'\x8C', '\x15', '\x32', '\x91', '\x7C', '\xE3', '\x87', '\xDF', 
+	'\xE1', '\xE6', '\xFA', '\x6D', '\x7E', '\xFF', '\x37', '\xFF', 
+	'\x2D', '\x33', '\xAD', '\x36', '\x61', '\x98', '\x92', '\x24', 
+	'\x1D', '\xBC', '\xAF', '\xFC', '\x41', '\x18', '\x44', '\x18', 
+	'\x5B', '\x62', '\x4C', '\x81', '\x52', '\x92', '\x20', '\x08', 
+	'\x09', '\xA3', '\x04', '\xBC', '\xC0', '\x79', '\x57', '\x61', 
+	'\xD2', '\x7B', '\x84', '\x84', '\xD2', '\x14', '\xA8', '\x40', 
+	'\x33', '\x1A', '\x4D', '\x08', '\x82', '\xA0', '\xD2', '\x79', 
+	'\x0E', '\x30', '\x78', '\x0C', '\x60', '\x85', '\xC7', '\x0A', 
+	'\x8F', '\x9B', '\x26', '\x23', '\xC4', '\x87', '\xC9', '\xE5', 
+	'\xB6', '\xE0', '\xCA', '\xBD', '\x7B', '\x9C', '\x7F', '\xEF', 
+	'\x0A', '\x83', '\xD1', '\x08', '\x15', '\x04', '\x20', '\x04', 
+	'\x56', '\x58', '\xBC', '\xF2', '\x20', '\x0C', '\x13', '\x33', 
+	'\x20', '\x0F', '\x1D', '\x61', '\x2D', '\x24', '\x0A', '\x15', 
+	'\x5B', '\xE3', '\x01', '\xDF', '\x3B', '\xFF', '\x3A', '\x1F', 
+	'\xFF', '\xF8', '\x4B', '\x9C', '\x3D', '\xF3', '\x14', '\xD6', 
+	'\x14', '\x48', '\xE1', '\x90', '\xB2', '\x44', '\x6B', '\x41', 
+	'\x18', '\x86', '\x28', '\xA5', '\xD0', '\x3A', '\x44', '\x07', 
+	'\xF1', '\xD4', '\x8A', '\x42', '\x1C', '\xA7', '\x04', '\x41', 
+	'\x38', '\x05', '\x70', '\x35', '\x2C', '\x9D', '\xB5', '\x64', 
+	'\xD9', '\x84', '\xF1', '\x68', '\x44', '\x96', '\x8D', '\x49', 
+	'\x6B', '\xF1', '\x87', '\x27', '\xF0', '\x41', '\x03', '\x79', 
+	'\x40', '\x54', '\xBA', '\xC5', '\x3F', '\xA2', '\x26', '\x44', 
+	'\x45', '\xAE', '\xD6', '\x72', '\x63', '\x77', '\x87', '\xF1', 
+	'\xFA', '\x43', '\xD6', '\xB7', '\x76', '\xE9', '\xCD', '\x75', 
+	'\x51', '\x4A', '\x63', '\x95', '\x65', '\x64', '\xC6', '\x28', 
+	'\xE7', '\x31', '\xC2', '\x62', '\x22', '\x8B', '\x94', '\xE0', 
+	'\xC2', '\x88', '\xBF', '\xFA', '\xD1', '\xB7', '\x99', '\x3D', 
+	'\xB8', '\xC0', '\x17', '\xFF', '\xD1', '\x2B', '\x78', '\xE7', 
+	'\x28', '\xB2', '\x21', '\x26', '\x89', '\x08', '\xC2', '\x66', 
+	'\x45', '\x1E', '\xDE', '\x53', '\xD8', '\x1C', '\x25', '\xC3', 
+	'\x6A', '\x35', '\x83', '\x44', '\x48', '\x50', '\x42', '\x20', 
+	'\x84', '\x20', '\x4D', '\x92', '\x29', '\x95', '\x0A', '\xA4', 
+	'\x12', '\x94', '\xA5', '\xE3', '\xFE', '\xEA', '\x03', '\x82', 
+	'\x30', '\xA2', '\x28', '\x0A', '\xD4', '\x21', '\x29', '\xCE', 
+	'\x79', '\x5F', '\x55', '\xDC', '\xFA', '\xEA', '\x7F', '\x25', 
+	'\x1C', '\x95', '\x7A', '\xB4', '\xA2', '\x52', '\xEA', '\x6E', 
+	'\x3A', '\xA1', '\xB5', '\x0E', '\x68', '\x06', '\x21', '\xD2', 
+	'\x94', '\xE4', '\xA6', '\x64', '\xCF', '\xE2', '\x02', '\x5A', 
+	'\x29', '\xAC', '\x30', '\xD8', '\xD2', '\x51', '\x94', '\x05', 
+	'\x63', '\x5F', '\x22', '\x85', '\xC3', '\xE8', '\x80', '\x2B', 
+	'\x3B', '\x77', '\xB9', '\x55', '\x6C', '\xF0', '\xE9', '\xCF', 
+	'\xFC', '\x12', '\xA1', '\xF6', '\x08', '\x15', '\x50', '\x6F', 
+	'\x74', '\xB0', '\xB6', '\xC4', '\x39', '\x83', '\xD4', '\x1A', 
+	'\x21', '\x40', '\x89', '\x00', '\x1D', '\x04', '\x28', '\x25', 
+	'\x2A', '\xC7', '\x66', '\x2D', '\xDE', '\x3B', '\xAC', '\x2D', 
+	'\xB1', '\xAE', '\xC4', '\x3B', '\x87', '\xD2', '\x9A', '\x22', 
+	'\x2F', '\xB8', '\xBF', '\xBA', '\xCA', '\xEE', '\x70', '\x8C', 
+	'\xF5', '\x82', '\xF5', '\xF5', '\x0D', '\xD4', '\x21', '\x21', 
+	'\xCE', '\x3D', '\x0A', '\xDE', '\x4F', '\x7B', '\xDF', '\xF9', 
+	'\x0A', '\xD4', '\x1E', '\x51', '\x7D', '\x17', '\xA0', '\xB5', 
+	'\xA6', '\xD3', '\x9C', '\x21', '\xAD', '\x37', '\x19', '\x6B', 
+	'\xCD', '\x83', '\x6C', '\xC4', '\x6C', '\x6F', '\x8E', '\x34', 
+	'\x89', '\x90', '\x4A', '\x62', '\x03', '\x4F', '\x2E', '\x0C', 
+	'\x06', '\x30', '\x4A', '\xB0', '\x1B', '\x1B', '\x26', '\x89', 
+	'\x67', '\x61', '\xFF', '\x3C', '\x5A', '\x4B', '\x94', '\x0E', 
+	'\xD0', '\x5A', '\xA2', '\x83', '\x10', '\xAD', '\x15', '\xDE', 
+	'\x57', '\x2E', '\x0B', '\x3C', '\x42', '\x7A', '\x3C', '\x0E', 
+	'\xAD', '\x02', '\x3C', '\xB6', '\x92', '\x0E', '\xA6', '\xFC', 
+	'\x70', '\x21', '\xE0', '\x2A', '\x85', '\x3A', '\x1A', '\x4E', 
+	'\xE8', '\x0F', '\x46', '\x0C', '\x07', '\x03', '\xDE', '\x7E', 
+	'\xFB', '\x27', '\xAC', '\xAC', '\x1C', '\x47', '\x7A', '\x7C', 
+	'\x55', '\xF9', '\x29', '\x13', '\xD9', '\x69', '\xF0', '\xD5', 
+	'\xCB', '\x63', '\xA9', '\x80', '\xD0', '\x6E', '\xCF', '\x12', 
+	'\x36', '\x9B', '\x8C', '\x14', '\x8C', '\x84', '\x60', '\x73', 
+	'\x30', '\xE2', '\x9D', '\xCB', '\x17', '\x18', '\x8E', '\xC7', 
+	'\x08', '\x1D', '\xA1', '\x6A', '\x75', '\x7C', '\x2B', '\xA4', 
+	'\x68', '\x7B', '\xF2', '\xB9', '\x10', '\xDF', '\xD0', '\x34', 
+	'\x3A', '\x6D', '\x66', '\x7A', '\xF3', '\x34', '\x5A', '\x33', 
+	'\xA4', '\xB5', '\x3A', '\x61', '\x94', '\xE0', '\xB1', '\x18', 
+	'\x6B', '\xC8', '\x8B', '\x9C', '\xB2', '\xCC', '\x71', '\xCE', 
+	'\x50', '\x96', '\x19', '\x93', '\xD1', '\x2E', '\x59', '\x3E', 
+	'\xC2', '\x59', '\x87', '\x35', '\xE5', '\xD4', '\x53', '\x57', 
+	'\xEB', '\xC4', '\x30', '\x8C', '\xC8', '\xC6', '\x19', '\xE3', 
+	'\xC9', '\x98', '\x5A', '\xAD', '\xCE', '\xA5', '\x4B', '\x6F', 
+	'\xF1', '\x8B', '\x37', '\xDE', '\xA6', '\x5E', '\x4B', '\xF9', 
+	'\x7F', '\x83', '\xB5', '\x23', '\x5F', '\xFC', '\x40', '\xB0', 
+	'\xBF', '\x00', '\x00', '\x00', '\x00', '\x49', '\x45', '\x4E', 
+	'\x44', '\xAE', '\x42', '\x60', '\x82'
+};

          
A => t/data/ref.h +6 -0
@@ 0,0 1,6 @@ 
+/*
+  This file was autogenerated by raw2c, by Duncan Ross Palmer.
+  Visit http://www.daybologic.co.uk
+*/
+
+extern const char __rawimage_DB4r4knLS[];

          
A => t/raw2c.pl +167 -0
@@ 0,0 1,167 @@ 
+#!/usr/bin/env perl
+#
+# raw2c (Pure Perl Edition)
+# Copyright (c) 2019, Duncan Ross Palmer (2E0EOL) and others,
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are met:
+#
+#     * Redistributions of source code must retain the above copyright notice,
+#       this list of conditions and the following disclaimer.
+#
+#     * Redistributions in binary form must reproduce the above copyright
+#       notice, this list of conditions and the following disclaimer in the
+#       documentation and/or other materials provided with the distribution.
+#
+#     * Neither the name of the Daybo Logic nor the names of its contributors
+#       may be used to endorse or promote products derived from this software
+#       without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+#
+
+require '../bin/raw2c';
+
+package Raw2CTestSuite;
+use strict;
+use warnings;
+use Moose;
+use POSIX qw(EXIT_SUCCESS);
+use Test::More 0.96;
+use Test::Output;
+
+extends 'Test::Module::Runnable';
+
+sub setUp {
+	my ($self) = @_;
+
+	$self->sut(Main->new());
+
+	return EXIT_SUCCESS;
+}
+
+sub testStrings {
+	my ($self) = @_;
+	plan tests => 3;
+
+	stdout_is { $self->sut->title() } "raw2c by Duncan Ross Palmer\n", 'title';
+
+	stdout_is { $self->sut->syntax() }
+		"Syntax: [-q] [-n] [--symbol=__symbol] <binary_file> <source_file>[.c]\n" .
+		"-q disables non-critical output\n" .
+		"-n adds a NULL terminator\n" .
+		"--symbol The string following this is the public symbol for the image, else it is random\n" .
+		"binary_file is a file such as a JPEG or executable image, it may even be source\n" .
+		"source_file is a new C file to write which will contain the binary as a raw array.\n"
+	, 'syntax';
+
+	is(
+		$self->sut->getHead(),
+		"/*\n  This file was autogenerated by raw2c, by Duncan Ross Palmer.\n  Visit http://www.daybologic.co.uk\n*/\n\n",
+		'getHead'
+	);
+
+	return EXIT_SUCCESS;
+}
+
+sub testRandom {
+	my ($self) = @_;
+	plan tests => 2;
+
+	$self->sut(OptionsParser->new());
+
+	my %chars = ( );
+	do {
+		my $char = $self->sut->randChar();
+		$chars{$char} = $char if ($char eq '0' || $char eq 'q' || $char eq 'Z' || $char eq '_');
+	} while (scalar(keys(%chars)) < 4);
+
+	cmp_ok(scalar(keys(%chars)), '==', 4, 'randChar');
+
+	srand(0); # Predictable symbol
+	my $randomSymbol = $self->sut->randomSymbol();
+	my $expect = '__rawimage_aL6SANHnTKsmKgoMRAJ5';
+	is($randomSymbol, $expect, "Generated expected symbol: '$expect'");
+
+	return EXIT_SUCCESS;
+}
+
+sub testParse {
+	my ($self) = @_;
+	my $options;
+
+	plan tests => 6;
+
+	$self->sut(OptionsParser->new());
+
+	subtest quiet => sub {
+		plan tests => 2;
+
+		$options = $self->sut->parse(['-q', 'input.bin', 'output.c']);
+		ok($options->quiet, 'quiet flag is set with -q');
+
+		$options = $self->sut->parse(['input.bin', 'output.c']);
+		ok(!$options->quiet, 'quiet flag is *NOT* set without -q');
+	};
+
+	subtest nullTerminator => sub {
+		plan tests => 2;
+
+		$options = $self->sut->parse(['-n', 'input.bin', 'output.c']);
+		ok($options->nullTerminator, 'null terminator flag is set with -n');
+
+		$options = $self->sut->parse(['input.bin', 'output.c']);
+		ok(!$options->nullTerminator, 'null terminator flag is *NOT* set without -n');
+	};
+
+	subtest recurse => sub {
+		plan tests => 2;
+
+		$options = $self->sut->parse(['-r', 'input.bin', 'output.c']);
+		ok($options->recurse, 'recurse flag is set with -r');
+
+		$options = $self->sut->parse(['input.bin', 'output.c']);
+		ok(!$options->recurse, 'recurse flag is *NOT* set without -r');
+	};
+
+	subtest symbol => sub {
+		plan tests => 1;
+
+		my $symbol = '_u1thKamsstRod4kuG0';
+		$options = $self->sut->parse(["--symbol=$symbol", 'input.bin', 'output.c']);
+		is($options->symbol, $symbol, 'symbol overridden with --symbol');
+	};
+
+	subtest header => sub {
+		plan tests => 1;
+
+		my $header = 'a/b/1a87fa14-c82d-11e9-889c-f23c9173fe51.h';
+		$options = $self->sut->parse(["--header=$header", 'input.bin', 'output.c']);
+		is($options->header, $header, 'symbol overridden with --header');
+	};
+
+	subtest filenames => sub {
+		plan tests => 2;
+
+		is($options->inputFileName, 'input.bin', 'inputFileName set');
+		is($options->outputFileName, 'output.c', 'outputFileName set');
+	};
+
+	return EXIT_SUCCESS;
+}
+
+package main;
+use strict;
+use warnings;
+exit(Raw2CTestSuite->new->run());