fix some of the regression bugs around functions, WIP passing strings to functions

This commit is contained in:
zongor 2026-07-06 23:51:50 -07:00
parent d64f7c86c4
commit b22db9cfd5
7 changed files with 237 additions and 887 deletions

View File

@ -42,6 +42,11 @@ print_help()
#define MEM_SIZE (1 << 18) #define MEM_SIZE (1 << 18)
typedef enum {
UXN,
RER
} EmitterType;
int int
main(int argc, char **argv) main(int argc, char **argv)
{ {
@ -55,11 +60,14 @@ main(int argc, char **argv)
return EXIT_FAILURE; return EXIT_FAILURE;
} }
u8 et;
Emitter e; Emitter e;
if(seq(argv[1], "-emit=rer")) { if(seq(argv[1], "-emit=rer")) {
e = rer_emitter(); e = rer_emitter();
et = RER;
} else if(seq(argv[1], "-emit=uxn")) { } else if(seq(argv[1], "-emit=uxn")) {
e = uxn_emitter(); e = uxn_emitter();
et = UXN;
} else { } else {
printf("unknown emitter type\n"); printf("unknown emitter type\n");
return EXIT_FAILURE; return EXIT_FAILURE;
@ -81,6 +89,13 @@ main(int argc, char **argv)
curr = curr->next; curr = curr->next;
} }
switch(et) {
case UXN:{
printf("\n@mem_length_ #%04x\n@mem_ ", memory->count);
}
default:{}
}
curr = memory->head; curr = memory->head;
while(curr) { while(curr) {
char *tmp_str = node_value(curr); char *tmp_str = node_value(curr);

View File

@ -1,5 +1,6 @@
#include "../../libc.h" #include "../../libc.h"
#include "../../compiler.h" #include "../../compiler.h"
#include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
#include <emscripten.h> #include <emscripten.h>
@ -34,35 +35,57 @@ EMSCRIPTEN_KEEPALIVE
char * char *
undar_compile(int emitter_type, char *source) undar_compile(int emitter_type, char *source)
{ {
typedef enum { UXN, RER } EmitterType;
char uxn_temp_strbuf[32];
u8 tape[MEM_SIZE]; u8 tape[MEM_SIZE];
Arena a = {tape, 0, MEM_SIZE}; Arena a = {tape, 0, MEM_SIZE};
u8 et;
Emitter e; Emitter e;
switch(emitter_type) { switch(emitter_type) {
case 0: case 0:
e = rer_emitter(); e = rer_emitter();
et = RER;
break; break;
case 1: case 1:
e = uxn_emitter(); e = uxn_emitter();
et = UXN;
break; break;
default: default:
return NULL; return NULL;
} }
List *code = List_init(&a); List *code = List_init(&a);
List *msize = List_init(&a);
List *memory = List_init(&a); List *memory = List_init(&a);
compile(&a, code, memory, &e, source); compile(&a, code, memory, &e, source);
switch(et) {
case UXN: {
sprintf(uxn_temp_strbuf, "@mem_length_ #%04x\n @mem_ ", memory->count);
StrBuf_append(&a, msize, uxn_temp_strbuf);
break;
}
default: {
sprintf(uxn_temp_strbuf, "@mem_length_ #%04x\n @mem_ ", memory->count);
StrBuf_append(&a, msize, uxn_temp_strbuf);
break;
}
}
size_t code_size = List_size(code); size_t code_size = List_size(code);
size_t m_size = List_size(msize);
size_t mem_size = List_size(memory); size_t mem_size = List_size(memory);
size_t total_size = code_size + mem_size + 1; size_t total_size = code_size + m_size + mem_size + 1;
char *result = (char *)malloc(total_size); char *result = (char *)malloc(total_size);
if(result == NULL) return NULL; if(result == NULL) return NULL;
size_t offset = 0; size_t offset = 0;
list2buffer(code, result, &offset); list2buffer(code, result, &offset);
list2buffer(msize, result, &offset);
list2buffer(memory, result, &offset); list2buffer(memory, result, &offset);
result[offset] = '\0'; result[offset] = '\0';

View File

@ -120,6 +120,14 @@ is_type(void)
parser->previous.type <= TOKEN_TYPE_PTR; parser->previous.type <= TOKEN_TYPE_PTR;
} }
bool
is_current_type(void)
{
return parser->current.type >= TOKEN_TYPE_I8 &&
parser->current.type <= TOKEN_TYPE_PTR;
}
SymbolType SymbolType
token_type_to_sym_type(TokenType t) token_type_to_sym_type(TokenType t)
{ {
@ -238,18 +246,20 @@ define_function(void)
scope_new(); scope_new();
expect(TOKEN_LPAREN); expect(TOKEN_LPAREN);
advance();
/* parse the args */ /* parse the args */
while(!match(TOKEN_RPAREN)) { while(!check(TOKEN_RPAREN)) {
advance();
size += variable_declaration(fn); size += variable_declaration(fn);
if(match(TOKEN_RPAREN)) break; if(check(TOKEN_RPAREN)) break;
expect(TOKEN_COMMA);
} }
advance();
if(is_type()) { if(is_current_type()) {
/* get return slot */ /* get return slot */
fn->secondary_type = token_type_to_sym_type(parser->previous.type); fn->secondary_type = token_type_to_sym_type(parser->current.type);
/* now parse the fn body */ advance();
} }
expect(TOKEN_LBRACE); expect(TOKEN_LBRACE);
@ -574,9 +584,9 @@ variable(void)
Symbol *sym = scope_get_symbol(parser->current_scope, parser->previous.start, Symbol *sym = scope_get_symbol(parser->current_scope, parser->previous.start,
parser->previous.length); parser->previous.length);
if(sym == nil) { if(sym == nil) {
return;
emitter->error(parser->previous.start, parser->previous.length, emitter->error(parser->previous.start, parser->previous.length,
parser->previous.line); parser->previous.line);
return;
} }
if(sym->type == SYMBOL_FUNCTION) { if(sym->type == SYMBOL_FUNCTION) {
@ -833,7 +843,9 @@ while_statement(void)
void void
block(void) block(void)
{ {
while(!check(TOKEN_RBRACE) && !check(TOKEN_EOF)) declaration(); while(!check(TOKEN_RBRACE) && !check(TOKEN_EOF)) {
declaration();
}
consume(TOKEN_RBRACE); consume(TOKEN_RBRACE);
} }
@ -847,7 +859,8 @@ function(void)
scope_push(); scope_push();
while(!check(TOKEN_RPAREN)) advance(); while(!check(TOKEN_RPAREN)) advance();
consume(TOKEN_RPAREN); consume(TOKEN_RPAREN);
consume(TOKEN_LBRACE); if (is_current_type()) advance();
expect(TOKEN_LBRACE);
block(); block();
emitter->emit_arena_fn_return(arena, code); emitter->emit_arena_fn_return(arena, code);
} }

View File

@ -46,526 +46,136 @@ enum uxn_opcode {
JMI = 0x40, JMI = 0x40,
JSI = 0x60, JSI = 0x60,
}; };
char emit_uxn_lib_undar_tal[] = { char emit_uxn_lib_undar_tal[] = {
0x40, 0x73, 0x65, 0x78, 0x74, 0x0a, 0x20, 0x20, 0x23, 0x38, 0x30, 0x20, 0x40, 0x73, 0x65, 0x78, 0x74, 0x0a, 0x20, 0x20, 0x23, 0x38, 0x30, 0x20,
0x41, 0x4e, 0x44, 0x6b, 0x20, 0x45, 0x51, 0x55, 0x20, 0x23, 0x66, 0x66, 0x41, 0x4e, 0x44, 0x6b, 0x20, 0x45, 0x51, 0x55, 0x20, 0x23, 0x66, 0x66,
0x20, 0x4d, 0x55, 0x4c, 0x20, 0x53, 0x57, 0x50, 0x20, 0x4a, 0x4d, 0x50, 0x20, 0x4d, 0x55, 0x4c, 0x20, 0x53, 0x57, 0x50, 0x20, 0x4a, 0x4d, 0x50,
0x32, 0x72, 0x0a, 0x40, 0x73, 0x64, 0x69, 0x76, 0x0a, 0x20, 0x20, 0x20, 0x32, 0x72, 0x0a, 0x0a, 0x40, 0x61, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x5f,
0x20, 0x4f, 0x56, 0x52, 0x20, 0x23, 0x38, 0x30, 0x20, 0x41, 0x4e, 0x44, 0x20, 0x28, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x2a, 0x20, 0x2d, 0x2d, 0x20,
0x20, 0x3f, 0x26, 0x62, 0x5f, 0x6e, 0x65, 0x67, 0x20, 0x20, 0x26, 0x62, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2a, 0x20, 0x29, 0x0a, 0x20, 0x20,
0x5f, 0x70, 0x6f, 0x73, 0x20, 0x20, 0x20, 0x20, 0x4f, 0x56, 0x52, 0x32, 0x20, 0x20, 0x4f, 0x56, 0x52, 0x32, 0x72, 0x20, 0x4c, 0x49, 0x54, 0x32,
0x20, 0x50, 0x4f, 0x50, 0x20, 0x23, 0x38, 0x30, 0x20, 0x41, 0x4e, 0x44, 0x72, 0x20, 0x30, 0x30, 0x30, 0x34, 0x20, 0x53, 0x55, 0x42, 0x32, 0x72,
0x20, 0x3f, 0x26, 0x61, 0x5f, 0x6e, 0x65, 0x67, 0x5f, 0x62, 0x5f, 0x70, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x49, 0x4e, 0x43, 0x32,
0x6f, 0x73, 0x20, 0x20, 0x20, 0x20, 0x44, 0x49, 0x56, 0x32, 0x20, 0x4a, 0x20, 0x49, 0x4e, 0x43, 0x32, 0x20, 0x53, 0x54, 0x41, 0x32, 0x0a, 0x20,
0x4d, 0x50, 0x32, 0x72, 0x20, 0x20, 0x26, 0x61, 0x5f, 0x6e, 0x65, 0x67, 0x20, 0x20, 0x20, 0x3b, 0x6d, 0x65, 0x6d, 0x5f, 0x6c, 0x65, 0x6e, 0x67,
0x5f, 0x62, 0x5f, 0x70, 0x6f, 0x73, 0x20, 0x20, 0x20, 0x20, 0x53, 0x57, 0x74, 0x68, 0x5f, 0x20, 0x4c, 0x44, 0x41, 0x32, 0x20, 0x53, 0x54, 0x48,
0x50, 0x32, 0x20, 0x23, 0x30, 0x30, 0x30, 0x30, 0x20, 0x53, 0x57, 0x50, 0x32, 0x6b, 0x72, 0x20, 0x53, 0x54, 0x41, 0x32, 0x0a, 0x20, 0x20, 0x20,
0x32, 0x20, 0x53, 0x55, 0x42, 0x32, 0x20, 0x53, 0x57, 0x50, 0x32, 0x20, 0x20, 0x3b, 0x6d, 0x65, 0x6d, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68,
0x44, 0x49, 0x56, 0x32, 0x20, 0x23, 0x30, 0x30, 0x30, 0x30, 0x20, 0x53, 0x5f, 0x20, 0x4c, 0x44, 0x41, 0x32, 0x6b, 0x20, 0x53, 0x54, 0x48, 0x32,
0x57, 0x50, 0x32, 0x20, 0x53, 0x55, 0x42, 0x32, 0x20, 0x4a, 0x4d, 0x50, 0x6b, 0x72, 0x20, 0x49, 0x4e, 0x43, 0x32, 0x20, 0x49, 0x4e, 0x43, 0x32,
0x32, 0x72, 0x0a, 0x20, 0x20, 0x26, 0x62, 0x5f, 0x6e, 0x65, 0x67, 0x20, 0x20, 0x4c, 0x44, 0x41, 0x32, 0x20, 0x41, 0x44, 0x44, 0x32, 0x20, 0x53,
0x20, 0x20, 0x20, 0x23, 0x30, 0x30, 0x30, 0x30, 0x20, 0x53, 0x57, 0x50, 0x57, 0x50, 0x32, 0x20, 0x53, 0x54, 0x41, 0x32, 0x0a, 0x20, 0x20, 0x20,
0x32, 0x20, 0x53, 0x55, 0x42, 0x32, 0x20, 0x4f, 0x56, 0x52, 0x32, 0x20, 0x20, 0x3b, 0x6d, 0x65, 0x6d, 0x5f, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b,
0x50, 0x4f, 0x50, 0x20, 0x23, 0x38, 0x30, 0x20, 0x41, 0x4e, 0x44, 0x20, 0x72, 0x20, 0x4c, 0x44, 0x41, 0x32, 0x20, 0x41, 0x44, 0x44, 0x32, 0x20,
0x3f, 0x26, 0x61, 0x5f, 0x6e, 0x65, 0x67, 0x5f, 0x62, 0x5f, 0x6e, 0x65, 0x21, 0x26, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x0a, 0x20, 0x20, 0x20,
0x67, 0x20, 0x20, 0x20, 0x20, 0x44, 0x49, 0x56, 0x32, 0x20, 0x23, 0x30, 0x20, 0x23, 0x30, 0x30, 0x30, 0x30, 0x0a, 0x0a, 0x20, 0x20, 0x26, 0x72,
0x30, 0x30, 0x30, 0x20, 0x53, 0x57, 0x50, 0x32, 0x20, 0x53, 0x55, 0x42, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x50, 0x4f,
0x32, 0x20, 0x4a, 0x4d, 0x50, 0x32, 0x72, 0x0a, 0x20, 0x20, 0x26, 0x61, 0x50, 0x32, 0x72, 0x20, 0x4a, 0x4d, 0x50, 0x32, 0x72, 0x0a, 0x0a, 0x40,
0x5f, 0x6e, 0x65, 0x67, 0x5f, 0x62, 0x5f, 0x6e, 0x65, 0x67, 0x20, 0x20, 0x61, 0x66, 0x72, 0x65, 0x65, 0x5f, 0x20, 0x28, 0x20, 0x2d, 0x2d, 0x20,
0x20, 0x20, 0x23, 0x30, 0x30, 0x30, 0x30, 0x20, 0x52, 0x4f, 0x54, 0x32, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2a, 0x20, 0x29, 0x0a, 0x20, 0x20,
0x20, 0x53, 0x55, 0x42, 0x32, 0x20, 0x53, 0x57, 0x50, 0x32, 0x20, 0x44, 0x20, 0x20, 0x4f, 0x56, 0x52, 0x32, 0x72, 0x20, 0x23, 0x30, 0x30, 0x30,
0x49, 0x56, 0x32, 0x20, 0x4a, 0x4d, 0x50, 0x32, 0x72, 0x0a, 0x0a, 0x40, 0x30, 0x20, 0x3b, 0x6d, 0x65, 0x6d, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74,
0x61, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x5f, 0x20, 0x28, 0x20, 0x73, 0x69, 0x68, 0x5f, 0x20, 0x53, 0x54, 0x41, 0x32, 0x0a, 0x20, 0x20, 0x20, 0x20,
0x7a, 0x65, 0x2a, 0x20, 0x2d, 0x2d, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x23, 0x30, 0x30, 0x30, 0x30, 0x0a, 0x0a, 0x20, 0x20, 0x26, 0x72, 0x65,
0x74, 0x2a, 0x20, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x4f, 0x56, 0x52, 0x74, 0x75, 0x72, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x50, 0x4f, 0x50,
0x32, 0x72, 0x20, 0x4c, 0x49, 0x54, 0x32, 0x72, 0x20, 0x30, 0x30, 0x30, 0x32, 0x72, 0x20, 0x4a, 0x4d, 0x50, 0x32, 0x72, 0x0a, 0x0a, 0x40, 0x61,
0x34, 0x20, 0x53, 0x55, 0x42, 0x32, 0x72, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6d, 0x63, 0x70, 0x79, 0x5f, 0x20, 0x28, 0x20, 0x6c, 0x65, 0x6e, 0x67,
0x6b, 0x72, 0x20, 0x49, 0x4e, 0x43, 0x32, 0x20, 0x49, 0x4e, 0x43, 0x32, 0x74, 0x68, 0x2a, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x2a, 0x20, 0x2d, 0x2d,
0x20, 0x53, 0x54, 0x41, 0x32, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x3b, 0x6d, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2a, 0x20, 0x29, 0x0a, 0x20,
0x65, 0x6d, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x5f, 0x20, 0x4c, 0x20, 0x20, 0x20, 0x4f, 0x56, 0x52, 0x32, 0x72, 0x20, 0x4c, 0x49, 0x54,
0x44, 0x41, 0x32, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x53, 0x32, 0x72, 0x20, 0x30, 0x30, 0x30, 0x38, 0x20, 0x53, 0x55, 0x42, 0x32,
0x54, 0x41, 0x32, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x3b, 0x6d, 0x65, 0x6d, 0x72, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x23, 0x30, 0x30,
0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x5f, 0x20, 0x4c, 0x44, 0x41, 0x30, 0x36, 0x20, 0x41, 0x44, 0x44, 0x32, 0x20, 0x53, 0x54, 0x41, 0x32,
0x32, 0x6b, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x49, 0x4e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20,
0x43, 0x32, 0x20, 0x49, 0x4e, 0x43, 0x32, 0x20, 0x4c, 0x44, 0x41, 0x32, 0x23, 0x30, 0x30, 0x30, 0x34, 0x20, 0x41, 0x44, 0x44, 0x32, 0x20, 0x53,
0x20, 0x41, 0x44, 0x44, 0x32, 0x20, 0x53, 0x57, 0x50, 0x32, 0x20, 0x53, 0x54, 0x41, 0x32, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x53, 0x54, 0x48, 0x32,
0x54, 0x41, 0x32, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x3b, 0x6d, 0x65, 0x6d, 0x6b, 0x72, 0x20, 0x23, 0x30, 0x30, 0x30, 0x34, 0x20, 0x41, 0x44, 0x44,
0x5f, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x4c, 0x44, 0x41, 0x32, 0x20, 0x4c, 0x44, 0x41, 0x32, 0x20, 0x61, 0x61, 0x6c, 0x6c, 0x6f,
0x32, 0x20, 0x41, 0x44, 0x44, 0x32, 0x20, 0x21, 0x26, 0x72, 0x65, 0x74, 0x63, 0x5f, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b,
0x75, 0x72, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x23, 0x30, 0x30, 0x30, 0x72, 0x20, 0x49, 0x4e, 0x43, 0x32, 0x20, 0x49, 0x4e, 0x43, 0x32, 0x20,
0x30, 0x0a, 0x0a, 0x20, 0x20, 0x26, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x53, 0x54, 0x41, 0x32, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x23, 0x30, 0x30,
0x0a, 0x20, 0x20, 0x20, 0x20, 0x50, 0x4f, 0x50, 0x32, 0x72, 0x20, 0x4a, 0x30, 0x30, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x53, 0x54,
0x4d, 0x50, 0x32, 0x72, 0x0a, 0x0a, 0x40, 0x61, 0x72, 0x65, 0x74, 0x75, 0x41, 0x32, 0x0a, 0x0a, 0x20, 0x20, 0x26, 0x62, 0x65, 0x67, 0x69, 0x6e,
0x72, 0x6e, 0x5f, 0x20, 0x28, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x2a, 0x20, 0x2e, 0x31, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b,
0x73, 0x72, 0x63, 0x2a, 0x20, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x72, 0x20, 0x4c, 0x44, 0x41, 0x32, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b,
0x69, 0x6e, 0x74, 0x2a, 0x20, 0x2d, 0x2d, 0x20, 0x72, 0x65, 0x73, 0x75, 0x72, 0x20, 0x23, 0x30, 0x30, 0x30, 0x34, 0x20, 0x41, 0x44, 0x44, 0x32,
0x6c, 0x74, 0x2a, 0x20, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x4f, 0x56, 0x20, 0x4c, 0x44, 0x41, 0x32, 0x20, 0x4c, 0x54, 0x48, 0x32, 0x20, 0x23,
0x52, 0x32, 0x72, 0x20, 0x4c, 0x49, 0x54, 0x32, 0x72, 0x20, 0x30, 0x30, 0x30, 0x30, 0x20, 0x45, 0x51, 0x55, 0x20, 0x3f, 0x26, 0x62, 0x72, 0x65,
0x30, 0x61, 0x20, 0x53, 0x55, 0x42, 0x32, 0x72, 0x20, 0x53, 0x54, 0x48, 0x61, 0x6b, 0x2e, 0x31, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x53, 0x54, 0x48,
0x32, 0x6b, 0x72, 0x20, 0x23, 0x30, 0x30, 0x30, 0x38, 0x20, 0x41, 0x44, 0x32, 0x6b, 0x72, 0x20, 0x23, 0x30, 0x30, 0x30, 0x36, 0x20, 0x41, 0x44,
0x44, 0x32, 0x20, 0x53, 0x54, 0x41, 0x32, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x44, 0x32, 0x20, 0x4c, 0x44, 0x41, 0x32, 0x20, 0x53, 0x54, 0x48, 0x32,
0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x23, 0x30, 0x30, 0x30, 0x36, 0x6b, 0x72, 0x20, 0x4c, 0x44, 0x41, 0x32, 0x20, 0x41, 0x44, 0x44, 0x32,
0x20, 0x41, 0x44, 0x44, 0x32, 0x20, 0x53, 0x54, 0x41, 0x32, 0x0a, 0x20, 0x20, 0x4c, 0x44, 0x41, 0x20, 0x73, 0x65, 0x78, 0x74, 0x0a, 0x20, 0x20,
0x20, 0x20, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x23, 0x30, 0x20, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x49, 0x4e, 0x43,
0x30, 0x30, 0x34, 0x20, 0x41, 0x44, 0x44, 0x32, 0x20, 0x53, 0x54, 0x41, 0x32, 0x20, 0x49, 0x4e, 0x43, 0x32, 0x20, 0x4c, 0x44, 0x41, 0x32, 0x20,
0x32, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x3b, 0x6d, 0x65, 0x6d, 0x5f, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x4c, 0x44, 0x41, 0x32, 0x20,
0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x23, 0x30, 0x30, 0x30, 0x38, 0x41, 0x44, 0x44, 0x32, 0x20, 0x53, 0x54, 0x41, 0x0a, 0x20, 0x20, 0x20,
0x20, 0x41, 0x44, 0x44, 0x32, 0x20, 0x4c, 0x44, 0x41, 0x32, 0x20, 0x41, 0x20, 0x50, 0x4f, 0x50, 0x0a, 0x0a, 0x20, 0x20, 0x26, 0x63, 0x6f, 0x6e,
0x44, 0x44, 0x32, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x49, 0x74, 0x69, 0x6e, 0x75, 0x65, 0x2e, 0x31, 0x0a, 0x20, 0x20, 0x20, 0x20,
0x4e, 0x43, 0x32, 0x20, 0x49, 0x4e, 0x43, 0x32, 0x20, 0x53, 0x54, 0x41, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x4c, 0x44, 0x41, 0x32, 0x6b,
0x32, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x49, 0x4e, 0x43, 0x32, 0x6b, 0x20, 0x52, 0x4f, 0x54, 0x32, 0x20,
0x20, 0x23, 0x30, 0x30, 0x30, 0x36, 0x20, 0x41, 0x44, 0x44, 0x32, 0x20, 0x53, 0x54, 0x41, 0x32, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x50, 0x4f, 0x50,
0x4c, 0x44, 0x41, 0x32, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x32, 0x20, 0x21, 0x26, 0x62, 0x65, 0x67, 0x69, 0x6e, 0x2e, 0x31, 0x0a,
0x49, 0x4e, 0x43, 0x32, 0x20, 0x49, 0x4e, 0x43, 0x32, 0x20, 0x4c, 0x44, 0x0a, 0x20, 0x20, 0x26, 0x62, 0x72, 0x65, 0x61, 0x6b, 0x2e, 0x31, 0x0a,
0x41, 0x32, 0x20, 0x4e, 0x45, 0x51, 0x32, 0x20, 0x3f, 0x26, 0x65, 0x6e, 0x20, 0x20, 0x20, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x49,
0x64, 0x2e, 0x31, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x53, 0x54, 0x48, 0x32, 0x4e, 0x43, 0x32, 0x20, 0x49, 0x4e, 0x43, 0x32, 0x20, 0x4c, 0x44, 0x41,
0x6b, 0x72, 0x20, 0x23, 0x30, 0x30, 0x30, 0x36, 0x20, 0x41, 0x44, 0x44, 0x32, 0x20, 0x21, 0x26, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x0a, 0x20,
0x32, 0x20, 0x4c, 0x44, 0x41, 0x32, 0x20, 0x21, 0x26, 0x72, 0x65, 0x74, 0x20, 0x20, 0x20, 0x23, 0x30, 0x30, 0x30, 0x30, 0x0a, 0x0a, 0x20, 0x20,
0x75, 0x72, 0x6e, 0x0a, 0x0a, 0x20, 0x20, 0x26, 0x65, 0x6e, 0x64, 0x2e, 0x26, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20,
0x31, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x23, 0x30, 0x30, 0x30, 0x30, 0x20, 0x50, 0x4f, 0x50, 0x32, 0x72, 0x20, 0x4a, 0x4d, 0x50, 0x32, 0x72, 0x0a,
0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x53, 0x54, 0x41, 0x32, 0x0a, 0x0a, 0x40, 0x6e, 0x61, 0x74, 0x5f, 0x74, 0x6f, 0x5f, 0x73, 0x74, 0x72,
0x0a, 0x20, 0x20, 0x26, 0x62, 0x65, 0x67, 0x69, 0x6e, 0x2e, 0x32, 0x0a, 0x5f, 0x20, 0x28, 0x20, 0x6e, 0x2a, 0x20, 0x2d, 0x2d, 0x20, 0x72, 0x65,
0x20, 0x20, 0x20, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x4c, 0x73, 0x75, 0x6c, 0x74, 0x2a, 0x20, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20,
0x44, 0x41, 0x32, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x23, 0x4f, 0x56, 0x52, 0x32, 0x72, 0x20, 0x4c, 0x49, 0x54, 0x32, 0x72, 0x20,
0x30, 0x30, 0x30, 0x34, 0x20, 0x41, 0x44, 0x44, 0x32, 0x20, 0x4c, 0x44, 0x30, 0x30, 0x30, 0x61, 0x20, 0x53, 0x55, 0x42, 0x32, 0x72, 0x20, 0x53,
0x41, 0x32, 0x20, 0x4c, 0x54, 0x48, 0x32, 0x20, 0x23, 0x30, 0x30, 0x20, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x23, 0x30, 0x30, 0x30, 0x38, 0x20,
0x45, 0x51, 0x55, 0x20, 0x3f, 0x26, 0x62, 0x72, 0x65, 0x61, 0x6b, 0x2e, 0x41, 0x44, 0x44, 0x32, 0x20, 0x53, 0x54, 0x41, 0x32, 0x0a, 0x20, 0x20,
0x32, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x20, 0x23, 0x30, 0x30, 0x30, 0x35, 0x20, 0x53, 0x54, 0x48, 0x32,
0x20, 0x23, 0x30, 0x30, 0x30, 0x36, 0x20, 0x41, 0x44, 0x44, 0x32, 0x20, 0x6b, 0x72, 0x20, 0x53, 0x54, 0x41, 0x32, 0x0a, 0x0a, 0x20, 0x20, 0x26,
0x4c, 0x44, 0x41, 0x32, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x62, 0x65, 0x67, 0x69, 0x6e, 0x2e, 0x31, 0x0a, 0x20, 0x20, 0x20, 0x20,
0x4c, 0x44, 0x41, 0x32, 0x20, 0x41, 0x44, 0x44, 0x32, 0x20, 0x4c, 0x44, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x23, 0x30, 0x30, 0x30, 0x38,
0x41, 0x20, 0x73, 0x65, 0x78, 0x74, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x53, 0x20, 0x41, 0x44, 0x44, 0x32, 0x20, 0x4c, 0x44, 0x41, 0x32, 0x20, 0x23,
0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x49, 0x4e, 0x43, 0x32, 0x20, 0x49, 0x30, 0x30, 0x30, 0x61, 0x20, 0x4f, 0x56, 0x52, 0x32, 0x20, 0x4f, 0x56,
0x4e, 0x43, 0x32, 0x20, 0x4c, 0x44, 0x41, 0x32, 0x20, 0x53, 0x54, 0x48, 0x52, 0x32, 0x20, 0x44, 0x49, 0x56, 0x32, 0x20, 0x4d, 0x55, 0x4c, 0x32,
0x32, 0x6b, 0x72, 0x20, 0x4c, 0x44, 0x41, 0x32, 0x20, 0x41, 0x44, 0x44, 0x20, 0x53, 0x55, 0x42, 0x32, 0x20, 0x23, 0x30, 0x30, 0x33, 0x30, 0x20,
0x32, 0x20, 0x53, 0x54, 0x41, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x50, 0x4f, 0x41, 0x44, 0x44, 0x32, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20,
0x50, 0x0a, 0x0a, 0x20, 0x20, 0x26, 0x63, 0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x49, 0x4e, 0x43, 0x32, 0x20, 0x49, 0x4e, 0x43, 0x32, 0x20, 0x53, 0x54,
0x75, 0x65, 0x2e, 0x32, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x53, 0x54, 0x48, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x4c, 0x44, 0x41, 0x32, 0x6b, 0x20, 0x23,
0x32, 0x6b, 0x72, 0x20, 0x4c, 0x44, 0x41, 0x32, 0x6b, 0x20, 0x49, 0x4e, 0x30, 0x30, 0x30, 0x31, 0x20, 0x53, 0x55, 0x42, 0x32, 0x20, 0x53, 0x57,
0x43, 0x32, 0x6b, 0x20, 0x52, 0x4f, 0x54, 0x32, 0x20, 0x53, 0x54, 0x41, 0x50, 0x32, 0x20, 0x53, 0x54, 0x41, 0x32, 0x6b, 0x0a, 0x20, 0x20, 0x20,
0x32, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x50, 0x4f, 0x50, 0x32, 0x20, 0x21, 0x20, 0x50, 0x4f, 0x50, 0x32, 0x20, 0x41, 0x44, 0x44, 0x32, 0x20, 0x53,
0x26, 0x62, 0x65, 0x67, 0x69, 0x6e, 0x2e, 0x32, 0x0a, 0x0a, 0x20, 0x20, 0x54, 0x41, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x50, 0x4f, 0x50, 0x20, 0x53,
0x26, 0x62, 0x72, 0x65, 0x61, 0x6b, 0x2e, 0x32, 0x0a, 0x20, 0x20, 0x20, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x23, 0x30, 0x30, 0x30, 0x38, 0x20,
0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x23, 0x30, 0x30, 0x30, 0x41, 0x44, 0x44, 0x32, 0x20, 0x4c, 0x44, 0x41, 0x32, 0x6b, 0x20, 0x23,
0x38, 0x20, 0x41, 0x44, 0x44, 0x32, 0x20, 0x4c, 0x44, 0x41, 0x32, 0x20, 0x30, 0x30, 0x30, 0x61, 0x20, 0x44, 0x49, 0x56, 0x32, 0x20, 0x53, 0x57,
0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x23, 0x30, 0x30, 0x30, 0x34, 0x50, 0x32, 0x20, 0x53, 0x54, 0x41, 0x32, 0x0a, 0x0a, 0x20, 0x20, 0x26,
0x20, 0x41, 0x44, 0x44, 0x32, 0x20, 0x4c, 0x44, 0x41, 0x32, 0x20, 0x41, 0x63, 0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x75, 0x65, 0x2e, 0x31, 0x0a, 0x20,
0x44, 0x44, 0x32, 0x20, 0x3b, 0x6d, 0x65, 0x6d, 0x5f, 0x6c, 0x65, 0x6e, 0x20, 0x20, 0x20, 0x23, 0x30, 0x30, 0x30, 0x30, 0x20, 0x53, 0x54, 0x48,
0x67, 0x74, 0x68, 0x5f, 0x20, 0x53, 0x54, 0x41, 0x32, 0x0a, 0x20, 0x20, 0x32, 0x6b, 0x72, 0x20, 0x23, 0x30, 0x30, 0x30, 0x38, 0x20, 0x41, 0x44,
0x20, 0x20, 0x23, 0x30, 0x30, 0x30, 0x30, 0x20, 0x3b, 0x6d, 0x65, 0x6d, 0x44, 0x32, 0x20, 0x4c, 0x44, 0x41, 0x32, 0x20, 0x4c, 0x54, 0x48, 0x32,
0x5f, 0x20, 0x3b, 0x6d, 0x65, 0x6d, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x20, 0x3f, 0x26, 0x62, 0x65, 0x67, 0x69, 0x6e, 0x2e, 0x31, 0x0a, 0x0a,
0x68, 0x5f, 0x20, 0x4c, 0x44, 0x41, 0x32, 0x20, 0x41, 0x44, 0x44, 0x32, 0x20, 0x20, 0x26, 0x62, 0x72, 0x65, 0x61, 0x6b, 0x2e, 0x31, 0x0a, 0x20,
0x20, 0x53, 0x54, 0x41, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x50, 0x4f, 0x50, 0x20, 0x20, 0x20, 0x23, 0x30, 0x30, 0x30, 0x35, 0x20, 0x53, 0x54, 0x48,
0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x49, 0x4e, 0x43, 0x32, 0x32, 0x6b, 0x72, 0x20, 0x4c, 0x44, 0x41, 0x32, 0x20, 0x53, 0x55, 0x42,
0x20, 0x49, 0x4e, 0x43, 0x32, 0x20, 0x4c, 0x44, 0x41, 0x32, 0x20, 0x21, 0x32, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x49, 0x4e, 0x43,
0x26, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x32, 0x20, 0x49, 0x4e, 0x43, 0x32, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b,
0x23, 0x30, 0x30, 0x30, 0x30, 0x0a, 0x0a, 0x20, 0x20, 0x26, 0x72, 0x65, 0x72, 0x20, 0x4c, 0x44, 0x41, 0x32, 0x20, 0x41, 0x44, 0x44, 0x32, 0x20,
0x74, 0x75, 0x72, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x50, 0x4f, 0x50, 0x61, 0x6d, 0x63, 0x70, 0x79, 0x5f, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x21,
0x32, 0x72, 0x20, 0x4a, 0x4d, 0x50, 0x32, 0x72, 0x0a, 0x0a, 0x40, 0x61, 0x26, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20,
0x66, 0x72, 0x65, 0x65, 0x5f, 0x20, 0x28, 0x20, 0x2d, 0x2d, 0x20, 0x72, 0x23, 0x30, 0x30, 0x30, 0x30, 0x0a, 0x0a, 0x20, 0x20, 0x26, 0x72, 0x65,
0x65, 0x73, 0x75, 0x6c, 0x74, 0x2a, 0x20, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x74, 0x75, 0x72, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x50, 0x4f, 0x50,
0x20, 0x4f, 0x56, 0x52, 0x32, 0x72, 0x20, 0x23, 0x30, 0x30, 0x30, 0x30, 0x32, 0x72, 0x20, 0x4a, 0x4d, 0x50, 0x32, 0x72, 0x0a, 0x20, 0x20, 0x20,
0x20, 0x3b, 0x6d, 0x65, 0x6d, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x20, 0x0a, 0x40, 0x73, 0x74, 0x72, 0x2f, 0x3c, 0x70, 0x72, 0x69, 0x6e,
0x5f, 0x20, 0x53, 0x54, 0x41, 0x32, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x23, 0x74, 0x3e, 0x20, 0x28, 0x20, 0x73, 0x74, 0x72, 0x2a, 0x20, 0x2d, 0x2d,
0x30, 0x30, 0x30, 0x30, 0x0a, 0x0a, 0x20, 0x20, 0x26, 0x72, 0x65, 0x74, 0x20, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x4c, 0x44, 0x41, 0x6b, 0x20,
0x75, 0x72, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x50, 0x4f, 0x50, 0x32, 0x44, 0x55, 0x50, 0x20, 0x3f, 0x7b, 0x20, 0x50, 0x4f, 0x50, 0x20, 0x50,
0x72, 0x20, 0x4a, 0x4d, 0x50, 0x32, 0x72, 0x0a, 0x0a, 0x40, 0x61, 0x6d, 0x4f, 0x50, 0x32, 0x20, 0x4a, 0x4d, 0x50, 0x32, 0x72, 0x20, 0x7d, 0x0a,
0x63, 0x70, 0x79, 0x5f, 0x20, 0x28, 0x20, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x20, 0x20, 0x20, 0x20, 0x23, 0x31, 0x38, 0x20, 0x44, 0x45, 0x4f, 0x0a,
0x68, 0x2a, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x2a, 0x20, 0x2d, 0x2d, 0x20, 0x20, 0x20, 0x20, 0x20, 0x49, 0x4e, 0x43, 0x32, 0x20, 0x21, 0x2f, 0x3c,
0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2a, 0x20, 0x29, 0x0a, 0x20, 0x20, 0x70, 0x72, 0x69, 0x6e, 0x74, 0x3e, 0x0a
0x20, 0x20, 0x4f, 0x56, 0x52, 0x32, 0x72, 0x20, 0x4c, 0x49, 0x54, 0x32, };
0x72, 0x20, 0x30, 0x30, 0x30, 0x38, 0x20, 0x53, 0x55, 0x42, 0x32, 0x72, unsigned int emit_uxn_lib_undar_tal_len = 1507;
0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x23, 0x30, 0x30, 0x30,
0x36, 0x20, 0x41, 0x44, 0x44, 0x32, 0x20, 0x53, 0x54, 0x41, 0x32, 0x0a,
0x20, 0x20, 0x20, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x23,
0x30, 0x30, 0x30, 0x34, 0x20, 0x41, 0x44, 0x44, 0x32, 0x20, 0x53, 0x54,
0x41, 0x32, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b,
0x72, 0x20, 0x23, 0x30, 0x30, 0x30, 0x34, 0x20, 0x41, 0x44, 0x44, 0x32,
0x20, 0x4c, 0x44, 0x41, 0x32, 0x20, 0x61, 0x61, 0x6c, 0x6c, 0x6f, 0x63,
0x5f, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72,
0x20, 0x49, 0x4e, 0x43, 0x32, 0x20, 0x49, 0x4e, 0x43, 0x32, 0x20, 0x53,
0x54, 0x41, 0x32, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x23, 0x30, 0x30, 0x30,
0x30, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x53, 0x54, 0x41,
0x32, 0x0a, 0x0a, 0x20, 0x20, 0x26, 0x62, 0x65, 0x67, 0x69, 0x6e, 0x2e,
0x31, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72,
0x20, 0x4c, 0x44, 0x41, 0x32, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72,
0x20, 0x23, 0x30, 0x30, 0x30, 0x34, 0x20, 0x41, 0x44, 0x44, 0x32, 0x20,
0x4c, 0x44, 0x41, 0x32, 0x20, 0x4c, 0x54, 0x48, 0x32, 0x20, 0x23, 0x30,
0x30, 0x20, 0x45, 0x51, 0x55, 0x20, 0x3f, 0x26, 0x62, 0x72, 0x65, 0x61,
0x6b, 0x2e, 0x31, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x53, 0x54, 0x48, 0x32,
0x6b, 0x72, 0x20, 0x23, 0x30, 0x30, 0x30, 0x36, 0x20, 0x41, 0x44, 0x44,
0x32, 0x20, 0x4c, 0x44, 0x41, 0x32, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b,
0x72, 0x20, 0x4c, 0x44, 0x41, 0x32, 0x20, 0x41, 0x44, 0x44, 0x32, 0x20,
0x4c, 0x44, 0x41, 0x20, 0x73, 0x65, 0x78, 0x74, 0x0a, 0x20, 0x20, 0x20,
0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x49, 0x4e, 0x43, 0x32,
0x20, 0x49, 0x4e, 0x43, 0x32, 0x20, 0x4c, 0x44, 0x41, 0x32, 0x20, 0x53,
0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x4c, 0x44, 0x41, 0x32, 0x20, 0x41,
0x44, 0x44, 0x32, 0x20, 0x53, 0x54, 0x41, 0x0a, 0x20, 0x20, 0x20, 0x20,
0x50, 0x4f, 0x50, 0x0a, 0x0a, 0x20, 0x20, 0x26, 0x63, 0x6f, 0x6e, 0x74,
0x69, 0x6e, 0x75, 0x65, 0x2e, 0x31, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x53,
0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x4c, 0x44, 0x41, 0x32, 0x6b, 0x20,
0x49, 0x4e, 0x43, 0x32, 0x6b, 0x20, 0x52, 0x4f, 0x54, 0x32, 0x20, 0x53,
0x54, 0x41, 0x32, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x50, 0x4f, 0x50, 0x32,
0x20, 0x21, 0x26, 0x62, 0x65, 0x67, 0x69, 0x6e, 0x2e, 0x31, 0x0a, 0x0a,
0x20, 0x20, 0x26, 0x62, 0x72, 0x65, 0x61, 0x6b, 0x2e, 0x31, 0x0a, 0x20,
0x20, 0x20, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x49, 0x4e,
0x43, 0x32, 0x20, 0x49, 0x4e, 0x43, 0x32, 0x20, 0x4c, 0x44, 0x41, 0x32,
0x20, 0x21, 0x26, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x0a, 0x20, 0x20,
0x20, 0x20, 0x23, 0x30, 0x30, 0x30, 0x30, 0x0a, 0x0a, 0x20, 0x20, 0x26,
0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x50,
0x4f, 0x50, 0x32, 0x72, 0x20, 0x4a, 0x4d, 0x50, 0x32, 0x72, 0x0a, 0x0a,
0x40, 0x6e, 0x61, 0x74, 0x5f, 0x74, 0x6f, 0x5f, 0x73, 0x74, 0x72, 0x5f,
0x20, 0x28, 0x20, 0x6e, 0x2a, 0x20, 0x2d, 0x2d, 0x20, 0x72, 0x65, 0x73,
0x75, 0x6c, 0x74, 0x2a, 0x20, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x4f,
0x56, 0x52, 0x32, 0x72, 0x20, 0x4c, 0x49, 0x54, 0x32, 0x72, 0x20, 0x30,
0x30, 0x30, 0x61, 0x20, 0x53, 0x55, 0x42, 0x32, 0x72, 0x20, 0x53, 0x54,
0x48, 0x32, 0x6b, 0x72, 0x20, 0x23, 0x30, 0x30, 0x30, 0x38, 0x20, 0x41,
0x44, 0x44, 0x32, 0x20, 0x53, 0x54, 0x41, 0x32, 0x0a, 0x20, 0x20, 0x20,
0x20, 0x23, 0x30, 0x30, 0x30, 0x35, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b,
0x72, 0x20, 0x53, 0x54, 0x41, 0x32, 0x0a, 0x0a, 0x20, 0x20, 0x26, 0x62,
0x65, 0x67, 0x69, 0x6e, 0x2e, 0x31, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x53,
0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x23, 0x30, 0x30, 0x30, 0x38, 0x20,
0x41, 0x44, 0x44, 0x32, 0x20, 0x4c, 0x44, 0x41, 0x32, 0x20, 0x23, 0x30,
0x30, 0x30, 0x61, 0x20, 0x4f, 0x56, 0x52, 0x32, 0x20, 0x4f, 0x56, 0x52,
0x32, 0x20, 0x44, 0x49, 0x56, 0x32, 0x20, 0x4d, 0x55, 0x4c, 0x32, 0x20,
0x53, 0x55, 0x42, 0x32, 0x20, 0x23, 0x30, 0x30, 0x33, 0x30, 0x20, 0x41,
0x44, 0x44, 0x32, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x49,
0x4e, 0x43, 0x32, 0x20, 0x49, 0x4e, 0x43, 0x32, 0x20, 0x53, 0x54, 0x48,
0x32, 0x6b, 0x72, 0x20, 0x4c, 0x44, 0x41, 0x32, 0x6b, 0x20, 0x23, 0x30,
0x30, 0x30, 0x31, 0x20, 0x53, 0x55, 0x42, 0x32, 0x20, 0x53, 0x57, 0x50,
0x32, 0x20, 0x53, 0x54, 0x41, 0x32, 0x6b, 0x0a, 0x20, 0x20, 0x20, 0x20,
0x50, 0x4f, 0x50, 0x32, 0x20, 0x41, 0x44, 0x44, 0x32, 0x20, 0x53, 0x54,
0x41, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x50, 0x4f, 0x50, 0x20, 0x53, 0x54,
0x48, 0x32, 0x6b, 0x72, 0x20, 0x23, 0x30, 0x30, 0x30, 0x38, 0x20, 0x41,
0x44, 0x44, 0x32, 0x20, 0x4c, 0x44, 0x41, 0x32, 0x6b, 0x20, 0x23, 0x30,
0x30, 0x30, 0x61, 0x20, 0x44, 0x49, 0x56, 0x32, 0x20, 0x53, 0x57, 0x50,
0x32, 0x20, 0x53, 0x54, 0x41, 0x32, 0x0a, 0x0a, 0x20, 0x20, 0x26, 0x63,
0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x75, 0x65, 0x2e, 0x31, 0x0a, 0x20, 0x20,
0x20, 0x20, 0x23, 0x30, 0x30, 0x30, 0x30, 0x20, 0x53, 0x54, 0x48, 0x32,
0x6b, 0x72, 0x20, 0x23, 0x30, 0x30, 0x30, 0x38, 0x20, 0x41, 0x44, 0x44,
0x32, 0x20, 0x4c, 0x44, 0x41, 0x32, 0x20, 0x4c, 0x54, 0x48, 0x32, 0x20,
0x3f, 0x26, 0x62, 0x65, 0x67, 0x69, 0x6e, 0x2e, 0x31, 0x0a, 0x0a, 0x20,
0x20, 0x26, 0x62, 0x72, 0x65, 0x61, 0x6b, 0x2e, 0x31, 0x0a, 0x20, 0x20,
0x20, 0x20, 0x23, 0x30, 0x30, 0x30, 0x35, 0x20, 0x53, 0x54, 0x48, 0x32,
0x6b, 0x72, 0x20, 0x4c, 0x44, 0x41, 0x32, 0x20, 0x53, 0x55, 0x42, 0x32,
0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x49, 0x4e, 0x43, 0x32,
0x20, 0x49, 0x4e, 0x43, 0x32, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72,
0x20, 0x4c, 0x44, 0x41, 0x32, 0x20, 0x41, 0x44, 0x44, 0x32, 0x20, 0x61,
0x6d, 0x63, 0x70, 0x79, 0x5f, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x21, 0x26,
0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x23,
0x30, 0x30, 0x30, 0x30, 0x0a, 0x0a, 0x20, 0x20, 0x26, 0x72, 0x65, 0x74,
0x75, 0x72, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x50, 0x4f, 0x50, 0x32,
0x72, 0x20, 0x4a, 0x4d, 0x50, 0x32, 0x72, 0x0a, 0x0a, 0x40, 0x69, 0x6e,
0x74, 0x5f, 0x74, 0x6f, 0x5f, 0x73, 0x74, 0x72, 0x5f, 0x20, 0x28, 0x20,
0x6e, 0x2a, 0x20, 0x2d, 0x2d, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74,
0x2a, 0x20, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x4f, 0x56, 0x52, 0x32,
0x72, 0x20, 0x4c, 0x49, 0x54, 0x32, 0x72, 0x20, 0x30, 0x30, 0x30, 0x63,
0x20, 0x53, 0x55, 0x42, 0x32, 0x72, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b,
0x72, 0x20, 0x23, 0x30, 0x30, 0x30, 0x61, 0x20, 0x41, 0x44, 0x44, 0x32,
0x20, 0x53, 0x54, 0x41, 0x32, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x23, 0x30,
0x30, 0x30, 0x36, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x49,
0x4e, 0x43, 0x32, 0x20, 0x49, 0x4e, 0x43, 0x32, 0x20, 0x53, 0x54, 0x41,
0x32, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72,
0x20, 0x23, 0x30, 0x30, 0x30, 0x61, 0x20, 0x41, 0x44, 0x44, 0x32, 0x20,
0x4c, 0x44, 0x41, 0x32, 0x20, 0x23, 0x38, 0x30, 0x30, 0x30, 0x20, 0x45,
0x4f, 0x52, 0x32, 0x20, 0x23, 0x38, 0x30, 0x30, 0x30, 0x20, 0x4c, 0x54,
0x48, 0x32, 0x20, 0x23, 0x30, 0x30, 0x20, 0x53, 0x57, 0x50, 0x20, 0x23,
0x30, 0x30, 0x30, 0x30, 0x20, 0x4e, 0x45, 0x51, 0x32, 0x20, 0x23, 0x30,
0x30, 0x20, 0x53, 0x57, 0x50, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72,
0x20, 0x53, 0x54, 0x41, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x50, 0x4f, 0x50,
0x20, 0x4c, 0x44, 0x41, 0x6b, 0x72, 0x20, 0x53, 0x54, 0x48, 0x72, 0x20,
0x73, 0x65, 0x78, 0x74, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x23, 0x30, 0x30,
0x30, 0x30, 0x20, 0x45, 0x51, 0x55, 0x32, 0x20, 0x3f, 0x26, 0x65, 0x6e,
0x64, 0x2e, 0x31, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x23, 0x30, 0x30, 0x30,
0x30, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x23, 0x30, 0x30,
0x30, 0x61, 0x20, 0x41, 0x44, 0x44, 0x32, 0x20, 0x4c, 0x44, 0x41, 0x32,
0x20, 0x53, 0x55, 0x42, 0x32, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72,
0x20, 0x23, 0x30, 0x30, 0x30, 0x61, 0x20, 0x41, 0x44, 0x44, 0x32, 0x20,
0x53, 0x54, 0x41, 0x32, 0x0a, 0x0a, 0x20, 0x20, 0x26, 0x65, 0x6e, 0x64,
0x2e, 0x31, 0x0a, 0x0a, 0x20, 0x20, 0x26, 0x62, 0x65, 0x67, 0x69, 0x6e,
0x2e, 0x32, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b,
0x72, 0x20, 0x23, 0x30, 0x30, 0x30, 0x61, 0x20, 0x41, 0x44, 0x44, 0x32,
0x20, 0x4c, 0x44, 0x41, 0x32, 0x20, 0x23, 0x30, 0x30, 0x30, 0x61, 0x20,
0x4f, 0x56, 0x52, 0x32, 0x20, 0x4f, 0x56, 0x52, 0x32, 0x20, 0x73, 0x64,
0x69, 0x76, 0x2f, 0x62, 0x5f, 0x70, 0x6f, 0x73, 0x0a, 0x20, 0x20, 0x20,
0x20, 0x4d, 0x55, 0x4c, 0x32, 0x20, 0x53, 0x55, 0x42, 0x32, 0x20, 0x23,
0x30, 0x30, 0x33, 0x30, 0x20, 0x41, 0x44, 0x44, 0x32, 0x20, 0x53, 0x54,
0x48, 0x32, 0x6b, 0x72, 0x20, 0x23, 0x30, 0x30, 0x30, 0x34, 0x20, 0x41,
0x44, 0x44, 0x32, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x49,
0x4e, 0x43, 0x32, 0x20, 0x49, 0x4e, 0x43, 0x32, 0x20, 0x4c, 0x44, 0x41,
0x32, 0x6b, 0x20, 0x23, 0x30, 0x30, 0x30, 0x31, 0x20, 0x53, 0x55, 0x42,
0x32, 0x20, 0x53, 0x57, 0x50, 0x32, 0x20, 0x53, 0x54, 0x41, 0x32, 0x6b,
0x0a, 0x20, 0x20, 0x20, 0x20, 0x50, 0x4f, 0x50, 0x32, 0x20, 0x41, 0x44,
0x44, 0x32, 0x20, 0x53, 0x54, 0x41, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x50,
0x4f, 0x50, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x23, 0x30,
0x30, 0x30, 0x61, 0x20, 0x41, 0x44, 0x44, 0x32, 0x20, 0x4c, 0x44, 0x41,
0x32, 0x6b, 0x20, 0x23, 0x30, 0x30, 0x30, 0x61, 0x20, 0x73, 0x64, 0x69,
0x76, 0x2f, 0x62, 0x5f, 0x70, 0x6f, 0x73, 0x0a, 0x20, 0x20, 0x20, 0x20,
0x53, 0x57, 0x50, 0x32, 0x20, 0x53, 0x54, 0x41, 0x32, 0x0a, 0x0a, 0x20,
0x20, 0x26, 0x63, 0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x75, 0x65, 0x2e, 0x32,
0x0a, 0x20, 0x20, 0x20, 0x20, 0x23, 0x38, 0x30, 0x30, 0x30, 0x20, 0x53,
0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x23, 0x30, 0x30, 0x30, 0x61, 0x20,
0x41, 0x44, 0x44, 0x32, 0x20, 0x4c, 0x44, 0x41, 0x32, 0x20, 0x23, 0x38,
0x30, 0x30, 0x30, 0x20, 0x45, 0x4f, 0x52, 0x32, 0x20, 0x4c, 0x54, 0x48,
0x32, 0x20, 0x3f, 0x26, 0x62, 0x65, 0x67, 0x69, 0x6e, 0x2e, 0x32, 0x0a,
0x0a, 0x20, 0x20, 0x26, 0x62, 0x72, 0x65, 0x61, 0x6b, 0x2e, 0x32, 0x0a,
0x20, 0x20, 0x20, 0x20, 0x4c, 0x44, 0x41, 0x6b, 0x72, 0x20, 0x53, 0x54,
0x48, 0x72, 0x20, 0x73, 0x65, 0x78, 0x74, 0x0a, 0x20, 0x20, 0x20, 0x20,
0x23, 0x30, 0x30, 0x30, 0x30, 0x20, 0x45, 0x51, 0x55, 0x32, 0x20, 0x3f,
0x26, 0x65, 0x6e, 0x64, 0x2e, 0x33, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x23,
0x30, 0x30, 0x32, 0x64, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20,
0x23, 0x30, 0x30, 0x30, 0x34, 0x20, 0x41, 0x44, 0x44, 0x32, 0x20, 0x53,
0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x49, 0x4e, 0x43, 0x32, 0x20, 0x49,
0x4e, 0x43, 0x32, 0x20, 0x4c, 0x44, 0x41, 0x32, 0x6b, 0x20, 0x23, 0x30,
0x30, 0x30, 0x31, 0x20, 0x53, 0x55, 0x42, 0x32, 0x20, 0x53, 0x57, 0x50,
0x32, 0x20, 0x53, 0x54, 0x41, 0x32, 0x6b, 0x0a, 0x20, 0x20, 0x20, 0x20,
0x50, 0x4f, 0x50, 0x32, 0x20, 0x41, 0x44, 0x44, 0x32, 0x20, 0x53, 0x54,
0x41, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x50, 0x4f, 0x50, 0x0a, 0x0a, 0x20,
0x20, 0x26, 0x65, 0x6e, 0x64, 0x2e, 0x33, 0x0a, 0x20, 0x20, 0x20, 0x20,
0x23, 0x30, 0x30, 0x30, 0x36, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72,
0x20, 0x49, 0x4e, 0x43, 0x32, 0x20, 0x49, 0x4e, 0x43, 0x32, 0x20, 0x4c,
0x44, 0x41, 0x32, 0x20, 0x53, 0x55, 0x42, 0x32, 0x20, 0x53, 0x54, 0x48,
0x32, 0x6b, 0x72, 0x20, 0x23, 0x30, 0x30, 0x30, 0x34, 0x20, 0x41, 0x44,
0x44, 0x32, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x49, 0x4e,
0x43, 0x32, 0x20, 0x49, 0x4e, 0x43, 0x32, 0x20, 0x4c, 0x44, 0x41, 0x32,
0x20, 0x41, 0x44, 0x44, 0x32, 0x20, 0x61, 0x6d, 0x63, 0x70, 0x79, 0x5f,
0x0a, 0x20, 0x20, 0x20, 0x20, 0x21, 0x26, 0x72, 0x65, 0x74, 0x75, 0x72,
0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x23, 0x30, 0x30, 0x30, 0x30, 0x0a,
0x0a, 0x20, 0x20, 0x26, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x0a, 0x20,
0x20, 0x20, 0x20, 0x50, 0x4f, 0x50, 0x32, 0x72, 0x20, 0x4a, 0x4d, 0x50,
0x32, 0x72, 0x0a, 0x0a, 0x40, 0x69, 0x6e, 0x74, 0x5f, 0x74, 0x6f, 0x5f,
0x6e, 0x61, 0x74, 0x5f, 0x20, 0x28, 0x20, 0x6e, 0x2a, 0x20, 0x2d, 0x2d,
0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2a, 0x20, 0x29, 0x0a, 0x20,
0x20, 0x20, 0x20, 0x4f, 0x56, 0x52, 0x32, 0x72, 0x20, 0x4c, 0x49, 0x54,
0x32, 0x72, 0x20, 0x30, 0x30, 0x30, 0x32, 0x20, 0x53, 0x55, 0x42, 0x32,
0x72, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x53, 0x54, 0x41,
0x32, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72,
0x20, 0x4c, 0x44, 0x41, 0x32, 0x20, 0x21, 0x26, 0x72, 0x65, 0x74, 0x75,
0x72, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x23, 0x30, 0x30, 0x30, 0x30,
0x0a, 0x0a, 0x20, 0x20, 0x26, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x0a,
0x20, 0x20, 0x20, 0x20, 0x50, 0x4f, 0x50, 0x32, 0x72, 0x20, 0x4a, 0x4d,
0x50, 0x32, 0x72, 0x0a, 0x0a, 0x40, 0x6e, 0x61, 0x74, 0x5f, 0x74, 0x6f,
0x5f, 0x69, 0x6e, 0x74, 0x5f, 0x20, 0x28, 0x20, 0x6e, 0x2a, 0x20, 0x2d,
0x2d, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2a, 0x20, 0x29, 0x0a,
0x20, 0x20, 0x20, 0x20, 0x4f, 0x56, 0x52, 0x32, 0x72, 0x20, 0x4c, 0x49,
0x54, 0x32, 0x72, 0x20, 0x30, 0x30, 0x30, 0x32, 0x20, 0x53, 0x55, 0x42,
0x32, 0x72, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x53, 0x54,
0x41, 0x32, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b,
0x72, 0x20, 0x4c, 0x44, 0x41, 0x32, 0x20, 0x21, 0x26, 0x72, 0x65, 0x74,
0x75, 0x72, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x23, 0x30, 0x30, 0x30,
0x30, 0x0a, 0x0a, 0x20, 0x20, 0x26, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e,
0x0a, 0x20, 0x20, 0x20, 0x20, 0x50, 0x4f, 0x50, 0x32, 0x72, 0x20, 0x4a,
0x4d, 0x50, 0x32, 0x72, 0x0a, 0x0a, 0x40, 0x69, 0x6e, 0x74, 0x5f, 0x61,
0x64, 0x64, 0x5f, 0x20, 0x28, 0x20, 0x62, 0x2a, 0x20, 0x61, 0x2a, 0x20,
0x2d, 0x2d, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2a, 0x20, 0x29,
0x0a, 0x20, 0x20, 0x20, 0x20, 0x4f, 0x56, 0x52, 0x32, 0x72, 0x20, 0x4c,
0x49, 0x54, 0x32, 0x72, 0x20, 0x30, 0x30, 0x30, 0x34, 0x20, 0x53, 0x55,
0x42, 0x32, 0x72, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x49,
0x4e, 0x43, 0x32, 0x20, 0x49, 0x4e, 0x43, 0x32, 0x20, 0x53, 0x54, 0x41,
0x32, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72,
0x20, 0x53, 0x54, 0x41, 0x32, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x53, 0x54,
0x48, 0x32, 0x6b, 0x72, 0x20, 0x49, 0x4e, 0x43, 0x32, 0x20, 0x49, 0x4e,
0x43, 0x32, 0x20, 0x4c, 0x44, 0x41, 0x32, 0x20, 0x53, 0x54, 0x48, 0x32,
0x6b, 0x72, 0x20, 0x4c, 0x44, 0x41, 0x32, 0x20, 0x41, 0x44, 0x44, 0x32,
0x20, 0x21, 0x26, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x0a, 0x20, 0x20,
0x20, 0x20, 0x23, 0x30, 0x30, 0x30, 0x30, 0x0a, 0x0a, 0x20, 0x20, 0x26,
0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x50,
0x4f, 0x50, 0x32, 0x72, 0x20, 0x4a, 0x4d, 0x50, 0x32, 0x72, 0x0a, 0x0a,
0x40, 0x69, 0x6e, 0x74, 0x5f, 0x73, 0x75, 0x62, 0x5f, 0x20, 0x28, 0x20,
0x62, 0x2a, 0x20, 0x61, 0x2a, 0x20, 0x2d, 0x2d, 0x20, 0x72, 0x65, 0x73,
0x75, 0x6c, 0x74, 0x2a, 0x20, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x4f,
0x56, 0x52, 0x32, 0x72, 0x20, 0x4c, 0x49, 0x54, 0x32, 0x72, 0x20, 0x30,
0x30, 0x30, 0x34, 0x20, 0x53, 0x55, 0x42, 0x32, 0x72, 0x20, 0x53, 0x54,
0x48, 0x32, 0x6b, 0x72, 0x20, 0x49, 0x4e, 0x43, 0x32, 0x20, 0x49, 0x4e,
0x43, 0x32, 0x20, 0x53, 0x54, 0x41, 0x32, 0x0a, 0x20, 0x20, 0x20, 0x20,
0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x53, 0x54, 0x41, 0x32, 0x0a,
0x20, 0x20, 0x20, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x49,
0x4e, 0x43, 0x32, 0x20, 0x49, 0x4e, 0x43, 0x32, 0x20, 0x4c, 0x44, 0x41,
0x32, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x4c, 0x44, 0x41,
0x32, 0x20, 0x53, 0x55, 0x42, 0x32, 0x20, 0x21, 0x26, 0x72, 0x65, 0x74,
0x75, 0x72, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x23, 0x30, 0x30, 0x30,
0x30, 0x0a, 0x0a, 0x20, 0x20, 0x26, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e,
0x0a, 0x20, 0x20, 0x20, 0x20, 0x50, 0x4f, 0x50, 0x32, 0x72, 0x20, 0x4a,
0x4d, 0x50, 0x32, 0x72, 0x0a, 0x0a, 0x40, 0x69, 0x6e, 0x74, 0x5f, 0x6d,
0x75, 0x6c, 0x5f, 0x20, 0x28, 0x20, 0x62, 0x2a, 0x20, 0x61, 0x2a, 0x20,
0x2d, 0x2d, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2a, 0x20, 0x29,
0x0a, 0x20, 0x20, 0x20, 0x20, 0x4f, 0x56, 0x52, 0x32, 0x72, 0x20, 0x4c,
0x49, 0x54, 0x32, 0x72, 0x20, 0x30, 0x30, 0x30, 0x34, 0x20, 0x53, 0x55,
0x42, 0x32, 0x72, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x49,
0x4e, 0x43, 0x32, 0x20, 0x49, 0x4e, 0x43, 0x32, 0x20, 0x53, 0x54, 0x41,
0x32, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72,
0x20, 0x53, 0x54, 0x41, 0x32, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x53, 0x54,
0x48, 0x32, 0x6b, 0x72, 0x20, 0x49, 0x4e, 0x43, 0x32, 0x20, 0x49, 0x4e,
0x43, 0x32, 0x20, 0x4c, 0x44, 0x41, 0x32, 0x20, 0x53, 0x54, 0x48, 0x32,
0x6b, 0x72, 0x20, 0x4c, 0x44, 0x41, 0x32, 0x20, 0x4d, 0x55, 0x4c, 0x32,
0x20, 0x21, 0x26, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x0a, 0x20, 0x20,
0x20, 0x20, 0x23, 0x30, 0x30, 0x30, 0x30, 0x0a, 0x0a, 0x20, 0x20, 0x26,
0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x50,
0x4f, 0x50, 0x32, 0x72, 0x20, 0x4a, 0x4d, 0x50, 0x32, 0x72, 0x0a, 0x0a,
0x40, 0x69, 0x6e, 0x74, 0x5f, 0x64, 0x69, 0x76, 0x5f, 0x20, 0x28, 0x20,
0x62, 0x2a, 0x20, 0x61, 0x2a, 0x20, 0x2d, 0x2d, 0x20, 0x72, 0x65, 0x73,
0x75, 0x6c, 0x74, 0x2a, 0x20, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x4f,
0x56, 0x52, 0x32, 0x72, 0x20, 0x4c, 0x49, 0x54, 0x32, 0x72, 0x20, 0x30,
0x30, 0x30, 0x34, 0x20, 0x53, 0x55, 0x42, 0x32, 0x72, 0x20, 0x53, 0x54,
0x48, 0x32, 0x6b, 0x72, 0x20, 0x49, 0x4e, 0x43, 0x32, 0x20, 0x49, 0x4e,
0x43, 0x32, 0x20, 0x53, 0x54, 0x41, 0x32, 0x0a, 0x20, 0x20, 0x20, 0x20,
0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x53, 0x54, 0x41, 0x32, 0x0a,
0x20, 0x20, 0x20, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x49,
0x4e, 0x43, 0x32, 0x20, 0x49, 0x4e, 0x43, 0x32, 0x20, 0x4c, 0x44, 0x41,
0x32, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x4c, 0x44, 0x41,
0x32, 0x20, 0x73, 0x64, 0x69, 0x76, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x21,
0x26, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20,
0x23, 0x30, 0x30, 0x30, 0x30, 0x0a, 0x0a, 0x20, 0x20, 0x26, 0x72, 0x65,
0x74, 0x75, 0x72, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x50, 0x4f, 0x50,
0x32, 0x72, 0x20, 0x4a, 0x4d, 0x50, 0x32, 0x72, 0x0a, 0x0a, 0x40, 0x69,
0x6e, 0x74, 0x5f, 0x65, 0x71, 0x5f, 0x20, 0x28, 0x20, 0x62, 0x2a, 0x20,
0x61, 0x2a, 0x20, 0x2d, 0x2d, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74,
0x2a, 0x20, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x4f, 0x56, 0x52, 0x32,
0x72, 0x20, 0x4c, 0x49, 0x54, 0x32, 0x72, 0x20, 0x30, 0x30, 0x30, 0x34,
0x20, 0x53, 0x55, 0x42, 0x32, 0x72, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b,
0x72, 0x20, 0x49, 0x4e, 0x43, 0x32, 0x20, 0x49, 0x4e, 0x43, 0x32, 0x20,
0x53, 0x54, 0x41, 0x32, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x53, 0x54, 0x48,
0x32, 0x6b, 0x72, 0x20, 0x53, 0x54, 0x41, 0x32, 0x0a, 0x20, 0x20, 0x20,
0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x49, 0x4e, 0x43, 0x32,
0x20, 0x49, 0x4e, 0x43, 0x32, 0x20, 0x4c, 0x44, 0x41, 0x32, 0x20, 0x53,
0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x4c, 0x44, 0x41, 0x32, 0x20, 0x45,
0x51, 0x55, 0x32, 0x20, 0x23, 0x30, 0x30, 0x20, 0x53, 0x57, 0x50, 0x20,
0x21, 0x26, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x0a, 0x20, 0x20, 0x20,
0x20, 0x23, 0x30, 0x30, 0x30, 0x30, 0x0a, 0x0a, 0x20, 0x20, 0x26, 0x72,
0x65, 0x74, 0x75, 0x72, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x50, 0x4f,
0x50, 0x32, 0x72, 0x20, 0x4a, 0x4d, 0x50, 0x32, 0x72, 0x0a, 0x0a, 0x40,
0x69, 0x6e, 0x74, 0x5f, 0x6e, 0x65, 0x5f, 0x20, 0x28, 0x20, 0x62, 0x2a,
0x20, 0x61, 0x2a, 0x20, 0x2d, 0x2d, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c,
0x74, 0x2a, 0x20, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x4f, 0x56, 0x52,
0x32, 0x72, 0x20, 0x4c, 0x49, 0x54, 0x32, 0x72, 0x20, 0x30, 0x30, 0x30,
0x34, 0x20, 0x53, 0x55, 0x42, 0x32, 0x72, 0x20, 0x53, 0x54, 0x48, 0x32,
0x6b, 0x72, 0x20, 0x49, 0x4e, 0x43, 0x32, 0x20, 0x49, 0x4e, 0x43, 0x32,
0x20, 0x53, 0x54, 0x41, 0x32, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x53, 0x54,
0x48, 0x32, 0x6b, 0x72, 0x20, 0x53, 0x54, 0x41, 0x32, 0x0a, 0x20, 0x20,
0x20, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x49, 0x4e, 0x43,
0x32, 0x20, 0x49, 0x4e, 0x43, 0x32, 0x20, 0x4c, 0x44, 0x41, 0x32, 0x20,
0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x4c, 0x44, 0x41, 0x32, 0x20,
0x4e, 0x45, 0x51, 0x32, 0x20, 0x23, 0x30, 0x30, 0x20, 0x53, 0x57, 0x50,
0x20, 0x21, 0x26, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x0a, 0x20, 0x20,
0x20, 0x20, 0x23, 0x30, 0x30, 0x30, 0x30, 0x0a, 0x0a, 0x20, 0x20, 0x26,
0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x50,
0x4f, 0x50, 0x32, 0x72, 0x20, 0x4a, 0x4d, 0x50, 0x32, 0x72, 0x0a, 0x0a,
0x40, 0x69, 0x6e, 0x74, 0x5f, 0x6c, 0x74, 0x5f, 0x20, 0x28, 0x20, 0x62,
0x2a, 0x20, 0x61, 0x2a, 0x20, 0x2d, 0x2d, 0x20, 0x72, 0x65, 0x73, 0x75,
0x6c, 0x74, 0x2a, 0x20, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x4f, 0x56,
0x52, 0x32, 0x72, 0x20, 0x4c, 0x49, 0x54, 0x32, 0x72, 0x20, 0x30, 0x30,
0x30, 0x34, 0x20, 0x53, 0x55, 0x42, 0x32, 0x72, 0x20, 0x53, 0x54, 0x48,
0x32, 0x6b, 0x72, 0x20, 0x49, 0x4e, 0x43, 0x32, 0x20, 0x49, 0x4e, 0x43,
0x32, 0x20, 0x53, 0x54, 0x41, 0x32, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x53,
0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x53, 0x54, 0x41, 0x32, 0x0a, 0x20,
0x20, 0x20, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x49, 0x4e,
0x43, 0x32, 0x20, 0x49, 0x4e, 0x43, 0x32, 0x20, 0x4c, 0x44, 0x41, 0x32,
0x20, 0x23, 0x38, 0x30, 0x30, 0x30, 0x20, 0x45, 0x4f, 0x52, 0x32, 0x20,
0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x4c, 0x44, 0x41, 0x32, 0x20,
0x23, 0x38, 0x30, 0x30, 0x30, 0x20, 0x45, 0x4f, 0x52, 0x32, 0x20, 0x4c,
0x54, 0x48, 0x32, 0x20, 0x23, 0x30, 0x30, 0x20, 0x53, 0x57, 0x50, 0x20,
0x21, 0x26, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x0a, 0x20, 0x20, 0x20,
0x20, 0x23, 0x30, 0x30, 0x30, 0x30, 0x0a, 0x0a, 0x20, 0x20, 0x26, 0x72,
0x65, 0x74, 0x75, 0x72, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x50, 0x4f,
0x50, 0x32, 0x72, 0x20, 0x4a, 0x4d, 0x50, 0x32, 0x72, 0x0a, 0x0a, 0x40,
0x69, 0x6e, 0x74, 0x5f, 0x6c, 0x65, 0x5f, 0x20, 0x28, 0x20, 0x62, 0x2a,
0x20, 0x61, 0x2a, 0x20, 0x2d, 0x2d, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c,
0x74, 0x2a, 0x20, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x4f, 0x56, 0x52,
0x32, 0x72, 0x20, 0x4c, 0x49, 0x54, 0x32, 0x72, 0x20, 0x30, 0x30, 0x30,
0x34, 0x20, 0x53, 0x55, 0x42, 0x32, 0x72, 0x20, 0x53, 0x54, 0x48, 0x32,
0x6b, 0x72, 0x20, 0x49, 0x4e, 0x43, 0x32, 0x20, 0x49, 0x4e, 0x43, 0x32,
0x20, 0x53, 0x54, 0x41, 0x32, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x53, 0x54,
0x48, 0x32, 0x6b, 0x72, 0x20, 0x53, 0x54, 0x41, 0x32, 0x0a, 0x20, 0x20,
0x20, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x49, 0x4e, 0x43,
0x32, 0x20, 0x49, 0x4e, 0x43, 0x32, 0x20, 0x4c, 0x44, 0x41, 0x32, 0x20,
0x23, 0x38, 0x30, 0x30, 0x30, 0x20, 0x45, 0x4f, 0x52, 0x32, 0x20, 0x53,
0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x4c, 0x44, 0x41, 0x32, 0x20, 0x23,
0x38, 0x30, 0x30, 0x30, 0x20, 0x45, 0x4f, 0x52, 0x32, 0x20, 0x47, 0x54,
0x48, 0x32, 0x20, 0x23, 0x30, 0x30, 0x20, 0x53, 0x57, 0x50, 0x20, 0x23,
0x30, 0x31, 0x20, 0x45, 0x4f, 0x52, 0x20, 0x21, 0x26, 0x72, 0x65, 0x74,
0x75, 0x72, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x23, 0x30, 0x30, 0x30,
0x30, 0x0a, 0x0a, 0x20, 0x20, 0x26, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e,
0x0a, 0x20, 0x20, 0x20, 0x20, 0x50, 0x4f, 0x50, 0x32, 0x72, 0x20, 0x4a,
0x4d, 0x50, 0x32, 0x72, 0x0a, 0x0a, 0x40, 0x69, 0x6e, 0x74, 0x5f, 0x67,
0x74, 0x5f, 0x20, 0x28, 0x20, 0x62, 0x2a, 0x20, 0x61, 0x2a, 0x20, 0x2d,
0x2d, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2a, 0x20, 0x29, 0x0a,
0x20, 0x20, 0x20, 0x20, 0x4f, 0x56, 0x52, 0x32, 0x72, 0x20, 0x4c, 0x49,
0x54, 0x32, 0x72, 0x20, 0x30, 0x30, 0x30, 0x34, 0x20, 0x53, 0x55, 0x42,
0x32, 0x72, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x49, 0x4e,
0x43, 0x32, 0x20, 0x49, 0x4e, 0x43, 0x32, 0x20, 0x53, 0x54, 0x41, 0x32,
0x0a, 0x20, 0x20, 0x20, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20,
0x53, 0x54, 0x41, 0x32, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x53, 0x54, 0x48,
0x32, 0x6b, 0x72, 0x20, 0x4c, 0x44, 0x41, 0x32, 0x20, 0x23, 0x38, 0x30,
0x30, 0x30, 0x20, 0x45, 0x4f, 0x52, 0x32, 0x20, 0x53, 0x54, 0x48, 0x32,
0x6b, 0x72, 0x20, 0x49, 0x4e, 0x43, 0x32, 0x20, 0x49, 0x4e, 0x43, 0x32,
0x20, 0x4c, 0x44, 0x41, 0x32, 0x20, 0x23, 0x38, 0x30, 0x30, 0x30, 0x20,
0x45, 0x4f, 0x52, 0x32, 0x20, 0x4c, 0x54, 0x48, 0x32, 0x20, 0x23, 0x30,
0x30, 0x20, 0x53, 0x57, 0x50, 0x20, 0x21, 0x26, 0x72, 0x65, 0x74, 0x75,
0x72, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x23, 0x30, 0x30, 0x30, 0x30,
0x0a, 0x0a, 0x20, 0x20, 0x26, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x0a,
0x20, 0x20, 0x20, 0x20, 0x50, 0x4f, 0x50, 0x32, 0x72, 0x20, 0x4a, 0x4d,
0x50, 0x32, 0x72, 0x0a, 0x0a, 0x40, 0x69, 0x6e, 0x74, 0x5f, 0x67, 0x65,
0x5f, 0x20, 0x28, 0x20, 0x62, 0x2a, 0x20, 0x61, 0x2a, 0x20, 0x2d, 0x2d,
0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2a, 0x20, 0x29, 0x0a, 0x20,
0x20, 0x20, 0x20, 0x4f, 0x56, 0x52, 0x32, 0x72, 0x20, 0x4c, 0x49, 0x54,
0x32, 0x72, 0x20, 0x30, 0x30, 0x30, 0x34, 0x20, 0x53, 0x55, 0x42, 0x32,
0x72, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x49, 0x4e, 0x43,
0x32, 0x20, 0x49, 0x4e, 0x43, 0x32, 0x20, 0x53, 0x54, 0x41, 0x32, 0x0a,
0x20, 0x20, 0x20, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x53,
0x54, 0x41, 0x32, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x53, 0x54, 0x48, 0x32,
0x6b, 0x72, 0x20, 0x4c, 0x44, 0x41, 0x32, 0x20, 0x23, 0x38, 0x30, 0x30,
0x30, 0x20, 0x45, 0x4f, 0x52, 0x32, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b,
0x72, 0x20, 0x49, 0x4e, 0x43, 0x32, 0x20, 0x49, 0x4e, 0x43, 0x32, 0x20,
0x4c, 0x44, 0x41, 0x32, 0x20, 0x23, 0x38, 0x30, 0x30, 0x30, 0x20, 0x45,
0x4f, 0x52, 0x32, 0x20, 0x47, 0x54, 0x48, 0x32, 0x20, 0x23, 0x30, 0x30,
0x20, 0x53, 0x57, 0x50, 0x20, 0x23, 0x30, 0x31, 0x20, 0x45, 0x4f, 0x52,
0x20, 0x21, 0x26, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x0a, 0x20, 0x20,
0x20, 0x20, 0x23, 0x30, 0x30, 0x30, 0x30, 0x0a, 0x0a, 0x20, 0x20, 0x26,
0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x50,
0x4f, 0x50, 0x32, 0x72, 0x20, 0x4a, 0x4d, 0x50, 0x32, 0x72, 0x0a, 0x0a,
0x40, 0x69, 0x6e, 0x74, 0x5f, 0x6e, 0x65, 0x67, 0x5f, 0x20, 0x28, 0x20,
0x66, 0x2a, 0x20, 0x2d, 0x2d, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74,
0x2a, 0x20, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x4f, 0x56, 0x52, 0x32,
0x72, 0x20, 0x4c, 0x49, 0x54, 0x32, 0x72, 0x20, 0x30, 0x30, 0x30, 0x32,
0x20, 0x53, 0x55, 0x42, 0x32, 0x72, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b,
0x72, 0x20, 0x53, 0x54, 0x41, 0x32, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x23,
0x30, 0x30, 0x30, 0x30, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20,
0x4c, 0x44, 0x41, 0x32, 0x20, 0x53, 0x55, 0x42, 0x32, 0x20, 0x21, 0x26,
0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x23,
0x30, 0x30, 0x30, 0x30, 0x0a, 0x0a, 0x20, 0x20, 0x26, 0x72, 0x65, 0x74,
0x75, 0x72, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x50, 0x4f, 0x50, 0x32,
0x72, 0x20, 0x4a, 0x4d, 0x50, 0x32, 0x72, 0x0a, 0x0a, 0x40, 0x69, 0x6e,
0x74, 0x5f, 0x61, 0x62, 0x73, 0x5f, 0x20, 0x28, 0x20, 0x66, 0x2a, 0x20,
0x2d, 0x2d, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2a, 0x20, 0x29,
0x0a, 0x20, 0x20, 0x20, 0x20, 0x4f, 0x56, 0x52, 0x32, 0x72, 0x20, 0x4c,
0x49, 0x54, 0x32, 0x72, 0x20, 0x30, 0x30, 0x30, 0x32, 0x20, 0x53, 0x55,
0x42, 0x32, 0x72, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x53,
0x54, 0x41, 0x32, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x53, 0x54, 0x48, 0x32,
0x6b, 0x72, 0x20, 0x4c, 0x44, 0x41, 0x32, 0x20, 0x23, 0x38, 0x30, 0x30,
0x30, 0x20, 0x45, 0x4f, 0x52, 0x32, 0x20, 0x23, 0x38, 0x30, 0x30, 0x30,
0x20, 0x4c, 0x54, 0x48, 0x32, 0x20, 0x3f, 0x26, 0x74, 0x68, 0x65, 0x6e,
0x2e, 0x31, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b,
0x72, 0x20, 0x4c, 0x44, 0x41, 0x32, 0x20, 0x21, 0x26, 0x65, 0x6e, 0x64,
0x2e, 0x31, 0x0a, 0x0a, 0x20, 0x20, 0x26, 0x74, 0x68, 0x65, 0x6e, 0x2e,
0x31, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x23, 0x30, 0x30, 0x30, 0x30, 0x20,
0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x4c, 0x44, 0x41, 0x32, 0x20,
0x53, 0x55, 0x42, 0x32, 0x0a, 0x0a, 0x20, 0x20, 0x26, 0x65, 0x6e, 0x64,
0x2e, 0x31, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x21, 0x26, 0x72, 0x65, 0x74,
0x75, 0x72, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x23, 0x30, 0x30, 0x30,
0x30, 0x0a, 0x0a, 0x20, 0x20, 0x26, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e,
0x0a, 0x20, 0x20, 0x20, 0x20, 0x50, 0x4f, 0x50, 0x32, 0x72, 0x20, 0x4a,
0x4d, 0x50, 0x32, 0x72, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x0a, 0x40, 0x73,
0x74, 0x72, 0x2f, 0x3c, 0x70, 0x72, 0x69, 0x6e, 0x74, 0x3e, 0x20, 0x28,
0x20, 0x73, 0x74, 0x72, 0x2a, 0x20, 0x2d, 0x2d, 0x20, 0x29, 0x0a, 0x20,
0x20, 0x20, 0x20, 0x4c, 0x44, 0x41, 0x6b, 0x20, 0x44, 0x55, 0x50, 0x20,
0x3f, 0x7b, 0x20, 0x50, 0x4f, 0x50, 0x20, 0x50, 0x4f, 0x50, 0x32, 0x20,
0x4a, 0x4d, 0x50, 0x32, 0x72, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20,
0x23, 0x31, 0x38, 0x20, 0x44, 0x45, 0x4f, 0x0a, 0x20, 0x20, 0x20, 0x20,
0x49, 0x4e, 0x43, 0x32, 0x20, 0x21, 0x2f, 0x3c, 0x70, 0x72, 0x69, 0x6e,
0x74, 0x3e, 0x0a, 0x0a, 0x40, 0x6d, 0x65, 0x6d, 0x5f, 0x6c, 0x65, 0x6e,
0x67, 0x74, 0x68, 0x5f, 0x20, 0x23, 0x30, 0x30, 0x30, 0x30, 0x0a, 0x40,
0x6d, 0x65, 0x6d, 0x5f, 0x20, 0x20, 0x20, 0x20};
unsigned int emit_uxn_lib_undar_tal_len = 6212;
void void
uxn_emit_error(const char *str, i32 length, i32 line) uxn_emit_error(const char *str, i32 length, i32 line)

View File

@ -11,22 +11,6 @@ aalloc(unsigned size)
return (char *)&mem[pos]; return (char *)&mem[pos];
} }
char *
areturn(unsigned checkpoint, char *src, unsigned size)
{
char *dest = (char *)&mem[checkpoint];
if(src == dest) return src;
for (unsigned i = 0; i < size; i++) {
dest[i] = src[i];
}
mem_length = checkpoint + size;
/* zero out the end of the memory copy (for strings mostly) */
mem[mem_length] = 0;
return dest;
}
void void
afree() afree()
{ {
@ -54,92 +38,3 @@ char* nat_to_str(unsigned n) {
return amcpy(buffer + i, 5 - i); return amcpy(buffer + i, 5 - i);
} }
char* int_to_str(int n) {
char buffer[6];
unsigned i = 6;
_Bool neg = n < 0;
if (neg) n = -n;
do {
buffer[--i] = '0' + n % 10;
n /= 10;
} while(n > 0);
if(neg) buffer[--i] = '-';
return amcpy(buffer + i, 6 - i);
}
unsigned
int_to_nat(int n)
{
return (unsigned)n;
}
int
nat_to_int(unsigned n)
{
return (int)n;
}
int
int_add(int a, int b)
{
return a + b;
}
int
int_sub(int a, int b)
{
return a - b;
}
int
int_mul(int a, int b)
{
return a * b;
}
int
int_div(int a, int b)
{
return a / b;
}
int
int_eq(int a, int b)
{
return a == b;
}
int
int_ne(int a, int b)
{
return a != b;
}
int
int_lt(int a, int b)
{
return a < b;
}
int
int_le(int a, int b)
{
return a <= b;
}
int
int_gt(int a, int b)
{
return a > b;
}
int
int_ge(int a, int b)
{
return a >= b;
}
int
int_neg(int f)
{
return -f;
}
int
int_abs(int f)
{
return (f < 0) ? -f : f;
}

View File

@ -1,9 +1,5 @@
@sext @sext
#80 ANDk EQU #ff MUL SWP JMP2r #80 ANDk EQU #ff MUL SWP JMP2r
@sdiv
OVR #80 AND ?&b_neg &b_pos OVR2 POP #80 AND ?&a_neg_b_pos DIV2 JMP2r &a_neg_b_pos SWP2 #0000 SWP2 SUB2 SWP2 DIV2 #0000 SWP2 SUB2 JMP2r
&b_neg #0000 SWP2 SUB2 OVR2 POP #80 AND ?&a_neg_b_neg DIV2 #0000 SWP2 SUB2 JMP2r
&a_neg_b_neg #0000 ROT2 SUB2 SWP2 DIV2 JMP2r
@aalloc_ ( size* -- result* ) @aalloc_ ( size* -- result* )
OVR2r LIT2r 0004 SUB2r STH2kr INC2 INC2 STA2 OVR2r LIT2r 0004 SUB2r STH2kr INC2 INC2 STA2
@ -15,36 +11,6 @@
&return &return
POP2r JMP2r POP2r JMP2r
@areturn_ ( size* src* checkpoint* -- result* )
OVR2r LIT2r 000a SUB2r STH2kr #0008 ADD2 STA2
STH2kr #0006 ADD2 STA2
STH2kr #0004 ADD2 STA2
;mem_ STH2kr #0008 ADD2 LDA2 ADD2 STH2kr INC2 INC2 STA2
STH2kr #0006 ADD2 LDA2 STH2kr INC2 INC2 LDA2 NEQ2 ?&end.1
STH2kr #0006 ADD2 LDA2 !&return
&end.1
#0000 STH2kr STA2
&begin.2
STH2kr LDA2 STH2kr #0004 ADD2 LDA2 LTH2 #00 EQU ?&break.2
STH2kr #0006 ADD2 LDA2 STH2kr LDA2 ADD2 LDA sext
STH2kr INC2 INC2 LDA2 STH2kr LDA2 ADD2 STA
POP
&continue.2
STH2kr LDA2k INC2k ROT2 STA2
POP2 !&begin.2
&break.2
STH2kr #0008 ADD2 LDA2 STH2kr #0004 ADD2 LDA2 ADD2 ;mem_length_ STA2
#0000 ;mem_ ;mem_length_ LDA2 ADD2 STA
POP STH2kr INC2 INC2 LDA2 !&return
#0000
&return
POP2r JMP2r
@afree_ ( -- result* ) @afree_ ( -- result* )
OVR2r #0000 ;mem_length_ STA2 OVR2r #0000 ;mem_length_ STA2
#0000 #0000
@ -96,175 +62,7 @@
&return &return
POP2r JMP2r POP2r JMP2r
@int_to_str_ ( n* -- result* )
OVR2r LIT2r 000c SUB2r STH2kr #000a ADD2 STA2
#0006 STH2kr INC2 INC2 STA2
STH2kr #000a ADD2 LDA2 #8000 EOR2 #8000 LTH2 #00 SWP #0000 NEQ2 #00 SWP STH2kr STA
POP LDAkr STHr sext
#0000 EQU2 ?&end.1
#0000 STH2kr #000a ADD2 LDA2 SUB2 STH2kr #000a ADD2 STA2
&end.1
&begin.2
STH2kr #000a ADD2 LDA2 #000a OVR2 OVR2 sdiv/b_pos
MUL2 SUB2 #0030 ADD2 STH2kr #0004 ADD2 STH2kr INC2 INC2 LDA2k #0001 SUB2 SWP2 STA2k
POP2 ADD2 STA
POP STH2kr #000a ADD2 LDA2k #000a sdiv/b_pos
SWP2 STA2
&continue.2
#8000 STH2kr #000a ADD2 LDA2 #8000 EOR2 LTH2 ?&begin.2
&break.2
LDAkr STHr sext
#0000 EQU2 ?&end.3
#002d STH2kr #0004 ADD2 STH2kr INC2 INC2 LDA2k #0001 SUB2 SWP2 STA2k
POP2 ADD2 STA
POP
&end.3
#0006 STH2kr INC2 INC2 LDA2 SUB2 STH2kr #0004 ADD2 STH2kr INC2 INC2 LDA2 ADD2 amcpy_
!&return
#0000
&return
POP2r JMP2r
@int_to_nat_ ( n* -- result* )
OVR2r LIT2r 0002 SUB2r STH2kr STA2
STH2kr LDA2 !&return
#0000
&return
POP2r JMP2r
@nat_to_int_ ( n* -- result* )
OVR2r LIT2r 0002 SUB2r STH2kr STA2
STH2kr LDA2 !&return
#0000
&return
POP2r JMP2r
@int_add_ ( b* a* -- result* )
OVR2r LIT2r 0004 SUB2r STH2kr INC2 INC2 STA2
STH2kr STA2
STH2kr INC2 INC2 LDA2 STH2kr LDA2 ADD2 !&return
#0000
&return
POP2r JMP2r
@int_sub_ ( b* a* -- result* )
OVR2r LIT2r 0004 SUB2r STH2kr INC2 INC2 STA2
STH2kr STA2
STH2kr INC2 INC2 LDA2 STH2kr LDA2 SUB2 !&return
#0000
&return
POP2r JMP2r
@int_mul_ ( b* a* -- result* )
OVR2r LIT2r 0004 SUB2r STH2kr INC2 INC2 STA2
STH2kr STA2
STH2kr INC2 INC2 LDA2 STH2kr LDA2 MUL2 !&return
#0000
&return
POP2r JMP2r
@int_div_ ( b* a* -- result* )
OVR2r LIT2r 0004 SUB2r STH2kr INC2 INC2 STA2
STH2kr STA2
STH2kr INC2 INC2 LDA2 STH2kr LDA2 sdiv
!&return
#0000
&return
POP2r JMP2r
@int_eq_ ( b* a* -- result* )
OVR2r LIT2r 0004 SUB2r STH2kr INC2 INC2 STA2
STH2kr STA2
STH2kr INC2 INC2 LDA2 STH2kr LDA2 EQU2 #00 SWP !&return
#0000
&return
POP2r JMP2r
@int_ne_ ( b* a* -- result* )
OVR2r LIT2r 0004 SUB2r STH2kr INC2 INC2 STA2
STH2kr STA2
STH2kr INC2 INC2 LDA2 STH2kr LDA2 NEQ2 #00 SWP !&return
#0000
&return
POP2r JMP2r
@int_lt_ ( b* a* -- result* )
OVR2r LIT2r 0004 SUB2r STH2kr INC2 INC2 STA2
STH2kr STA2
STH2kr INC2 INC2 LDA2 #8000 EOR2 STH2kr LDA2 #8000 EOR2 LTH2 #00 SWP !&return
#0000
&return
POP2r JMP2r
@int_le_ ( b* a* -- result* )
OVR2r LIT2r 0004 SUB2r STH2kr INC2 INC2 STA2
STH2kr STA2
STH2kr INC2 INC2 LDA2 #8000 EOR2 STH2kr LDA2 #8000 EOR2 GTH2 #00 SWP #01 EOR !&return
#0000
&return
POP2r JMP2r
@int_gt_ ( b* a* -- result* )
OVR2r LIT2r 0004 SUB2r STH2kr INC2 INC2 STA2
STH2kr STA2
STH2kr LDA2 #8000 EOR2 STH2kr INC2 INC2 LDA2 #8000 EOR2 LTH2 #00 SWP !&return
#0000
&return
POP2r JMP2r
@int_ge_ ( b* a* -- result* )
OVR2r LIT2r 0004 SUB2r STH2kr INC2 INC2 STA2
STH2kr STA2
STH2kr LDA2 #8000 EOR2 STH2kr INC2 INC2 LDA2 #8000 EOR2 GTH2 #00 SWP #01 EOR !&return
#0000
&return
POP2r JMP2r
@int_neg_ ( f* -- result* )
OVR2r LIT2r 0002 SUB2r STH2kr STA2
#0000 STH2kr LDA2 SUB2 !&return
#0000
&return
POP2r JMP2r
@int_abs_ ( f* -- result* )
OVR2r LIT2r 0002 SUB2r STH2kr STA2
STH2kr LDA2 #8000 EOR2 #8000 LTH2 ?&then.1
STH2kr LDA2 !&end.1
&then.1
#0000 STH2kr LDA2 SUB2
&end.1
!&return
#0000
&return
POP2r JMP2r
@str/<print> ( str* -- ) @str/<print> ( str* -- )
LDAk DUP ?{ POP POP2 JMP2r } LDAk DUP ?{ POP POP2 JMP2r }
#18 DEO #18 DEO
INC2 !/<print> INC2 !/<print>
@mem_length_ #0000
@mem_

View File

@ -14,57 +14,53 @@
// //
//Console console = devmap(0x10, Console); //Console console = devmap(0x10, Console);
byte[10000] memory;
str code = "++++++++[>++++[>++>+++>+++>+<<<<-]>+>+>->>+[<]<-]>>.>---.+++++++..+++.>>.<-.<.+++.------.--------.>>+.>++."; str code = "++++++++[>++++[>++>+++>+++>+<<<<-]>+>+>->>+[<]<-]>>.>---.+++++++..+++.>>.<-.<.+++.------.--------.>>+.>++.";
bf(code); byte[10000] memory;
halt;
function bf(str code) nat mp = 0; // memory pointer
{ nat ip = 0; // instruction pointer
nat mp; // memory pointer
nat ip = 0; // instruction pointer while (ip < code.length) {
while (ip < code.length) { if (code[ip] == '>') {
if (ip > code.length) { return; } mp = mp + 1;
if (mp > memory.length) { return; } } else if (code[ip] == '<') {
if (code[ip] == '>') { mp = mp - 1;
mp = mp + 1; } else if (code[ip] == '+') {
} else if (code[ip] == '<') { memory[mp] = memory[mp] + 1;
mp = mp - 1; } else if (code[ip] == '-') {
} else if (code[ip] == '+') { memory[mp] = memory[mp] - 1;
memory[mp] = memory[mp] + 1; } else if (code[ip] == '.') {
} else if (code[ip] == '-') { // console.write = memory[mp];
memory[mp] = memory[mp] - 1; write = memory[mp];
} else if (code[ip] == '.') { } else if (code[ip] == ',') {
// console.write = memory[mp]; // memory[mp] = console.read;
write = memory[mp]; memory[mp] = read;
} else if (code[ip] == ',') { } else if (code[ip] == '[') {
// memory[mp] = console.read; if(!memory[mp]) {
memory[mp] = read; nat nc = 1;
} else if (code[ip] == '[') { while (nc > 0) {
if(!memory[mp]) { ip = ip + 1;
nat nc = 1; if (code[ip] == '[') {
while (nc > 0) { nc = nc + 1;
ip = ip + 1; } else if (code[ip] == ']') {
if (code[ip] == '[') { nc = nc - 1;
nc = nc + 1; }
} else if (code[ip] == ']') { }
nc = nc - 1; }
} } else if (code[ip] == ']') {
} if (memory[mp]) {
} nat nc = 1;
} else if (code[ip] == ']') { while (nc > 0) {
if (memory[mp]) { ip = ip - 1;
nat nc = 1; if (code[ip] == ']') {
while (nc > 0) { nc = nc + 1;
ip = ip - 1; } else if (code[ip] == '[') {
if (code[ip] == ']') { nc = nc - 1;
nc = nc + 1; }
} else if (code[ip] == '[') { }
nc = nc - 1; }
} }
} ip = ip + 1;
}
}
ip = ip + 1;
}
} }
halt;