/contrib/network/netsurf/libnsfb/src/surface/Makefile |
---|
0,0 → 1,7 |
# Sources |
OBJS := surface.o able.o ram.o linux.o sdl.o kolibri.o |
OUTFILE = sup.o |
CFLAGS += -I ../../include/ -I ../../ -I ../ -I ./ -I /home/sourcerer/kos_src/newenginek/kolibri/include |
include $(MENUETDEV)/makefiles/Makefile_for_o_lib |
/contrib/network/netsurf/libnsfb/src/surface/kolibri.c |
---|
0,0 → 1,545 |
/* |
* Copyright 2013 SoUrcerer sourcerer@bk.ru |
* |
* This file is part of libnsfb, http://www.netsurf-browser.org/ |
* Licenced under the MIT License, |
* http://www.opensource.org/licenses/mit-license.php |
*/ |
#include <stdbool.h> |
#include <stdlib.h> |
#include "libnsfb.h" |
#include "libnsfb_event.h" |
#include "libnsfb_plot.h" |
#include "libnsfb_plot_util.h" |
#include "nsfb.h" |
#include "surface.h" |
#include "palette.h" |
#include "plot.h" |
#include "cursor.h" |
#include <menuet/os.h> |
unsigned char * pixels; |
inline void f65(unsigned x, unsigned y, unsigned w, unsigned h, char *d) |
{ |
asm("pusha"); |
asm ("nop"::"D"(0), "c"(w*65536+h), "d"(x*65536+y), "b"(d)); |
asm ("xor %eax, %eax"); |
asm ("movl %eax, %ebp"); |
asm ("pushl $32"); |
asm ("popl %esi"); |
asm ("int $0x40"::"a"(65)); |
asm("popa"); |
} |
unsigned kol_mouse_posw() |
{ |
unsigned error; |
asm volatile ("int $0x40":"=a"(error):"a"(37), "b"(1)); |
return error; |
} |
unsigned kol_mouse_btn() |
{ |
unsigned error; |
asm volatile ("int $0x40":"=a"(error):"a"(37), "b"(2)); |
return error; |
} |
unsigned kol_scancodes() |
{ |
unsigned error; |
asm volatile ("int $0x40":"=a"(error):"a"(66), "b"(1), "c"(1)); |
return error; |
} |
void kolibri_redraw(nsfb_t *nsfb){ |
f65(0,0, nsfb->width, nsfb->height, pixels); |
} |
unsigned kol_skin_h() |
{ |
unsigned error; |
asm volatile ("int $0x40":"=a"(error):"a"(48), "b"(4)); |
return error; |
} |
unsigned kol_area(char *data) |
{ |
unsigned error; |
asm volatile ("int $0x40":"=a"(error):"a"(9), "b"(data), "c"(0xffffffff)); |
return error; |
} |
void kolibri_window_redraw(nsfb_t *nsfb){ |
__menuet__window_redraw(1); |
__menuet__define_window(100,100,nsfb->width+9,nsfb->height+kol_skin_h(),0x34000080,0x800000FF,"Netsurf"); |
//__menuet__write_text(3,3,0xFFFFFF,"Netsurf",7); |
//__menuet__debug_out("f65 is mighty!\n"); |
//here put image pixels! it's 32bpp |
f65(0,0, nsfb->width, nsfb->height, pixels); |
__menuet__window_redraw(2); |
} |
static bool |
kolibricopy(nsfb_t *nsfb, nsfb_bbox_t *srcbox, nsfb_bbox_t *dstbox) |
{ |
char *pixels = nsfb->surface_priv; |
nsfb_bbox_t allbox; |
struct nsfb_cursor_s *cursor = nsfb->cursor; |
nsfb_plot_add_rect(srcbox, dstbox, &allbox); |
int x,y,w,h; |
x = srcbox->x0; |
y = srcbox->y0; |
w = srcbox->x1 - srcbox->x0; |
h = srcbox->y1 - srcbox->y0; |
int tx, ty, tw, th; |
tx = dstbox->x0; |
ty = dstbox->y0; |
tw = dstbox->x1 - dstbox->x0; |
th = dstbox->y1 - dstbox->y0; |
// char pst[255]; |
// sprintf (pst, "Src %d,%d %dx%d Dst %d,%d %dx%d \n", x,y,w,h,tx,ty,tw,th); |
// __menuet__debug_out(pst); |
int px, py, pp; |
for (px=x; px<w; px++) |
for (py=y;py<h;py++) |
for (pp=0; pp<4; pp++) { |
pixels[4*(px+tx)*nsfb->width+4*(py+ty)+pp]=pixels[4*px*nsfb->width+4*py+pp]; |
} |
kolibri_redraw(nsfb); |
return true; |
} |
static int kolibri_set_geometry(nsfb_t *nsfb, int width, int height, |
enum nsfb_format_e format) |
{ |
if (nsfb->surface_priv != NULL) |
return -1; /* fail if surface already initialised */ |
nsfb->width = width; |
nsfb->height = height; |
nsfb->format = format; |
pixels=(char *)malloc(width*height*4); |
/* select default sw plotters for format */ |
select_plotters(nsfb); |
//nsfb->plotter_fns->copy = kolibricopy; |
return 0; |
} |
unsigned pz, pb; |
static int kolibri_initialise(nsfb_t *nsfb) |
{ |
enum nsfb_format_e fmt; |
kol_scancodes(); |
pz=0; |
pb=0; |
__menuet__debug_out("Start UI\n"); |
if (nsfb->surface_priv != NULL) |
return -1; |
/* sanity checked depth. */ |
if ((nsfb->bpp != 32) ) { |
__menuet__debug_out("Wrong bpp\n"); |
return -1; } |
fmt = NSFB_FMT_XRGB8888; |
/* If we didn't get what we asked for, reselect plotters */ |
if (nsfb->format != fmt) { |
nsfb->format = fmt; |
if (kolibri_set_geometry(nsfb, nsfb->width, nsfb->height, |
nsfb->format) != 0) { |
__menuet__debug_out("can't set geometry\n"); |
return -1; |
} |
} |
nsfb->surface_priv = pixels; |
nsfb->ptr = pixels; |
nsfb->linelen = (nsfb->width * nsfb->bpp) / 8; |
__menuet__debug_out("Redraw\n"); |
kolibri_redraw(nsfb); |
__menuet__set_bitfield_for_wanted_events(EVENT_REDRAW|EVENT_KEY|EVENT_BUTTON|EVENT_MOUSE_CHANGE); |
return 0; |
} |
static int kolibri_finalise(nsfb_t *nsfb) |
{ |
nsfb=nsfb; |
__menuet__sys_exit(); |
return 0; |
} |
int isup(int scan){ |
return (scan&0x80)>>7; |
} |
int scan2key(int scan){ |
int keycode=(scan&0x0FF7F); |
/* MAIN KB - NUMS */ |
if (keycode == 0x02) return NSFB_KEY_1; |
if (keycode == 0x03) return NSFB_KEY_2; |
if (keycode == 0x04) return NSFB_KEY_3; |
if (keycode == 0x05) return NSFB_KEY_4; |
if (keycode == 0x06) return NSFB_KEY_5; |
if (keycode == 0x07) return NSFB_KEY_6; |
if (keycode == 0x08) return NSFB_KEY_7; |
if (keycode == 0x09) return NSFB_KEY_8; |
if (keycode == 0x0A) return NSFB_KEY_9; |
if (keycode == 0x0B) return NSFB_KEY_0; |
if (keycode == 0x10) return NSFB_KEY_q; |
if (keycode == 0x11) return NSFB_KEY_w; |
if (keycode == 0x12) return NSFB_KEY_e; |
if (keycode == 0x13) return NSFB_KEY_r; |
if (keycode == 0x14) return NSFB_KEY_t; |
if (keycode == 0x15) return NSFB_KEY_y; |
if (keycode == 0x16) return NSFB_KEY_u; |
if (keycode == 0x17) return NSFB_KEY_i; |
if (keycode == 0x18) return NSFB_KEY_o; |
if (keycode == 0x19) return NSFB_KEY_p; |
if (keycode == 0x1A) return NSFB_KEY_LEFTBRACKET; |
if (keycode == 0x1B) return NSFB_KEY_RIGHTBRACKET; |
if (keycode == 0x1E) return NSFB_KEY_a; |
if (keycode == 0x1F) return NSFB_KEY_s; |
if (keycode == 0x20) return NSFB_KEY_d; |
if (keycode == 0x21) return NSFB_KEY_f; |
if (keycode == 0x22) return NSFB_KEY_g; |
if (keycode == 0x23) return NSFB_KEY_h; |
if (keycode == 0x24) return NSFB_KEY_j; |
if (keycode == 0x25) return NSFB_KEY_k; |
if (keycode == 0x26) return NSFB_KEY_l; |
if (keycode == 0x2C) return NSFB_KEY_z; |
if (keycode == 0x2D) return NSFB_KEY_x; |
if (keycode == 0x2E) return NSFB_KEY_c; |
if (keycode == 0x2F) return NSFB_KEY_v; |
if (keycode == 0x30) return NSFB_KEY_b; |
if (keycode == 0x31) return NSFB_KEY_n; |
if (keycode == 0x32) return NSFB_KEY_m; |
if (keycode == 0x27) return NSFB_KEY_SEMICOLON; |
if (keycode == 0x28) return NSFB_KEY_QUOTEDBL; |
if (keycode == 0x2B) return NSFB_KEY_BACKSLASH; |
if (keycode == 0x33) return NSFB_KEY_COMMA; |
if (keycode == 0x34) return NSFB_KEY_PERIOD; |
if (keycode == 0x35) return NSFB_KEY_SLASH; |
if (keycode == 0x0C) return NSFB_KEY_MINUS; |
if (keycode == 0x0D) return NSFB_KEY_EQUALS; |
if (keycode == 0x0E) return NSFB_KEY_BACKSPACE; |
if (keycode == 0xE053) return NSFB_KEY_DELETE; |
if (keycode == 0x2A) return NSFB_KEY_LSHIFT; |
if (keycode == 0x36) return NSFB_KEY_RSHIFT; |
if (keycode == 0x1C) return NSFB_KEY_RETURN; |
if (keycode == 0xE04B) return NSFB_KEY_LEFT; |
if (keycode == 0xE04D) return NSFB_KEY_RIGHT; |
if (keycode == 0xE048) return NSFB_KEY_UP; |
if (keycode == 0xE050) return NSFB_KEY_DOWN; |
if (keycode == 0x3F) return NSFB_KEY_F5; |
if (keycode == 0x39) return NSFB_KEY_SPACE; |
if (keycode == 0x01) return NSFB_KEY_ESCAPE; |
if (keycode == 0x38) return NSFB_KEY_LALT; |
if (keycode == 0x1D) return NSFB_KEY_LCTRL; |
if (keycode == 0xE038) return NSFB_KEY_RALT; |
if (keycode == 0xE01D) return NSFB_KEY_RCTRL; |
if (keycode == 0xE047) return NSFB_KEY_HOME; |
if (keycode == 0xE04F) return NSFB_KEY_END; |
if (keycode == 0xE049) return NSFB_KEY_PAGEUP; |
if (keycode == 0xE051) return NSFB_KEY_PAGEDOWN; |
return NSFB_KEY_UNKNOWN; |
} |
int ispowerkey(int scan){ |
return (scan&0xE000)>>15; |
} |
static bool kolibri_input(nsfb_t *nsfb, nsfb_event_t *event, int timeout) |
{ |
int got_event; |
static int scanfull=0; |
nsfb = nsfb; /* unused */ |
got_event = __menuet__check_for_event(); |
if (got_event == 0) { |
return false; |
} |
event->type = NSFB_EVENT_NONE; |
if (got_event==1) { //key pressed |
kolibri_window_redraw(nsfb); |
} |
if (got_event==2) { //key pressed |
int scanz = __menuet__getkey(); |
//char dbs[64]; |
//__menuet__debug_out("KEY PRESSED\n"); |
// sprintf (dbs, "FULLKEY BEFORE: F:%x\n", scanfull); |
//__menuet__debug_out(dbs); |
if (scanz==0xE0) { |
scanfull=0xE000; |
return true; |
} else { |
scanfull=scanfull+scanz; |
} |
//sprintf (dbs, "FULLKEY AFTER: F:%x\n", scanfull); |
//__menuet__debug_out(dbs); |
if (isup(scanfull)==1) { |
event->type = NSFB_EVENT_KEY_UP;} else { |
event->type = NSFB_EVENT_KEY_DOWN;} |
event->value.keycode = scan2key(scanfull); |
//sprintf (dbs, "KEY: %x F:%x %d %d\n", scanz, scanfull, isup(scanz), scan2key(scanz)); |
//__menuet__debug_out(dbs); |
scanfull=0; |
return true; |
} |
if (got_event==3) { //key pressed |
if (__menuet__get_button_id()==1) kolibri_finalise(nsfb); |
return true; |
} |
if (got_event==6) { //key pressed |
unsigned z=kol_mouse_posw(); |
unsigned b=kol_mouse_btn(); |
if (pz!=z) { |
event->type = NSFB_EVENT_MOVE_ABSOLUTE; |
event->value.vector.x = (z&0xffff0000)>>16; //sdlevent.motion.x; |
event->value.vector.y = z&0xffff; //sdlevent.motion.y; |
event->value.vector.z = 0; |
pz=z; |
return true; |
} |
if (pb!=b) { |
unsigned t=b&1; |
if (t==0) { |
event->type = NSFB_EVENT_KEY_UP; |
event->value.keycode = NSFB_KEY_MOUSE_1; |
} else { |
event->type = NSFB_EVENT_KEY_DOWN; |
event->value.keycode = NSFB_KEY_MOUSE_1; |
} |
pb=b; |
return true; |
} |
} |
/* |
case SDL_MOUSEBUTTONDOWN: |
event->type = NSFB_EVENT_KEY_DOWN; |
switch (sdlevent.button.button) { |
case SDL_BUTTON_LEFT: |
event->value.keycode = NSFB_KEY_MOUSE_1; |
break; |
case SDL_BUTTON_MIDDLE: |
event->value.keycode = NSFB_KEY_MOUSE_2; |
break; |
case SDL_BUTTON_RIGHT: |
event->value.keycode = NSFB_KEY_MOUSE_3; |
break; |
} |
break; |
case SDL_MOUSEBUTTONUP: |
event->type = NSFB_EVENT_KEY_UP; |
switch (sdlevent.button.button) { |
case SDL_BUTTON_LEFT: |
event->value.keycode = NSFB_KEY_MOUSE_1; |
break; |
case SDL_BUTTON_MIDDLE: |
event->value.keycode = NSFB_KEY_MOUSE_2; |
break; |
case SDL_BUTTON_RIGHT: |
event->value.keycode = NSFB_KEY_MOUSE_3; |
break; |
} |
break; |
case SDL_MOUSEMOTION: |
event->type = NSFB_EVENT_MOVE_ABSOLUTE; |
event->value.vector.x = sdlevent.motion.x; |
event->value.vector.y = sdlevent.motion.y; |
event->value.vector.z = 0; |
break; |
case SDL_QUIT: |
event->type = NSFB_EVENT_CONTROL; |
event->value.controlcode = NSFB_CONTROL_QUIT; |
break; |
case SDL_USEREVENT: |
event->type = NSFB_EVENT_CONTROL; |
event->value.controlcode = NSFB_CONTROL_TIMEOUT; |
break; |
} |
*/ |
return true; |
} |
static int kolibri_claim(nsfb_t *nsfb, nsfb_bbox_t *box) |
{ |
/* |
if ((cursor != NULL) && |
(cursor->plotted == true) && |
(nsfb_plot_bbox_intersect(box, &cursor->loc))) { |
nsfb_cursor_clear(nsfb, cursor); |
} */ |
return 0; //stub yet |
} |
static int kolibri_cursor(nsfb_t *nsfb, struct nsfb_cursor_s *cursor) |
{ |
return true; //stub yet |
} |
static int kolibri_update(nsfb_t *nsfb, nsfb_bbox_t *box) |
{ |
/*SDL_Surface *sdl_screen = nsfb->surface_priv; |
struct nsfb_cursor_s *cursor = nsfb->cursor; |
if ((cursor != NULL) && |
(cursor->plotted == false)) { |
nsfb_cursor_plot(nsfb, cursor); |
} |
SDL_UpdateRect(sdl_screen, |
box->x0, |
box->y0, |
box->x1 - box->x0, |
box->y1 - box->y0); |
*/ |
//Ask for window redraw here! |
kolibri_redraw(nsfb); |
return 0; |
} |
const nsfb_surface_rtns_t kolibri_rtns = { |
.initialise = kolibri_initialise, |
.finalise = kolibri_finalise, |
.input = kolibri_input, |
.claim = kolibri_claim, |
.update = kolibri_update, |
.cursor = kolibri_cursor, |
.geometry = kolibri_set_geometry, |
}; |
NSFB_SURFACE_DEF(kolibri, NSFB_SURFACE_KOLIBRI, &kolibri_rtns) |
/* |
* Local variables: |
* c-basic-offset: 4 |
* tab-width: 8 |
* End: |
*/ |
/contrib/network/netsurf/libnsfb/src/surface/able.c |
---|
0,0 → 1,59 |
/* |
* Copyright 2009 Vincent Sanders <vince@simtec.co.uk> |
* |
* This file is part of libnsfb, http://www.netsurf-browser.org/ |
* Licenced under the MIT License, |
* http://www.opensource.org/licenses/mit-license.php |
*/ |
#include <stdbool.h> |
#include <stdio.h> |
#include "libnsfb.h" |
#include "libnsfb_plot.h" |
#include "libnsfb_event.h" |
#include "nsfb.h" |
#include "surface.h" |
#define UNUSED(x) ((x) = (x)) |
static int able_set_geometry(nsfb_t *nsfb, int width, int height, enum nsfb_format_e format) |
{ |
if (nsfb->surface_priv != NULL) |
return -1; /* if were already initialised fail */ |
nsfb->width = width; |
nsfb->height = height; |
nsfb->format = format; |
return 0; |
} |
static int able_initialise(nsfb_t *nsfb) |
{ |
UNUSED(nsfb); |
return 0; |
} |
static int able_finalise(nsfb_t *nsfb) |
{ |
UNUSED(nsfb); |
return 0; |
} |
static bool able_input(nsfb_t *nsfb, nsfb_event_t *event, int timeout) |
{ |
UNUSED(nsfb); |
UNUSED(event); |
UNUSED(timeout); |
return false; |
} |
const nsfb_surface_rtns_t able_rtns = { |
.initialise = able_initialise, |
.finalise = able_finalise, |
.input = able_input, |
.geometry = able_set_geometry, |
}; |
NSFB_SURFACE_DEF(able, NSFB_SURFACE_ABLE, &able_rtns) |
/contrib/network/netsurf/libnsfb/src/surface/linux.c |
---|
0,0 → 1,109 |
/* |
* Copyright 2012 Vincent Sanders <vince@simtec.co.uk> |
* |
* This file is part of libnsfb, http://www.netsurf-browser.org/ |
* Licenced under the MIT License, |
* http://www.opensource.org/licenses/mit-license.php |
*/ |
#include <stdbool.h> |
#include <stdio.h> |
#include <stdlib.h> |
#include <sys/types.h> |
#include <sys/stat.h> |
#include <sys/ioctl.h> |
#include <fcntl.h> |
#include <string.h> |
#include <errno.h> |
#include <unistd.h> |
#include <sys/mman.h> |
//#include <linux/fb.h> |
#include "libnsfb.h" |
#include "libnsfb_event.h" |
#include "libnsfb_plot.h" |
#include "libnsfb_plot_util.h" |
#include "nsfb.h" |
#include "plot.h" |
#include "surface.h" |
#include "cursor.h" |
#define UNUSED(x) ((x) = (x)) |
#define FB_NAME "/dev/fb0" |
struct lnx_priv { |
int fd; |
}; |
static int linux_set_geometry(nsfb_t *nsfb, int width, int height, enum nsfb_format_e format) |
{ |
return -1; |
} |
static enum nsfb_format_e |
format_from_lstate(void ) |
{ |
return 0; |
} |
static int linux_initialise(nsfb_t *nsfb) |
{ |
return -1; |
} |
static int linux_finalise(nsfb_t *nsfb) |
{ |
return 0; |
} |
static bool linux_input(nsfb_t *nsfb, nsfb_event_t *event, int timeout) |
{ |
UNUSED(nsfb); |
UNUSED(event); |
UNUSED(timeout); |
return false; |
} |
static int linux_claim(nsfb_t *nsfb, nsfb_bbox_t *box) |
{ |
return 0; |
} |
static int linux_cursor(nsfb_t *nsfb, struct nsfb_cursor_s *cursor) |
{ |
return true; |
} |
static int linux_update(nsfb_t *nsfb, nsfb_bbox_t *box) |
{ |
return 0; |
} |
const nsfb_surface_rtns_t linux_rtns = { |
.initialise = linux_initialise, |
.finalise = linux_finalise, |
.input = linux_input, |
.claim = linux_claim, |
.update = linux_update, |
.cursor = linux_cursor, |
.geometry = linux_set_geometry, |
}; |
NSFB_SURFACE_DEF(linux, NSFB_SURFACE_LINUX, &linux_rtns) |
/* |
* Local variables: |
* c-basic-offset: 4 |
* tab-width: 8 |
* End: |
*/ |
/contrib/network/netsurf/libnsfb/src/surface/ram.c |
---|
0,0 → 1,108 |
/* |
* Copyright 2009 Vincent Sanders <vince@simtec.co.uk> |
* |
* This file is part of libnsfb, http://www.netsurf-browser.org/ |
* Licenced under the MIT License, |
* http://www.opensource.org/licenses/mit-license.php |
*/ |
#include <stdbool.h> |
#include <stdio.h> |
#include <stdlib.h> |
#include "libnsfb.h" |
#include "libnsfb_plot.h" |
#include "libnsfb_event.h" |
#include "nsfb.h" |
#include "surface.h" |
#include "plot.h" |
#define UNUSED(x) ((x) = (x)) |
static int ram_defaults(nsfb_t *nsfb) |
{ |
nsfb->width = 0; |
nsfb->height = 0; |
nsfb->format = NSFB_FMT_ABGR8888; |
/* select default sw plotters for bpp */ |
select_plotters(nsfb); |
return 0; |
} |
static int ram_initialise(nsfb_t *nsfb) |
{ |
size_t size = (nsfb->width * nsfb->height * nsfb->bpp) / 8; |
nsfb->ptr = realloc(nsfb->ptr, size); |
nsfb->linelen = (nsfb->width * nsfb->bpp) / 8; |
return 0; |
} |
static int ram_set_geometry(nsfb_t *nsfb, int width, int height, enum nsfb_format_e format) |
{ |
int startsize; |
int endsize; |
startsize = (nsfb->width * nsfb->height * nsfb->bpp) / 8; |
if (width > 0) { |
nsfb->width = width; |
} |
if (height > 0) { |
nsfb->height = height; |
} |
if (format != NSFB_FMT_ANY) { |
nsfb->format = format; |
} |
/* select soft plotters appropriate for format */ |
select_plotters(nsfb); |
endsize = (nsfb->width * nsfb->height * nsfb->bpp) / 8; |
if ((nsfb->ptr != NULL) && (startsize != endsize)) { |
nsfb->ptr = realloc(nsfb->ptr, endsize); |
} |
nsfb->linelen = (nsfb->width * nsfb->bpp) / 8; |
return 0; |
} |
static int ram_finalise(nsfb_t *nsfb) |
{ |
free(nsfb->ptr); |
return 0; |
} |
static bool ram_input(nsfb_t *nsfb, nsfb_event_t *event, int timeout) |
{ |
UNUSED(nsfb); |
UNUSED(event); |
UNUSED(timeout); |
return false; |
} |
const nsfb_surface_rtns_t ram_rtns = { |
.defaults = ram_defaults, |
.initialise = ram_initialise, |
.finalise = ram_finalise, |
.input = ram_input, |
.geometry = ram_set_geometry, |
}; |
NSFB_SURFACE_DEF(ram, NSFB_SURFACE_RAM, &ram_rtns) |
/* |
* Local variables: |
* c-basic-offset: 4 |
* tab-width: 8 |
* End: |
*/ |
/contrib/network/netsurf/libnsfb/src/surface/sdl.c |
---|
0,0 → 1,736 |
/* |
* Copyright 2009 Vincent Sanders <vince@simtec.co.uk> |
* |
* This file is part of libnsfb, http://www.netsurf-browser.org/ |
* Licenced under the MIT License, |
* http://www.opensource.org/licenses/mit-license.php |
*/ |
#include <stdbool.h> |
#include <stdlib.h> |
#include <SDL/SDL.h> |
#include "libnsfb.h" |
#include "libnsfb_event.h" |
#include "libnsfb_plot.h" |
#include "libnsfb_plot_util.h" |
#include "nsfb.h" |
#include "surface.h" |
#include "palette.h" |
#include "plot.h" |
#include "cursor.h" |
enum nsfb_key_code_e sdl_nsfb_map[] = { |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_BACKSPACE, |
NSFB_KEY_TAB, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_CLEAR, |
NSFB_KEY_RETURN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_PAUSE, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_ESCAPE, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_SPACE, |
NSFB_KEY_EXCLAIM, |
NSFB_KEY_QUOTEDBL, |
NSFB_KEY_HASH, |
NSFB_KEY_DOLLAR, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_AMPERSAND, |
NSFB_KEY_QUOTE, |
NSFB_KEY_LEFTPAREN, |
NSFB_KEY_RIGHTPAREN, |
NSFB_KEY_ASTERISK, |
NSFB_KEY_PLUS, |
NSFB_KEY_COMMA, |
NSFB_KEY_MINUS, |
NSFB_KEY_PERIOD, |
NSFB_KEY_SLASH, |
NSFB_KEY_0, |
NSFB_KEY_1, |
NSFB_KEY_2, |
NSFB_KEY_3, |
NSFB_KEY_4, |
NSFB_KEY_5, |
NSFB_KEY_6, |
NSFB_KEY_7, |
NSFB_KEY_8, |
NSFB_KEY_9, |
NSFB_KEY_COLON, |
NSFB_KEY_SEMICOLON, |
NSFB_KEY_LESS, |
NSFB_KEY_EQUALS, |
NSFB_KEY_GREATER, |
NSFB_KEY_QUESTION, |
NSFB_KEY_AT, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_LEFTBRACKET, |
NSFB_KEY_BACKSLASH, |
NSFB_KEY_RIGHTBRACKET, |
NSFB_KEY_CARET, |
NSFB_KEY_UNDERSCORE, |
NSFB_KEY_BACKQUOTE, |
NSFB_KEY_a, |
NSFB_KEY_b, |
NSFB_KEY_c, |
NSFB_KEY_d, |
NSFB_KEY_e, |
NSFB_KEY_f, |
NSFB_KEY_g, |
NSFB_KEY_h, |
NSFB_KEY_i, |
NSFB_KEY_j, |
NSFB_KEY_k, |
NSFB_KEY_l, |
NSFB_KEY_m, |
NSFB_KEY_n, |
NSFB_KEY_o, |
NSFB_KEY_p, |
NSFB_KEY_q, |
NSFB_KEY_r, |
NSFB_KEY_s, |
NSFB_KEY_t, |
NSFB_KEY_u, |
NSFB_KEY_v, |
NSFB_KEY_w, |
NSFB_KEY_x, |
NSFB_KEY_y, |
NSFB_KEY_z, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_DELETE, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_KP0, |
NSFB_KEY_KP1, |
NSFB_KEY_KP2, |
NSFB_KEY_KP3, |
NSFB_KEY_KP4, |
NSFB_KEY_KP5, |
NSFB_KEY_KP6, |
NSFB_KEY_KP7, |
NSFB_KEY_KP8, |
NSFB_KEY_KP9, |
NSFB_KEY_KP_PERIOD, |
NSFB_KEY_KP_DIVIDE, |
NSFB_KEY_KP_MULTIPLY, |
NSFB_KEY_KP_MINUS, |
NSFB_KEY_KP_PLUS, |
NSFB_KEY_KP_ENTER, |
NSFB_KEY_KP_EQUALS, |
NSFB_KEY_UP, |
NSFB_KEY_DOWN, |
NSFB_KEY_RIGHT, |
NSFB_KEY_LEFT, |
NSFB_KEY_INSERT, |
NSFB_KEY_HOME, |
NSFB_KEY_END, |
NSFB_KEY_PAGEUP, |
NSFB_KEY_PAGEDOWN, |
NSFB_KEY_F1, |
NSFB_KEY_F2, |
NSFB_KEY_F3, |
NSFB_KEY_F4, |
NSFB_KEY_F5, |
NSFB_KEY_F6, |
NSFB_KEY_F7, |
NSFB_KEY_F8, |
NSFB_KEY_F9, |
NSFB_KEY_F10, |
NSFB_KEY_F11, |
NSFB_KEY_F12, |
NSFB_KEY_F13, |
NSFB_KEY_F14, |
NSFB_KEY_F15, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_NUMLOCK, |
NSFB_KEY_CAPSLOCK, |
NSFB_KEY_SCROLLOCK, |
NSFB_KEY_RSHIFT, |
NSFB_KEY_LSHIFT, |
NSFB_KEY_RCTRL, |
NSFB_KEY_LCTRL, |
NSFB_KEY_RALT, |
NSFB_KEY_LALT, |
NSFB_KEY_RMETA, |
NSFB_KEY_LMETA, |
NSFB_KEY_LSUPER, |
NSFB_KEY_RSUPER, |
NSFB_KEY_MODE, |
NSFB_KEY_COMPOSE, |
NSFB_KEY_HELP, |
NSFB_KEY_PRINT, |
NSFB_KEY_SYSREQ, |
NSFB_KEY_BREAK, |
NSFB_KEY_MENU, |
NSFB_KEY_POWER, |
NSFB_KEY_EURO, |
NSFB_KEY_UNDO, |
}; |
static void |
set_palette(nsfb_t *nsfb) |
{ |
SDL_Surface *sdl_screen = nsfb->surface_priv; |
SDL_Color palette[256]; |
int loop = 0; |
/* Get libnsfb palette */ |
nsfb_palette_generate_nsfb_8bpp(nsfb->palette); |
/* Create SDL palette from nsfb palette */ |
for (loop = 0; loop < 256; loop++) { |
palette[loop].r = (nsfb->palette->data[loop] ) & 0xFF; |
palette[loop].g = (nsfb->palette->data[loop] >> 8) & 0xFF; |
palette[loop].b = (nsfb->palette->data[loop] >> 16) & 0xFF; |
} |
/* Set SDL palette */ |
SDL_SetColors(sdl_screen, palette, 0, 256); |
} |
static bool |
sdlcopy(nsfb_t *nsfb, nsfb_bbox_t *srcbox, nsfb_bbox_t *dstbox) |
{ |
SDL_Rect src; |
SDL_Rect dst; |
SDL_Surface *sdl_screen = nsfb->surface_priv; |
nsfb_bbox_t allbox; |
struct nsfb_cursor_s *cursor = nsfb->cursor; |
nsfb_plot_add_rect(srcbox, dstbox, &allbox); |
/* clear the cursor if its within the region to be altered */ |
if ((cursor != NULL) && |
(cursor->plotted == true) && |
(nsfb_plot_bbox_intersect(&allbox, &cursor->loc))) { |
nsfb_cursor_clear(nsfb, cursor); |
} |
src.x = srcbox->x0; |
src.y = srcbox->y0; |
src.w = srcbox->x1 - srcbox->x0; |
src.h = srcbox->y1 - srcbox->y0; |
dst.x = dstbox->x0; |
dst.y = dstbox->y0; |
dst.w = dstbox->x1 - dstbox->x0; |
dst.h = dstbox->y1 - dstbox->y0; |
SDL_BlitSurface(sdl_screen, &src, sdl_screen , &dst); |
if ((cursor != NULL) && |
(cursor->plotted == false)) { |
nsfb_cursor_plot(nsfb, cursor); |
} |
SDL_UpdateRect(sdl_screen, dst.x, dst.y, dst.w, dst.h); |
return true; |
} |
static int sdl_set_geometry(nsfb_t *nsfb, int width, int height, |
enum nsfb_format_e format) |
{ |
if (nsfb->surface_priv != NULL) |
return -1; /* fail if surface already initialised */ |
nsfb->width = width; |
nsfb->height = height; |
nsfb->format = format; |
/* select default sw plotters for format */ |
select_plotters(nsfb); |
nsfb->plotter_fns->copy = sdlcopy; |
return 0; |
} |
static int sdl_initialise(nsfb_t *nsfb) |
{ |
SDL_Surface *sdl_screen; |
SDL_PixelFormat *sdl_fmt; |
enum nsfb_format_e fmt; |
if (nsfb->surface_priv != NULL) |
return -1; |
/* sanity checked depth. */ |
if ((nsfb->bpp != 32) && (nsfb->bpp != 16) && (nsfb->bpp != 8)) |
return -1; |
/* initialise SDL library */ |
if (SDL_Init(SDL_INIT_TIMER | SDL_INIT_VIDEO) < 0 ) { |
fprintf(stderr, "Unable to init SDL: %s\n", SDL_GetError()); |
return -1; |
} |
sdl_screen = SDL_SetVideoMode(nsfb->width, |
nsfb->height, |
nsfb->bpp, |
SDL_SWSURFACE); |
if (sdl_screen == NULL ) { |
fprintf(stderr, "Unable to set video: %s\n", SDL_GetError()); |
return -1; |
} |
/* find out what pixel format we got */ |
sdl_fmt = sdl_screen->format; |
switch (sdl_fmt->BitsPerPixel) { |
case 32: |
if (sdl_fmt->Rshift == 0) |
fmt = NSFB_FMT_XBGR8888; |
else |
fmt = NSFB_FMT_XRGB8888; |
break; |
default: |
fmt = nsfb->format; |
break; |
} |
/* If we didn't get what we asked for, reselect plotters */ |
if (nsfb->format != fmt) { |
nsfb->format = fmt; |
if (sdl_set_geometry(nsfb, nsfb->width, nsfb->height, |
nsfb->format) != 0) { |
return -1; |
} |
} |
nsfb->surface_priv = sdl_screen; |
if (nsfb->bpp == 8) { |
nsfb_palette_new(&nsfb->palette, nsfb->width); |
set_palette(nsfb); |
} |
nsfb->ptr = sdl_screen->pixels; |
nsfb->linelen = sdl_screen->pitch; |
SDL_ShowCursor(SDL_DISABLE); |
SDL_EnableKeyRepeat(300, 50); |
return 0; |
} |
static int sdl_finalise(nsfb_t *nsfb) |
{ |
nsfb=nsfb; |
SDL_Quit(); |
return 0; |
} |
static uint32_t wakeeventtimer(uint32_t ival, void *param) |
{ |
SDL_Event event; |
ival = ival; |
param = param; |
event.type = SDL_USEREVENT; |
event.user.code = 0; |
event.user.data1 = 0; |
event.user.data2 = 0; |
SDL_PushEvent(&event); |
return 0; |
} |
static bool sdl_input(nsfb_t *nsfb, nsfb_event_t *event, int timeout) |
{ |
int got_event; |
SDL_Event sdlevent; |
nsfb = nsfb; /* unused */ |
//if (timeout == 0) { |
got_event = SDL_PollEvent(&sdlevent); |
/*} else { |
if (timeout > 0) { |
/* setup wake timer to ensure the wait event below exits no later |
* than when the timeout has occoured. |
*/ |
// SDL_TimerID tid; |
// tid = SDL_AddTimer(timeout, wakeeventtimer, NULL); |
// got_event = SDL_WaitEvent(&sdlevent); |
// if ((got_event == 0) || (sdlevent.type != SDL_USEREVENT)) { |
// SDL_RemoveTimer(tid); |
// } |
// } else { |
// got_event = SDL_WaitEvent(&sdlevent); |
// } |
//} |
/* Do nothing if there was no event */ |
if (got_event == 0) { |
return false; |
} |
event->type = NSFB_EVENT_NONE; |
switch (sdlevent.type) { |
case SDL_KEYDOWN: |
event->type = NSFB_EVENT_KEY_DOWN; |
event->value.keycode = sdl_nsfb_map[sdlevent.key.keysym.sym]; |
break; |
case SDL_KEYUP: |
event->type = NSFB_EVENT_KEY_UP; |
event->value.keycode = sdl_nsfb_map[sdlevent.key.keysym.sym]; |
break; |
case SDL_MOUSEBUTTONDOWN: |
event->type = NSFB_EVENT_KEY_DOWN; |
switch (sdlevent.button.button) { |
case SDL_BUTTON_LEFT: |
event->value.keycode = NSFB_KEY_MOUSE_1; |
break; |
case SDL_BUTTON_MIDDLE: |
event->value.keycode = NSFB_KEY_MOUSE_2; |
break; |
case SDL_BUTTON_RIGHT: |
event->value.keycode = NSFB_KEY_MOUSE_3; |
break; |
/*case SDL_BUTTON_WHEELUP: |
event->value.keycode = NSFB_KEY_MOUSE_4; |
break; |
case SDL_BUTTON_WHEELDOWN: |
event->value.keycode = NSFB_KEY_MOUSE_5; |
break; |
*/ |
} |
break; |
case SDL_MOUSEBUTTONUP: |
event->type = NSFB_EVENT_KEY_UP; |
switch (sdlevent.button.button) { |
case SDL_BUTTON_LEFT: |
event->value.keycode = NSFB_KEY_MOUSE_1; |
break; |
case SDL_BUTTON_MIDDLE: |
event->value.keycode = NSFB_KEY_MOUSE_2; |
break; |
case SDL_BUTTON_RIGHT: |
event->value.keycode = NSFB_KEY_MOUSE_3; |
break; |
/*case SDL_BUTTON_WHEELUP: |
event->value.keycode = NSFB_KEY_MOUSE_4; |
break; |
case SDL_BUTTON_WHEELDOWN: |
event->value.keycode = NSFB_KEY_MOUSE_5; |
break;*/ |
} |
break; |
case SDL_MOUSEMOTION: |
event->type = NSFB_EVENT_MOVE_ABSOLUTE; |
event->value.vector.x = sdlevent.motion.x; |
event->value.vector.y = sdlevent.motion.y; |
event->value.vector.z = 0; |
break; |
case SDL_QUIT: |
event->type = NSFB_EVENT_CONTROL; |
event->value.controlcode = NSFB_CONTROL_QUIT; |
break; |
case SDL_USEREVENT: |
event->type = NSFB_EVENT_CONTROL; |
event->value.controlcode = NSFB_CONTROL_TIMEOUT; |
break; |
} |
return true; |
} |
static int sdl_claim(nsfb_t *nsfb, nsfb_bbox_t *box) |
{ |
struct nsfb_cursor_s *cursor = nsfb->cursor; |
if ((cursor != NULL) && |
(cursor->plotted == true) && |
(nsfb_plot_bbox_intersect(box, &cursor->loc))) { |
nsfb_cursor_clear(nsfb, cursor); |
} |
return 0; |
} |
static int |
sdl_cursor(nsfb_t *nsfb, struct nsfb_cursor_s *cursor) |
{ |
SDL_Surface *sdl_screen = nsfb->surface_priv; |
nsfb_bbox_t redraw; |
nsfb_bbox_t fbarea; |
if ((cursor != NULL) && (cursor->plotted == true)) { |
nsfb_bbox_t loc_shift = cursor->loc; |
loc_shift.x0 -= cursor->hotspot_x; |
loc_shift.y0 -= cursor->hotspot_y; |
loc_shift.x1 -= cursor->hotspot_x; |
loc_shift.y1 -= cursor->hotspot_y; |
nsfb_plot_add_rect(&cursor->savloc, &loc_shift, &redraw); |
/* screen area */ |
fbarea.x0 = 0; |
fbarea.y0 = 0; |
fbarea.x1 = nsfb->width; |
fbarea.y1 = nsfb->height; |
nsfb_plot_clip(&fbarea, &redraw); |
nsfb_cursor_clear(nsfb, cursor); |
nsfb_cursor_plot(nsfb, cursor); |
SDL_UpdateRect(sdl_screen, |
redraw.x0, |
redraw.y0, |
redraw.x1 - redraw.x0, |
redraw.y1 - redraw.y0); |
} |
return true; |
} |
static int sdl_update(nsfb_t *nsfb, nsfb_bbox_t *box) |
{ |
SDL_Surface *sdl_screen = nsfb->surface_priv; |
struct nsfb_cursor_s *cursor = nsfb->cursor; |
if ((cursor != NULL) && |
(cursor->plotted == false)) { |
nsfb_cursor_plot(nsfb, cursor); |
} |
SDL_UpdateRect(sdl_screen, |
box->x0, |
box->y0, |
box->x1 - box->x0, |
box->y1 - box->y0); |
return 0; |
} |
const nsfb_surface_rtns_t sdl_rtns = { |
.initialise = sdl_initialise, |
.finalise = sdl_finalise, |
.input = sdl_input, |
.claim = sdl_claim, |
.update = sdl_update, |
.cursor = sdl_cursor, |
.geometry = sdl_set_geometry, |
}; |
NSFB_SURFACE_DEF(sdl, NSFB_SURFACE_SDL, &sdl_rtns) |
/* |
* Local variables: |
* c-basic-offset: 4 |
* tab-width: 8 |
* End: |
*/ |
/contrib/network/netsurf/libnsfb/src/surface/surface.c |
---|
0,0 → 1,159 |
/* |
* Copyright 2009 Vincent Sanders <vince@simtec.co.uk> |
* |
* This file is part of libnsfb, http://www.netsurf-browser.org/ |
* Licenced under the MIT License, |
* http://www.opensource.org/licenses/mit-license.php |
*/ |
#include <stdbool.h> |
#include <stdio.h> |
#include <unistd.h> |
#include <stdlib.h> |
#include <string.h> |
#include "surface.h" |
#include "plot.h" |
#define MAX_SURFACES 16 |
#define UNUSED(x) ((x) = (x)) |
struct nsfb_surface_s { |
enum nsfb_type_e type; |
const nsfb_surface_rtns_t *rtns; |
const char *name; |
}; |
static struct nsfb_surface_s surfaces[MAX_SURFACES]; |
static int surface_count = 0; |
/* internal routine which lets surfaces register their presence at runtime */ |
void _nsfb_register_surface(const enum nsfb_type_e type, |
const nsfb_surface_rtns_t *rtns, |
const char *name) |
{ |
if (surface_count >= MAX_SURFACES) |
return; /* no space for additional surfaces */ |
surfaces[surface_count].type = type; |
surfaces[surface_count].rtns = rtns; |
surfaces[surface_count].name = name; |
surface_count++; |
} |
/* default surface implementations */ |
static int surface_defaults(nsfb_t *nsfb) |
{ |
nsfb->width = 800; |
nsfb->height = 600; |
nsfb->format = NSFB_FMT_XRGB8888; |
/* select default sw plotters for bpp */ |
select_plotters(nsfb); |
return 0; |
} |
static int surface_claim(nsfb_t *nsfb, nsfb_bbox_t *box) |
{ |
UNUSED(nsfb); |
UNUSED(box); |
return 0; |
} |
static int surface_update(nsfb_t *nsfb, nsfb_bbox_t *box) |
{ |
UNUSED(nsfb); |
UNUSED(box); |
return 0; |
} |
static int surface_cursor(nsfb_t *nsfb, struct nsfb_cursor_s *cursor) |
{ |
UNUSED(nsfb); |
UNUSED(cursor); |
return 0; |
} |
static int surface_parameters(nsfb_t *nsfb, const char *parameters) |
{ |
UNUSED(nsfb); |
UNUSED(parameters); |
return 0; |
} |
/* exported interface documented in surface.h */ |
nsfb_surface_rtns_t * |
nsfb_surface_get_rtns(enum nsfb_type_e type) |
{ |
int fend_loop; |
nsfb_surface_rtns_t *rtns = NULL; |
for (fend_loop = 0; fend_loop < surface_count; fend_loop++) { |
/* surface type must match and have a initialisor, finaliser |
* and input method |
*/ |
if ((surfaces[fend_loop].type == type) && |
(surfaces[fend_loop].rtns->initialise != NULL) && |
(surfaces[fend_loop].rtns->finalise != NULL) && |
(surfaces[fend_loop].rtns->input != NULL) ) { |
rtns = malloc(sizeof(nsfb_surface_rtns_t)); |
if (rtns == NULL) { |
continue; |
} |
memcpy(rtns, |
surfaces[fend_loop].rtns, |
sizeof(nsfb_surface_rtns_t)); |
/* The rest may be empty but to avoid the null check every time |
* provide default implementations. |
*/ |
if (rtns->defaults == NULL) { |
rtns->defaults = surface_defaults; |
} |
if (rtns->claim == NULL) { |
rtns->claim = surface_claim; |
} |
if (rtns->update == NULL) { |
rtns->update = surface_update; |
} |
if (rtns->cursor == NULL) { |
rtns->cursor = surface_cursor; |
} |
if (rtns->parameters == NULL) { |
rtns->parameters = surface_parameters; |
} |
break; |
} |
} |
return rtns; |
} |
/* exported interface defined in libnsfb.h */ |
enum nsfb_type_e |
nsfb_type_from_name(const char *name) |
{ |
int fend_loop; |
for (fend_loop = 0; fend_loop < surface_count; fend_loop++) { |
if (strcmp(surfaces[fend_loop].name, name) == 0) |
return surfaces[fend_loop].type; |
} |
return NSFB_SURFACE_NONE; |
} |
/* |
* Local variables: |
* c-basic-offset: 4 |
* tab-width: 8 |
* End: |
*/ |
/contrib/network/netsurf/libnsfb/src/surface/vnc.c |
---|
0,0 → 1,567 |
/* |
* Copyright 2009 Vincent Sanders <vince@simtec.co.uk> |
* |
* This file is part of libnsfb, http://www.netsurf-browser.org/ |
* Licenced under the MIT License, |
* http://www.opensource.org/licenses/mit-license.php |
*/ |
#include <stdbool.h> |
#include <stdio.h> |
#include <rfb/rfb.h> |
#include <rfb/keysym.h> |
#include "libnsfb.h" |
#include "libnsfb_event.h" |
#include "libnsfb_plot.h" |
#include "nsfb.h" |
#include "surface.h" |
#include "plot.h" |
#include "cursor.h" |
#define UNUSED(x) ((x) = (x)) |
static nsfb_event_t *gevent; |
/* vnc special set codes */ |
static enum nsfb_key_code_e vnc_nsfb_map[256] = { |
NSFB_KEY_UNKNOWN, /* 0x00 */ |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_BACKSPACE, /* 0x08 */ |
NSFB_KEY_TAB, |
NSFB_KEY_LF, |
NSFB_KEY_CLEAR, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_RETURN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, /* 0x10 */ |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_RETURN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, /* 0x18 */ |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_ESCAPE, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_COMPOSE, /* 0x20 */ |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, /* 0x28 */ |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, /* 0x30 */ |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, /* 0x38 */ |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, /* 0x40 */ |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, /* 0x48 */ |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_HOME, /* 0x50 */ |
NSFB_KEY_LEFT, |
NSFB_KEY_UP, |
NSFB_KEY_RIGHT, |
NSFB_KEY_DOWN, |
NSFB_KEY_PAGEUP, |
NSFB_KEY_PAGEDOWN, |
NSFB_KEY_END, |
NSFB_KEY_HOME, /* 0x58 */ |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, /* 0x60 */ |
NSFB_KEY_PRINT, |
NSFB_KEY_HELP, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNDO, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_MENU, |
NSFB_KEY_UNKNOWN, /* 0x68 */ |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_BREAK, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, /* 0x70 */ |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, /* 0x78 */ |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_MODE, |
NSFB_KEY_NUMLOCK, |
NSFB_KEY_UNKNOWN, /* 0x80 */ |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, /* 0x88 */ |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_KP_ENTER, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, /* 0x90 */ |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, /* 0x98 */ |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, /* 0xA0 */ |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, /* 0xA8 */ |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_KP_MULTIPLY, |
NSFB_KEY_KP_PLUS, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_KP_MINUS, |
NSFB_KEY_KP_PERIOD, |
NSFB_KEY_KP_DIVIDE, |
NSFB_KEY_KP0, /* 0xB0 */ |
NSFB_KEY_KP1, |
NSFB_KEY_KP2, |
NSFB_KEY_KP3, |
NSFB_KEY_KP4, |
NSFB_KEY_KP5, |
NSFB_KEY_KP6, |
NSFB_KEY_KP7, |
NSFB_KEY_KP8, /* 0xB8 */ |
NSFB_KEY_KP9, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_KP_EQUALS, |
NSFB_KEY_F1, |
NSFB_KEY_F2, |
NSFB_KEY_F3, /* 0xC0 */ |
NSFB_KEY_F4, |
NSFB_KEY_F5, |
NSFB_KEY_F6, |
NSFB_KEY_F7, |
NSFB_KEY_F8, |
NSFB_KEY_F9, |
NSFB_KEY_F10, |
NSFB_KEY_F11, /* 0xC8 */ |
NSFB_KEY_F12, |
NSFB_KEY_F13, |
NSFB_KEY_F14, |
NSFB_KEY_F15, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, /* 0xD0 */ |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, /* 0xD8 */ |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, /* 0xE0 */ |
NSFB_KEY_LSHIFT, |
NSFB_KEY_RSHIFT, |
NSFB_KEY_LCTRL, |
NSFB_KEY_RCTRL, |
NSFB_KEY_CAPSLOCK, |
NSFB_KEY_SCROLLOCK, |
NSFB_KEY_LMETA, |
NSFB_KEY_RMETA, /* 0xE8 */ |
NSFB_KEY_LALT, |
NSFB_KEY_RALT, |
NSFB_KEY_LSUPER, |
NSFB_KEY_RSUPER, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, /* 0xF0 */ |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, /* 0xF8 */ |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_UNKNOWN, |
NSFB_KEY_DELETE, |
}; |
static void vnc_doptr(int buttonMask,int x,int y,rfbClientPtr cl) |
{ |
static int prevbuttonMask = 0; |
UNUSED(cl); |
if (prevbuttonMask != buttonMask) { |
/* button click */ |
if (((prevbuttonMask ^ buttonMask) & 0x01) == 0x01) { |
if ((buttonMask & 0x01) == 0x01) { |
gevent->type = NSFB_EVENT_KEY_DOWN; |
} else { |
gevent->type = NSFB_EVENT_KEY_UP; |
} |
gevent->value.keycode = NSFB_KEY_MOUSE_1; |
} else if (((prevbuttonMask ^ buttonMask) & 0x02) == 0x02) { |
if ((buttonMask & 0x01) == 0x01) { |
gevent->type = NSFB_EVENT_KEY_DOWN; |
} else { |
gevent->type = NSFB_EVENT_KEY_UP; |
} |
gevent->value.keycode = NSFB_KEY_MOUSE_2; |
} else if (((prevbuttonMask ^ buttonMask) & 0x04) == 0x04) { |
if ((buttonMask & 0x01) == 0x01) { |
gevent->type = NSFB_EVENT_KEY_DOWN; |
} else { |
gevent->type = NSFB_EVENT_KEY_UP; |
} |
gevent->value.keycode = NSFB_KEY_MOUSE_3; |
} else if (((prevbuttonMask ^ buttonMask) & 0x08) == 0x08) { |
if ((buttonMask & 0x01) == 0x01) { |
gevent->type = NSFB_EVENT_KEY_DOWN; |
} else { |
gevent->type = NSFB_EVENT_KEY_UP; |
} |
gevent->value.keycode = NSFB_KEY_MOUSE_4; |
} else if (((prevbuttonMask ^ buttonMask) & 0x10) == 0x10) { |
if ((buttonMask & 0x01) == 0x01) { |
gevent->type = NSFB_EVENT_KEY_DOWN; |
} else { |
gevent->type = NSFB_EVENT_KEY_UP; |
} |
gevent->value.keycode = NSFB_KEY_MOUSE_5; |
} |
prevbuttonMask = buttonMask; |
} else { |
gevent->type = NSFB_EVENT_MOVE_ABSOLUTE; |
gevent->value.vector.x = x; |
gevent->value.vector.y = y; |
gevent->value.vector.z = 0; |
} |
} |
static void vnc_dokey(rfbBool down, rfbKeySym key, rfbClientPtr cl) |
{ |
enum nsfb_key_code_e keycode = NSFB_KEY_UNKNOWN; |
UNUSED(cl); |
if ((key >= XK_space) && (key <= XK_asciitilde)) { |
/* ascii codes line up */ |
keycode = key; |
} else if ((key & 0xff00) == 0xff00) { |
/* bottom 8bits of keysyms in this range map via table */ |
keycode = vnc_nsfb_map[(key & 0xff)]; |
} |
if (down == 0) { |
/* key up */ |
gevent->type = NSFB_EVENT_KEY_UP; |
} else { |
/* key down */ |
gevent->type = NSFB_EVENT_KEY_DOWN; |
} |
gevent->value.keycode = keycode; |
} |
static int vnc_set_geometry(nsfb_t *nsfb, int width, int height, enum nsfb_format_e format) |
{ |
if (nsfb->surface_priv != NULL) |
return -1; /* fail if surface already initialised */ |
if (width > 0) { |
nsfb->width = width; |
} |
if (height > 0) { |
nsfb->height = height; |
} |
if (format != NSFB_FMT_ANY) { |
nsfb->format = format; |
} |
/* select soft plotters appropriate for format */ |
select_plotters(nsfb); |
return 0; |
} |
static int vnc_initialise(nsfb_t *nsfb) |
{ |
rfbScreenInfoPtr vncscreen; |
int argc = 0; |
char **argv = NULL; |
if (nsfb->surface_priv != NULL) |
return -1; /* fail if surface already initialised */ |
/* sanity checked depth. */ |
if (nsfb->bpp != 32) |
return -1; |
/* create vnc screen with 8bits per sample, three samples per |
* pixel and 4 bytes per pixel. */ |
vncscreen = rfbGetScreen(&argc, argv, |
nsfb->width, nsfb->height, |
8, 3, (nsfb->bpp / 8)); |
if (vncscreen == NULL) { |
/* Note libvncserver does not check its own allocations/error |
* paths so the faliure mode of the rfbGetScreen is to segfault. |
*/ |
return -1; |
} |
vncscreen->frameBuffer = malloc(nsfb->width * nsfb->height * (nsfb->bpp / 8)); |
if (vncscreen->frameBuffer == NULL) { |
rfbScreenCleanup(vncscreen); |
return -1; |
} |
switch (nsfb->bpp) { |
case 8: |
break; |
case 16: |
vncscreen->serverFormat.trueColour=TRUE; |
vncscreen->serverFormat.redShift = 11; |
vncscreen->serverFormat.greenShift = 5; |
vncscreen->serverFormat.blueShift = 0; |
vncscreen->serverFormat.redMax = 31; |
vncscreen->serverFormat.greenMax = 63; |
vncscreen->serverFormat.blueMax = 31; |
break; |
case 32: |
vncscreen->serverFormat.trueColour=TRUE; |
vncscreen->serverFormat.redShift = 16; |
vncscreen->serverFormat.greenShift = 8; |
vncscreen->serverFormat.blueShift = 0; |
break; |
} |
vncscreen->alwaysShared = TRUE; |
vncscreen->autoPort = 1; |
vncscreen->ptrAddEvent = vnc_doptr; |
vncscreen->kbdAddEvent = vnc_dokey; |
rfbInitServer(vncscreen); |
/* keep parameters */ |
nsfb->surface_priv = vncscreen; |
nsfb->ptr = (uint8_t *)vncscreen->frameBuffer; |
nsfb->linelen = (nsfb->width * nsfb->bpp) / 8; |
return 0; |
} |
static int vnc_finalise(nsfb_t *nsfb) |
{ |
rfbScreenInfoPtr vncscreen = nsfb->surface_priv; |
if (vncscreen != NULL) { |
rfbScreenCleanup(vncscreen); |
} |
return 0; |
} |
static int vnc_update(nsfb_t *nsfb, nsfb_bbox_t *box) |
{ |
rfbScreenInfoPtr vncscreen = nsfb->surface_priv; |
rfbMarkRectAsModified(vncscreen, box->x0, box->y0, box->x1, box->y1); |
return 0; |
} |
static bool vnc_input(nsfb_t *nsfb, nsfb_event_t *event, int timeout) |
{ |
rfbScreenInfoPtr vncscreen = nsfb->surface_priv; |
int ret; |
if (vncscreen != NULL) { |
gevent = event; /* blergh - have to use global state to pass data */ |
/* set default to timeout */ |
event->type = NSFB_EVENT_CONTROL; |
event->value.controlcode = NSFB_CONTROL_TIMEOUT; |
ret = rfbProcessEvents(vncscreen, timeout * 1000); |
return true; |
} |
return false; |
} |
static int |
vnc_cursor(nsfb_t *nsfb, struct nsfb_cursor_s *cursor) |
{ |
rfbScreenInfoPtr vncscreen = nsfb->surface_priv; |
rfbCursorPtr vnccursor = calloc(1,sizeof(rfbCursor)); |
int rwidth; /* rounded width */ |
int row; |
int col; |
const nsfb_colour_t *pixel; |
uint8_t bit; |
rwidth = (cursor->bmp_width + 7) / 8; |
vnccursor->cleanup = 1; /* rfb lib will free this allocation */ |
vnccursor->width = cursor->bmp_width; |
vnccursor->height = cursor->bmp_height; |
vnccursor->foreRed = vnccursor->foreGreen = vnccursor->foreBlue = 0xffff; |
vnccursor->source = calloc(rwidth, vnccursor->height); |
vnccursor->cleanupSource = 1; /* rfb lib will free this allocation */ |
vnccursor->mask = calloc(rwidth, vnccursor->height); |
vnccursor->cleanupMask = 1; /* rfb lib will free this allocation */ |
for (row = 0, pixel = cursor->pixel; row < vnccursor->height; row++) { |
for (col = 0, bit = 0x80; |
col < vnccursor->width; |
col++, bit = (bit & 1)? 0x80 : bit>>1, pixel++) { |
/* pixel luminance more than 50% */ |
if ((((((*pixel) & 0xff) * 77) + |
((((*pixel) & 0xff00) >> 8) * 151) + |
((((*pixel) & 0xff0000) >> 16) * 28)) / 256) > 128) { |
vnccursor->source[row * rwidth + col/8] |= bit; |
} |
if (((*pixel) & 0xff000000) != 0) { |
vnccursor->mask[row * rwidth + col/8] |= bit; |
} |
} |
} |
rfbSetCursor(vncscreen, vnccursor); |
return true; |
} |
const nsfb_surface_rtns_t vnc_rtns = { |
.initialise = vnc_initialise, |
.finalise = vnc_finalise, |
.input = vnc_input, |
.update = vnc_update, |
.cursor = vnc_cursor, |
.geometry = vnc_set_geometry, |
}; |
NSFB_SURFACE_DEF(vnc, NSFB_SURFACE_VNC, &vnc_rtns) |
/* |
* Local variables: |
* c-basic-offset: 4 |
* tab-width: 8 |
* End: |
*/ |
/contrib/network/netsurf/libnsfb/src/surface/x.c |
---|
0,0 → 1,1131 |
/* |
* Copyright 2009 Vincent Sanders <vince@simtec.co.uk> |
* |
* This file is part of libnsfb, http://www.netsurf-browser.org/ |
* Licenced under the MIT License, |
* http://www.opensource.org/licenses/mit-license.php |
*/ |
#define _XOPEN_SOURCE 500 |
#include <stdbool.h> |
#include <stdlib.h> |
#include <stdio.h> |
#include <string.h> |
#include <sys/ipc.h> |
#include <sys/shm.h> |
#include <xcb/xcb.h> |
#include <xcb/xcb_image.h> |
#include <xcb/xcb_atom.h> |
#include <xcb/xcb_icccm.h> |
#include <xcb/xcb_aux.h> |
#include <xcb/xcb_keysyms.h> |
#include "libnsfb.h" |
#include "libnsfb_event.h" |
#include "libnsfb_plot.h" |
#include "libnsfb_plot_util.h" |
#include "nsfb.h" |
#include "surface.h" |
#include "plot.h" |
#include "cursor.h" |
#if defined(NSFB_NEED_HINTS_ALLOC) |
static xcb_size_hints_t * |
xcb_alloc_size_hints(void) |
{ |
return calloc(1, sizeof(xcb_size_hints_t)); |
} |
static void |
xcb_free_size_hints(xcb_size_hints_t *hints) |
{ |
free(hints); |
} |
#endif |
#if defined(NSFB_NEED_ICCCM_API_PREFIX) |
#define xcb_size_hints_set_max_size xcb_icccm_size_hints_set_max_size |
#define xcb_size_hints_set_min_size xcb_icccm_size_hints_set_min_size |
#define xcb_set_wm_size_hints xcb_icccm_set_wm_size_hints |
#endif |
#if (NSFB_XCBPROTO_MAJOR_VERSION > 1) || \ |
(NSFB_XCBPROTO_MAJOR_VERSION == 1 && NSFB_XCBPROTO_MINOR_VERSION >= 6) |
#define WM_NORMAL_HINTS XCB_ATOM_WM_NORMAL_HINTS |
#endif |
#define X_BUTTON_LEFT 1 |
#define X_BUTTON_MIDDLE 2 |
#define X_BUTTON_RIGHT 3 |
#define X_BUTTON_WHEELUP 4 |
#define X_BUTTON_WHEELDOWN 5 |
typedef struct xstate_s { |
xcb_connection_t *connection; /* The x server connection */ |
xcb_screen_t *screen; /* The screen to put the window on */ |
xcb_key_symbols_t *keysymbols; /* keysym mappings */ |
xcb_shm_segment_info_t shminfo; |
xcb_image_t *image; /* The X image buffer */ |
xcb_window_t window; /* The handle to the window */ |
xcb_pixmap_t pmap; /* The handle to the backing pixmap */ |
xcb_gcontext_t gc; /* The handle to the pixmap plotting graphics context */ |
xcb_shm_seg_t segment; /* The handle to the image shared memory */ |
} xstate_t; |
/* X keyboard codepage to nsfb mapping*/ |
enum nsfb_key_code_e XCSKeyboardMap[256] = { |
NSFB_KEY_UNKNOWN, /* */ |
NSFB_KEY_UNKNOWN, /* */ |
NSFB_KEY_UNKNOWN, /* */ |
NSFB_KEY_UNKNOWN, /* */ |
NSFB_KEY_UNKNOWN, /* */ |
NSFB_KEY_UNKNOWN, /* */ |
NSFB_KEY_UNKNOWN, /* */ |
NSFB_KEY_UNKNOWN, /* */ |
NSFB_KEY_BACKSPACE, /* XK_BackSpace */ |
NSFB_KEY_TAB, /* XK_Tab */ |
NSFB_KEY_UNKNOWN, /* XK_Linefeed */ |
NSFB_KEY_CLEAR, /* XK_Clear */ |
NSFB_KEY_UNKNOWN, /* */ |
NSFB_KEY_RETURN, /* XK_Return */ |
NSFB_KEY_UNKNOWN, /* */ |
NSFB_KEY_UNKNOWN, /* */ |
/* 0x10 */ |
NSFB_KEY_UNKNOWN, /* */ |
NSFB_KEY_UNKNOWN, /* */ |
NSFB_KEY_UNKNOWN, /* */ |
NSFB_KEY_PAUSE, /* XK_Pause */ |
NSFB_KEY_UNKNOWN, /* XK_Scroll_Lock */ |
NSFB_KEY_UNKNOWN, /* XK_Sys_Req */ |
NSFB_KEY_UNKNOWN, /* */ |
NSFB_KEY_UNKNOWN, /* */ |
NSFB_KEY_UNKNOWN, /* */ |
NSFB_KEY_UNKNOWN, /* */ |
NSFB_KEY_UNKNOWN, /* */ |
NSFB_KEY_ESCAPE, /* XK_Escape */ |
NSFB_KEY_UNKNOWN, /* */ |
NSFB_KEY_UNKNOWN, /* */ |
NSFB_KEY_UNKNOWN, /* */ |
NSFB_KEY_UNKNOWN, /* */ |
/* 0x20 */ |
NSFB_KEY_UNKNOWN, /* XK_Multi_key */ |
NSFB_KEY_UNKNOWN, /* XK_Kanji */ |
NSFB_KEY_UNKNOWN, /* XK_Muhenkan */ |
NSFB_KEY_UNKNOWN, /* XK_Henkan_Mode */ |
NSFB_KEY_UNKNOWN, /* XK_Henkan */ |
NSFB_KEY_UNKNOWN, /* XK_Romaji */ |
NSFB_KEY_UNKNOWN, /* XK_Hiragana*/ |
NSFB_KEY_UNKNOWN, /* */ |
NSFB_KEY_UNKNOWN, /* */ |
NSFB_KEY_UNKNOWN, /* */ |
NSFB_KEY_UNKNOWN, /* */ |
NSFB_KEY_UNKNOWN, /* */ |
NSFB_KEY_UNKNOWN, /* */ |
NSFB_KEY_UNKNOWN, /* */ |
NSFB_KEY_UNKNOWN, /* */ |
NSFB_KEY_UNKNOWN, /* */ |
/* 0x30 */ |
NSFB_KEY_UNKNOWN, /* XK_Eisu_toggle */ |
NSFB_KEY_UNKNOWN, /* */ |
NSFB_KEY_UNKNOWN, /* */ |
NSFB_KEY_UNKNOWN, /* */ |
NSFB_KEY_UNKNOWN, /* */ |
NSFB_KEY_UNKNOWN, /* */ |
NSFB_KEY_UNKNOWN, /* */ |
NSFB_KEY_UNKNOWN, /* XK_Codeinput */ |
NSFB_KEY_UNKNOWN, /* */ |
NSFB_KEY_UNKNOWN, /* */ |
NSFB_KEY_UNKNOWN, /* */ |
NSFB_KEY_UNKNOWN, /* */ |
NSFB_KEY_UNKNOWN, /* XK_SingleCandidate */ |
NSFB_KEY_UNKNOWN, /* XK_MultipleCandidate */ |
NSFB_KEY_UNKNOWN, /* XK_PreviousCandidate */ |
NSFB_KEY_UNKNOWN, /* */ |
/* 0x40 */ |
NSFB_KEY_UNKNOWN, /* */ |
NSFB_KEY_UNKNOWN, /* */ |
NSFB_KEY_UNKNOWN, /* */ |
NSFB_KEY_UNKNOWN, /* */ |
NSFB_KEY_UNKNOWN, /* */ |
NSFB_KEY_UNKNOWN, /* */ |
NSFB_KEY_UNKNOWN, /* */ |
NSFB_KEY_UNKNOWN, /* */ |
NSFB_KEY_UNKNOWN, /* */ |
NSFB_KEY_UNKNOWN, /* */ |
NSFB_KEY_UNKNOWN, /* */ |
NSFB_KEY_UNKNOWN, /* */ |
NSFB_KEY_UNKNOWN, /* */ |
NSFB_KEY_UNKNOWN, /* */ |
NSFB_KEY_UNKNOWN, /* */ |
NSFB_KEY_UNKNOWN, /* */ |
/* 0x50 */ |
NSFB_KEY_HOME, /* XK_Home */ |
NSFB_KEY_LEFT, /* XK_Left */ |
NSFB_KEY_UP, /* XK_Up */ |
NSFB_KEY_RIGHT, /* XK_Right */ |
NSFB_KEY_DOWN, /* XK_Down */ |
NSFB_KEY_PAGEUP, /* XK_Page_Up */ |
NSFB_KEY_PAGEDOWN, /* XK_Page_Down */ |
NSFB_KEY_END, /* XK_End */ |
NSFB_KEY_UNKNOWN, /* XK_Begin */ |
NSFB_KEY_UNKNOWN, /* */ |
NSFB_KEY_UNKNOWN, /* */ |
NSFB_KEY_UNKNOWN, /* */ |
NSFB_KEY_UNKNOWN, /* */ |
NSFB_KEY_UNKNOWN, /* */ |
NSFB_KEY_UNKNOWN, /* */ |
NSFB_KEY_UNKNOWN, /* */ |
/* 0x60 */ |
NSFB_KEY_UNKNOWN, /* XK_Select */ |
NSFB_KEY_UNKNOWN, /* XK_Print*/ |
NSFB_KEY_UNKNOWN, /* XK_Execute*/ |
NSFB_KEY_UNKNOWN, /* XK_Insert*/ |
NSFB_KEY_UNKNOWN, /* */ |
NSFB_KEY_UNKNOWN, /* XK_Undo*/ |
NSFB_KEY_UNKNOWN, /* XK_Redo */ |
NSFB_KEY_UNKNOWN, /* XK_Menu */ |
NSFB_KEY_UNKNOWN, /* XK_Find */ |
NSFB_KEY_UNKNOWN, /* XK_Cancel */ |
NSFB_KEY_UNKNOWN, /* XK_Help */ |
NSFB_KEY_UNKNOWN, /* XK_Break*/ |
NSFB_KEY_UNKNOWN, /* */ |
NSFB_KEY_UNKNOWN, /* */ |
NSFB_KEY_UNKNOWN, /* */ |
NSFB_KEY_UNKNOWN, /* */ |
/* 0x70 */ |
NSFB_KEY_UNKNOWN, /* */ |
NSFB_KEY_UNKNOWN, /* */ |
NSFB_KEY_UNKNOWN, /* */ |
NSFB_KEY_UNKNOWN, /* */ |
NSFB_KEY_UNKNOWN, /* */ |
NSFB_KEY_UNKNOWN, /* */ |
NSFB_KEY_UNKNOWN, /* */ |
NSFB_KEY_UNKNOWN, /* */ |
NSFB_KEY_UNKNOWN, /* */ |
NSFB_KEY_UNKNOWN, /* */ |
NSFB_KEY_UNKNOWN, /* */ |
NSFB_KEY_UNKNOWN, /* */ |
NSFB_KEY_UNKNOWN, /* */ |
NSFB_KEY_UNKNOWN, /* */ |
NSFB_KEY_UNKNOWN, /* XK_Mode_switch */ |
NSFB_KEY_UNKNOWN, /* XK_Num_Lock */ |
/* 0x80 */ |
NSFB_KEY_UNKNOWN, /* XK_KP_Space */ |
NSFB_KEY_UNKNOWN, /* */ |
NSFB_KEY_UNKNOWN, /* */ |
NSFB_KEY_UNKNOWN, /* */ |
NSFB_KEY_UNKNOWN, /* */ |
NSFB_KEY_UNKNOWN, /* */ |
NSFB_KEY_UNKNOWN, /* */ |
NSFB_KEY_UNKNOWN, /* */ |
NSFB_KEY_UNKNOWN, /* */ |
NSFB_KEY_UNKNOWN, /* XK_KP_Tab */ |
NSFB_KEY_UNKNOWN, /* */ |
NSFB_KEY_UNKNOWN, /* */ |
NSFB_KEY_UNKNOWN, /* */ |
NSFB_KEY_UNKNOWN, /* XK_KP_Enter */ |
NSFB_KEY_UNKNOWN, /* */ |
NSFB_KEY_UNKNOWN, /* */ |
/* 0x90 */ |
NSFB_KEY_UNKNOWN, /* */ |
NSFB_KEY_UNKNOWN, /* XK_KP_F1*/ |
NSFB_KEY_UNKNOWN, /* XK_KP_F2*/ |
NSFB_KEY_UNKNOWN, /* XK_KP_F3*/ |
NSFB_KEY_UNKNOWN, /* XK_KP_F4*/ |
NSFB_KEY_UNKNOWN, /* XK_KP_Home*/ |
NSFB_KEY_UNKNOWN, /* XK_KP_Left*/ |
NSFB_KEY_UNKNOWN, /* XK_KP_Up*/ |
NSFB_KEY_UNKNOWN, /* XK_KP_Right*/ |
NSFB_KEY_UNKNOWN, /* XK_KP_Down*/ |
NSFB_KEY_UNKNOWN, /* XK_KP_Page_Up*/ |
NSFB_KEY_UNKNOWN, /* XK_KP_Page_Down*/ |
NSFB_KEY_UNKNOWN, /* XK_KP_End*/ |
NSFB_KEY_UNKNOWN, /* XK_KP_Begin*/ |
NSFB_KEY_UNKNOWN, /* XK_KP_Insert*/ |
NSFB_KEY_UNKNOWN, /* XK_KP_Delete*/ |
/* 0xa0 */ |
NSFB_KEY_UNKNOWN, /* */ |
NSFB_KEY_UNKNOWN, /* */ |
NSFB_KEY_UNKNOWN, /* */ |
NSFB_KEY_UNKNOWN, /* */ |
NSFB_KEY_UNKNOWN, /* */ |
NSFB_KEY_UNKNOWN, /* */ |
NSFB_KEY_UNKNOWN, /* */ |
NSFB_KEY_UNKNOWN, /* */ |
NSFB_KEY_UNKNOWN, /* */ |
NSFB_KEY_UNKNOWN, /* */ |
NSFB_KEY_UNKNOWN, /* XK_KP_Multiply*/ |
NSFB_KEY_UNKNOWN, /* XK_KP_Add*/ |
NSFB_KEY_UNKNOWN, /* XK_KP_Separator*/ |
NSFB_KEY_UNKNOWN, /* XK_KP_Subtract*/ |
NSFB_KEY_UNKNOWN, /* XK_KP_Decimal*/ |
NSFB_KEY_UNKNOWN, /* XK_KP_Divide*/ |
/* 0xb0 */ |
NSFB_KEY_UNKNOWN, /* XK_KP_0 */ |
NSFB_KEY_UNKNOWN, /* XK_KP_1 */ |
NSFB_KEY_UNKNOWN, /* XK_KP_2 */ |
NSFB_KEY_UNKNOWN, /* XK_KP_3 */ |
NSFB_KEY_UNKNOWN, /* XK_KP_4 */ |
NSFB_KEY_UNKNOWN, /* XK_KP_5 */ |
NSFB_KEY_UNKNOWN, /* XK_KP_6 */ |
NSFB_KEY_UNKNOWN, /* XK_KP_7 */ |
NSFB_KEY_UNKNOWN, /* XK_KP_8 */ |
NSFB_KEY_UNKNOWN, /* XK_KP_9 */ |
NSFB_KEY_UNKNOWN, /* */ |
NSFB_KEY_F1, /* XK_F1 */ |
NSFB_KEY_UNKNOWN, /* */ |
NSFB_KEY_UNKNOWN, /* XK_KP_Equal */ |
NSFB_KEY_UNKNOWN, /* */ |
NSFB_KEY_F2, /* XK_F2 */ |
/* 0xc0 */ |
NSFB_KEY_F3, /* XK_F3*/ |
NSFB_KEY_F4, /* XK_F4*/ |
NSFB_KEY_F5, /* XK_F5*/ |
NSFB_KEY_F6, /* XK_F6*/ |
NSFB_KEY_F7, /* XK_F7*/ |
NSFB_KEY_F8, /* XK_F8*/ |
NSFB_KEY_F9, /* XK_F9*/ |
NSFB_KEY_F10, /* XK_F10*/ |
NSFB_KEY_F11, /* XK_F11*/ |
NSFB_KEY_F12, /* XK_F12*/ |
NSFB_KEY_F13, /* XK_F13 */ |
NSFB_KEY_F14, /* XK_F14 */ |
NSFB_KEY_F15, /* XK_F15 */ |
NSFB_KEY_UNKNOWN, /* XK_F16 */ |
NSFB_KEY_UNKNOWN, /* XK_F17 */ |
NSFB_KEY_UNKNOWN, /* XK_F18*/ |
/* 0xd0 */ |
NSFB_KEY_UNKNOWN, /* */ |
NSFB_KEY_UNKNOWN, /* */ |
NSFB_KEY_UNKNOWN, /* */ |
NSFB_KEY_UNKNOWN, /* */ |
NSFB_KEY_UNKNOWN, /* */ |
NSFB_KEY_UNKNOWN, /* */ |
NSFB_KEY_UNKNOWN, /* */ |
NSFB_KEY_UNKNOWN, /* */ |
NSFB_KEY_UNKNOWN, /* */ |
NSFB_KEY_UNKNOWN, /* */ |
NSFB_KEY_UNKNOWN, /* */ |
NSFB_KEY_UNKNOWN, /* */ |
NSFB_KEY_UNKNOWN, /* */ |
NSFB_KEY_UNKNOWN, /* */ |
NSFB_KEY_UNKNOWN, /* */ |
NSFB_KEY_UNKNOWN, /* */ |
/* 0xe0 */ |
NSFB_KEY_UNKNOWN, /* */ |
NSFB_KEY_LSHIFT, /* XK_Shift_L*/ |
NSFB_KEY_RSHIFT, /* XK_Shift_R*/ |
NSFB_KEY_UNKNOWN, /* XK_Control_L*/ |
NSFB_KEY_UNKNOWN, /* XK_Control_R*/ |
NSFB_KEY_UNKNOWN, /* XK_Caps_Lock*/ |
NSFB_KEY_UNKNOWN, /* XK_Shift_Lock*/ |
NSFB_KEY_UNKNOWN, /* XK_Meta_L*/ |
NSFB_KEY_UNKNOWN, /* XK_Meta_R*/ |
NSFB_KEY_UNKNOWN, /* XK_Alt_L */ |
NSFB_KEY_UNKNOWN, /* XK_Alt_R*/ |
NSFB_KEY_UNKNOWN, /* XK_Super_L*/ |
NSFB_KEY_UNKNOWN, /* XK_Super_R*/ |
NSFB_KEY_UNKNOWN, /* XK_Hyper_L*/ |
NSFB_KEY_UNKNOWN, /* XK_Hyper_R*/ |
NSFB_KEY_UNKNOWN, /* */ |
/* 0xf0 */ |
NSFB_KEY_UNKNOWN, /* */ |
NSFB_KEY_UNKNOWN, /* */ |
NSFB_KEY_UNKNOWN, /* */ |
NSFB_KEY_UNKNOWN, /* */ |
NSFB_KEY_UNKNOWN, /* */ |
NSFB_KEY_UNKNOWN, /* */ |
NSFB_KEY_UNKNOWN, /* */ |
NSFB_KEY_UNKNOWN, /* */ |
NSFB_KEY_UNKNOWN, /* */ |
NSFB_KEY_UNKNOWN, /* */ |
NSFB_KEY_UNKNOWN, /* */ |
NSFB_KEY_UNKNOWN, /* */ |
NSFB_KEY_UNKNOWN, /* */ |
NSFB_KEY_UNKNOWN, /* */ |
NSFB_KEY_UNKNOWN, /* */ |
NSFB_KEY_UNKNOWN, /* */ |
}; |
/* Convert an X keysym into a nsfb key code. |
* |
* Our approach is primarily to assume both codings are roughly ascii like. |
* |
* The Keysyms are defined in X11/keysymdef.h and our mapping for the |
* "keyboard" keys i.e. those from code set 255 is from there |
*/ |
static enum nsfb_key_code_e |
xkeysym_to_nsfbkeycode(xcb_keysym_t ks) |
{ |
enum nsfb_key_code_e nsfb_key = NSFB_KEY_UNKNOWN; |
uint8_t codeset = (ks & 0xFF00) >> 8; |
uint8_t chrcode = ks & 0xFF; |
if (ks != XCB_NO_SYMBOL) { |
switch (codeset) { |
case 0x00: /* Latin 1 */ |
case 0x01: /* Latin 2 */ |
case 0x02: /* Latin 3 */ |
case 0x03: /* Latin 4 */ |
case 0x04: /* Katakana */ |
case 0x05: /* Arabic */ |
case 0x06: /* Cyrillic */ |
case 0x07: /* Greek */ |
case 0x08: /* Technical */ |
case 0x0A: /* Publishing */ |
case 0x0C: /* Hebrew */ |
case 0x0D: /* Thai */ |
/* this is somewhat incomplete, but the nsfb codes are lined up on |
* the ascii codes and x seems to have done similar |
*/ |
nsfb_key = (enum nsfb_key_code_e)chrcode; |
break; |
case 0xFF: /* Keyboard */ |
nsfb_key = XCSKeyboardMap[chrcode]; |
break; |
} |
} |
return nsfb_key; |
} |
/* |
static void |
set_palette(nsfb_t *nsfb) |
{ |
X_Surface *x_screen = nsfb->surface_priv; |
X_Color palette[256]; |
int rloop, gloop, bloop; |
int loop = 0; |
// build a linear R:3 G:3 B:2 colour cube palette. |
for (rloop = 0; rloop < 8; rloop++) { |
for (gloop = 0; gloop < 8; gloop++) { |
for (bloop = 0; bloop < 4; bloop++) { |
palette[loop].r = (rloop << 5) | (rloop << 2) | (rloop >> 1); |
palette[loop].g = (gloop << 5) | (gloop << 2) | (gloop >> 1); |
palette[loop].b = (bloop << 6) | (bloop << 4) | (bloop << 2) | (bloop); |
nsfb->palette[loop] = palette[loop].r | |
palette[loop].g << 8 | |
palette[loop].b << 16; |
loop++; |
} |
} |
} |
// Set palette |
//X_SetColors(x_screen, palette, 0, 256); |
} |
*/ |
static int |
update_pixmap(xstate_t *xstate, int x, int y, int width, int height) |
{ |
if (xstate->shminfo.shmseg == 0) { |
/* not using shared memory */ |
xcb_put_image(xstate->connection, |
xstate->image->format, |
xstate->pmap, |
xstate->gc, |
xstate->image->width, |
height, |
0, |
y, |
0, |
xstate->image->depth, |
(height) * xstate->image->stride, |
xstate->image->data + (y * xstate->image->stride)); |
} else { |
/* shared memory */ |
xcb_image_shm_put(xstate->connection, |
xstate->pmap, |
xstate->gc, |
xstate->image, |
xstate->shminfo, |
x,y, |
x,y, |
width,height,0); |
} |
return 0; |
} |
static int |
update_and_redraw_pixmap(xstate_t *xstate, int x, int y, int width, int height) |
{ |
update_pixmap(xstate, x, y, width, height); |
xcb_copy_area(xstate->connection, |
xstate->pmap, |
xstate->window, |
xstate->gc, |
x, y, |
x, y, |
width, height); |
xcb_flush(xstate->connection); |
return 0; |
} |
static bool |
xcopy(nsfb_t *nsfb, nsfb_bbox_t *srcbox, nsfb_bbox_t *dstbox) |
{ |
xstate_t *xstate = nsfb->surface_priv; |
nsfb_bbox_t allbox; |
struct nsfb_cursor_s *cursor = nsfb->cursor; |
uint8_t *srcptr; |
uint8_t *dstptr; |
int srcx = srcbox->x0; |
int srcy = srcbox->y0; |
int dstx = dstbox->x0; |
int dsty = dstbox->y0; |
int width = dstbox->x1 - dstbox->x0; |
int height = dstbox->y1 - dstbox->y0; |
int hloop; |
nsfb_plot_add_rect(srcbox, dstbox, &allbox); |
/* clear the cursor if its within the region to be altered */ |
if ((cursor != NULL) && |
(cursor->plotted == true) && |
(nsfb_plot_bbox_intersect(&allbox, &cursor->loc))) { |
nsfb_cursor_clear(nsfb, cursor); |
update_pixmap(xstate, |
cursor->savloc.x0, |
cursor->savloc.y0, |
cursor->savloc.x1 - cursor->savloc.x0, |
cursor->savloc.y1 - cursor->savloc.y0); |
/* must sync here or local framebuffer and remote pixmap will not be |
* consistant |
*/ |
xcb_aux_sync(xstate->connection); |
} |
/* copy the area on the server */ |
xcb_copy_area(xstate->connection, |
xstate->pmap, |
xstate->pmap, |
xstate->gc, |
srcbox->x0, |
srcbox->y0, |
dstbox->x0, |
dstbox->y0, |
srcbox->x1 - srcbox->x0, |
srcbox->y1 - srcbox->y0); |
/* do the copy in the local memory too */ |
srcptr = (nsfb->ptr + |
(srcy * nsfb->linelen) + |
((srcx * nsfb->bpp) / 8)); |
dstptr = (nsfb->ptr + |
(dsty * nsfb->linelen) + |
((dstx * nsfb->bpp) / 8)); |
if (width == nsfb->width) { |
/* take shortcut and use memmove */ |
memmove(dstptr, srcptr, (width * height * nsfb->bpp) / 8); |
} else { |
if (srcy > dsty) { |
for (hloop = height; hloop > 0; hloop--) { |
memmove(dstptr, srcptr, (width * nsfb->bpp) / 8); |
srcptr += nsfb->linelen; |
dstptr += nsfb->linelen; |
} |
} else { |
srcptr += height * nsfb->linelen; |
dstptr += height * nsfb->linelen; |
for (hloop = height; hloop > 0; hloop--) { |
srcptr -= nsfb->linelen; |
dstptr -= nsfb->linelen; |
memmove(dstptr, srcptr, (width * nsfb->bpp) / 8); |
} |
} |
} |
if ((cursor != NULL) && |
(cursor->plotted == false)) { |
nsfb_cursor_plot(nsfb, cursor); |
} |
/* update the x window */ |
xcb_copy_area(xstate->connection, |
xstate->pmap, |
xstate->window, |
xstate->gc, |
dstx, dsty, |
dstx, dsty, |
width, height); |
return true; |
} |
static int |
x_set_geometry(nsfb_t *nsfb, int width, int height, enum nsfb_format_e format) |
{ |
if (nsfb->surface_priv != NULL) |
return -1; /* if were already initialised fail */ |
nsfb->width = width; |
nsfb->height = height; |
nsfb->format = format; |
/* select default sw plotters for format */ |
select_plotters(nsfb); |
nsfb->plotter_fns->copy = xcopy; |
return 0; |
} |
static xcb_format_t * |
find_format(xcb_connection_t * c, uint8_t depth, uint8_t bpp) |
{ |
const xcb_setup_t *setup = xcb_get_setup(c); |
xcb_format_t *fmt = xcb_setup_pixmap_formats(setup); |
xcb_format_t *fmtend = fmt + xcb_setup_pixmap_formats_length(setup); |
for(; fmt != fmtend; ++fmt) { |
if((fmt->depth == depth) && (fmt->bits_per_pixel == bpp)) { |
return fmt; |
} |
} |
return 0; |
} |
static xcb_image_t * |
create_shm_image(xstate_t *xstate, int width, int height, int bpp) |
{ |
const xcb_setup_t *setup = xcb_get_setup(xstate->connection); |
unsigned char *image_data; |
xcb_format_t *fmt; |
int depth = bpp; |
uint32_t image_size; |
int shmid; |
xcb_shm_query_version_reply_t *rep; |
xcb_shm_query_version_cookie_t ck; |
xcb_void_cookie_t shm_attach_cookie; |
xcb_generic_error_t *generic_error; |
ck = xcb_shm_query_version(xstate->connection); |
rep = xcb_shm_query_version_reply(xstate->connection, ck , NULL); |
if (!rep) { |
fprintf (stderr, "Server has no shm support.\n"); |
return NULL; |
} |
if ((rep->major_version < 1) || |
(rep->major_version == 1 && rep->minor_version == 0)) { |
fprintf(stderr, "server SHM support is insufficient.\n"); |
free(rep); |
return NULL; |
} |
free(rep); |
if (bpp == 32) |
depth = 24; |
fmt = find_format(xstate->connection, depth, bpp); |
if (fmt == NULL) |
return NULL; |
/* doing it this way ensures we deal with bpp smaller than 8 */ |
image_size = (bpp * width * height) >> 3; |
/* get the shared memory segment */ |
shmid = shmget(IPC_PRIVATE, image_size, IPC_CREAT|0777); |
if (shmid == -1) |
return NULL; |
xstate->shminfo.shmid = shmid; |
xstate->shminfo.shmaddr = shmat(xstate->shminfo.shmid, 0, 0); |
image_data = xstate->shminfo.shmaddr; |
xstate->shminfo.shmseg = xcb_generate_id(xstate->connection); |
shm_attach_cookie = xcb_shm_attach_checked(xstate->connection, |
xstate->shminfo.shmseg, |
xstate->shminfo.shmid, |
0); |
generic_error = xcb_request_check(xstate->connection, shm_attach_cookie); |
/* either there is an error and the shm us no longer needed, or it now |
* belongs to the x server - regardless release local reference to shared |
* memory segment |
*/ |
shmctl(xstate->shminfo.shmid, IPC_RMID, 0); |
if (generic_error != NULL) { |
/* unable to attach shm */ |
xstate->shminfo.shmseg = 0; |
free(generic_error); |
return NULL; |
} |
return xcb_image_create(width, |
height, |
XCB_IMAGE_FORMAT_Z_PIXMAP, |
fmt->scanline_pad, |
fmt->depth, |
fmt->bits_per_pixel, |
0, |
setup->image_byte_order, |
XCB_IMAGE_ORDER_LSB_FIRST, |
image_data, |
image_size, |
image_data); |
} |
static xcb_image_t * |
create_image(xcb_connection_t *c, int width, int height, int bpp) |
{ |
const xcb_setup_t *setup = xcb_get_setup(c); |
unsigned char *image_data; |
xcb_format_t *fmt; |
int depth = bpp; |
uint32_t image_size; |
if (bpp == 32) |
depth = 24; |
fmt = find_format(c, depth, bpp); |
if (fmt == NULL) |
return NULL; |
/* doing it this way ensures we deal with bpp smaller than 8 */ |
image_size = (bpp * width * height) >> 3; |
image_data = calloc(1, image_size); |
if (image_data == NULL) |
return NULL; |
return xcb_image_create(width, |
height, |
XCB_IMAGE_FORMAT_Z_PIXMAP, |
fmt->scanline_pad, |
fmt->depth, |
fmt->bits_per_pixel, |
0, |
setup->image_byte_order, |
XCB_IMAGE_ORDER_LSB_FIRST, |
image_data, |
image_size, |
image_data); |
} |
/** |
* Create a blank cursor. |
* The empty pixmaps is leaked. |
* |
* @param conn xcb connection |
* @param scr xcb XCB screen |
*/ |
static xcb_cursor_t |
create_blank_cursor(xcb_connection_t *conn, const xcb_screen_t *scr) |
{ |
xcb_cursor_t cur = xcb_generate_id(conn); |
xcb_pixmap_t pix = xcb_generate_id(conn); |
xcb_void_cookie_t ck; |
xcb_generic_error_t *err; |
ck = xcb_create_pixmap_checked (conn, 1, pix, scr->root, 1, 1); |
err = xcb_request_check (conn, ck); |
if (err) { |
fprintf (stderr, "Cannot create pixmap: %d", err->error_code); |
free (err); |
} |
ck = xcb_create_cursor_checked (conn, cur, pix, pix, 0, 0, 0, 0, 0, 0, 0, 0); |
err = xcb_request_check (conn, ck); |
if (err) { |
fprintf (stderr, "Cannot create cursor: %d", err->error_code); |
free (err); |
} |
return cur; |
} |
static int x_initialise(nsfb_t *nsfb) |
{ |
uint32_t mask; |
uint32_t values[3]; |
xcb_size_hints_t *hints; |
xstate_t *xstate = nsfb->surface_priv; |
xcb_cursor_t blank_cursor; |
if (xstate != NULL) |
return -1; /* already initialised */ |
/* sanity check bpp. */ |
if ((nsfb->bpp != 32) && (nsfb->bpp != 16) && (nsfb->bpp != 8)) |
return -1; |
xstate = calloc(1, sizeof(xstate_t)); |
if (xstate == NULL) |
return -1; /* no memory */ |
/* open connection with the server */ |
xstate->connection = xcb_connect(NULL, NULL); |
if (xstate->connection == NULL) { |
fprintf(stderr, "Memory error opening display\n"); |
free(xstate); |
return -1; /* no memory */ |
} |
if (xcb_connection_has_error(xstate->connection) != 0) { |
fprintf(stderr, "Error opening display\n"); |
free(xstate); |
return -1; /* no memory */ |
} |
/* get screen */ |
xstate->screen = xcb_setup_roots_iterator(xcb_get_setup(xstate->connection)).data; |
/* create image */ |
xstate->image = create_shm_image(xstate, nsfb->width, nsfb->height, nsfb->bpp); |
if (xstate->image == NULL) |
xstate->image = create_image(xstate->connection, nsfb->width, nsfb->height, nsfb->bpp); |
if (xstate->image == NULL) { |
fprintf(stderr, "Unable to create image\n"); |
free(xstate); |
xcb_disconnect(xstate->connection); |
return -1; |
} |
/* ensure plotting information is stored */ |
nsfb->surface_priv = xstate; |
nsfb->ptr = xstate->image->data; |
nsfb->linelen = xstate->image->stride; |
/* get blank cursor */ |
blank_cursor = create_blank_cursor(xstate->connection, xstate->screen); |
/* get keysymbol maps */ |
xstate->keysymbols = xcb_key_symbols_alloc(xstate->connection); |
/* create window */ |
mask = XCB_CW_BACK_PIXEL | XCB_CW_EVENT_MASK | XCB_CW_CURSOR; |
values[0] = xstate->screen->white_pixel; |
values[1] = XCB_EVENT_MASK_EXPOSURE | |
XCB_EVENT_MASK_KEY_PRESS | |
XCB_EVENT_MASK_KEY_RELEASE | |
XCB_EVENT_MASK_BUTTON_PRESS | |
XCB_EVENT_MASK_BUTTON_RELEASE | |
XCB_EVENT_MASK_POINTER_MOTION; |
values[2] = blank_cursor; |
xstate->window = xcb_generate_id(xstate->connection); |
xcb_create_window (xstate->connection, |
XCB_COPY_FROM_PARENT, |
xstate->window, |
xstate->screen->root, |
0, 0, xstate->image->width, xstate->image->height, 1, |
XCB_WINDOW_CLASS_INPUT_OUTPUT, |
xstate->screen->root_visual, |
mask, values); |
/* set size hits on window */ |
hints = xcb_alloc_size_hints(); |
xcb_size_hints_set_max_size(hints, xstate->image->width, xstate->image->height); |
xcb_size_hints_set_min_size(hints, xstate->image->width, xstate->image->height); |
xcb_set_wm_size_hints(xstate->connection, xstate->window, WM_NORMAL_HINTS, hints); |
xcb_free_size_hints(hints); |
/* create backing pixmap */ |
xstate->pmap = xcb_generate_id(xstate->connection); |
xcb_create_pixmap(xstate->connection, 24, xstate->pmap, xstate->window, xstate->image->width, xstate->image->height); |
/* create pixmap plot gc */ |
mask = XCB_GC_FOREGROUND | XCB_GC_BACKGROUND; |
values[0] = xstate->screen->black_pixel; |
values[1] = 0xffffff; |
xstate->gc = xcb_generate_id (xstate->connection); |
xcb_create_gc(xstate->connection, xstate->gc, xstate->pmap, mask, values); |
/* if (nsfb->bpp == 8) |
set_palette(nsfb); |
*/ |
/* put the image into the pixmap */ |
update_and_redraw_pixmap(xstate, 0, 0, xstate->image->width, xstate->image->height); |
/* show the window */ |
xcb_map_window (xstate->connection, xstate->window); |
xcb_flush(xstate->connection); |
return 0; |
} |
static int x_finalise(nsfb_t *nsfb) |
{ |
xstate_t *xstate = nsfb->surface_priv; |
if (xstate == NULL) |
return 0; |
xcb_key_symbols_free(xstate->keysymbols); |
/* free pixmap */ |
xcb_free_pixmap(xstate->connection, xstate->pmap); |
/* close connection to server */ |
xcb_disconnect(xstate->connection); |
return 0; |
} |
static bool x_input(nsfb_t *nsfb, nsfb_event_t *event, int timeout) |
{ |
xcb_generic_event_t *e; |
xcb_expose_event_t *ee; |
xcb_motion_notify_event_t *emn; |
xcb_button_press_event_t *ebp; |
xcb_key_press_event_t *ekp; |
xcb_key_press_event_t *ekr; |
xstate_t *xstate = nsfb->surface_priv; |
if (xstate == NULL) |
return false; |
xcb_flush(xstate->connection); |
/* try and retrive an event immediately */ |
e = xcb_poll_for_event(xstate->connection); |
if ((e == NULL) && (timeout != 0)) { |
if (timeout > 0) { |
int confd; |
fd_set rfds; |
struct timeval tv; |
int retval; |
confd = xcb_get_file_descriptor(xstate->connection); |
FD_ZERO(&rfds); |
FD_SET(confd, &rfds); |
tv.tv_sec = timeout / 1000; |
tv.tv_usec = timeout % 1000; |
retval = select(confd + 1, &rfds, NULL, NULL, &tv); |
if (retval == 0) { |
/* timeout, nothing happened */ |
event->type = NSFB_EVENT_CONTROL; |
event->value.controlcode = NSFB_CONTROL_TIMEOUT; |
return true; |
} |
} |
e = xcb_wait_for_event(xstate->connection); |
} |
if (e == NULL) { |
if (xcb_connection_has_error(xstate->connection) != 0) { |
/* connection closed quiting time */ |
event->type = NSFB_EVENT_CONTROL; |
event->value.controlcode = NSFB_CONTROL_QUIT; |
return true; |
} else { |
return false; /* no event */ |
} |
} |
event->type = NSFB_EVENT_NONE; |
switch (e->response_type) { |
case XCB_EXPOSE: |
ee = (xcb_expose_event_t *)e; |
xcb_copy_area(xstate->connection, |
xstate->pmap, |
xstate->window, |
xstate->gc, |
ee->x, ee->y, |
ee->x, ee->y, |
ee->width, ee->height); |
xcb_flush (xstate->connection); |
break; |
case XCB_MOTION_NOTIFY: |
emn = (xcb_motion_notify_event_t *)e; |
event->type = NSFB_EVENT_MOVE_ABSOLUTE; |
event->value.vector.x = emn->event_x; |
event->value.vector.y = emn->event_y; |
event->value.vector.z = 0; |
break; |
case XCB_BUTTON_PRESS: |
ebp = (xcb_button_press_event_t *)e; |
event->type = NSFB_EVENT_KEY_DOWN; |
switch (ebp->detail) { |
case X_BUTTON_LEFT: |
event->value.keycode = NSFB_KEY_MOUSE_1; |
break; |
case X_BUTTON_MIDDLE: |
event->value.keycode = NSFB_KEY_MOUSE_2; |
break; |
case X_BUTTON_RIGHT: |
event->value.keycode = NSFB_KEY_MOUSE_3; |
break; |
case X_BUTTON_WHEELUP: |
event->value.keycode = NSFB_KEY_MOUSE_4; |
break; |
case X_BUTTON_WHEELDOWN: |
event->value.keycode = NSFB_KEY_MOUSE_5; |
break; |
} |
break; |
case XCB_BUTTON_RELEASE: |
ebp = (xcb_button_press_event_t *)e; |
event->type = NSFB_EVENT_KEY_UP; |
switch (ebp->detail) { |
case X_BUTTON_LEFT: |
event->value.keycode = NSFB_KEY_MOUSE_1; |
break; |
case X_BUTTON_MIDDLE: |
event->value.keycode = NSFB_KEY_MOUSE_2; |
break; |
case X_BUTTON_RIGHT: |
event->value.keycode = NSFB_KEY_MOUSE_3; |
break; |
case X_BUTTON_WHEELUP: |
event->value.keycode = NSFB_KEY_MOUSE_4; |
break; |
case X_BUTTON_WHEELDOWN: |
event->value.keycode = NSFB_KEY_MOUSE_5; |
break; |
} |
break; |
case XCB_KEY_PRESS: |
ekp = (xcb_key_press_event_t *)e; |
event->type = NSFB_EVENT_KEY_DOWN; |
event->value.keycode = xkeysym_to_nsfbkeycode(xcb_key_symbols_get_keysym(xstate->keysymbols, ekp->detail, 0)); |
break; |
case XCB_KEY_RELEASE: |
ekr = (xcb_key_release_event_t *)e; |
event->type = NSFB_EVENT_KEY_UP; |
event->value.keycode = xkeysym_to_nsfbkeycode(xcb_key_symbols_get_keysym(xstate->keysymbols, ekr->detail, 0)); |
break; |
} |
free(e); |
return true; |
} |
static int x_claim(nsfb_t *nsfb, nsfb_bbox_t *box) |
{ |
struct nsfb_cursor_s *cursor = nsfb->cursor; |
if ((cursor != NULL) && |
(cursor->plotted == true) && |
(nsfb_plot_bbox_intersect(box, &cursor->loc))) { |
nsfb_cursor_clear(nsfb, cursor); |
} |
return 0; |
} |
static int |
x_cursor(nsfb_t *nsfb, struct nsfb_cursor_s *cursor) |
{ |
xstate_t *xstate = nsfb->surface_priv; |
nsfb_bbox_t redraw; |
nsfb_bbox_t fbarea; |
if ((cursor != NULL) && (cursor->plotted == true)) { |
nsfb_plot_add_rect(&cursor->savloc, &cursor->loc, &redraw); |
/* screen area */ |
fbarea.x0 = 0; |
fbarea.y0 = 0; |
fbarea.x1 = nsfb->width; |
fbarea.y1 = nsfb->height; |
nsfb_plot_clip(&fbarea, &redraw); |
nsfb_cursor_clear(nsfb, cursor); |
nsfb_cursor_plot(nsfb, cursor); |
/* TODO: This is hediously ineficient - should keep the pointer image |
* as a pixmap and plot server side |
*/ |
update_and_redraw_pixmap(xstate, redraw.x0, redraw.y0, redraw.x1 - redraw.x0, redraw.y1 - redraw.y0); |
} |
return true; |
} |
static int x_update(nsfb_t *nsfb, nsfb_bbox_t *box) |
{ |
xstate_t *xstate = nsfb->surface_priv; |
struct nsfb_cursor_s *cursor = nsfb->cursor; |
if ((cursor != NULL) && |
(cursor->plotted == false)) { |
nsfb_cursor_plot(nsfb, cursor); |
} |
update_and_redraw_pixmap(xstate, box->x0, box->y0, box->x1 - box->x0, box->y1 - box->y0); |
return 0; |
} |
const nsfb_surface_rtns_t x_rtns = { |
.initialise = x_initialise, |
.finalise = x_finalise, |
.input = x_input, |
.claim = x_claim, |
.update = x_update, |
.cursor = x_cursor, |
.geometry = x_set_geometry, |
}; |
NSFB_SURFACE_DEF(x, NSFB_SURFACE_X, &x_rtns) |
/* |
* Local variables: |
* c-basic-offset: 4 |
* tab-width: 8 |
* End: |
*/ |
/contrib/network/netsurf/libnsfb/src/Makefile |
---|
0,0 → 1,7 |
# Sources |
OBJS := libnsfb.o dump.o cursor.o palette.o |
OUTFILE = libo.o |
CFLAGS += -I ../../include/ -I ../../ -I ../ -I ./ -I /home/sourcerer/kos_src/newenginek/kolibri/include |
include $(MENUETDEV)/makefiles/Makefile_for_o_lib |
/contrib/network/netsurf/libnsfb/src/cursor.c |
---|
0,0 → 1,152 |
/* |
* Copyright 2010 Vincent Sanders <vince@kyllikki.org> |
* |
* This file is part of libnsfb, http://www.netsurf-browser.org/ |
* Licenced under the MIT License, |
* http://www.opensource.org/licenses/mit-license.php |
*/ |
/** \file |
* cursor (implementation). |
*/ |
#include <stdbool.h> |
#include <stdlib.h> |
#include "libnsfb.h" |
#include "libnsfb_plot.h" |
#include "libnsfb_cursor.h" |
#include "nsfb.h" |
#include "cursor.h" |
#include "plot.h" |
#include "surface.h" |
bool nsfb_cursor_init(nsfb_t *nsfb) |
{ |
if (nsfb->cursor != NULL) |
return false; |
nsfb->cursor = calloc(1, sizeof(struct nsfb_cursor_s)); |
if (nsfb->cursor == NULL) |
return false; |
nsfb->cursor->loc.x0 = nsfb->width / 2; |
nsfb->cursor->loc.y0 = nsfb->height / 2; |
return true; |
} |
bool nsfb_cursor_set(nsfb_t *nsfb, const nsfb_colour_t *pixel, |
int bmp_width, int bmp_height, int bmp_stride, |
int hotspot_x, int hotspot_y) |
{ |
if (nsfb->cursor == NULL) |
return false; |
nsfb->cursor->pixel = pixel; |
nsfb->cursor->bmp_width = bmp_width; |
nsfb->cursor->bmp_height = bmp_height; |
nsfb->cursor->bmp_stride = bmp_stride; |
nsfb->cursor->loc.x1 = nsfb->cursor->loc.x0 + nsfb->cursor->bmp_width; |
nsfb->cursor->loc.y1 = nsfb->cursor->loc.y0 + nsfb->cursor->bmp_height; |
nsfb->cursor->hotspot_x = hotspot_x; |
nsfb->cursor->hotspot_y = hotspot_y; |
return nsfb->surface_rtns->cursor(nsfb, nsfb->cursor); |
} |
bool nsfb_cursor_loc_set(nsfb_t *nsfb, const nsfb_bbox_t *loc) |
{ |
if (nsfb->cursor == NULL) |
return false; |
nsfb->cursor->loc = *loc; |
nsfb->cursor->loc.x1 = nsfb->cursor->loc.x0 + nsfb->cursor->bmp_width; |
nsfb->cursor->loc.y1 = nsfb->cursor->loc.y0 + nsfb->cursor->bmp_height; |
return nsfb->surface_rtns->cursor(nsfb, nsfb->cursor); |
} |
bool nsfb_cursor_loc_get(nsfb_t *nsfb, nsfb_bbox_t *loc) |
{ |
if (nsfb->cursor == NULL) |
return false; |
*loc = nsfb->cursor->loc; |
return true; |
} |
/* documented in cursor.h */ |
bool nsfb_cursor_plot(nsfb_t *nsfb, struct nsfb_cursor_s *cursor) |
{ |
int sav_size; |
nsfb_bbox_t sclip; /* saved clipping area */ |
nsfb->plotter_fns->get_clip(nsfb, &sclip); |
nsfb->plotter_fns->set_clip(nsfb, NULL); |
/* offset cursor rect for hotspot */ |
cursor->loc.x0 -= cursor->hotspot_x; |
cursor->loc.y0 -= cursor->hotspot_y; |
cursor->loc.x1 -= cursor->hotspot_x; |
cursor->loc.y1 -= cursor->hotspot_y; |
cursor->savloc = cursor->loc; |
cursor->sav_width = cursor->savloc.x1 - cursor->savloc.x0; |
cursor->sav_height = cursor->savloc.y1 - cursor->savloc.y0; |
sav_size = cursor->sav_width * cursor->sav_height * sizeof(nsfb_colour_t); |
if (cursor->sav_size < sav_size) { |
cursor->sav = realloc(cursor->sav, sav_size); |
cursor->sav_size = sav_size; |
} |
nsfb->plotter_fns->readrect(nsfb, &cursor->savloc, cursor->sav); |
cursor->sav_width = cursor->savloc.x1 - cursor->savloc.x0; |
cursor->sav_height = cursor->savloc.y1 - cursor->savloc.y0; |
nsfb->plotter_fns->set_clip(nsfb, NULL); |
nsfb->plotter_fns->bitmap(nsfb, |
&cursor->loc, |
cursor->pixel, |
cursor->bmp_width, |
cursor->bmp_height, |
cursor->bmp_stride, |
true); |
/* undo hotspot offset */ |
cursor->loc.x0 += cursor->hotspot_x; |
cursor->loc.y0 += cursor->hotspot_y; |
cursor->loc.x1 += cursor->hotspot_x; |
cursor->loc.y1 += cursor->hotspot_y; |
nsfb->plotter_fns->set_clip(nsfb, &sclip); |
cursor->plotted = true; |
return true; |
} |
bool nsfb_cursor_clear(nsfb_t *nsfb, struct nsfb_cursor_s *cursor) |
{ |
nsfb_bbox_t sclip; /* saved clipping area */ |
nsfb->plotter_fns->get_clip(nsfb, &sclip); |
nsfb->plotter_fns->set_clip(nsfb, NULL); |
nsfb->plotter_fns->bitmap(nsfb, |
&cursor->savloc, |
cursor->sav, |
cursor->sav_width, |
cursor->sav_height, |
cursor->sav_width, |
false); |
nsfb->plotter_fns->set_clip(nsfb, &sclip); |
cursor->plotted = false; |
return true; |
} |
/contrib/network/netsurf/libnsfb/src/dump.c |
---|
0,0 → 1,56 |
/* |
* Copyright 2009 Vincent Sanders <vince@simtec.co.uk> |
* |
* This file is part of libnsfb, http://www.netsurf-browser.org/ |
* Licenced under the MIT License, |
* http://www.opensource.org/licenses/mit-license.php |
*/ |
#include <stdbool.h> |
#include <stdio.h> |
#include <stdlib.h> |
#include <unistd.h> |
#include "libnsfb.h" |
#include "libnsfb_plot.h" |
#include "libnsfb_event.h" |
#include "nsfb.h" |
#include "surface.h" |
/* exported interface documented in libnsfb.h */ |
bool |
nsfb_dump(nsfb_t *nsfb, int fd) |
{ |
FILE *outf; |
int x; |
int y; |
outf = fdopen(dup(fd), "w"); |
if (outf == NULL) { |
return false; |
} |
fprintf(outf,"P3\n#libnsfb buffer dump\n%d %d\n255\n", |
nsfb->width, nsfb->height); |
for (y=0; y < nsfb->height; y++) { |
for (x=0; x < nsfb->width; x++) { |
fprintf(outf,"%d %d %d ", |
*(nsfb->ptr + (((nsfb->width * y) + x) * 4) + 2), |
*(nsfb->ptr + (((nsfb->width * y) + x) * 4) + 1), |
*(nsfb->ptr + (((nsfb->width * y) + x) * 4) + 0)); |
} |
fprintf(outf,"\n"); |
} |
fclose(outf); |
return true; |
} |
/* |
* Local variables: |
* c-basic-offset: 4 |
* tab-width: 8 |
* End: |
*/ |
/contrib/network/netsurf/libnsfb/src/libnsfb.c |
---|
0,0 → 1,152 |
/* |
* Copyright 2009 Vincent Sanders <vince@simtec.co.uk> |
* |
* This file is part of libnsfb, http://www.netsurf-browser.org/ |
* Licenced under the MIT License, |
* http://www.opensource.org/licenses/mit-license.php |
*/ |
#include <stdbool.h> |
#include <stdio.h> |
#include <stdlib.h> |
#include <string.h> |
#include "libnsfb.h" |
#include "libnsfb_plot.h" |
#include "libnsfb_event.h" |
#include "nsfb.h" |
#include "palette.h" |
#include "surface.h" |
/* exported interface documented in libnsfb.h */ |
nsfb_t* |
nsfb_new(const enum nsfb_type_e surface_type) |
{ |
nsfb_t *newfb; |
newfb = calloc(1, sizeof(nsfb_t)); |
if (newfb == NULL) |
return NULL; |
/* obtain surface routines */ |
newfb->surface_rtns = nsfb_surface_get_rtns(surface_type); |
if (newfb->surface_rtns == NULL) { |
free(newfb); |
return NULL; |
} |
newfb->surface_rtns->defaults(newfb); |
return newfb; |
} |
/* exported interface documented in libnsfb.h */ |
int |
nsfb_init(nsfb_t *nsfb) |
{ |
return nsfb->surface_rtns->initialise(nsfb); |
} |
/* exported interface documented in libnsfb.h */ |
int |
nsfb_free(nsfb_t *nsfb) |
{ |
int ret; |
if (nsfb->palette != NULL) |
nsfb_palette_free(nsfb->palette); |
ret = nsfb->surface_rtns->finalise(nsfb); |
free(nsfb); |
return ret; |
} |
/* exported interface documented in libnsfb.h */ |
bool |
nsfb_event(nsfb_t *nsfb, nsfb_event_t *event, int timeout) |
{ |
return nsfb->surface_rtns->input(nsfb, event, timeout); |
} |
/* exported interface documented in libnsfb.h */ |
int |
nsfb_claim(nsfb_t *nsfb, nsfb_bbox_t *box) |
{ |
return nsfb->surface_rtns->claim(nsfb, box); |
} |
/* exported interface documented in libnsfb.h */ |
int |
nsfb_update(nsfb_t *nsfb, nsfb_bbox_t *box) |
{ |
return nsfb->surface_rtns->update(nsfb, box); |
} |
/* exported interface documented in libnsfb.h */ |
int |
nsfb_set_geometry(nsfb_t *nsfb, int width, int height, enum nsfb_format_e format) |
{ |
if (width <= 0) |
width = nsfb->width; |
if (height <= 0) |
height = nsfb->height; |
if (format == NSFB_FMT_ANY) |
format = nsfb->format; |
return nsfb->surface_rtns->geometry(nsfb, width, height, format); |
} |
/* exported interface documented in libnsfb.h */ |
int nsfb_set_parameters(nsfb_t *nsfb, const char *parameters) |
{ |
if ((parameters == NULL) || (*parameters == 0)) { |
return -1; |
} |
if (nsfb->parameters != NULL) { |
free(nsfb->parameters); |
} |
nsfb->parameters = strdup(parameters); |
return nsfb->surface_rtns->parameters(nsfb, parameters); |
} |
/* exported interface documented in libnsfb.h */ |
int |
nsfb_get_geometry(nsfb_t *nsfb, int *width, int *height, enum nsfb_format_e *format) |
{ |
if (width != NULL) |
*width = nsfb->width; |
if (height != NULL) |
*height = nsfb->height; |
if (format != NULL) |
*format = nsfb->format; |
return 0; |
} |
/* exported interface documented in libnsfb.h */ |
int |
nsfb_get_buffer(nsfb_t *nsfb, uint8_t **ptr, int *linelen) |
{ |
if (ptr != NULL) { |
*ptr = nsfb->ptr; |
} |
if (linelen != NULL) { |
*linelen = nsfb->linelen; |
} |
return 0; |
} |
/* |
* Local variables: |
* c-basic-offset: 4 |
* tab-width: 8 |
* End: |
*/ |
/contrib/network/netsurf/libnsfb/src/palette.c |
---|
0,0 → 1,117 |
/* |
* Copyright 2012 Michael Drake <tlsa@netsurf-browser.org> |
* |
* This file is part of libnsfb, http://www.netsurf-browser.org/ |
* Licenced under the MIT License, |
* http://www.opensource.org/licenses/mit-license.php |
*/ |
/** \file |
* Palette (implementation). |
*/ |
#include <assert.h> |
#include <stdbool.h> |
#include <stdlib.h> |
#include <string.h> |
#include "palette.h" |
/** Create an empty palette object. */ |
bool nsfb_palette_new(struct nsfb_palette_s **palette, int width) |
{ |
*palette = malloc(sizeof(struct nsfb_palette_s)); |
if (*palette == NULL) { |
return false; |
} |
(*palette)->type = NSFB_PALETTE_EMPTY; |
(*palette)->last = 0; |
(*palette)->dither = false; |
(*palette)->dither_ctx.data_len = width * 3; |
(*palette)->dither_ctx.data = malloc(width * 3 * sizeof(int)); |
if ((*palette)->dither_ctx.data == NULL) { |
nsfb_palette_free(*palette); |
return false; |
} |
return true; |
} |
/** Free a palette object. */ |
void nsfb_palette_free(struct nsfb_palette_s *palette) |
{ |
if (palette != NULL) { |
if (palette->dither_ctx.data != NULL) { |
free(palette->dither_ctx.data); |
} |
free(palette); |
} |
} |
/** Init error diffusion for a plot. */ |
void nsfb_palette_dither_init(struct nsfb_palette_s *palette, int width) |
{ |
palette->dither = true; |
memset(palette->dither_ctx.data, 0, palette->dither_ctx.data_len); |
palette->dither_ctx.width = width * 3; |
palette->dither_ctx.current = 0; |
} |
/** Finalise error diffusion after a plot. */ |
void nsfb_palette_dither_fini(struct nsfb_palette_s *palette) |
{ |
palette->dither = false; |
} |
/** Generate libnsfb 8bpp default palette. */ |
void nsfb_palette_generate_nsfb_8bpp(struct nsfb_palette_s *palette) |
{ |
int rloop, gloop, bloop; |
int loop = 0; |
uint8_t r, g, b; |
/* Build a linear 6-8-5 levels RGB colour cube palette. |
* This accounts for 240 colours */ |
#define RLIM 6 |
#define GLIM 8 |
#define BLIM 5 |
for (rloop = 0; rloop < RLIM; rloop++) { |
for (gloop = 0; gloop < GLIM; gloop++) { |
for (bloop = 0; bloop < BLIM; bloop++) { |
r = ((rloop * 255 * 2) + RLIM - 1) / |
(2 * (RLIM - 1)); |
g = ((gloop * 255 * 2) + GLIM - 1) / |
(2 * (GLIM - 1)); |
b = ((bloop * 255 * 2) + BLIM - 1) / |
(2 * (BLIM - 1)); |
palette->data[loop] = r | g << 8 | b << 16; |
loop++; |
} |
} |
} |
#undef RLIM |
#undef GLIM |
#undef BLIM |
/* Should have 240 colours set */ |
assert(loop == 240); |
/* Fill index 240 to index 255 with grayscales */ |
/* Note: already have full black and full white from RGB cube */ |
for (; loop < 256; loop++) { |
int ngray = loop - 240 + 1; |
r = ngray * 15; /* 17*15 = 255 */ |
g = b = r; |
palette->data[loop] = r | g << 8 | b << 16; |
} |
/* Set palette details */ |
palette->type = NSFB_PALETTE_NSFB_8BPP; |
palette->last = 255; |
} |
/contrib/network/netsurf/libnsfb/src/plot/16bpp.c |
---|
0,0 → 1,126 |
/* |
* Copyright 2009 Vincent Sanders <vince@simtec.co.uk> |
* Copyright 2010 Michael Drake <tlsa@netsurf-browser.org> |
* |
* This file is part of libnsfb, http://www.netsurf-browser.org/ |
* Licenced under the MIT License, |
* http://www.opensource.org/licenses/mit-license.php |
*/ |
#include <stdbool.h> |
#include <endian.h> |
#include <stdlib.h> |
#include "libnsfb.h" |
#include "libnsfb_plot.h" |
#include "libnsfb_plot_util.h" |
#include "nsfb.h" |
#include "plot.h" |
#define UNUSED __attribute__((unused)) |
static inline uint16_t *get_xy_loc(nsfb_t *nsfb, int x, int y) |
{ |
return (void *)(nsfb->ptr + (y * nsfb->linelen) + (x << 1)); |
} |
static inline nsfb_colour_t pixel_to_colour(UNUSED nsfb_t *nsfb, uint16_t pixel) |
{ |
return ((pixel & 0x1F) << 19) | |
((pixel & 0x7E0) << 5) | |
((pixel & 0xF800) >> 8); |
} |
/* convert a colour value to a 16bpp pixel value ready for screen output */ |
static inline uint16_t colour_to_pixel(UNUSED nsfb_t *nsfb, nsfb_colour_t c) |
{ |
return ((c & 0xF8) << 8) | ((c & 0xFC00 ) >> 5) | ((c & 0xF80000) >> 19); |
} |
#define PLOT_TYPE uint16_t |
#define PLOT_LINELEN(ll) ((ll) >> 1) |
#include "common.c" |
static bool fill(nsfb_t *nsfb, nsfb_bbox_t *rect, nsfb_colour_t c) |
{ |
int w; |
uint16_t *pvid16; |
uint16_t ent16; |
uint32_t *pvid32; |
uint32_t ent32; |
uint32_t llen; |
uint32_t width; |
uint32_t height; |
if (!nsfb_plot_clip_ctx(nsfb, rect)) |
return true; /* fill lies outside current clipping region */ |
ent16 = colour_to_pixel(nsfb, c); |
width = rect->x1 - rect->x0; |
height = rect->y1 - rect->y0; |
pvid16 = get_xy_loc(nsfb, rect->x0, rect->y0); |
if (((rect->x0 & 1) == 0) && ((width & 1) == 0)) { |
/* aligned to 32bit value and width is even */ |
width = width >> 1; |
llen = (nsfb->linelen >> 2) - width; |
ent32 = ent16 | (ent16 << 16); |
pvid32 = (void *)pvid16; |
while (height-- > 0) { |
w = width; |
while (w >= 16) { |
*pvid32++ = ent32; *pvid32++ = ent32; |
*pvid32++ = ent32; *pvid32++ = ent32; |
*pvid32++ = ent32; *pvid32++ = ent32; |
*pvid32++ = ent32; *pvid32++ = ent32; |
*pvid32++ = ent32; *pvid32++ = ent32; |
*pvid32++ = ent32; *pvid32++ = ent32; |
*pvid32++ = ent32; *pvid32++ = ent32; |
*pvid32++ = ent32; *pvid32++ = ent32; |
w-=16; |
} |
while (w >= 4) { |
*pvid32++ = ent32; *pvid32++ = ent32; |
*pvid32++ = ent32; *pvid32++ = ent32; |
w-=4; |
} |
while (w > 0) { |
*pvid32++ = ent32; |
w--; |
} |
// for (w = width; w > 0; w--) *pvid32++ = ent32; |
pvid32 += llen; |
} |
} else { |
llen = (nsfb->linelen >> 1) - width; |
while (height-- > 0) { |
for (w = width; w > 0; w--) *pvid16++ = ent16; |
pvid16 += llen; |
} |
} |
return true; |
} |
const nsfb_plotter_fns_t _nsfb_16bpp_plotters = { |
.line = line, |
.fill = fill, |
.point = point, |
.bitmap = bitmap, |
.glyph8 = glyph8, |
.glyph1 = glyph1, |
.readrect = readrect, |
}; |
/* |
* Local Variables: |
* c-basic-offset:8 |
* End: |
*/ |
/contrib/network/netsurf/libnsfb/src/plot/1bpp.c |
---|
0,0 → 1,266 |
/* |
* Copyright 2008 Vincent Sanders <vince@simtec.co.uk> |
* |
* This file is part of NetSurf, http://www.netsurf-browser.org/ |
* |
* NetSurf is free software; you can redistribute it and/or modify |
* it under the terms of the GNU General Public License as published by |
* the Free Software Foundation; version 2 of the License. |
* |
* NetSurf is distributed in the hope that it will be useful, |
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
* GNU General Public License for more details. |
* |
* You should have received a copy of the GNU General Public License |
* along with this program. If not, see <http://www.gnu.org/licenses/>. |
*/ |
#include <sys/types.h> |
#include <stdint.h> |
#include <string.h> |
#include <limits.h> |
#include "utils/log.h" |
#include "utils/utf8.h" |
#include "desktop/plotters.h" |
#include "framebuffer/fb_gui.h" |
#include "framebuffer/fb_plotters.h" |
#include "framebuffer/fb_bitmap.h" |
#include "framebuffer/fb_font.h" |
extern struct fb_info_s *fbinfo; |
static bool fb_1bpp_rectangle(int x0, int y0, int width, int height, |
int line_width, colour c, bool dotted, bool dashed) |
{ |
LOG(("%s(%d, %d, %d, %d, %d, 0x%lx, %d, %d)\n", __func__, |
x0,y0,width,height,line_width,c,dotted,dashed)); |
return true; |
} |
static bool fb_1bpp_line(int x0, int y0, int x1, int y1, int width, |
colour c, bool dotted, bool dashed) |
{ |
LOG(("%s(%d, %d, %d, %d, %d, 0x%lx, %d, %d)\n", __func__, |
x0,y0,x1,y1,width,c,dotted,dashed)); |
return true; |
} |
static bool fb_1bpp_polygon(const int *p, unsigned int n, colour fill) |
{ |
LOG(("%s(%p, %d, 0x%lx)\n", __func__, p,n,fill)); |
return true; |
} |
static bool fb_1bpp_fill(int x0, int y0, int x1, int y1, colour c) |
{ |
int x; |
int y; |
int pent; |
LOG(("%s(%d, %d, %d, %d, 0x%lx)\n", __func__, |
x0,y0,x1,y1,c)); |
if (c != 0) |
pent = 0xff; |
else |
pent = 0; |
fb_plotters_clip_rect_ctx(&x0, &y0, &x1, &y1); |
x = x1 - x0; |
for (y = y0; y < y1; y++) { |
memset(fb_plotters_get_xy_loc(x0, y, fbinfo), pent, x); |
} |
return true; |
} |
static bool fb_1bpp_clg(colour c) |
{ |
LOG(("%s(%lx)\n", __func__, c)); |
fb_1bpp_fill(fb_plot_ctx.x0, |
fb_plot_ctx.y0, |
fb_plot_ctx.x1, |
fb_plot_ctx.y1, |
c); |
return true; |
} |
static bool fb_1bpp_text(int x, int y, const struct css_style *style, |
const char *text, size_t length, colour bg, colour c) |
{ |
const struct fb_font_desc* fb_font = fb_get_font(style); |
u8_t *video_char_start; |
const u8_t *font_data; |
int yloop; |
unsigned char row; |
int chr; |
LOG(("%s(%d, %d, %p, %.*s , %d, 0x%lx, 0x%lx)\n", __func__, |
x,y,style,length,text,length,bg,c)); |
for (chr=0; chr < length; chr++) { |
video_char_start = fb_plotters_get_xy_loc(x + (chr * (fb_font->width)), y, fbinfo); |
/* move our font-data to the correct position */ |
font_data = fb_font->data + (text[chr] * fb_font->height); |
for (yloop = 0; yloop < fb_font->height; yloop++) { |
row = font_data[yloop]; |
*video_char_start = row; |
video_char_start += fbinfo->line_len; |
} |
} |
return true; |
/* copied from css/css.h - need to open the correct font here |
* font properties * |
css_font_family font_family; |
struct { |
css_font_size_type size; |
union { |
struct css_length length; |
float absolute; |
float percent; |
} value; |
} font_size; |
css_font_style font_style; |
css_font_variant font_variant; |
css_font_weight font_weight; |
*/ |
return true; |
} |
static bool fb_1bpp_disc(int x, int y, int radius, colour c, bool filled) |
{ |
LOG(("%s(%d, %d, %d, 0x%lx, %d)\n", __func__, |
x, y, radius, c, filled)); |
return true; |
} |
static bool fb_1bpp_arc(int x, int y, int radius, int angle1, int angle2, |
colour c) |
{ |
LOG(("x %d, y %d, radius %d, angle1 %d, angle2 %d, c 0x%lx", |
x, y, radius, angle1, angle2, c)); |
return true; |
} |
static inline colour ablend(colour pixel) |
{ |
return pixel; |
} |
static bool fb_1bpp_bitmap(int x, int y, int width, int height, |
struct bitmap *bitmap, colour bg, |
struct content *content) |
{ |
u8_t *video_char_start; |
colour *pixel = (colour *)bitmap->pixdata; |
colour abpixel; /* alphablended pixel */ |
int xloop,yloop; |
video_char_start = fb_plotters_get_xy_loc(x, y, fbinfo); |
for (yloop = 0; yloop < height; yloop++) { |
for (xloop = 0; xloop < width; xloop++) { |
abpixel = pixel[(yloop * bitmap->width) + xloop]; |
if ((abpixel & 0xFF000000) != 0) { |
if ((abpixel & 0xFF000000) != 0xFF) |
abpixel = ablend(abpixel); |
if (abpixel == 0) |
video_char_start[xloop] |= (1 << (xloop % 8)); |
else |
video_char_start[xloop] &= ~(1 << (xloop % 8)); |
} |
} |
video_char_start += fbinfo->line_len; |
} |
return true; |
} |
static bool fb_1bpp_bitmap_tile(int x, int y, int width, int height, |
struct bitmap *bitmap, colour bg, |
bool repeat_x, bool repeat_y, |
struct content *content) |
{ |
unsigned long xf,yf,wf,hf; |
if (!(repeat_x || repeat_y)) { |
/* Not repeating at all, so just pass it on */ |
return fb_1bpp_bitmap(x,y,width,height,bitmap,bg,content); |
} |
for (xf = 0; xf < width; xf += bitmap->width) { |
for(yf = 0;yf < height; yf += bitmap->height) { |
if(width > xf+bitmap->width) |
{ |
wf = width-(xf+bitmap->width); |
} |
else |
{ |
wf=bitmap->width; |
} |
if(height > yf+bitmap->height) |
{ |
hf = height-(yf+bitmap->height); |
} |
else |
{ |
hf=bitmap->height; |
} |
fb_1bpp_bitmap(x+xf, y+yf, wf, hf, bitmap, bg, content); |
} |
} |
return true; |
} |
static bool fb_1bpp_flush(void) |
{ |
LOG(("%s()\n", __func__)); |
return true; |
} |
static bool fb_1bpp_path(const float *p, unsigned int n, colour fill, float width, |
colour c, const float transform[6]) |
{ |
LOG(("%s(%f, %d, 0x%lx, %f, 0x%lx, %f)\n", __func__, |
*p, n, fill, width, c, *transform)); |
return true; |
} |
const struct plotter_table framebuffer_1bpp_plot = { |
.clg = fb_1bpp_clg, |
.rectangle = fb_1bpp_rectangle, |
.line = fb_1bpp_line, |
.polygon = fb_1bpp_polygon, |
.fill = fb_1bpp_fill, |
.clip = fb_clip, |
.text = fb_1bpp_text, |
.disc = fb_1bpp_disc, |
.arc = fb_1bpp_arc, |
.bitmap = fb_1bpp_bitmap, |
.bitmap_tile = fb_1bpp_bitmap_tile, |
.flush = fb_1bpp_flush, |
.path = fb_1bpp_path |
}; |
/* |
* Local Variables: |
* c-basic-offset:8 |
* End: |
*/ |
/contrib/network/netsurf/libnsfb/src/plot/24bpp.c |
---|
0,0 → 1,442 |
/* |
* Copyright 2009 Vincent Sanders <vince@simtec.co.uk> |
* |
* This file is part of libnsfb, http://www.netsurf-browser.org/ |
* Licenced under the MIT License, |
* http://www.opensource.org/licenses/mit-license.php |
*/ |
#include <stdbool.h> |
#include <endian.h> |
#include <stdlib.h> |
#include "libnsfb.h" |
#include "libnsfb_plot.h" |
#include "libnsfb_plot_util.h" |
#include "nsfb.h" |
#include "plot.h" |
static inline uint8_t * |
get_xy_loc(nsfb_t *nsfb, int x, int y) |
{ |
return (uint8_t *)(nsfb->ptr + (y * nsfb->linelen) + (x * 3)); |
} |
#if __BYTE_ORDER == __BIG_ENDIAN |
static inline nsfb_colour_t pixel_to_colour(uint8_t pixel) |
{ |
return (pixel >> 8) & ~0xFF000000U; |
} |
/* convert a colour value to a 32bpp pixel value ready for screen output */ |
static inline uint32_t colour_to_pixel(nsfb_colour_t c) |
{ |
return (c << 8); |
} |
#else /* __BYTE_ORDER == __BIG_ENDIAN */ |
static inline nsfb_colour_t pixel_to_colour(uint32_t pixel) |
{ |
return ((pixel & 0xFF) << 16) | |
((pixel & 0xFF00)) | |
((pixel & 0xFF0000) >> 16); |
} |
/* convert a colour value to a 32bpp pixel value ready for screen output */ |
static inline uint32_t colour_to_pixel(nsfb_colour_t c) |
{ |
return ((c & 0xff0000) >> 16) | (c & 0xff00) | ((c & 0xff) << 16); |
} |
#endif |
#define SIGN(x) ((x<0) ? -1 : ((x>0) ? 1 : 0)) |
static bool |
line(nsfb_t *nsfb, int linec, nsfb_bbox_t *line, nsfb_plot_pen_t *pen) |
{ |
int w; |
uint32_t ent; |
uint32_t *pvideo; |
int x, y, i; |
int dx, dy, sdy; |
int dxabs, dyabs; |
ent = colour_to_pixel(pen->stroke_colour); |
for (;linec > 0; linec--) { |
if (line->y0 == line->y1) { |
/* horizontal line special cased */ |
if (!nsfb_plot_clip_ctx(nsfb, line)) { |
/* line outside clipping */ |
line++; |
continue; |
} |
pvideo = get_xy_loc(nsfb, line->x0, line->y0); |
w = line->x1 - line->x0; |
while (w-- > 0) |
*(pvideo + w) = ent; |
} else { |
/* standard bresenham line */ |
if (!nsfb_plot_clip_line_ctx(nsfb, line)) { |
/* line outside clipping */ |
line++; |
continue; |
} |
/* the horizontal distance of the line */ |
dx = line->x1 - line->x0; |
dxabs = abs (dx); |
/* the vertical distance of the line */ |
dy = line->y1 - line->y0; |
dyabs = abs (dy); |
sdy = dx ? SIGN(dy) * SIGN(dx) : SIGN(dy); |
if (dx >= 0) |
pvideo = get_xy_loc(nsfb, line->x0, line->y0); |
else |
pvideo = get_xy_loc(nsfb, line->x1, line->y1); |
x = dyabs >> 1; |
y = dxabs >> 1; |
if (dxabs >= dyabs) { |
/* the line is more horizontal than vertical */ |
for (i = 0; i < dxabs; i++) { |
*pvideo = ent; |
pvideo++; |
y += dyabs; |
if (y >= dxabs) { |
y -= dxabs; |
pvideo += sdy * (nsfb->linelen>>2); |
} |
} |
} else { |
/* the line is more vertical than horizontal */ |
for (i = 0; i < dyabs; i++) { |
*pvideo = ent; |
pvideo += sdy * (nsfb->linelen >> 2); |
x += dxabs; |
if (x >= dyabs) { |
x -= dyabs; |
pvideo++; |
} |
} |
} |
} |
line++; |
} |
return true; |
} |
static bool fill(nsfb_t *nsfb, nsfb_bbox_t *rect, nsfb_colour_t c) |
{ |
int w; |
uint32_t *pvid; |
uint32_t ent; |
uint32_t llen; |
uint32_t width; |
uint32_t height; |
if (!nsfb_plot_clip_ctx(nsfb, rect)) |
return true; /* fill lies outside current clipping region */ |
ent = colour_to_pixel(c); |
width = rect->x1 - rect->x0; |
height = rect->y1 - rect->y0; |
llen = (nsfb->linelen >> 2) - width; |
pvid = get_xy_loc(nsfb, rect->x0, rect->y0); |
while (height-- > 0) { |
w = width; |
while (w >= 16) { |
*pvid++ = ent; *pvid++ = ent; |
*pvid++ = ent; *pvid++ = ent; |
*pvid++ = ent; *pvid++ = ent; |
*pvid++ = ent; *pvid++ = ent; |
*pvid++ = ent; *pvid++ = ent; |
*pvid++ = ent; *pvid++ = ent; |
*pvid++ = ent; *pvid++ = ent; |
*pvid++ = ent; *pvid++ = ent; |
w-=16; |
} |
while (w >= 4) { |
*pvid++ = ent; *pvid++ = ent; |
*pvid++ = ent; *pvid++ = ent; |
w-=4; |
} |
while (w > 0) { |
*pvid++ = ent; |
w--; |
} |
pvid += llen; |
} |
return true; |
} |
static bool point(nsfb_t *nsfb, int x, int y, nsfb_colour_t c) |
{ |
uint32_t *pvideo; |
/* check point lies within clipping region */ |
if ((x < nsfb->clip.x0) || |
(x >= nsfb->clip.x1) || |
(y < nsfb->clip.y0) || |
(y >= nsfb->clip.y1)) |
return true; |
pvideo = get_xy_loc(nsfb, x, y); |
if ((c & 0xFF000000) != 0) { |
if ((c & 0xFF000000) != 0xFF000000) { |
c = nsfb_plot_ablend(c, pixel_to_colour(*pvideo)); |
} |
*pvideo = colour_to_pixel(c); |
} |
return true; |
} |
static bool |
glyph1(nsfb_t *nsfb, |
nsfb_bbox_t *loc, |
const uint8_t *pixel, |
int pitch, |
nsfb_colour_t c) |
{ |
uint32_t *pvideo; |
int xloop, yloop; |
int xoff, yoff; /* x and y offset into image */ |
int x = loc->x0; |
int y = loc->y0; |
int width = loc->x1 - loc->x0; |
int height = loc->y1 - loc->y0; |
uint32_t fgcol; |
const uint8_t *fntd; |
uint8_t row; |
if (!nsfb_plot_clip_ctx(nsfb, loc)) |
return true; |
if (height > (loc->y1 - loc->y0)) |
height = (loc->y1 - loc->y0); |
if (width > (loc->x1 - loc->x0)) |
width = (loc->x1 - loc->x0); |
xoff = loc->x0 - x; |
yoff = loc->y0 - y; |
pvideo = get_xy_loc(nsfb, loc->x0, loc->y0); |
fgcol = colour_to_pixel(c); |
for (yloop = yoff; yloop < height; yloop++) { |
fntd = pixel + (yloop * (pitch>>3)) + (xoff>>3); |
row = (*fntd++) << (xoff & 3); |
for (xloop = xoff; xloop < width ; xloop++) { |
if (((xloop % 8) == 0) && (xloop != 0)) { |
row = *fntd++; |
} |
if ((row & 0x80) != 0) { |
*(pvideo + xloop) = fgcol; |
} |
row = row << 1; |
} |
pvideo += (nsfb->linelen >> 2); |
} |
return true; |
} |
static bool |
glyph8(nsfb_t *nsfb, |
nsfb_bbox_t *loc, |
const uint8_t *pixel, |
int pitch, |
nsfb_colour_t c) |
{ |
uint32_t *pvideo; |
nsfb_colour_t abpixel; /* alphablended pixel */ |
int xloop, yloop; |
int xoff, yoff; /* x and y offset into image */ |
int x = loc->x0; |
int y = loc->y0; |
int width = loc->x1 - loc->x0; |
int height = loc->y1 - loc->y0; |
uint32_t fgcol; |
if (!nsfb_plot_clip_ctx(nsfb, loc)) |
return true; |
if (height > (loc->y1 - loc->y0)) |
height = (loc->y1 - loc->y0); |
if (width > (loc->x1 - loc->x0)) |
width = (loc->x1 - loc->x0); |
xoff = loc->x0 - x; |
yoff = loc->y0 - y; |
pvideo = get_xy_loc(nsfb, loc->x0, loc->y0); |
fgcol = c & 0xFFFFFF; |
for (yloop = 0; yloop < height; yloop++) { |
for (xloop = 0; xloop < width; xloop++) { |
abpixel = (pixel[((yoff + yloop) * pitch) + xloop + xoff] << 24) | fgcol; |
if ((abpixel & 0xFF000000) != 0) { |
/* pixel is not transparent */ |
if ((abpixel & 0xFF000000) != 0xFF000000) { |
abpixel = nsfb_plot_ablend(abpixel, |
pixel_to_colour(*(pvideo + xloop))); |
} |
*(pvideo + xloop) = colour_to_pixel(abpixel); |
} |
} |
pvideo += (nsfb->linelen >> 2); |
} |
return true; |
} |
static bool |
bitmap(nsfb_t *nsfb, |
const nsfb_bbox_t *loc, |
const nsfb_colour_t *pixel, |
int bmp_width, |
int bmp_height, |
int bmp_stride, |
bool alpha) |
{ |
uint32_t *pvideo; |
nsfb_colour_t abpixel = 0; /* alphablended pixel */ |
int xloop, yloop; |
int xoff, yoff; /* x and y offset into image */ |
int x = loc->x0; |
int y = loc->y0; |
int width = loc->x1 - loc->x0; |
int height = loc->y1 - loc->y0; |
nsfb_bbox_t clipped; /* clipped display */ |
/* TODO here we should scale the image from bmp_width to width, for |
* now simply crop. |
*/ |
if (width > bmp_width) |
width = bmp_width; |
if (height > bmp_height) |
height = bmp_height; |
/* The part of the scaled image actually displayed is cropped to the |
* current context. |
*/ |
clipped.x0 = x; |
clipped.y0 = y; |
clipped.x1 = x + width; |
clipped.y1 = y + height; |
if (!nsfb_plot_clip_ctx(nsfb, &clipped)) { |
return true; |
} |
if (height > (clipped.y1 - clipped.y0)) |
height = (clipped.y1 - clipped.y0); |
if (width > (clipped.x1 - clipped.x0)) |
width = (clipped.x1 - clipped.x0); |
xoff = clipped.x0 - x; |
yoff = (clipped.y0 - y) * bmp_width; |
height = height * bmp_stride + yoff; |
/* plot the image */ |
pvideo = get_xy_loc(nsfb, clipped.x0, clipped.y0); |
if (alpha) { |
for (yloop = yoff; yloop < height; yloop += bmp_stride) { |
for (xloop = 0; xloop < width; xloop++) { |
abpixel = pixel[yloop + xloop + xoff]; |
if ((abpixel & 0xFF000000) != 0) { |
if ((abpixel & 0xFF000000) != 0xFF000000) { |
abpixel = nsfb_plot_ablend(abpixel, |
pixel_to_colour(*(pvideo + xloop))); |
} |
*(pvideo + xloop) = colour_to_pixel(abpixel); |
} |
} |
pvideo += (nsfb->linelen >> 2); |
} |
} else { |
for (yloop = yoff; yloop < height; yloop += bmp_stride) { |
for (xloop = 0; xloop < width; xloop++) { |
abpixel = pixel[yloop + xloop + xoff]; |
*(pvideo + xloop) = colour_to_pixel(abpixel); |
} |
pvideo += (nsfb->linelen >> 2); |
} |
} |
return true; |
} |
static bool readrect(nsfb_t *nsfb, nsfb_bbox_t *rect, nsfb_colour_t *buffer) |
{ |
uint32_t *pvideo; |
int xloop, yloop; |
int width; |
if (!nsfb_plot_clip_ctx(nsfb, rect)) { |
return true; |
} |
width = rect->x1 - rect->x0; |
pvideo = get_xy_loc(nsfb, rect->x0, rect->y0); |
for (yloop = rect->y0; yloop < rect->y1; yloop += 1) { |
for (xloop = 0; xloop < width; xloop++) { |
*buffer = pixel_to_colour(*(pvideo + xloop)); |
buffer++; |
} |
pvideo += (nsfb->linelen >> 2); |
} |
return true; |
} |
const nsfb_plotter_fns_t _nsfb_24bpp_plotters = { |
.line = line, |
.fill = fill, |
.point = point, |
.bitmap = bitmap, |
.glyph8 = glyph8, |
.glyph1 = glyph1, |
.readrect = readrect, |
}; |
/* |
* Local Variables: |
* c-basic-offset:8 |
* End: |
*/ |
/contrib/network/netsurf/libnsfb/src/plot/32bpp-common.c |
---|
0,0 → 1,67 |
/* |
* Copyright 2009 Vincent Sanders <vince@simtec.co.uk> |
* Copyright 2010 Michael Drake <tlsa@netsurf-browser.org> |
* |
* This file is part of libnsfb, http://www.netsurf-browser.org/ |
* Licenced under the MIT License, |
* http://www.opensource.org/licenses/mit-license.php |
*/ |
#include "common.c" |
#include <menuet/os.h> |
static bool fill(nsfb_t *nsfb, nsfb_bbox_t *rect, nsfb_colour_t c) |
{ |
int w; |
uint32_t *pvid; |
uint32_t ent; |
uint32_t llen; |
uint32_t width; |
uint32_t height; |
__menuet__debug_out("nsfb fill:in\n"); |
if (!nsfb_plot_clip_ctx(nsfb, rect)) |
return true; /* fill lies outside current clipping region */ |
ent = colour_to_pixel(nsfb, c); |
width = rect->x1 - rect->x0; |
height = rect->y1 - rect->y0; |
llen = (nsfb->linelen >> 2) - width; |
pvid = get_xy_loc(nsfb, rect->x0, rect->y0); |
__menuet__debug_out("nsfb fill:loooop\n"); |
while (height-- > 0) { |
w = width; |
while (w >= 16) { |
*pvid++ = ent; *pvid++ = ent; |
*pvid++ = ent; *pvid++ = ent; |
*pvid++ = ent; *pvid++ = ent; |
*pvid++ = ent; *pvid++ = ent; |
*pvid++ = ent; *pvid++ = ent; |
*pvid++ = ent; *pvid++ = ent; |
*pvid++ = ent; *pvid++ = ent; |
*pvid++ = ent; *pvid++ = ent; |
w-=16; |
} |
while (w >= 4) { |
*pvid++ = ent; *pvid++ = ent; |
*pvid++ = ent; *pvid++ = ent; |
w-=4; |
} |
while (w > 0) { |
*pvid++ = ent; |
w--; |
} |
pvid += llen; |
} |
__menuet__debug_out("nsfb fill:finish\n"); |
return true; |
} |
/* |
* Local Variables: |
* c-basic-offset:8 |
* End: |
*/ |
/contrib/network/netsurf/libnsfb/src/plot/32bpp-xbgr8888.c |
---|
0,0 → 1,74 |
/* |
* Copyright 2009 Vincent Sanders <vince@simtec.co.uk> |
* Copyright 2010 Michael Drake <tlsa@netsurf-browser.org> |
* |
* This file is part of libnsfb, http://www.netsurf-browser.org/ |
* Licenced under the MIT License, |
* http://www.opensource.org/licenses/mit-license.php |
*/ |
#include <stdbool.h> |
#include <endian.h> |
#include <stdlib.h> |
#include "libnsfb.h" |
#include "libnsfb_plot.h" |
#include "libnsfb_plot_util.h" |
#include "nsfb.h" |
#include "plot.h" |
#define UNUSED __attribute__((unused)) |
static inline uint32_t *get_xy_loc(nsfb_t *nsfb, int x, int y) |
{ |
return (void *)(nsfb->ptr + (y * nsfb->linelen) + (x << 2)); |
} |
#if __BYTE_ORDER == __BIG_ENDIAN |
static inline nsfb_colour_t pixel_to_colour(UNUSED nsfb_t *nsfb, uint32_t pixel) |
{ |
/* TODO: FIX */ |
return (pixel >> 8) & ~0xFF000000U; |
} |
/* convert a colour value to a 32bpp pixel value ready for screen output */ |
static inline uint32_t colour_to_pixel(UNUSED nsfb_t *nsfb, nsfb_colour_t c) |
{ |
/* TODO: FIX */ |
return (c << 8); |
} |
#else /* __BYTE_ORDER == __BIG_ENDIAN */ |
static inline nsfb_colour_t pixel_to_colour(UNUSED nsfb_t *nsfb, uint32_t pixel) |
{ |
return pixel | 0xFF000000U; |
} |
/* convert a colour value to a 32bpp pixel value ready for screen output */ |
static inline uint32_t colour_to_pixel(UNUSED nsfb_t *nsfb, nsfb_colour_t c) |
{ |
return c; |
} |
#endif |
#define PLOT_TYPE uint32_t |
#define PLOT_LINELEN(ll) ((ll) >> 2) |
#include "32bpp-common.c" |
const nsfb_plotter_fns_t _nsfb_32bpp_xbgr8888_plotters = { |
.line = line, |
.fill = fill, |
.point = point, |
.bitmap = bitmap, |
.glyph8 = glyph8, |
.glyph1 = glyph1, |
.readrect = readrect, |
}; |
/* |
* Local Variables: |
* c-basic-offset:8 |
* End: |
*/ |
/contrib/network/netsurf/libnsfb/src/plot/32bpp-xrgb8888.c |
---|
0,0 → 1,79 |
/* |
* Copyright 2009 Vincent Sanders <vince@simtec.co.uk> |
* Copyright 2010 Michael Drake <tlsa@netsurf-browser.org> |
* |
* This file is part of libnsfb, http://www.netsurf-browser.org/ |
* Licenced under the MIT License, |
* http://www.opensource.org/licenses/mit-license.php |
*/ |
#include <stdbool.h> |
#include <endian.h> |
#include <stdlib.h> |
#include "libnsfb.h" |
#include "libnsfb_plot.h" |
#include "libnsfb_plot_util.h" |
#include "nsfb.h" |
#include "plot.h" |
#define UNUSED __attribute__((unused)) |
static inline uint32_t *get_xy_loc(nsfb_t *nsfb, int x, int y) |
{ |
return (void *)(nsfb->ptr + (y * nsfb->linelen) + (x << 2)); |
} |
/* |
//if __BYTE_ORDER == __BIG_ENDIAN |
static inline nsfb_colour_t pixel_to_colour(UNUSED nsfb_t *nsfb, uint32_t pixel) |
{ |
return (pixel >> 8) & ~0xFF000000U; |
} |
*/ |
/* convert a colour value to a 32bpp pixel value ready for screen output */ |
/* |
static inline uint32_t colour_to_pixel(UNUSED nsfb_t *nsfb, nsfb_colour_t c) |
{ |
return (c << 8); |
} |
*/ |
//#else /* __BYTE_ORDER == __BIG_ENDIAN */ |
static inline nsfb_colour_t pixel_to_colour(UNUSED nsfb_t *nsfb, uint32_t pixel) |
{ |
return ((pixel & 0xFF) << 16) | |
((pixel & 0xFF00)) | |
((pixel & 0xFF0000) >> 16); |
} |
/* convert a colour value to a 32bpp pixel value ready for screen output */ |
static inline uint32_t colour_to_pixel(UNUSED nsfb_t *nsfb, nsfb_colour_t c) |
{ |
return ((c & 0xff0000) >> 16) | (c & 0xff00) | ((c & 0xff) << 16); |
} |
//#endif |
#define PLOT_TYPE uint32_t |
#define PLOT_LINELEN(ll) ((ll) >> 2) |
#include "32bpp-common.c" |
const nsfb_plotter_fns_t _nsfb_32bpp_xrgb8888_plotters = { |
.line = line, |
.fill = fill, |
.point = point, |
.bitmap = bitmap, |
.glyph8 = glyph8, |
.glyph1 = glyph1, |
.readrect = readrect, |
}; |
/* |
* Local Variables: |
* c-basic-offset:8 |
* End: |
*/ |
/contrib/network/netsurf/libnsfb/src/plot/8bpp.c |
---|
0,0 → 1,86 |
/* |
* Copyright 2009 Vincent Sanders <vince@simtec.co.uk> |
* Copyright 2010 Michael Drake <tlsa@netsurf-browser.org> |
* |
* This file is part of libnsfb, http://www.netsurf-browser.org/ |
* Licenced under the MIT License, |
* http://www.opensource.org/licenses/mit-license.php |
*/ |
#include <stdbool.h> |
#include <endian.h> |
#include <stdlib.h> |
#include <string.h> |
#include "libnsfb.h" |
#include "libnsfb_plot.h" |
#include "libnsfb_plot_util.h" |
#include "nsfb.h" |
#include "palette.h" |
#include "plot.h" |
static inline uint8_t *get_xy_loc(nsfb_t *nsfb, int x, int y) |
{ |
return (uint8_t *)(nsfb->ptr + (y * nsfb->linelen) + (x)); |
} |
static inline nsfb_colour_t pixel_to_colour(nsfb_t *nsfb, uint8_t pixel) |
{ |
if (nsfb->palette == NULL) |
return 0; |
return nsfb->palette->data[pixel]; |
} |
static uint8_t colour_to_pixel(nsfb_t *nsfb, nsfb_colour_t c) |
{ |
if (nsfb->palette == NULL) |
return 0; |
return nsfb_palette_best_match_dither(nsfb->palette, c); |
} |
#define PLOT_TYPE uint8_t |
#define PLOT_LINELEN(ll) (ll) |
#include "common.c" |
static bool fill(nsfb_t *nsfb, nsfb_bbox_t *rect, nsfb_colour_t c) |
{ |
int y; |
uint8_t ent; |
uint8_t *pvideo; |
if (!nsfb_plot_clip_ctx(nsfb, rect)) |
return true; /* fill lies outside current clipping region */ |
pvideo = get_xy_loc(nsfb, rect->x0, rect->y0); |
ent = colour_to_pixel(nsfb, c); |
for (y = rect->y0; y < rect->y1; y++) { |
memset(pvideo, ent, rect->x1 - rect->x0); |
pvideo += nsfb->linelen; |
} |
return true; |
} |
const nsfb_plotter_fns_t _nsfb_8bpp_plotters = { |
.line = line, |
.fill = fill, |
.point = point, |
.bitmap = bitmap, |
.glyph8 = glyph8, |
.glyph1 = glyph1, |
.readrect = readrect, |
}; |
/* |
* Local Variables: |
* c-basic-offset:8 |
* End: |
*/ |
/contrib/network/netsurf/libnsfb/src/plot/Makefile |
---|
0,0 → 1,7 |
# Sources |
OBJS := api.o util.o generic.o 32bpp-xrgb8888.o 32bpp-xbgr8888.o 16bpp.o 8bpp.o |
OUTFILE = libo.o |
CFLAGS += -I ../../include/ -I ../../ -I ../ -I ./ -I /home/sourcerer/kos_src/newenginek/kolibri/include |
include $(MENUETDEV)/makefiles/Makefile_for_o_lib |
/contrib/network/netsurf/libnsfb/src/plot/api.c |
---|
0,0 → 1,213 |
/* public plotter interface */ |
#include <stdbool.h> |
#include "libnsfb.h" |
#include "libnsfb_plot.h" |
#include "nsfb.h" |
#include "plot.h" |
/** Sets a clip rectangle for subsequent plots. |
* |
* Sets a clipping area which constrains all subsequent plotting operations. |
* The clipping area must lie within the framebuffer visible screen or false |
* will be returned and the new clipping area not set. |
*/ |
bool nsfb_plot_set_clip(nsfb_t *nsfb, nsfb_bbox_t *clip) |
{ |
return nsfb->plotter_fns->set_clip(nsfb, clip); |
} |
/** Get the previously set clipping region. |
*/ |
bool nsfb_plot_get_clip(nsfb_t *nsfb, nsfb_bbox_t *clip) |
{ |
return nsfb->plotter_fns->get_clip(nsfb, clip); |
} |
/** Clears plotting area to a flat colour. |
*/ |
bool nsfb_plot_clg(nsfb_t *nsfb, nsfb_colour_t c) |
{ |
return nsfb->plotter_fns->clg(nsfb, c); |
} |
/** Plots a rectangle outline. |
* |
* The line can be solid, dotted or dashed. Top left corner at (x0,y0) and |
* rectangle has given width and height. |
*/ |
bool |
nsfb_plot_rectangle(nsfb_t *nsfb, |
nsfb_bbox_t *rect, |
int line_width, |
nsfb_colour_t c, |
bool dotted, |
bool dashed) |
{ |
return nsfb->plotter_fns->rectangle(nsfb, rect, line_width, c, dotted, dashed); |
} |
/** Plots a filled rectangle. Top left corner at (x0,y0), bottom |
* right corner at (x1,y1). Note: (x0,y0) is inside filled area, |
* but (x1,y1) is below and to the right. See diagram below. |
*/ |
bool nsfb_plot_rectangle_fill(nsfb_t *nsfb, nsfb_bbox_t *rect, nsfb_colour_t c) |
{ |
return nsfb->plotter_fns->fill(nsfb, rect, c); |
} |
/** Plots a line. |
* |
* Draw a line from (x0,y0) to (x1,y1). Coordinates are at centre of line |
* width/thickness. |
*/ |
bool nsfb_plot_line(nsfb_t *nsfb, nsfb_bbox_t *line, nsfb_plot_pen_t *pen) |
{ |
return nsfb->plotter_fns->line(nsfb, 1, line, pen); |
} |
/** Plots more than one line. |
* |
* Draw a line from (x0,y0) to (x1,y1). Coordinates are at centre of line |
* width/thickness. |
*/ |
bool nsfb_plot_lines(nsfb_t *nsfb, int linec, nsfb_bbox_t *line, nsfb_plot_pen_t *pen) |
{ |
return nsfb->plotter_fns->line(nsfb, linec, line, pen); |
} |
bool nsfb_plot_polylines(nsfb_t *nsfb, int pointc, const nsfb_point_t *points, nsfb_plot_pen_t *pen) |
{ |
return nsfb->plotter_fns->polylines(nsfb, pointc, points, pen); |
} |
/** Plots a filled polygon. |
* |
* Plots a filled polygon with straight lines between points. The lines around |
* the edge of the ploygon are not plotted. The polygon is filled with a |
* non-zero winding rule. |
* |
* |
*/ |
bool nsfb_plot_polygon(nsfb_t *nsfb, const int *p, unsigned int n, nsfb_colour_t fill) |
{ |
return nsfb->plotter_fns->polygon(nsfb, p, n, fill); |
} |
/** Plots an arc. |
* |
* around (x,y), from anticlockwise from angle1 to angle2. Angles are measured |
* anticlockwise from horizontal, in degrees. |
*/ |
bool nsfb_plot_arc(nsfb_t *nsfb, int x, int y, int radius, int angle1, int angle2, nsfb_colour_t c) |
{ |
return nsfb->plotter_fns->arc(nsfb, x, y, radius, angle1, angle2, c); |
} |
/** Plots an alpha blended pixel. |
* |
* plots an alpha blended pixel. |
*/ |
bool nsfb_plot_point(nsfb_t *nsfb, int x, int y, nsfb_colour_t c) |
{ |
return nsfb->plotter_fns->point(nsfb, x, y, c); |
} |
bool nsfb_plot_ellipse(nsfb_t *nsfb, nsfb_bbox_t *ellipse, nsfb_colour_t c) |
{ |
return nsfb->plotter_fns->ellipse(nsfb, ellipse, c); |
} |
bool nsfb_plot_ellipse_fill(nsfb_t *nsfb, nsfb_bbox_t *ellipse, nsfb_colour_t c) |
{ |
return nsfb->plotter_fns->ellipse_fill(nsfb, ellipse, c); |
} |
/* copy an area of surface from one location to another. |
* |
* @warning This implementation is woefully incomplete! |
*/ |
bool |
nsfb_plot_copy(nsfb_t *srcfb, |
nsfb_bbox_t *srcbox, |
nsfb_t *dstfb, |
nsfb_bbox_t *dstbox) |
{ |
bool trans = false; |
nsfb_colour_t srccol; |
if (srcfb == dstfb) { |
return dstfb->plotter_fns->copy(srcfb, srcbox, dstbox); |
} |
if (srcfb->format == NSFB_FMT_ABGR8888) { |
trans = true; |
} |
if ((srcfb->width == 1) && (srcfb->height == 1)) { |
srccol = *(nsfb_colour_t *)(void *)(srcfb->ptr); |
/* check for completely transparent */ |
if ((srccol & 0xff000000) == 0) |
return true; |
/* completely opaque pixels can be replaced with fill */ |
if ((srccol & 0xff000000) == 0xff) |
return dstfb->plotter_fns->fill(dstfb, dstbox, srccol); |
} |
return dstfb->plotter_fns->bitmap(dstfb, dstbox, (const nsfb_colour_t *)(void *)srcfb->ptr, srcfb->width, srcfb->height, (srcfb->linelen * 8) / srcfb->bpp, trans); |
} |
bool nsfb_plot_bitmap(nsfb_t *nsfb, const nsfb_bbox_t *loc, const nsfb_colour_t *pixel, int bmp_width, int bmp_height, int bmp_stride, bool alpha) |
{ |
return nsfb->plotter_fns->bitmap(nsfb, loc, pixel, bmp_width, bmp_height, bmp_stride, alpha); |
} |
/** Plot an 8 bit glyph. |
*/ |
bool nsfb_plot_glyph8(nsfb_t *nsfb, nsfb_bbox_t *loc, const uint8_t *pixel, int pitch, nsfb_colour_t c) |
{ |
return nsfb->plotter_fns->glyph8(nsfb, loc, pixel, pitch, c); |
} |
/** Plot an 1 bit glyph. |
*/ |
bool nsfb_plot_glyph1(nsfb_t *nsfb, nsfb_bbox_t *loc, const uint8_t *pixel, int pitch, nsfb_colour_t c) |
{ |
return nsfb->plotter_fns->glyph1(nsfb, loc, pixel, pitch, c); |
} |
/* read a rectangle from screen into buffer */ |
bool nsfb_plot_readrect(nsfb_t *nsfb, nsfb_bbox_t *rect, nsfb_colour_t *buffer) |
{ |
return nsfb->plotter_fns->readrect(nsfb, rect, buffer); |
} |
bool nsfb_plot_cubic_bezier(nsfb_t *nsfb, nsfb_bbox_t *curve, nsfb_point_t *ctrla, nsfb_point_t *ctrlb, nsfb_plot_pen_t *pen) |
{ |
return nsfb->plotter_fns->cubic(nsfb, curve, ctrla, ctrlb, pen); |
} |
bool nsfb_plot_quadratic_bezier(nsfb_t *nsfb, nsfb_bbox_t *curve, nsfb_point_t *ctrla, nsfb_plot_pen_t *pen) |
{ |
return nsfb->plotter_fns->quadratic(nsfb, curve, ctrla, pen); |
} |
bool nsfb_plot_path(nsfb_t *nsfb, int pathc, nsfb_plot_pathop_t *pathop, nsfb_plot_pen_t *pen) |
{ |
return nsfb->plotter_fns->path(nsfb, pathc, pathop, pen); |
} |
/* |
* Local variables: |
* c-basic-offset: 4 |
* tab-width: 8 |
* End: |
*/ |
/contrib/network/netsurf/libnsfb/src/plot/common.c |
---|
0,0 → 1,515 |
/* |
* Copyright 2009 Vincent Sanders <vince@simtec.co.uk> |
* Copyright 2010 Michael Drake <tlsa@netsurf-browser.org> |
* |
* Plot code common to all bpp just with differing types |
* |
* This file is part of libnsfb, http://www.netsurf-browser.org/ |
* Licenced under the MIT License, |
* http://www.opensource.org/licenses/mit-license.php |
*/ |
#ifndef PLOT_TYPE |
#error PLOT_TYPE must be set to uint8_t, uint16_t, or uint32_t |
#endif |
#ifndef PLOT_LINELEN |
#error PLOT_LINELEN must be a macro to increment a line length |
#endif |
#include "palette.h" |
#define SIGN(x) ((x<0) ? -1 : ((x>0) ? 1 : 0)) |
static bool |
line(nsfb_t *nsfb, int linec, nsfb_bbox_t *line, nsfb_plot_pen_t *pen) |
{ |
int w; |
PLOT_TYPE ent; |
PLOT_TYPE *pvideo; |
int x, y, i; |
int dx, dy, sdy; |
int dxabs, dyabs; |
ent = colour_to_pixel(nsfb, pen->stroke_colour); |
for (;linec > 0; linec--) { |
if (line->y0 == line->y1) { |
/* horizontal line special cased */ |
if (!nsfb_plot_clip_ctx(nsfb, line)) { |
/* line outside clipping */ |
line++; |
continue; |
} |
pvideo = get_xy_loc(nsfb, line->x0, line->y0); |
w = line->x1 - line->x0; |
while (w-- > 0) |
*(pvideo + w) = ent; |
} else { |
/* standard bresenham line */ |
if (!nsfb_plot_clip_line_ctx(nsfb, line)) { |
/* line outside clipping */ |
line++; |
continue; |
} |
/* the horizontal distance of the line */ |
dx = line->x1 - line->x0; |
dxabs = abs (dx); |
/* the vertical distance of the line */ |
dy = line->y1 - line->y0; |
dyabs = abs (dy); |
sdy = dx ? SIGN(dy) * SIGN(dx) : SIGN(dy); |
if (dx >= 0) |
pvideo = get_xy_loc(nsfb, line->x0, line->y0); |
else |
pvideo = get_xy_loc(nsfb, line->x1, line->y1); |
x = dyabs >> 1; |
y = dxabs >> 1; |
if (dxabs >= dyabs) { |
/* the line is more horizontal than vertical */ |
for (i = 0; i < dxabs; i++) { |
*pvideo = ent; |
pvideo++; |
y += dyabs; |
if (y >= dxabs) { |
y -= dxabs; |
pvideo += sdy * PLOT_LINELEN(nsfb->linelen); |
} |
} |
} else { |
/* the line is more vertical than horizontal */ |
for (i = 0; i < dyabs; i++) { |
*pvideo = ent; |
pvideo += sdy * PLOT_LINELEN(nsfb->linelen); |
x += dxabs; |
if (x >= dyabs) { |
x -= dyabs; |
pvideo++; |
} |
} |
} |
} |
line++; |
} |
return true; |
} |
static bool point(nsfb_t *nsfb, int x, int y, nsfb_colour_t c) |
{ |
PLOT_TYPE *pvideo; |
/* check point lies within clipping region */ |
if ((x < nsfb->clip.x0) || |
(x >= nsfb->clip.x1) || |
(y < nsfb->clip.y0) || |
(y >= nsfb->clip.y1)) |
return true; |
pvideo = get_xy_loc(nsfb, x, y); |
if ((c & 0xFF000000) != 0) { |
if ((c & 0xFF000000) != 0xFF000000) { |
c = nsfb_plot_ablend(c, pixel_to_colour(nsfb, *pvideo)); |
} |
*pvideo = colour_to_pixel(nsfb, c); |
} |
return true; |
} |
static bool |
glyph1(nsfb_t *nsfb, |
nsfb_bbox_t *loc, |
const uint8_t *pixel, |
int pitch, |
nsfb_colour_t c) |
{ |
PLOT_TYPE *pvideo; |
PLOT_TYPE const *pvideo_limit; |
PLOT_TYPE fgcol; |
int xloop; |
int xoff, yoff; /* x and y offset into image */ |
int x = loc->x0; |
int y = loc->y0; |
int width; |
int height; |
const size_t line_len = PLOT_LINELEN(nsfb->linelen); |
const int first_col = 1 << (loc->x1 - loc->x0 - 1); |
const uint8_t *row; |
if (!nsfb_plot_clip_ctx(nsfb, loc)) |
return true; |
height = loc->y1 - y; |
width = loc->x1 - x; |
xoff = loc->x0 - x; |
yoff = loc->y0 - y; |
fgcol = colour_to_pixel(nsfb, c); |
pitch >>= 3; /* bits to bytes */ |
pvideo = get_xy_loc(nsfb, x, loc->y0); |
pvideo_limit = pvideo + line_len * (height - yoff); |
row = pixel + yoff * pitch; |
for (; pvideo < pvideo_limit; pvideo += line_len) { |
for (xloop = xoff; xloop < width; xloop++) { |
if ((*row & (first_col >> xloop)) != 0) { |
*(pvideo + xloop) = fgcol; |
} |
} |
row += pitch; |
} |
return true; |
} |
static bool |
glyph8(nsfb_t *nsfb, |
nsfb_bbox_t *loc, |
const uint8_t *pixel, |
int pitch, |
nsfb_colour_t c) |
{ |
PLOT_TYPE *pvideo; |
nsfb_colour_t fgcol; |
nsfb_colour_t abpixel; /* alphablended pixel */ |
int xloop, yloop; |
int xoff, yoff; /* x and y offset into image */ |
int x = loc->x0; |
int y = loc->y0; |
int width; |
int height; |
if (!nsfb_plot_clip_ctx(nsfb, loc)) |
return true; |
height = (loc->y1 - loc->y0); |
width = (loc->x1 - loc->x0); |
xoff = loc->x0 - x; |
yoff = loc->y0 - y; |
pvideo = get_xy_loc(nsfb, loc->x0, loc->y0); |
fgcol = c & 0xFFFFFF; |
for (yloop = 0; yloop < height; yloop++) { |
for (xloop = 0; xloop < width; xloop++) { |
abpixel = (pixel[((yoff + yloop) * pitch) + xloop + xoff] << 24) | fgcol; |
if ((abpixel & 0xFF000000) != 0) { |
/* pixel is not transparent */ |
if ((abpixel & 0xFF000000) != 0xFF000000) { |
abpixel = nsfb_plot_ablend(abpixel, |
pixel_to_colour(nsfb, *(pvideo + xloop))); |
} |
*(pvideo + xloop) = colour_to_pixel(nsfb, abpixel); |
} |
} |
pvideo += PLOT_LINELEN(nsfb->linelen); |
} |
return true; |
} |
static bool bitmap_scaled(nsfb_t *nsfb, const nsfb_bbox_t *loc, |
const nsfb_colour_t *pixel, int bmp_width, int bmp_height, |
int bmp_stride, bool alpha) |
{ |
PLOT_TYPE *pvideo; |
PLOT_TYPE *pvideo_limit; |
nsfb_colour_t abpixel; /* alphablended pixel */ |
int xloop; |
int xoff, yoff, xoffs; /* x and y offsets into image */ |
int x = loc->x0; |
int y = loc->y0; |
int width = loc->x1 - loc->x0; /* size to scale to */ |
int height = loc->y1 - loc->y0; /* size to scale to */ |
int rheight, rwidth; /* post-clipping render area dimensions */ |
int dx, dy; /* scale factor (integer part) */ |
int dxr, dyr; /* scale factor (remainder) */ |
int rx, ry, rxs; /* remainder trackers */ |
nsfb_bbox_t clipped; /* clipped display */ |
/* The part of the scaled image actually displayed is cropped to the |
* current context. */ |
clipped.x0 = x; |
clipped.y0 = y; |
clipped.x1 = x + width; |
clipped.y1 = y + height; |
if (!nsfb_plot_clip_ctx(nsfb, &clipped)) |
return true; |
/* get height of rendering region, after clipping */ |
if (height > (clipped.y1 - clipped.y0)) |
rheight = (clipped.y1 - clipped.y0); |
else |
rheight = height; |
/* get width of rendering region, after clipping */ |
if (width > (clipped.x1 - clipped.x0)) |
rwidth = (clipped.x1 - clipped.x0); |
else |
rwidth = width; |
if (nsfb->palette != NULL) { |
nsfb_palette_dither_init(nsfb->palette, rwidth); |
} |
/* get veritcal (y) and horizontal (x) scale factors; both integer |
* part and remainder */ |
dx = bmp_width / width; |
dy = (bmp_height / height) * bmp_stride; |
dxr = bmp_width % width; |
dyr = bmp_height % height; |
/* get start offsets to part of image being scaled, after clipping and |
* set remainder trackers to correct starting value */ |
if (clipped.x0 - x != 0) { |
xoffs = ((clipped.x0 - x) * bmp_width) / width; |
rxs = ((clipped.x0 - x) * bmp_width) % width; |
} else { |
xoffs = 0; |
rxs = 0; |
} |
if (clipped.y0 - y != 0) { |
yoff = (((clipped.y0 - y) * bmp_height) / height) * bmp_stride; |
ry = ((clipped.y0 - y) * bmp_height) % height; |
} else { |
yoff = 0; |
ry = 0; |
} |
/* plot the image */ |
pvideo = get_xy_loc(nsfb, clipped.x0, clipped.y0); |
pvideo_limit = pvideo + PLOT_LINELEN(nsfb->linelen) * rheight; |
if (alpha) { |
for (; pvideo < pvideo_limit; |
pvideo += PLOT_LINELEN(nsfb->linelen)) { |
/* looping through render area vertically */ |
xoff = xoffs; |
rx = rxs; |
for (xloop = 0; xloop < rwidth; xloop++) { |
/* looping through render area horizontally */ |
/* get value of source pixel in question */ |
abpixel = pixel[yoff + xoff]; |
if ((abpixel & 0xFF000000) != 0) { |
/* pixel is not transparent; have to |
* plot something */ |
if ((abpixel & 0xFF000000) != |
0xFF000000) { |
/* pixel is not opaque; need to |
* blend */ |
abpixel = nsfb_plot_ablend( |
abpixel, |
pixel_to_colour( |
nsfb, |
*(pvideo + |
xloop))); |
} |
/* plot pixel */ |
*(pvideo + xloop) = colour_to_pixel( |
nsfb, abpixel); |
} |
/* handle horizontal interpolation */ |
xoff += dx; |
rx += dxr; |
if (rx >= width) { |
xoff++; |
rx -= width; |
} |
} |
/* handle vertical interpolation */ |
yoff += dy; |
ry += dyr; |
if (ry >= height) { |
yoff += bmp_stride; |
ry -= height; |
} |
} |
} else { |
for (; pvideo < pvideo_limit; |
pvideo += PLOT_LINELEN(nsfb->linelen)) { |
/* looping through render area vertically */ |
xoff = xoffs; |
rx = rxs; |
for (xloop = 0; xloop < rwidth; xloop++) { |
/* looping through render area horizontally */ |
/* get value of source pixel in question */ |
abpixel = pixel[yoff + xoff]; |
/* plot pixel */ |
*(pvideo + xloop) = colour_to_pixel( |
nsfb, abpixel); |
/* handle horizontal interpolation */ |
xoff += dx; |
rx += dxr; |
if (rx >= width) { |
xoff++; |
rx -= width; |
} |
} |
/* handle vertical interpolation */ |
yoff += dy; |
ry += dyr; |
if (ry >= height) { |
yoff += bmp_stride; |
ry -= height; |
} |
} |
} |
if (nsfb->palette != NULL) { |
nsfb_palette_dither_fini(nsfb->palette); |
} |
return true; |
} |
static bool |
bitmap(nsfb_t *nsfb, |
const nsfb_bbox_t *loc, |
const nsfb_colour_t *pixel, |
int bmp_width, |
int bmp_height, |
int bmp_stride, |
bool alpha) |
{ |
PLOT_TYPE *pvideo; |
nsfb_colour_t abpixel; /* alphablended pixel */ |
int xloop, yloop; |
int xoff, yoff; /* x and y offset into image */ |
int x = loc->x0; |
int y = loc->y0; |
int width = loc->x1 - loc->x0; |
int height = loc->y1 - loc->y0; |
nsfb_bbox_t clipped; /* clipped display */ |
if (width == 0 || height == 0) |
return true; |
/* Scaled bitmaps are handled by a separate function */ |
if (width != bmp_width || height != bmp_height) |
return bitmap_scaled(nsfb, loc, pixel, bmp_width, bmp_height, |
bmp_stride, alpha); |
/* The part of the image actually displayed is cropped to the |
* current context. */ |
clipped.x0 = x; |
clipped.y0 = y; |
clipped.x1 = x + width; |
clipped.y1 = y + height; |
if (!nsfb_plot_clip_ctx(nsfb, &clipped)) |
return true; |
if (height > (clipped.y1 - clipped.y0)) |
height = (clipped.y1 - clipped.y0); |
if (width > (clipped.x1 - clipped.x0)) |
width = (clipped.x1 - clipped.x0); |
if (nsfb->palette != NULL) { |
nsfb_palette_dither_init(nsfb->palette, width); |
} |
xoff = clipped.x0 - x; |
yoff = (clipped.y0 - y) * bmp_stride; |
height = height * bmp_stride + yoff; |
/* plot the image */ |
pvideo = get_xy_loc(nsfb, clipped.x0, clipped.y0); |
if (alpha) { |
for (yloop = yoff; yloop < height; yloop += bmp_stride) { |
for (xloop = 0; xloop < width; xloop++) { |
abpixel = pixel[yloop + xloop + xoff]; |
if ((abpixel & 0xFF000000) != 0) { |
/* pixel is not transparent; have to |
* plot something */ |
if ((abpixel & 0xFF000000) != |
0xFF000000) { |
/* pixel is not opaque; need to |
* blend */ |
abpixel = nsfb_plot_ablend( |
abpixel, |
pixel_to_colour( |
nsfb, |
*(pvideo + |
xloop))); |
} |
*(pvideo + xloop) = colour_to_pixel( |
nsfb, abpixel); |
} |
} |
pvideo += PLOT_LINELEN(nsfb->linelen); |
} |
} else { |
for (yloop = yoff; yloop < height; yloop += bmp_stride) { |
for (xloop = 0; xloop < width; xloop++) { |
abpixel = pixel[yloop + xloop + xoff]; |
*(pvideo + xloop) = colour_to_pixel( |
nsfb, abpixel); |
} |
pvideo += PLOT_LINELEN(nsfb->linelen); |
} |
} |
if (nsfb->palette != NULL) { |
nsfb_palette_dither_fini(nsfb->palette); |
} |
return true; |
} |
static bool readrect(nsfb_t *nsfb, nsfb_bbox_t *rect, nsfb_colour_t *buffer) |
{ |
PLOT_TYPE *pvideo; |
int xloop, yloop; |
int width; |
if (!nsfb_plot_clip_ctx(nsfb, rect)) { |
return true; |
} |
width = rect->x1 - rect->x0; |
pvideo = get_xy_loc(nsfb, rect->x0, rect->y0); |
for (yloop = rect->y0; yloop < rect->y1; yloop += 1) { |
for (xloop = 0; xloop < width; xloop++) { |
*buffer = pixel_to_colour(nsfb, *(pvideo + xloop)); |
buffer++; |
} |
pvideo += PLOT_LINELEN(nsfb->linelen); |
} |
return true; |
} |
/* |
* Local Variables: |
* c-basic-offset:8 |
* End: |
*/ |
/contrib/network/netsurf/libnsfb/src/plot/generic.c |
---|
0,0 → 1,944 |
/* |
* Copyright 2009 Vincent Sanders <vince@simtec.co.uk> |
* Copyright 2009 Michael Drake <tlsa@netsurf-browser.org> |
* |
* This file is part of libnsfb, http://www.netsurf-browser.org/ |
* Licenced under the MIT License, |
* http://www.opensource.org/licenses/mit-license.php |
*/ |
/** \file |
* generic plotter functions which are not depth dependant (implementation). |
*/ |
#include <stdbool.h> |
#include <limits.h> |
#include <stdlib.h> |
#include <string.h> |
#include "libnsfb.h" |
#include "libnsfb_plot.h" |
#include "libnsfb_plot_util.h" |
#include "nsfb.h" |
#include "plot.h" |
#include "surface.h" |
extern const nsfb_plotter_fns_t _nsfb_1bpp_plotters; |
extern const nsfb_plotter_fns_t _nsfb_8bpp_plotters; |
extern const nsfb_plotter_fns_t _nsfb_16bpp_plotters; |
extern const nsfb_plotter_fns_t _nsfb_24bpp_plotters; |
extern const nsfb_plotter_fns_t _nsfb_32bpp_xrgb8888_plotters; |
extern const nsfb_plotter_fns_t _nsfb_32bpp_xbgr8888_plotters; |
static bool set_clip(nsfb_t *nsfb, nsfb_bbox_t *clip) |
{ |
nsfb_bbox_t fbarea; |
/* screen area */ |
fbarea.x0 = 0; |
fbarea.y0 = 0; |
fbarea.x1 = nsfb->width; |
fbarea.y1 = nsfb->height; |
if (clip == NULL) { |
nsfb->clip = fbarea; |
} else { |
if (!nsfb_plot_clip(&fbarea, clip)) |
return false; |
nsfb->clip = *clip; |
} |
return true; |
} |
static bool get_clip(nsfb_t *nsfb, nsfb_bbox_t *clip) |
{ |
*clip = nsfb->clip; |
return true; |
} |
static bool clg(nsfb_t *nsfb, nsfb_colour_t c) |
{ |
return nsfb->plotter_fns->fill(nsfb, &nsfb->clip, c); |
} |
/** |
* Establish whether there is any value in a line's crossing. |
* (Helper function for find_span().) |
* |
* \param x x coordinate of intersection |
* \param y current y level |
* \param x0 line start coordinate |
* \param y0 line start coordinate |
* \param x1 line end coordinate |
* \param y1 line end coordinate |
* \return true if crossing has value |
* |
* + | | / |
* / | |/ |
* y level -- ----/---- ----+---- ----+---- ----+---- |
* / / /| |
* + / / | |
* |
* (a) (b) (c) (d) |
* |
* |
* Figure (a) values: 1 = 1 -- Odd -- Valid crossing |
* Figure (b) values: 0 + 1 = 1 -- Odd -- Valid crossing |
* Figure (c) values: 1 + 1 = 2 -- Even -- Not valid crossing |
* Figure (d) values: 0 + 0 = 0 -- Even -- Not valid crossing |
* |
* Vertices are shared between consecutive lines. This function ensures that |
* the vertex point is only counted as a crossing for one of the lines by |
* only considering crossings of the top vertex. This is what NetSurf's |
* plotter API expects. |
* |
* It's up to the client to call this function for both lines and check the |
* evenness of the total. |
*/ |
static bool establish_crossing_value(int x, int y, int x0, int y0, |
int x1, int y1) |
{ |
bool v1 = (x == x0 && y == y0); /* whether we're crossing 1st vertex */ |
bool v2 = (x == x1 && y == y1); /* whether we're crossing 2nd vertex */ |
if ((v1 && (y0 < y1)) || (v2 && (y1 < y0))) { |
/* crossing top vertex */ |
return true; |
} else if (!v1 && !v2) { |
/* Intersection with current y level is not at a vertex. |
* Normal crossing. */ |
return true; |
} |
return false; |
} |
/** |
* Find first filled span along horizontal line at given coordinate |
* |
* \param p array of polygon vertices (x1, y1, x2, y2, ... , xN, yN) |
* \param n number of polygon vertex values (N * 2) |
* \param x current position along current scan line |
* \param y position of current scan line |
* \param x0 updated to start of filled area |
* \param x1 updated to end of filled area |
* \return true if an intersection was found |
*/ |
static bool find_span(const int *p, int n, int x, int y, int *x0, int *x1) |
{ |
int i; |
int p_x0, p_y0; |
int p_x1, p_y1; |
int x0_min, x1_min; |
int x_new; |
unsigned int x0c, x1c; /* counters for crossings at span end points */ |
bool crossing_value; |
bool found_span_start = false; |
x0_min = x1_min = INT_MIN; |
x0c = x1c = 0; |
*x0 = *x1 = INT_MAX; |
/* search row for next span, returning it if one exists */ |
do { |
/* reset endpoint info, if valid span endpoints not found */ |
if (!found_span_start) |
*x0 = INT_MAX; |
*x1 = INT_MAX; |
/* search all lines in polygon */ |
for (i = 0; i < n; i = i + 2) { |
/* get line endpoints */ |
if (i != n - 2) { |
/* not the last line */ |
p_x0 = p[i]; p_y0 = p[i + 1]; |
p_x1 = p[i + 2]; p_y1 = p[i + 3]; |
} else { |
/* last line; 2nd endpoint is first vertex */ |
p_x0 = p[i]; p_y0 = p[i + 1]; |
p_x1 = p[0]; p_y1 = p[1]; |
} |
/* ignore horizontal lines */ |
if (p_y0 == p_y1) |
continue; |
/* ignore lines that don't cross this y level */ |
if ((y < p_y0 && y < p_y1) || (y > p_y0 && y > p_y1)) |
continue; |
if (p_x0 == p_x1) { |
/* vertical line, x is constant */ |
x_new = p_x0; |
} else { |
/* find crossing (intersection of this line and |
* current y level) */ |
int num = (y - p_y0) * (p_x1 - p_x0); |
int den = (p_y1 - p_y0); |
/* To round to nearest (rather than down) |
* half the denominator is either added to |
* or subtracted from the numerator, |
* depending on whether the numerator and |
* denominator have the same sign. */ |
num = ((num < 0) == (den < 0)) ? |
num + (den / 2) : |
num - (den / 2); |
x_new = p_x0 + num / den; |
} |
/* ignore crossings before current x */ |
if (x_new < x || |
(!found_span_start && x_new < x0_min) || |
(found_span_start && x_new < x1_min)) |
continue; |
crossing_value = establish_crossing_value(x_new, y, |
p_x0, p_y0, p_x1, p_y1); |
/* set nearest intersections as filled area endpoints */ |
if (!found_span_start && |
x_new < *x0 && crossing_value) { |
/* nearer than first endpoint */ |
*x1 = *x0; |
x1c = x0c; |
*x0 = x_new; |
x0c = 1; |
} else if (!found_span_start && |
x_new == *x0 && crossing_value) { |
/* same as first endpoint */ |
x0c++; |
} else if (x_new < *x1 && crossing_value) { |
/* nearer than second endpoint */ |
*x1 = x_new; |
x1c = 1; |
} else if (x_new == *x1 && crossing_value) { |
/* same as second endpoint */ |
x1c++; |
} |
} |
/* check whether the span endpoints have been found */ |
if (!found_span_start && x0c % 2 == 1) { |
/* valid fill start found */ |
found_span_start = true; |
} |
if (x1c % 2 == 1) { |
/* valid fill endpoint found */ |
if (!found_span_start) { |
/* not got a start yet; use this as start */ |
found_span_start = true; |
x0c = x1c; |
*x0 = *x1; |
} else { |
/* got valid end of span */ |
return true; |
} |
} |
/* if current positions aren't valid endpoints, set new |
* minimums after current positions */ |
if (!found_span_start) |
x0_min = *x0 + 1; |
x1_min = *x1 + 1; |
} while (*x1 != INT_MAX); |
/* no spans found */ |
return false; |
} |
/** |
* Plot a polygon |
* |
* \param nsfb framebuffer context |
* \param p array of polygon vertices (x1, y1, x2, y2, ... , xN, yN) |
* \param n number of polygon vertices (N) |
* \param c fill colour |
* \return true if no errors |
*/ |
static bool polygon(nsfb_t *nsfb, const int *p, unsigned int n, nsfb_colour_t c) |
{ |
int poly_x0, poly_y0; /* Bounding box top left corner */ |
int poly_x1, poly_y1; /* Bounding box bottom right corner */ |
int i, j; /* indexes */ |
int x0, x1; /* filled span extents */ |
int y; /* current y coordinate */ |
int y_max; /* bottom of plot area */ |
nsfb_bbox_t fline; |
nsfb_plot_pen_t pen; |
/* find no. of vertex values */ |
int v = n * 2; |
/* Can't plot polygons with 2 or fewer vertices */ |
if (n <= 2) |
return true; |
pen.stroke_colour = c; |
/* Find polygon bounding box */ |
poly_x0 = poly_x1 = *p; |
poly_y0 = poly_y1 = p[1]; |
for (i = 2; i < v; i = i + 2) { |
j = i + 1; |
if (p[i] < poly_x0) |
poly_x0 = p[i]; |
else if (p[i] > poly_x1) |
poly_x1 = p[i]; |
if (p[j] < poly_y0) |
poly_y0 = p[j]; |
else if (p[j] > poly_y1) |
poly_y1 = p[j]; |
} |
/* Don't try to plot it if it's outside the clip rectangle */ |
if (nsfb->clip.y1 < poly_y0 || |
nsfb->clip.y0 > poly_y1 || |
nsfb->clip.x1 < poly_x0 || |
nsfb->clip.x0 > poly_x1) |
return true; |
/* Find the top of the important area */ |
if (poly_y0 > nsfb->clip.y0) |
y = poly_y0; |
else |
y = nsfb->clip.y0; |
/* Find the bottom of the important area */ |
if (poly_y1 < nsfb->clip.y1) |
y_max = poly_y1; |
else |
y_max = nsfb->clip.y1; |
for (; y < y_max; y++) { |
x1 = poly_x0 - 1; |
/* For each row */ |
while (find_span(p, v, x1 + 1, y, &x0, &x1)) { |
/* don't draw anything outside clip region */ |
if (x1 < nsfb->clip.x0) |
continue; |
else if (x0 < nsfb->clip.x0) |
x0 = nsfb->clip.x0; |
if (x0 > nsfb->clip.x1) |
break; |
else if (x1 > nsfb->clip.x1) |
x1 = nsfb->clip.x1; |
fline.x0 = x0; |
fline.y0 = y; |
fline.x1 = x1; |
fline.y1 = y; |
/* draw this filled span on current row */ |
nsfb->plotter_fns->line(nsfb, 1, &fline, &pen); |
/* don't look for more spans if already at end of clip |
* region or polygon */ |
if (x1 == nsfb->clip.x1 || x1 == poly_x1) |
break; |
} |
} |
return true; |
} |
static bool |
rectangle(nsfb_t *nsfb, nsfb_bbox_t *rect, |
int line_width, nsfb_colour_t c, |
bool dotted, bool dashed) |
{ |
nsfb_bbox_t side[4]; |
nsfb_plot_pen_t pen; |
pen.stroke_colour = c; |
pen.stroke_width = line_width; |
if (dotted || dashed) { |
pen.stroke_type = NFSB_PLOT_OPTYPE_PATTERN; |
} else { |
pen.stroke_type = NFSB_PLOT_OPTYPE_SOLID; |
} |
side[0] = *rect; |
side[1] = *rect; |
side[2] = *rect; |
side[3] = *rect; |
side[0].y1 = side[0].y0; |
side[1].y0 = side[1].y1; |
side[2].x1 = side[2].x0; |
side[3].x0 = side[3].x1; |
return nsfb->plotter_fns->line(nsfb, 4, side, &pen); |
} |
/* plotter routine for ellipse points */ |
static void |
ellipsepoints(nsfb_t *nsfb, int cx, int cy, int x, int y, nsfb_colour_t c) |
{ |
nsfb->plotter_fns->point(nsfb, cx + x, cy + y, c); |
nsfb->plotter_fns->point(nsfb, cx - x, cy + y, c); |
nsfb->plotter_fns->point(nsfb, cx + x, cy - y, c); |
nsfb->plotter_fns->point(nsfb, cx - x, cy - y, c); |
} |
static void |
ellipsefill(nsfb_t *nsfb, int cx, int cy, int x, int y, nsfb_colour_t c) |
{ |
nsfb_bbox_t fline[2]; |
nsfb_plot_pen_t pen; |
pen.stroke_colour = c; |
fline[0].x0 = fline[1].x0 = cx - x; |
fline[0].x1 = fline[1].x1 = cx + x; |
fline[0].y0 = fline[0].y1 = cy + y; |
fline[1].y0 = fline[1].y1 = cy - y; |
nsfb->plotter_fns->line(nsfb, 2, fline, &pen); |
} |
#define ROUND(a) ((int)(a+0.5)) |
static bool |
ellipse_midpoint(nsfb_t *nsfb, |
int cx, |
int cy, |
int rx, |
int ry, |
nsfb_colour_t c, |
void (ellipsefn)(nsfb_t *nsfb, int cx, int cy, int x, int y, nsfb_colour_t c)) |
{ |
int rx2 = rx * rx; |
int ry2 = ry * ry; |
int tworx2 = 2 * rx2; |
int twory2 = 2 * ry2; |
int p; |
int x = 0; |
int y = ry; |
int px = 0; |
int py = tworx2 * y; |
ellipsefn(nsfb, cx, cy, x, y, c); |
/* region 1 */ |
p = ROUND(ry2 - (rx2 * ry) + (0.25 * rx2)); |
while (px < py) { |
x++; |
px += twory2; |
if (p <0) { |
p+=ry2 + px; |
} else { |
y--; |
py -= tworx2; |
p+=ry2 + px - py; |
} |
ellipsefn(nsfb, cx, cy, x, y, c); |
} |
/* region 2 */ |
p = ROUND(ry2*(x+0.5)*(x+0.5) + rx2*(y-1)*(y-1) - rx2*ry2); |
while (y > 0) { |
y--; |
py -= tworx2; |
if (p > 0) { |
p+=rx2 - py; |
} else { |
x++; |
px += twory2; |
p+=rx2 - py + px; |
} |
ellipsefn(nsfb, cx, cy, x, y, c); |
} |
return true; |
} |
/* plotter routine for 8way circle symetry */ |
static void |
circlepoints(nsfb_t *nsfb, int cx, int cy, int x, int y, nsfb_colour_t c) |
{ |
nsfb->plotter_fns->point(nsfb, cx + x, cy + y, c); |
nsfb->plotter_fns->point(nsfb, cx - x, cy + y, c); |
nsfb->plotter_fns->point(nsfb, cx + x, cy - y, c); |
nsfb->plotter_fns->point(nsfb, cx - x, cy - y, c); |
nsfb->plotter_fns->point(nsfb, cx + y, cy + x, c); |
nsfb->plotter_fns->point(nsfb, cx - y, cy + x, c); |
nsfb->plotter_fns->point(nsfb, cx + y, cy - x, c); |
nsfb->plotter_fns->point(nsfb, cx - y, cy - x, c); |
} |
static void |
circlefill(nsfb_t *nsfb, int cx, int cy, int x, int y, nsfb_colour_t c) |
{ |
nsfb_bbox_t fline[4]; |
nsfb_plot_pen_t pen; |
pen.stroke_colour = c; |
fline[0].x0 = fline[1].x0 = cx - x; |
fline[0].x1 = fline[1].x1 = cx + x; |
fline[0].y0 = fline[0].y1 = cy + y; |
fline[1].y0 = fline[1].y1 = cy - y; |
fline[2].x0 = fline[3].x0 = cx - y; |
fline[2].x1 = fline[3].x1 = cx + y; |
fline[2].y0 = fline[2].y1 = cy + x; |
fline[3].y0 = fline[3].y1 = cy - x; |
nsfb->plotter_fns->line(nsfb, 4, fline, &pen); |
} |
static bool circle_midpoint(nsfb_t *nsfb, |
int cx, |
int cy, |
int r, |
nsfb_colour_t c, |
void (circfn)(nsfb_t *nsfb, int cx, int cy, int x, int y, nsfb_colour_t c)) |
{ |
int x = 0; |
int y = r; |
int p = 1 - r; |
circfn(nsfb, cx, cy, x, y, c); |
while (x < y) { |
x++; |
if (p < 0) { |
p += 2 * x + 1; |
} else { |
y--; |
p += 2 * (x - y) + 1; |
} |
circfn(nsfb, cx, cy, x, y, c); |
} |
return true; |
} |
static bool ellipse(nsfb_t *nsfb, nsfb_bbox_t *ellipse, nsfb_colour_t c) |
{ |
int width = (ellipse->x1 - ellipse->x0)>>1; |
int height = (ellipse->y1 - ellipse->y0)>>1; |
if (width == height) { |
/* circle */ |
return circle_midpoint(nsfb, ellipse->x0 + width, ellipse->y0 + height, width, c, circlepoints); |
} else { |
return ellipse_midpoint(nsfb, ellipse->x0 + width, ellipse->y0 + height, width, height, c, ellipsepoints); |
} |
} |
static bool ellipse_fill(nsfb_t *nsfb, nsfb_bbox_t *ellipse, nsfb_colour_t c) |
{ |
int width = (ellipse->x1 - ellipse->x0) >> 1; |
int height = (ellipse->y1 - ellipse->y0) >> 1; |
if (width == height) { |
/* circle */ |
return circle_midpoint(nsfb, ellipse->x0 + width, ellipse->y0 + height, width, c, circlefill); |
} else { |
return ellipse_midpoint(nsfb, ellipse->x0 + width, ellipse->y0 + height, width, height, c, ellipsefill); |
} |
} |
/* copy an area of surface from one location to another. |
* |
* @warning This implementation is woefully incomplete! |
*/ |
static bool |
copy(nsfb_t *nsfb, nsfb_bbox_t *srcbox, nsfb_bbox_t *dstbox) |
{ |
int srcx = srcbox->x0; |
int srcy = srcbox->y0; |
int dstx = dstbox->x0; |
int dsty = dstbox->y0; |
int width = dstbox->x1 - dstbox->x0; |
int height = dstbox->y1 - dstbox->y0; |
uint8_t *srcptr; |
uint8_t *dstptr; |
int hloop; |
nsfb_bbox_t allbox; |
nsfb_plot_add_rect(srcbox, dstbox, &allbox); |
nsfb->surface_rtns->claim(nsfb, &allbox); |
srcptr = (nsfb->ptr + |
(srcy * nsfb->linelen) + |
((srcx * nsfb->bpp) / 8)); |
dstptr = (nsfb->ptr + |
(dsty * nsfb->linelen) + |
((dstx * nsfb->bpp) / 8)); |
if (width == nsfb->width) { |
/* take shortcut and use memmove */ |
memmove(dstptr, srcptr, (width * height * nsfb->bpp) / 8); |
} else { |
if (srcy > dsty) { |
for (hloop = height; hloop > 0; hloop--) { |
memmove(dstptr, srcptr, (width * nsfb->bpp) / 8); |
srcptr += nsfb->linelen; |
dstptr += nsfb->linelen; |
} |
} else { |
srcptr += height * nsfb->linelen; |
dstptr += height * nsfb->linelen; |
for (hloop = height; hloop > 0; hloop--) { |
srcptr -= nsfb->linelen; |
dstptr -= nsfb->linelen; |
memmove(dstptr, srcptr, (width * nsfb->bpp) / 8); |
} |
} |
} |
nsfb->surface_rtns->update(nsfb, dstbox); |
return true; |
} |
static bool arc(nsfb_t *nsfb, int x, int y, int radius, int angle1, int angle2, nsfb_colour_t c) |
{ |
nsfb=nsfb; |
x = x; |
y = y; |
radius = radius; |
c = c; |
angle1=angle1; |
angle2=angle2; |
return true; |
} |
#define N_SEG 30 |
static int |
cubic_points(unsigned int pointc, |
nsfb_point_t *point, |
nsfb_bbox_t *curve, |
nsfb_point_t *ctrla, |
nsfb_point_t *ctrlb) |
{ |
unsigned int seg_loop; |
double t; |
double one_minus_t; |
double a; |
double b; |
double c; |
double d; |
double x; |
double y; |
int cur_point; |
point[0].x = curve->x0; |
point[0].y = curve->y0; |
cur_point = 1; |
pointc--; |
for (seg_loop = 1; seg_loop < pointc; ++seg_loop) { |
t = (double)seg_loop / (double)pointc; |
one_minus_t = 1.0 - t; |
a = one_minus_t * one_minus_t * one_minus_t; |
b = 3.0 * t * one_minus_t * one_minus_t; |
c = 3.0 * t * t * one_minus_t; |
d = t * t * t; |
x = a * curve->x0 + b * ctrla->x + c * ctrlb->x + d * curve->x1; |
y = a * curve->y0 + b * ctrla->y + c * ctrlb->y + d * curve->y1; |
point[cur_point].x = x; |
point[cur_point].y = y; |
if ((point[cur_point].x != point[cur_point - 1].x) || |
(point[cur_point].y != point[cur_point - 1].y)) |
cur_point++; |
} |
point[cur_point].x = curve->x1; |
point[cur_point].y = curve->y1; |
if ((point[cur_point].x != point[cur_point - 1].x) || |
(point[cur_point].y != point[cur_point - 1].y)) |
cur_point++; |
return cur_point; |
} |
/* calculate a series of points which describe a quadratic bezier spline. |
* |
* fills an array of points with values describing a quadratic curve. Both the |
* start and end points are included as the first and last points |
* respectively. Only if the next point on the curve is different from its |
* predecessor is the point added which ensures points for the same position |
* are not repeated. |
*/ |
static int |
quadratic_points(unsigned int pointc, |
nsfb_point_t *point, |
nsfb_bbox_t *curve, |
nsfb_point_t *ctrla) |
{ |
unsigned int seg_loop; |
double t; |
double one_minus_t; |
double a; |
double b; |
double c; |
double x; |
double y; |
int cur_point; |
point[0].x = curve->x0; |
point[0].y = curve->y0; |
cur_point = 1; |
pointc--; /* we have added the start point, one less point in the curve */ |
for (seg_loop = 1; seg_loop < pointc; ++seg_loop) { |
t = (double)seg_loop / (double)pointc; |
one_minus_t = 1.0 - t; |
a = one_minus_t * one_minus_t; |
b = 2.0 * t * one_minus_t; |
c = t * t; |
x = a * curve->x0 + b * ctrla->x + c * curve->x1; |
y = a * curve->y0 + b * ctrla->y + c * curve->y1; |
point[cur_point].x = x; |
point[cur_point].y = y; |
if ((point[cur_point].x != point[cur_point - 1].x) || |
(point[cur_point].y != point[cur_point - 1].y)) |
cur_point++; |
} |
point[cur_point].x = curve->x1; |
point[cur_point].y = curve->y1; |
if ((point[cur_point].x != point[cur_point - 1].x) || |
(point[cur_point].y != point[cur_point - 1].y)) |
cur_point++; |
return cur_point; |
} |
static bool |
polylines(nsfb_t *nsfb, |
int pointc, |
const nsfb_point_t *points, |
nsfb_plot_pen_t *pen) |
{ |
int point_loop; |
nsfb_bbox_t line; |
if (pen->stroke_type != NFSB_PLOT_OPTYPE_NONE) { |
for (point_loop = 0; point_loop < (pointc - 1); point_loop++) { |
line = *(nsfb_bbox_t *)&points[point_loop]; |
nsfb->plotter_fns->line(nsfb, 1, &line, pen); |
} |
} |
return true; |
} |
static bool |
quadratic(nsfb_t *nsfb, |
nsfb_bbox_t *curve, |
nsfb_point_t *ctrla, |
nsfb_plot_pen_t *pen) |
{ |
nsfb_point_t points[N_SEG]; |
if (pen->stroke_type == NFSB_PLOT_OPTYPE_NONE) |
return false; |
return polylines(nsfb, quadratic_points(N_SEG, points, curve, ctrla), points, pen); |
} |
static bool |
cubic(nsfb_t *nsfb, |
nsfb_bbox_t *curve, |
nsfb_point_t *ctrla, |
nsfb_point_t *ctrlb, |
nsfb_plot_pen_t *pen) |
{ |
nsfb_point_t points[N_SEG]; |
if (pen->stroke_type == NFSB_PLOT_OPTYPE_NONE) |
return false; |
return polylines(nsfb, cubic_points(N_SEG, points, curve, ctrla,ctrlb), points, pen); |
} |
static bool |
path(nsfb_t *nsfb, int pathc, nsfb_plot_pathop_t *pathop, nsfb_plot_pen_t *pen) |
{ |
int path_loop; |
nsfb_point_t *pts; |
nsfb_point_t *curpt; |
int ptc = 0; |
nsfb_bbox_t curve; |
nsfb_point_t ctrla; |
nsfb_point_t ctrlb; |
int added_count = 0; |
int bpts; |
/* count the verticies in the path and add N_SEG extra for curves */ |
for (path_loop = 0; path_loop < pathc; path_loop++) { |
ptc++; |
if ((pathop[path_loop].operation == NFSB_PLOT_PATHOP_QUAD) || |
(pathop[path_loop].operation == NFSB_PLOT_PATHOP_CUBIC)) |
ptc += N_SEG; |
} |
/* allocate storage for the vertexes */ |
curpt = pts = malloc(ptc * sizeof(nsfb_point_t)); |
for (path_loop = 0; path_loop < pathc; path_loop++) { |
switch (pathop[path_loop].operation) { |
case NFSB_PLOT_PATHOP_QUAD: |
curpt-=2; |
added_count -= 2; |
curve.x0 = pathop[path_loop - 2].point.x; |
curve.y0 = pathop[path_loop - 2].point.y; |
ctrla.x = pathop[path_loop - 1].point.x; |
ctrla.y = pathop[path_loop - 1].point.y; |
curve.x1 = pathop[path_loop].point.x; |
curve.y1 = pathop[path_loop].point.y; |
bpts = quadratic_points(N_SEG, curpt, &curve, &ctrla); |
curpt += bpts; |
added_count += bpts; |
break; |
case NFSB_PLOT_PATHOP_CUBIC: |
curpt-=3; |
added_count -=3; |
curve.x0 = pathop[path_loop - 3].point.x; |
curve.y0 = pathop[path_loop - 3].point.y; |
ctrla.x = pathop[path_loop - 2].point.x; |
ctrla.y = pathop[path_loop - 2].point.y; |
ctrlb.x = pathop[path_loop - 1].point.x; |
ctrlb.y = pathop[path_loop - 1].point.y; |
curve.x1 = pathop[path_loop].point.x; |
curve.y1 = pathop[path_loop].point.y; |
bpts = cubic_points(N_SEG, curpt, &curve, &ctrla, &ctrlb); |
curpt += bpts; |
added_count += bpts; |
break; |
default: |
*curpt = pathop[path_loop].point; |
curpt++; |
added_count ++; |
break; |
} |
} |
if (pen->fill_type != NFSB_PLOT_OPTYPE_NONE) { |
polygon(nsfb, (int *)pts, added_count, pen->fill_colour); |
} |
if (pen->stroke_type != NFSB_PLOT_OPTYPE_NONE) { |
polylines(nsfb, added_count, pts, pen); |
} |
free(pts); |
return true; |
} |
bool select_plotters(nsfb_t *nsfb) |
{ |
const nsfb_plotter_fns_t *table = NULL; |
switch (nsfb->format) { |
case NSFB_FMT_XBGR8888: /* 32bpp Unused Blue Green Red */ |
case NSFB_FMT_ABGR8888: /* 32bpp Alpha Blue Green Red */ |
table = &_nsfb_32bpp_xbgr8888_plotters; |
nsfb->bpp = 32; |
break; |
case NSFB_FMT_XRGB8888: /* 32bpp Unused Red Green Blue */ |
case NSFB_FMT_ARGB8888: /* 32bpp Alpha Red Green Blue */ |
table = &_nsfb_32bpp_xrgb8888_plotters; |
nsfb->bpp = 32; |
break; |
case NSFB_FMT_RGB888: /* 24 bpp Alpha Red Green Blue */ |
#ifdef ENABLE_24_BPP |
table = &_nsfb_24bpp_plotters; |
nsfb->bpp = 24; |
break; |
#else |
return false; |
#endif |
case NSFB_FMT_ARGB1555: /* 16 bpp 555 */ |
case NSFB_FMT_RGB565: /* 16 bpp 565 */ |
table = &_nsfb_16bpp_plotters; |
nsfb->bpp = 16; |
break; |
case NSFB_FMT_I8: /* 8bpp indexed */ |
table = &_nsfb_8bpp_plotters; |
nsfb->bpp = 8; |
break; |
case NSFB_FMT_I1: /* black and white */ |
#ifdef ENABLE_1_BPP |
table = &_nsfb_1bpp_plotters; |
nsfb->bpp = 1 |
break; |
#else |
return false; |
#endif |
case NSFB_FMT_ANY: /* No specific format - use surface default */ |
default: |
return false; |
} |
if (nsfb->plotter_fns != NULL) |
free(nsfb->plotter_fns); |
nsfb->plotter_fns = calloc(1, sizeof(nsfb_plotter_fns_t)); |
memcpy(nsfb->plotter_fns, table, sizeof(nsfb_plotter_fns_t)); |
/* set the generics */ |
nsfb->plotter_fns->clg = clg; |
nsfb->plotter_fns->set_clip = set_clip; |
nsfb->plotter_fns->get_clip = get_clip; |
nsfb->plotter_fns->polygon = polygon; |
nsfb->plotter_fns->rectangle = rectangle; |
nsfb->plotter_fns->ellipse = ellipse; |
nsfb->plotter_fns->ellipse_fill = ellipse_fill; |
nsfb->plotter_fns->copy = copy; |
nsfb->plotter_fns->arc = arc; |
nsfb->plotter_fns->quadratic = quadratic; |
nsfb->plotter_fns->cubic = cubic; |
nsfb->plotter_fns->path = path; |
nsfb->plotter_fns->polylines = polylines; |
/* set default clip rectangle to size of framebuffer */ |
nsfb->clip.x0 = 0; |
nsfb->clip.y0 = 0; |
nsfb->clip.x1 = nsfb->width; |
nsfb->clip.y1 = nsfb->height; |
return true; |
} |
/* |
* Local variables: |
* c-basic-offset: 4 |
* tab-width: 8 |
* End: |
*/ |
/contrib/network/netsurf/libnsfb/src/plot/util.c |
---|
0,0 → 1,201 |
#include <stdbool.h> |
#define NULL 0 |
#include "palette.h" |
#include "libnsfb.h" |
#include "libnsfb_plot.h" |
#include "libnsfb_plot_util.h" |
#include "nsfb.h" |
enum { |
POINT_LEFTOF_REGION = 1, |
POINT_RIGHTOF_REGION = 2, |
POINT_ABOVE_REGION = 4, |
POINT_BELOW_REGION = 8, |
}; |
#define REGION(x,y,cx1,cx2,cy1,cy2) \ |
( ( (y) > (cy2) ? POINT_BELOW_REGION : 0) | \ |
( (y) < (cy1) ? POINT_ABOVE_REGION : 0) | \ |
( (x) > (cx2) ? POINT_RIGHTOF_REGION : 0) | \ |
( (x) < (cx1) ? POINT_LEFTOF_REGION : 0) ) |
#define SWAP(a, b) do { int t; t=(a); (a)=(b); (b)=t; } while(0) |
/* clip a rectangle with another clipping rectangle. |
* |
* @param clip The rectangle to clip to. |
* @param rect The rectangle to clip. |
* @return false if the \a rect lies completely outside the \a clip rectangle, |
* true if some of the \a rect is still visible. |
*/ |
bool |
nsfb_plot_clip(const nsfb_bbox_t * clip, nsfb_bbox_t * rect) |
{ |
char region1; |
char region2; |
if (rect->x1 < rect->x0) SWAP(rect->x0, rect->x1); |
if (rect->y1 < rect->y0) SWAP(rect->y0, rect->y1); |
region1 = REGION(rect->x0, rect->y0, clip->x0, clip->x1 - 1, clip->y0, clip->y1 - 1); |
region2 = REGION(rect->x1, rect->y1, clip->x0, clip->x1 - 1, clip->y0, clip->y1 - 1); |
/* area lies entirely outside the clipping rectangle */ |
if ((region1 | region2) && (region1 & region2)) |
return false; |
if (rect->x0 < clip->x0) |
rect->x0 = clip->x0; |
if (rect->x0 > clip->x1) |
rect->x0 = clip->x1; |
if (rect->x1 < clip->x0) |
rect->x1 = clip->x0; |
if (rect->x1 > clip->x1) |
rect->x1 = clip->x1; |
if (rect->y0 < clip->y0) |
rect->y0 = clip->y0; |
if (rect->y0 > clip->y1) |
rect->y0 = clip->y1; |
if (rect->y1 < clip->y0) |
rect->y1 = clip->y0; |
if (rect->y1 > clip->y1) |
rect->y1 = clip->y1; |
return true; |
} |
bool |
nsfb_plot_clip_ctx(nsfb_t *nsfb, nsfb_bbox_t * rect) |
{ |
return nsfb_plot_clip(&nsfb->clip, rect); |
} |
/** Clip a line to a bounding box. |
*/ |
bool nsfb_plot_clip_line(const nsfb_bbox_t *clip, nsfb_bbox_t * line) |
{ |
char region1; |
char region2; |
region1 = REGION(line->x0, line->y0, clip->x0, clip->x1 - 1, clip->y0, clip->y1 - 1); |
region2 = REGION(line->x1, line->y1, clip->x0, clip->x1 - 1, clip->y0, clip->y1 - 1); |
while (region1 | region2) { |
if (region1 & region2) { |
/* line lies entirely outside the clipping rectangle */ |
return false; |
} |
if (region1) { |
/* first point */ |
if (region1 & POINT_BELOW_REGION) { |
/* divide line at bottom */ |
line->x0 = (line->x0 + (line->x1 - line->x0) * |
(clip->y1 - 1 - line->y0) / (line->y1 - line->y0)); |
line->y0 = clip->y1 - 1; |
} else if (region1 & POINT_ABOVE_REGION) { |
/* divide line at top */ |
line->x0 = (line->x0 + (line->x1 - line->x0) * |
(clip->y0 - line->y0) / (line->y1 - line->y0)); |
line->y0 = clip->y0; |
} else if (region1 & POINT_RIGHTOF_REGION) { |
/* divide line at right */ |
line->y0 = (line->y0 + (line->y1 - line->y0) * |
(clip->x1 - 1 - line->x0) / (line->x1 - line->x0)); |
line->x0 = clip->x1 - 1; |
} else if (region1 & POINT_LEFTOF_REGION) { |
/* divide line at right */ |
line->y0 = (line->y0 + (line->y1 - line->y0) * |
(clip->x0 - line->x0) / (line->x1 - line->x0)); |
line->x0 = clip->x0; |
} |
region1 = REGION(line->x0, line->y0, clip->x0, clip->x1 - 1, clip->y0, clip->y1 - 1); |
} else { |
/* second point */ |
if (region2 & POINT_BELOW_REGION) { |
/* divide line at bottom*/ |
line->x1 = (line->x0 + (line->x1 - line->x0) * |
(clip->y1 - 1 - line->y0) / (line->y1 - line->y0)); |
line->y1 = clip->y1 - 1; |
} else if (region2 & POINT_ABOVE_REGION) { |
/* divide line at top*/ |
line->x1 = (line->x0 + (line->x1 - line->x0) * |
(clip->y0 - line->y0) / (line->y1 - line->y0)); |
line->y1 = clip->y0; |
} else if (region2 & POINT_RIGHTOF_REGION) { |
/* divide line at right*/ |
line->y1 = (line->y0 + (line->y1 - line->y0) * |
(clip->x1 - 1 - line->x0) / (line->x1 - line->x0)); |
line->x1 = clip->x1 - 1; |
} else if (region2 & POINT_LEFTOF_REGION) { |
/* divide line at right*/ |
line->y1 = (line->y0 + (line->y1 - line->y0) * |
(clip->x0 - line->x0) / (line->x1 - line->x0)); |
line->x1 = clip->x0; |
} |
region2 = REGION(line->x1, line->y1, clip->x0, clip->x1 - 1, clip->y0, clip->y1 - 1); |
} |
} |
return true; |
} |
bool nsfb_plot_clip_line_ctx(nsfb_t *nsfb, nsfb_bbox_t * line) |
{ |
return nsfb_plot_clip_line(&nsfb->clip, line); |
} |
/* documented in libnsfb_plot_util.h */ |
bool |
nsfb_plot_add_rect(const nsfb_bbox_t *box1, const nsfb_bbox_t *box2, nsfb_bbox_t *result) |
{ |
/* lower x coordinate */ |
if (box1->x0 < box2->x0) |
result->x0 = box1->x0; |
else |
result->x0 = box2->x0; |
/* lower y coordinate */ |
if (box1->y0 < box2->y0) |
result->y0 = box1->y0; |
else |
result->y0 = box2->y0; |
/* upper x coordinate */ |
if (box1->x1 > box2->x1) |
result->x1 = box1->x1; |
else |
result->x1 = box2->x1; |
/* upper y coordinate */ |
if (box1->y1 > box2->y1) |
result->y1 = box1->y1; |
else |
result->y1 = box2->y1; |
return true; |
} |
bool nsfb_plot_bbox_intersect(const nsfb_bbox_t *box1, const nsfb_bbox_t *box2) |
{ |
if (box2->x1 < box1->x0) |
return false; |
if (box2->y1 < box1->y0) |
return false; |
if (box2->x0 > box1->x1) |
return false; |
if (box2->y0 > box1->y1) |
return false; |
return true; |
} |
/contrib/network/netsurf/libnsfb/include/libnsfb.h |
---|
0,0 → 1,161 |
/* |
* Copyright 2009 Vincent Sanders <vince@simtec.co.uk> |
* |
* This file is part of libnsfb, http://www.netsurf-browser.org/ |
* Licenced under the MIT License, |
* http://www.opensource.org/licenses/mit-license.php |
* |
* This is the exported interface for the libnsfb graphics library. |
*/ |
#ifndef _LIBNSFB_H |
#define _LIBNSFB_H 1 |
#include <stdint.h> |
typedef struct nsfb_palette_s nsfb_palette_t; |
typedef struct nsfb_cursor_s nsfb_cursor_t; |
typedef struct nsfb_s nsfb_t; |
typedef struct nsfb_event_s nsfb_event_t; |
/** co-ordinate for plotting operations */ |
typedef struct nsfb_point_s { |
int x; |
int y; |
} nsfb_point_t; |
/** bounding box for plotting operations */ |
typedef struct nsfb_bbox_s { |
int x0; |
int y0; |
int x1; |
int y1; |
} nsfb_bbox_t; |
/** The type of framebuffer surface. */ |
enum nsfb_type_e { |
NSFB_SURFACE_NONE = 0, /**< No surface */ |
NSFB_SURFACE_RAM, /**< RAM surface */ |
NSFB_SURFACE_SDL, /**< SDL surface */ |
NSFB_SURFACE_LINUX, /**< Linux framebuffer surface */ |
NSFB_SURFACE_VNC, /**< VNC surface */ |
NSFB_SURFACE_ABLE, /**< ABLE framebuffer surface */ |
NSFB_SURFACE_X, /**< X windows surface */ |
NSFB_SURFACE_KOLIBRI |
}; |
enum nsfb_format_e { |
NSFB_FMT_ANY = 0, /* No specific format - use surface default */ |
NSFB_FMT_XBGR8888, /* 32bpp Blue Green Red */ |
NSFB_FMT_XRGB8888, /* 32bpp Red Green Blue */ |
NSFB_FMT_ABGR8888, /* 32bpp Alpga Blue Green Red */ |
NSFB_FMT_ARGB8888, /* 32bpp Alpga Red Green Blue */ |
NSFB_FMT_RGB888, /* 24 bpp Alpga Red Green Blue */ |
NSFB_FMT_ARGB1555, /* 16 bpp 555 */ |
NSFB_FMT_RGB565, /* 16 bpp 565 */ |
NSFB_FMT_I8, /* 8bpp indexed */ |
NSFB_FMT_I4, /* 4bpp indexed */ |
NSFB_FMT_I1, /* black and white */ |
}; |
/** Select frontend type from a name. |
* |
* @param name The name to select a frontend. |
* @return The surface type or NSFB_SURFACE_NONE if frontend with specified |
* name was not available |
*/ |
enum nsfb_type_e nsfb_type_from_name(const char *name); |
/** Create a nsfb context. |
* |
* This creates a framebuffer surface context. |
* |
* @param surface_type The type of surface to create a context for. |
*/ |
nsfb_t *nsfb_new(const enum nsfb_type_e surface_type); |
/** Initialise selected surface context. |
* |
* @param nsfb The context returned from ::nsfb_init |
*/ |
int nsfb_init(nsfb_t *nsfb); |
/** Free nsfb context. |
* |
* This shuts down and releases all resources associated with an nsfb context. |
* |
* @param nsfb The context returned from ::nsfb_new to free |
*/ |
int nsfb_free(nsfb_t *nsfb); |
/** Claim an area of screen to be redrawn. |
* |
* Informs the nsfb library that an area of screen will be directly |
* updated by the user program. This is neccisarry so the library can |
* ensure the soft cursor plotting is correctly handled. After the |
* update has been perfomed ::nsfb_update should be called. |
* |
* @param box The bounding box of the area which might be altered. |
*/ |
int nsfb_claim(nsfb_t *nsfb, nsfb_bbox_t *box); |
/** Update an area of screen which has been redrawn. |
* |
* Informs the nsfb library that an area of screen has been directly |
* updated by the user program. Some surfaces only show the update on |
* notification. The area updated does not neccisarrily have to |
* corelate with a previous ::nsfb_claim bounding box, however if the |
* redrawn area is larger than the claimed area pointer plotting |
* artifacts may occour. |
* |
* @param box The bounding box of the area which has been altered. |
*/ |
int nsfb_update(nsfb_t *nsfb, nsfb_bbox_t *box); |
/** Obtain the geometry of a nsfb context. |
* |
* @param width a variable to store the framebuffer width in or NULL |
* @param height a variable to store the framebuffer height in or NULL |
* @param format a variable to store the framebuffer format in or NULL |
*/ |
int nsfb_get_geometry(nsfb_t *nsfb, int *width, int *height, enum nsfb_format_e *format); |
/** Alter the geometry of a surface |
* |
* @param nsfb The context to alter. |
* @param width The new display width. |
* @param height The new display height. |
* @param format The desired surface format. |
*/ |
int nsfb_set_geometry(nsfb_t *nsfb, int width, int height, enum nsfb_format_e format); |
/** Set parameters a surface |
* |
* Some surface types can take additional parameters for |
* attributes. For example the linux surface uses this to allow the |
* setting of a different output device |
* |
* @param nsfb The surface to alter. |
* @param parameters The parameters for the surface. |
*/ |
int nsfb_set_parameters(nsfb_t *nsfb, const char *parameters); |
/** Obtain the buffer memory base and stride. |
* |
* @param nsfb The context to read. |
*/ |
int nsfb_get_buffer(nsfb_t *nsfb, uint8_t **ptr, int *linelen); |
/** Dump the surface to fd in PPM format |
*/ |
bool nsfb_dump(nsfb_t *nsfb, int fd); |
#endif |
/* |
* Local variables: |
* c-basic-offset: 4 |
* tab-width: 8 |
* End: |
*/ |
/contrib/network/netsurf/libnsfb/include/cursor.h |
---|
0,0 → 1,41 |
/* |
* Copyright 2009 Vincent Sanders <vince@simtec.co.uk> |
* |
* This file is part of libnsfb, http://www.netsurf-browser.org/ |
* Licenced under the MIT License, |
* http://www.opensource.org/licenses/mit-license.php |
* |
* This is the *internal* interface for the cursor. |
*/ |
#ifndef CURSOR_H |
#define CURSOR_H 1 |
struct nsfb_cursor_s { |
bool plotted; |
nsfb_bbox_t loc; |
/* current cursor image */ |
const nsfb_colour_t *pixel; |
int bmp_width; |
int bmp_height; |
int bmp_stride; |
int hotspot_x; |
int hotspot_y; |
/* current saved image */ |
nsfb_bbox_t savloc; |
nsfb_colour_t *sav; |
int sav_size; |
int sav_width; |
int sav_height; |
}; |
/** Plot the cursor saving the image underneath. */ |
bool nsfb_cursor_plot(nsfb_t *nsfb, struct nsfb_cursor_s *cursor); |
/** Clear the cursor restoring the image underneath */ |
bool nsfb_cursor_clear(nsfb_t *nsfb, struct nsfb_cursor_s *cursor); |
#endif /* CURSOR_H */ |
/contrib/network/netsurf/libnsfb/include/libnsfb_cursor.h |
---|
0,0 → 1,48 |
/* |
* Copyright 2009 Vincent Sanders <vince@simtec.co.uk> |
* |
* This file is part of libnsfb, http://www.netsurf-browser.org/ |
* Licenced under the MIT License, |
* http://www.opensource.org/licenses/mit-license.php |
* |
* This is the exported interface for the libnsfb graphics library. |
*/ |
#ifndef _LIBNSFB_CURSOR_H |
#define _LIBNSFB_CURSOR_H 1 |
/** Initialise the cursor. |
*/ |
bool nsfb_cursor_init(nsfb_t *nsfb); |
/** Set cursor parameters. |
* |
* Set a cursor bitmap, the cursor will be shown at the location set by |
* nsfb_cursor_loc_set. The pixel data may be referenced untill the cursor |
* is altered or cleared |
* |
* @param nsfb The frambuffer context |
* @param pixel The cursor bitmap data |
* @param bmp_width The width of the cursor bitmap |
* @param bmp_height The height of the cursor bitmap |
* @param bmp_stride The cursor bitmap's row stride |
* @param hotspot_x Coordinate within cursor image to place over cursor loc |
* @param hotspot_y Coordinate within cursor image to place over cursor loc |
* |
* (hot_spot_x, hot_spot_y) is from top left. (0, 0) means top left pixel of |
* cursor bitmap is to be rendered over the cursor location. |
*/ |
bool nsfb_cursor_set(nsfb_t *nsfb, const nsfb_colour_t *pixel, int bmp_width, int bmp_height, int bmp_stride, int hotspot_x, int hotspot_y); |
/** Set cursor location. |
* |
* @param nsfb The frambuffer context. |
* @param loc The location of the cursor |
*/ |
bool nsfb_cursor_loc_set(nsfb_t *nsfb, const nsfb_bbox_t *loc); |
/** get the cursor location */ |
bool nsfb_cursor_loc_get(nsfb_t *nsfb, nsfb_bbox_t *loc); |
#endif |
/contrib/network/netsurf/libnsfb/include/libnsfb_event.h |
---|
0,0 → 1,219 |
/* |
* Copyright 2009 Vincent Sanders <vince@simtec.co.uk> |
* |
* This file is part of libnsfb, http://www.netsurf-browser.org/ |
* Licenced under the MIT License, |
* http://www.opensource.org/licenses/mit-license.php |
* |
* This is the exported interface for the libnsfb graphics library. |
*/ |
#ifndef _LIBNSFB_EVENT_H |
#define _LIBNSFB_EVENT_H 1 |
enum nsfb_event_type_e { |
NSFB_EVENT_NONE, |
NSFB_EVENT_CONTROL, |
NSFB_EVENT_KEY_DOWN, |
NSFB_EVENT_KEY_UP, |
NSFB_EVENT_MOVE_RELATIVE, |
NSFB_EVENT_MOVE_ABSOLUTE, |
}; |
/** keycodes which mostly map to ascii chars */ |
enum nsfb_key_code_e { |
NSFB_KEY_UNKNOWN = 0, |
NSFB_KEY_BACKSPACE = 8, |
NSFB_KEY_TAB = 9, |
NSFB_KEY_LF = 10, |
NSFB_KEY_CLEAR = 12, |
NSFB_KEY_RETURN = 13, |
NSFB_KEY_PAUSE = 19, |
NSFB_KEY_ESCAPE = 27, |
NSFB_KEY_SPACE = 32, |
NSFB_KEY_EXCLAIM = 33, |
NSFB_KEY_QUOTEDBL = 34, |
NSFB_KEY_HASH = 35, |
NSFB_KEY_DOLLAR = 36, |
NSFB_KEY_AMPERSAND = 38, |
NSFB_KEY_QUOTE = 39, |
NSFB_KEY_LEFTPAREN = 40, |
NSFB_KEY_RIGHTPAREN = 41, |
NSFB_KEY_ASTERISK = 42, |
NSFB_KEY_PLUS = 43, |
NSFB_KEY_COMMA = 44, |
NSFB_KEY_MINUS = 45, |
NSFB_KEY_PERIOD = 46, |
NSFB_KEY_SLASH = 47, |
NSFB_KEY_0 = 48, |
NSFB_KEY_1 = 49, |
NSFB_KEY_2 = 50, |
NSFB_KEY_3 = 51, |
NSFB_KEY_4 = 52, |
NSFB_KEY_5 = 53, |
NSFB_KEY_6 = 54, |
NSFB_KEY_7 = 55, |
NSFB_KEY_8 = 56, |
NSFB_KEY_9 = 57, |
NSFB_KEY_COLON = 58, |
NSFB_KEY_SEMICOLON = 59, |
NSFB_KEY_LESS = 60, |
NSFB_KEY_EQUALS = 61, |
NSFB_KEY_GREATER = 62, |
NSFB_KEY_QUESTION = 63, |
NSFB_KEY_AT = 64, |
NSFB_KEY_LEFTBRACKET = 91, |
NSFB_KEY_BACKSLASH = 92, |
NSFB_KEY_RIGHTBRACKET = 93, |
NSFB_KEY_CARET = 94, |
NSFB_KEY_UNDERSCORE = 95, |
NSFB_KEY_BACKQUOTE = 96, |
NSFB_KEY_a = 97, |
NSFB_KEY_b = 98, |
NSFB_KEY_c = 99, |
NSFB_KEY_d = 100, |
NSFB_KEY_e = 101, |
NSFB_KEY_f = 102, |
NSFB_KEY_g = 103, |
NSFB_KEY_h = 104, |
NSFB_KEY_i = 105, |
NSFB_KEY_j = 106, |
NSFB_KEY_k = 107, |
NSFB_KEY_l = 108, |
NSFB_KEY_m = 109, |
NSFB_KEY_n = 110, |
NSFB_KEY_o = 111, |
NSFB_KEY_p = 112, |
NSFB_KEY_q = 113, |
NSFB_KEY_r = 114, |
NSFB_KEY_s = 115, |
NSFB_KEY_t = 116, |
NSFB_KEY_u = 117, |
NSFB_KEY_v = 118, |
NSFB_KEY_w = 119, |
NSFB_KEY_x = 120, |
NSFB_KEY_y = 121, |
NSFB_KEY_z = 122, |
NSFB_KEY_DELETE = 127, |
NSFB_KEY_KP0 = 256, |
NSFB_KEY_KP1 = 257, |
NSFB_KEY_KP2 = 258, |
NSFB_KEY_KP3 = 259, |
NSFB_KEY_KP4 = 260, |
NSFB_KEY_KP5 = 261, |
NSFB_KEY_KP6 = 262, |
NSFB_KEY_KP7 = 263, |
NSFB_KEY_KP8 = 264, |
NSFB_KEY_KP9 = 265, |
NSFB_KEY_KP_PERIOD = 266, |
NSFB_KEY_KP_DIVIDE = 267, |
NSFB_KEY_KP_MULTIPLY = 268, |
NSFB_KEY_KP_MINUS = 269, |
NSFB_KEY_KP_PLUS = 270, |
NSFB_KEY_KP_ENTER = 271, |
NSFB_KEY_KP_EQUALS = 272, |
NSFB_KEY_UP = 273, |
NSFB_KEY_DOWN = 274, |
NSFB_KEY_RIGHT = 275, |
NSFB_KEY_LEFT = 276, |
NSFB_KEY_INSERT = 277, |
NSFB_KEY_HOME = 278, |
NSFB_KEY_END = 279, |
NSFB_KEY_PAGEUP = 280, |
NSFB_KEY_PAGEDOWN = 281, |
/* Function keys */ |
NSFB_KEY_F1 = 282, |
NSFB_KEY_F2 = 283, |
NSFB_KEY_F3 = 284, |
NSFB_KEY_F4 = 285, |
NSFB_KEY_F5 = 286, |
NSFB_KEY_F6 = 287, |
NSFB_KEY_F7 = 288, |
NSFB_KEY_F8 = 289, |
NSFB_KEY_F9 = 290, |
NSFB_KEY_F10 = 291, |
NSFB_KEY_F11 = 292, |
NSFB_KEY_F12 = 293, |
NSFB_KEY_F13 = 294, |
NSFB_KEY_F14 = 295, |
NSFB_KEY_F15 = 296, |
/* Key state modifier keys */ |
NSFB_KEY_NUMLOCK = 300, |
NSFB_KEY_CAPSLOCK = 301, |
NSFB_KEY_SCROLLOCK = 302, |
NSFB_KEY_RSHIFT = 303, |
NSFB_KEY_LSHIFT = 304, |
NSFB_KEY_RCTRL = 305, |
NSFB_KEY_LCTRL = 306, |
NSFB_KEY_RALT = 307, |
NSFB_KEY_LALT = 308, |
NSFB_KEY_RMETA = 309, |
NSFB_KEY_LMETA = 310, |
NSFB_KEY_LSUPER = 311, |
NSFB_KEY_RSUPER = 312, |
NSFB_KEY_MODE = 313, |
NSFB_KEY_COMPOSE = 314, |
/* Miscellaneous function keys */ |
NSFB_KEY_HELP = 315, |
NSFB_KEY_PRINT = 316, |
NSFB_KEY_SYSREQ = 317, |
NSFB_KEY_BREAK = 318, |
NSFB_KEY_MENU = 319, |
NSFB_KEY_POWER = 320, |
NSFB_KEY_EURO = 321, |
NSFB_KEY_UNDO = 322, |
/* mouse buttons */ |
NSFB_KEY_MOUSE_1 = 401, |
NSFB_KEY_MOUSE_2 = 402, |
NSFB_KEY_MOUSE_3 = 403, |
NSFB_KEY_MOUSE_4 = 404, |
NSFB_KEY_MOUSE_5 = 405, |
}; |
enum nsfb_control_e { |
NSFB_CONTROL_NONE, |
NSFB_CONTROL_TIMEOUT, /* timeout event */ |
NSFB_CONTROL_QUIT, /* surface handler quit event */ |
}; |
struct nsfb_event_s { |
enum nsfb_event_type_e type; |
union { |
enum nsfb_key_code_e keycode; |
enum nsfb_control_e controlcode; |
struct { |
int x; |
int y; |
int z; |
} vector; |
} value; |
}; |
/** Process input events. |
* |
* Gather events from a frontend. |
* |
* @param nsfb The library handle. |
* @param event The event structure to fill. |
* @param timeout The number of milliseconds to wait for input, -1 is wait |
* forever, 0 returns immediately. |
* @return If the /a event structure is updated true else false. |
*/ |
bool nsfb_event(nsfb_t *nsfb, nsfb_event_t *event, int timeout); |
#endif |
/* |
* Local variables: |
* c-basic-offset: 4 |
* tab-width: 8 |
* End: |
*/ |
/contrib/network/netsurf/libnsfb/include/libnsfb_plot.h |
---|
0,0 → 1,169 |
/* |
* Copyright 2009 Vincent Sanders <vince@simtec.co.uk> |
* |
* This file is part of libnsfb, http://www.netsurf-browser.org/ |
* Licenced under the MIT License, |
* http://www.opensource.org/licenses/mit-license.php |
* |
* This is the exported plotter interface for the libnsfb graphics library. |
*/ |
#ifndef _LIBNSFB_PLOT_H |
#define _LIBNSFB_PLOT_H 1 |
/** representation of a colour. |
* |
* The colour value comprises of four components arranged in the order ABGR: |
* bits 24-31 are the alpha value and represent the opacity. 0 is |
* transparent i.e. there would be no change in the target surface if |
* this colour were to be used and 0xFF is opaque. |
* |
* bits 16-23 are the Blue component of the colour. |
* |
* bits 8-15 are the Green component of the colour. |
* |
* bits 0-7 are the Red component of the colour. |
*/ |
typedef uint32_t nsfb_colour_t; |
/** |
* Type of plot operation |
*/ |
typedef enum nsfb_plot_optype_e { |
NFSB_PLOT_OPTYPE_NONE = 0, /**< No operation */ |
NFSB_PLOT_OPTYPE_SOLID, /**< Solid colour */ |
NFSB_PLOT_OPTYPE_PATTERN, /**< Pattern plot */ |
} nsfb_plot_optype_t; |
/** pen colour and raster operation for plotting primatives. */ |
typedef struct nsfb_plot_pen_s { |
nsfb_plot_optype_t stroke_type; /**< Stroke plot type */ |
int stroke_width; /**< Width of stroke, in pixels */ |
nsfb_colour_t stroke_colour; /**< Colour of stroke */ |
uint32_t stroke_pattern; |
nsfb_plot_optype_t fill_type; /**< Fill plot type */ |
nsfb_colour_t fill_colour; /**< Colour of fill */ |
} nsfb_plot_pen_t; |
/** path operation type. */ |
typedef enum nsfb_plot_pathop_type_e { |
NFSB_PLOT_PATHOP_MOVE, |
NFSB_PLOT_PATHOP_LINE, |
NFSB_PLOT_PATHOP_QUAD, |
NFSB_PLOT_PATHOP_CUBIC, |
} nsfb_plot_pathop_type_t; |
/** path element */ |
typedef struct nsfb_plot_pathop_s { |
nsfb_plot_pathop_type_t operation; |
nsfb_point_t point; |
} nsfb_plot_pathop_t; |
/** Sets a clip rectangle for subsequent plots. |
* |
* Sets a clipping area which constrains all subsequent plotting operations. |
* The clipping area must lie within the framebuffer visible screen or false |
* will be returned and the new clipping area not set. |
*/ |
bool nsfb_plot_set_clip(nsfb_t *nsfb, nsfb_bbox_t *clip); |
/** Get the previously set clipping region. |
*/ |
bool nsfb_plot_get_clip(nsfb_t *nsfb, nsfb_bbox_t *clip); |
/** Clears plotting area to a flat colour. |
*/ |
bool nsfb_plot_clg(nsfb_t *nsfb, nsfb_colour_t c); |
/** Plots a rectangle outline. |
* |
* The line can be solid, dotted or dashed. Top left corner at (x0,y0) and |
* rectangle has given width and height. |
*/ |
bool nsfb_plot_rectangle(nsfb_t *nsfb, nsfb_bbox_t *rect, int line_width, nsfb_colour_t c, bool dotted, bool dashed); |
/** Plots a filled rectangle. Top left corner at (x0,y0), bottom |
* right corner at (x1,y1). Note: (x0,y0) is inside filled area, |
* but (x1,y1) is below and to the right. See diagram below. |
*/ |
bool nsfb_plot_rectangle_fill(nsfb_t *nsfb, nsfb_bbox_t *rect, nsfb_colour_t c); |
/** Plots a line. |
* |
* Draw a line from (x0,y0) to (x1,y1). Coordinates are at centre of line |
* width/thickness. |
*/ |
bool nsfb_plot_line(nsfb_t *nsfb, nsfb_bbox_t *line, nsfb_plot_pen_t *pen); |
/** Plots a number of lines. |
* |
* Draw a series of lines. |
*/ |
bool nsfb_plot_lines(nsfb_t *nsfb, int linec, nsfb_bbox_t *line, nsfb_plot_pen_t *pen); |
/** Plots a number of connected lines. |
* |
* Draw a series of connected lines. |
*/ |
bool nsfb_plot_polylines(nsfb_t *nsfb, int pointc, const nsfb_point_t *points, nsfb_plot_pen_t *pen); |
/** Plots a filled polygon. |
* |
* Plots a filled polygon with straight lines between points. The lines around |
* the edge of the ploygon are not plotted. The polygon is filled with a |
* non-zero winding rule. |
* |
* |
*/ |
bool nsfb_plot_polygon(nsfb_t *nsfb, const int *p, unsigned int n, nsfb_colour_t fill); |
/** Plot an ellipse. |
*/ |
bool nsfb_plot_ellipse(nsfb_t *nsfb, nsfb_bbox_t *ellipse, nsfb_colour_t c); |
/** Plot a filled ellipse. |
*/ |
bool nsfb_plot_ellipse_fill(nsfb_t *nsfb, nsfb_bbox_t *ellipse, nsfb_colour_t c); |
/** Plots an arc. |
* |
* around (x,y), from anticlockwise from angle1 to angle2. Angles are measured |
* anticlockwise from horizontal, in degrees. |
*/ |
bool nsfb_plot_arc(nsfb_t *nsfb, int x, int y, int radius, int angle1, int angle2, nsfb_colour_t c); |
/** Plots an alpha blended pixel. |
* |
* plots an alpha blended pixel. |
*/ |
bool nsfb_plot_point(nsfb_t *nsfb, int x, int y, nsfb_colour_t c); |
bool nsfb_plot_cubic_bezier(nsfb_t *nsfb, nsfb_bbox_t *curve, nsfb_point_t *ctrla, nsfb_point_t *ctrlb, nsfb_plot_pen_t *pen); |
bool nsfb_plot_quadratic_bezier(nsfb_t *nsfb, nsfb_bbox_t *curve, nsfb_point_t *ctrla, nsfb_plot_pen_t *pen); |
bool nsfb_plot_path(nsfb_t *nsfb, int pathc, nsfb_plot_pathop_t *pathop, nsfb_plot_pen_t *pen); |
/** copy an area of screen |
* |
* Copy an area of the display. |
*/ |
bool nsfb_plot_copy(nsfb_t *srcfb, nsfb_bbox_t *srcbox, nsfb_t *dstfb, nsfb_bbox_t *dstbox); |
/** Plot bitmap. |
*/ |
bool nsfb_plot_bitmap(nsfb_t *nsfb, const nsfb_bbox_t *loc, const nsfb_colour_t *pixel, int bmp_width, int bmp_height, int bmp_stride, bool alpha); |
/** Plot an 8 bit glyph. |
*/ |
bool nsfb_plot_glyph8(nsfb_t *nsfb, nsfb_bbox_t *loc, const uint8_t *pixel, int pitch, nsfb_colour_t c); |
/** Plot an 1 bit glyph. |
*/ |
bool nsfb_plot_glyph1(nsfb_t *nsfb, nsfb_bbox_t *loc, const uint8_t *pixel, int pitch, nsfb_colour_t c); |
/* read rectangle into buffer */ |
bool nsfb_plot_readrect(nsfb_t *nsfb, nsfb_bbox_t *rect, nsfb_colour_t *buffer); |
#endif /* _LIBNSFB_PLOT_H */ |
/contrib/network/netsurf/libnsfb/include/libnsfb_plot_util.h |
---|
0,0 → 1,48 |
/* |
* Copyright 2009 Vincent Sanders <vince@simtec.co.uk> |
* |
* This file is part of libnsfb, http://www.netsurf-browser.org/ |
* Licenced under the MIT License, |
* http://www.opensource.org/licenses/mit-license.php |
* |
* This is the exported interface for the libnsfb graphics library. |
*/ |
#ifndef _LIBNSFB_PLOT_UTIL_H |
#define _LIBNSFB_PLOT_UTIL_H 1 |
/* alpha blend two pixels together */ |
static inline nsfb_colour_t |
nsfb_plot_ablend(nsfb_colour_t pixel, nsfb_colour_t scrpixel) |
{ |
int opacity = pixel >> 24; |
int transp = 0x100 - opacity; |
uint32_t rb, g; |
rb = ((pixel & 0xFF00FF) * opacity + |
(scrpixel & 0xFF00FF) * transp) >> 8; |
g = ((pixel & 0x00FF00) * opacity + |
(scrpixel & 0x00FF00) * transp) >> 8; |
return (rb & 0xFF00FF) | (g & 0xFF00); |
} |
bool nsfb_plot_clip(const nsfb_bbox_t * clip, nsfb_bbox_t * rect); |
bool nsfb_plot_clip_ctx(nsfb_t *nsfb, nsfb_bbox_t * rect); |
bool nsfb_plot_clip_line(const nsfb_bbox_t * clip, nsfb_bbox_t * line); |
bool nsfb_plot_clip_line_ctx(nsfb_t *nsfb, nsfb_bbox_t * line); |
/** Obtain a bounding box which is the superset of two source boxes. |
* |
*/ |
bool nsfb_plot_add_rect(const nsfb_bbox_t *box1, const nsfb_bbox_t *box2, nsfb_bbox_t *result); |
/** Find if two boxes intersect. */ |
bool nsfb_plot_bbox_intersect(const nsfb_bbox_t *box1, const nsfb_bbox_t *box2); |
#endif /* _LIBNSFB_PLOT_UTIL_H */ |
/contrib/network/netsurf/libnsfb/include/nsfb.h |
---|
0,0 → 1,49 |
/* |
* Copyright 2009 Vincent Sanders <vince@simtec.co.uk> |
* |
* This file is part of libnsfb, http://www.netsurf-browser.org/ |
* Licenced under the MIT License, |
* http://www.opensource.org/licenses/mit-license.php |
* |
* This is the internal interface for the libnsfb graphics library. |
*/ |
#ifndef _NSFB_H |
#define _NSFB_H 1 |
#include <stdint.h> |
/** NS Framebuffer context |
*/ |
struct nsfb_s { |
int width; /**< Visible width. */ |
int height; /**< Visible height. */ |
char *parameters; |
enum nsfb_format_e format; /**< Framebuffer format */ |
int bpp; /**< Bits per pixel - distinct from format */ |
uint8_t *ptr; /**< Base of video memory. */ |
int linelen; /**< length of a video line. */ |
struct nsfb_palette_s *palette; /**< palette for index modes */ |
nsfb_cursor_t *cursor; /**< cursor */ |
struct nsfb_surface_rtns_s *surface_rtns; /**< surface routines. */ |
void *surface_priv; /**< surface opaque data. */ |
nsfb_bbox_t clip; /**< current clipping rectangle for plotters */ |
struct nsfb_plotter_fns_s *plotter_fns; /**< Plotter methods */ |
}; |
#endif |
/* |
* Local variables: |
* c-basic-offset: 4 |
* tab-width: 8 |
* End: |
*/ |
/contrib/network/netsurf/libnsfb/include/palette.h |
---|
0,0 → 1,231 |
/* |
* Copyright 2012 Michael Drake <tlsa@netsurf-browser.org> |
* |
* This file is part of libnsfb, http://www.netsurf-browser.org/ |
* Licenced under the MIT License, |
* http://www.opensource.org/licenses/mit-license.php |
* |
* This is the *internal* interface for the cursor. |
*/ |
#ifndef PALETTE_H |
#define PALETTE_H 1 |
#include <stdint.h> |
#include <limits.h> |
#include "libnsfb.h" |
#include "libnsfb_plot.h" |
enum nsfb_palette_type_e { |
NSFB_PALETTE_EMPTY, /**< empty palette object */ |
NSFB_PALETTE_NSFB_8BPP, /**< libnsfb's own 8bpp palette */ |
NSFB_PALETTE_OTHER /**< any other palette */ |
}; |
struct nsfb_palette_s { |
enum nsfb_palette_type_e type; /**< Palette type */ |
uint8_t last; /**< Last used palette index */ |
nsfb_colour_t data[256]; /**< Palette for index modes */ |
bool dither; /**< Whether to use error diffusion */ |
struct { |
int width; /**< Length of error value buffer ring*/ |
int current; /**< Current pos in ring buffer*/ |
int *data; /**< Ring buffer error values */ |
int data_len; /**< Max size of ring */ |
} dither_ctx; |
}; |
/** Create an empty palette object. */ |
bool nsfb_palette_new(struct nsfb_palette_s **palette, int width); |
/** Free a palette object. */ |
void nsfb_palette_free(struct nsfb_palette_s *palette); |
/** Init error diffusion for a plot. */ |
void nsfb_palette_dither_init(struct nsfb_palette_s *palette, int width); |
/** Finalise error diffusion after a plot. */ |
void nsfb_palette_dither_fini(struct nsfb_palette_s *palette); |
/** Generate libnsfb 8bpp default palette. */ |
void nsfb_palette_generate_nsfb_8bpp(struct nsfb_palette_s *palette); |
/** Find best palette match for given colour. */ |
static inline uint8_t nsfb_palette_best_match(struct nsfb_palette_s *palette, |
nsfb_colour_t c, int *r_error, int *g_error, int *b_error) |
{ |
uint8_t best_col = 0; |
nsfb_colour_t palent; |
int col; |
int dr, dg, db; /* delta red, green blue values */ |
int cur_distance; |
int best_distance = INT_MAX; |
switch (palette->type) { |
case NSFB_PALETTE_NSFB_8BPP: |
/* Index into colour cube part */ |
dr = ((( c & 0xFF) * 5) + 128) / 256; |
dg = ((((c >> 8) & 0xFF) * 7) + 128) / 256; |
db = ((((c >> 16) & 0xFF) * 4) + 128) / 256; |
col = 40 * dr + 5 * dg + db; |
palent = palette->data[col]; |
dr = ( c & 0xFF) - ( palent & 0xFF); |
dg = ((c >> 8) & 0xFF) - ((palent >> 8 ) & 0xFF); |
db = ((c >> 16) & 0xFF) - ((palent >> 16) & 0xFF); |
cur_distance = (dr * dr) + (dg * dg) + (db * db); |
best_col = col; |
best_distance = cur_distance; |
*r_error = dr; |
*g_error = dg; |
*b_error = db; |
/* Index into grayscale part */ |
col = (( c & 0xFF) + |
((c >> 8) & 0xFF) + |
((c >> 16) & 0xFF) + (45 / 2)) / (15 * 3) - 1 + 240; |
palent = palette->data[col]; |
dr = ( c & 0xFF) - ( palent & 0xFF); |
dg = ((c >> 8) & 0xFF) - ((palent >> 8) & 0xFF); |
db = ((c >> 16) & 0xFF) - ((palent >> 16) & 0xFF); |
cur_distance = (dr * dr) + (dg * dg) + (db * db); |
if (cur_distance < best_distance) { |
best_distance = cur_distance; |
best_col = col; |
*r_error = dr; |
*g_error = dg; |
*b_error = db; |
} |
break; |
case NSFB_PALETTE_OTHER: |
/* Try all colours in palette */ |
for (col = 0; col <= palette->last; col++) { |
palent = palette->data[col]; |
dr = ( c & 0xFF) - ( palent & 0xFF); |
dg = ((c >> 8) & 0xFF) - ((palent >> 8) & 0xFF); |
db = ((c >> 16) & 0xFF) - ((palent >> 16) & 0xFF); |
cur_distance = (dr * dr) + (dg * dg) + (db * db); |
if (cur_distance < best_distance) { |
best_distance = cur_distance; |
best_col = col; |
*r_error = dr; |
*g_error = dg; |
*b_error = db; |
} |
} |
break; |
default: |
break; |
} |
return best_col; |
} |
/** Find best palette match for given colour, with error diffusion. */ |
static inline uint8_t nsfb_palette_best_match_dither( |
struct nsfb_palette_s *palette, nsfb_colour_t c) |
{ |
int r, g, b; |
int current; |
int error; |
int width = palette->dither_ctx.width; |
uint8_t best_col_index; |
if (palette == NULL) |
return 0; |
if (palette->dither == false) |
return nsfb_palette_best_match(palette, c, &r, &g, &b); |
current = palette->dither_ctx.current; |
/* Get RGB components of colour, and apply error */ |
r = ( c & 0xFF) + palette->dither_ctx.data[current ]; |
g = ((c >> 8) & 0xFF) + palette->dither_ctx.data[current + 1]; |
b = ((c >> 16) & 0xFF) + palette->dither_ctx.data[current + 2]; |
/* Clamp new RGB components to range */ |
if (r < 0) r = 0; |
if (r > 255) r = 255; |
if (g < 0) g = 0; |
if (g > 255) g = 255; |
if (b < 0) b = 0; |
if (b > 255) b = 255; |
/* Reset error diffusion slots to 0 */ |
palette->dither_ctx.data[current ] = 0; |
palette->dither_ctx.data[current + 1] = 0; |
palette->dither_ctx.data[current + 2] = 0; |
/* Rebuild colour from modified components */ |
c = r + (g << 8) + (b << 16); |
/* Get best match for pixel, and find errors for each component */ |
best_col_index = nsfb_palette_best_match(palette, c, &r, &g, &b); |
/* Advance one set of error diffusion slots */ |
current += 3; |
if (current >= width) |
current = 0; |
palette->dither_ctx.current = current; |
/* Save errors |
* |
* [*]-[N] |
* / | \ |
* [l]-[m]-[r] |
*/ |
error = current; |
/* Error for [N] (next) */ |
if (error != 0) { |
/* The pixel exists */ |
palette->dither_ctx.data[error ] += r * 7 / 16; |
palette->dither_ctx.data[error + 1] += g * 7 / 16; |
palette->dither_ctx.data[error + 2] += b * 7 / 16; |
} |
error += width - 2 * 3; |
if (error >= width) |
error -= width; |
/* Error for [l] (below, left) */ |
if (error >= 0 && error != 3) { |
/* The pixel exists */ |
palette->dither_ctx.data[error ] += r * 3 / 16; |
palette->dither_ctx.data[error + 1] += g * 3 / 16; |
palette->dither_ctx.data[error + 2] += b * 3 / 16; |
} |
error += 3; |
if (error >= width) |
error -= width; |
/* Error for [m] (below, middle) */ |
palette->dither_ctx.data[error ] += r * 5 / 16; |
palette->dither_ctx.data[error + 1] += g * 5 / 16; |
palette->dither_ctx.data[error + 2] += b * 5 / 16; |
error += 3; |
if (error >= width) |
error -= width; |
/* Error for [r] (below, right) */ |
if (error != 0) { |
/* The pixel exists */ |
palette->dither_ctx.data[error ] += r / 16; |
palette->dither_ctx.data[error + 1] += g / 16; |
palette->dither_ctx.data[error + 2] += b / 16; |
} |
return best_col_index; |
} |
#endif /* PALETTE_H */ |
/contrib/network/netsurf/libnsfb/include/plot.h |
---|
0,0 → 1,124 |
/** Clears plotting area to a flat colour (if needed) |
*/ |
typedef bool (nsfb_plotfn_clg_t)(nsfb_t *nsfb, nsfb_colour_t c); |
/** Plots a rectangle outline. The line can be solid, dotted or |
* dashed. Top left corner at (x0,y0) and rectangle has given |
* width and height. |
*/ |
typedef bool (nsfb_plotfn_rectangle_t)(nsfb_t *nsfb, nsfb_bbox_t *rect, int line_width, nsfb_colour_t c, bool dotted, bool dashed); |
/** Plots a line using a given pen. |
*/ |
typedef bool (nsfb_plotfn_line_t)(nsfb_t *nsfb, int linec, nsfb_bbox_t *line, nsfb_plot_pen_t *pen); |
/** Plots a filled polygon with straight lines between points. |
* The lines around the edge of the ploygon are not plotted. The |
* polygon is filled with the non-zero winding rule. |
*/ |
typedef bool (nsfb_plotfn_polygon_t)(nsfb_t *nsfb, const int *p, unsigned int n, nsfb_colour_t fill); |
/** Plots a filled rectangle. Top left corner at (x0,y0), bottom |
* right corner at (x1,y1). Note: (x0,y0) is inside filled area, |
* but (x1,y1) is below and to the right. See diagram below. |
*/ |
typedef bool (nsfb_plotfn_fill_t)(nsfb_t *nsfb, nsfb_bbox_t *rect, nsfb_colour_t c); |
/** Clipping operations. |
*/ |
typedef bool (nsfb_plotfn_clip_t)(nsfb_t *nsfb, nsfb_bbox_t *clip); |
/** Plots an arc, around (x,y), from anticlockwise from angle1 to |
* angle2. Angles are measured anticlockwise from horizontal, in |
* degrees. |
*/ |
typedef bool (nsfb_plotfn_arc_t)(nsfb_t *nsfb, int x, int y, int radius, int angle1, int angle2, nsfb_colour_t c); |
/** Plots a point. |
* |
* Plot a single alpha blended pixel. |
*/ |
typedef bool (nsfb_plotfn_point_t)(nsfb_t *nsfb, int x, int y, nsfb_colour_t c); |
/** Plot an ellipse. |
* |
* plot an ellipse outline, note if teh bounding box is square this will plot a |
* circle. |
*/ |
typedef bool (nsfb_plotfn_ellipse_t)(nsfb_t *nsfb, nsfb_bbox_t *ellipse, nsfb_colour_t c); |
/** Plot a filled ellipse. |
* |
* plot a filled ellipse, note if the bounding box is square this will plot a |
* circle. |
*/ |
typedef bool (nsfb_plotfn_ellipse_fill_t)(nsfb_t *nsfb, nsfb_bbox_t *ellipse, nsfb_colour_t c); |
/** Plot bitmap |
*/ |
typedef bool (nsfb_plotfn_bitmap_t)(nsfb_t *nsfb, const nsfb_bbox_t *loc, const nsfb_colour_t *pixel, int bmp_width, int bmp_height, int bmp_stride, bool alpha); |
/** Copy an area of screen |
* |
* Copy an area of the display. |
*/ |
typedef bool (nsfb_plotfn_copy_t)(nsfb_t *nsfb, nsfb_bbox_t *srcbox, nsfb_bbox_t *dstbox); |
/** Plot an 8 bit per pixel glyph. |
*/ |
typedef bool (nsfb_plotfn_glyph8_t)(nsfb_t *nsfb, nsfb_bbox_t *loc, const uint8_t *pixel, int pitch, nsfb_colour_t c); |
/** Plot an 1 bit per pixel glyph. |
*/ |
typedef bool (nsfb_plotfn_glyph1_t)(nsfb_t *nsfb, nsfb_bbox_t *loc, const uint8_t *pixel, int pitch, nsfb_colour_t c); |
/** Read rectangle of screen into buffer |
*/ |
typedef bool (nsfb_plotfn_readrect_t)(nsfb_t *nsfb, nsfb_bbox_t *rect, nsfb_colour_t *buffer); |
/** Plot quadratic bezier spline |
*/ |
typedef bool (nsfb_plotfn_quadratic_bezier_t)(nsfb_t *nsfb, nsfb_bbox_t *curve, nsfb_point_t *ctrla, nsfb_plot_pen_t *pen); |
/** Plot cubic bezier spline |
*/ |
typedef bool (nsfb_plotfn_cubic_bezier_t)(nsfb_t *nsfb, nsfb_bbox_t *curve, nsfb_point_t *ctrla, nsfb_point_t *ctrlb, nsfb_plot_pen_t *pen); |
typedef bool (nsfb_plotfn_polylines_t)(nsfb_t *nsfb, int pointc, const nsfb_point_t *points, nsfb_plot_pen_t *pen); |
/** plot path */ |
typedef bool (nsfb_plotfn_path_t)(nsfb_t *nsfb, int pathc, nsfb_plot_pathop_t *pathop, nsfb_plot_pen_t *pen); |
/** plotter function table. */ |
typedef struct nsfb_plotter_fns_s { |
nsfb_plotfn_clg_t *clg; |
nsfb_plotfn_rectangle_t *rectangle; |
nsfb_plotfn_line_t *line; |
nsfb_plotfn_polygon_t *polygon; |
nsfb_plotfn_fill_t *fill; |
nsfb_plotfn_clip_t *get_clip; |
nsfb_plotfn_clip_t *set_clip; |
nsfb_plotfn_ellipse_t *ellipse; |
nsfb_plotfn_ellipse_fill_t *ellipse_fill; |
nsfb_plotfn_arc_t *arc; |
nsfb_plotfn_bitmap_t *bitmap; |
nsfb_plotfn_point_t *point; |
nsfb_plotfn_copy_t *copy; |
nsfb_plotfn_glyph8_t *glyph8; |
nsfb_plotfn_glyph1_t *glyph1; |
nsfb_plotfn_readrect_t *readrect; |
nsfb_plotfn_quadratic_bezier_t *quadratic; |
nsfb_plotfn_cubic_bezier_t *cubic; |
nsfb_plotfn_path_t *path; |
nsfb_plotfn_polylines_t *polylines; |
} nsfb_plotter_fns_t; |
bool select_plotters(nsfb_t *nsfb); |
/contrib/network/netsurf/libnsfb/include/surface.h |
---|
0,0 → 1,65 |
/* libnsfb framebuffer surface support */ |
#include "libnsfb.h" |
#include "libnsfb_plot.h" |
#include "nsfb.h" |
/* surface default options */ |
typedef int (nsfb_surfacefn_defaults_t)(nsfb_t *nsfb); |
/* surface init */ |
typedef int (nsfb_surfacefn_init_t)(nsfb_t *nsfb); |
/* surface finalise */ |
typedef int (nsfb_surfacefn_fini_t)(nsfb_t *nsfb); |
/* surface set geometry */ |
typedef int (nsfb_surfacefn_geometry_t)(nsfb_t *nsfb, int width, int height, enum nsfb_format_e format); |
/* surface set parameters */ |
typedef int (nsfb_surfacefn_parameters_t)(nsfb_t *nsfb, const char *parameters); |
/* surface input */ |
typedef bool (nsfb_surfacefn_input_t)(nsfb_t *nsfb, nsfb_event_t *event, int timeout); |
/* surface area claim */ |
typedef int (nsfb_surfacefn_claim_t)(nsfb_t *nsfb, nsfb_bbox_t *box); |
/* surface area update */ |
typedef int (nsfb_surfacefn_update_t)(nsfb_t *nsfb, nsfb_bbox_t *box); |
/* surface cursor display */ |
typedef int (nsfb_surfacefn_cursor_t)(nsfb_t *nsfb, struct nsfb_cursor_s *cursor); |
typedef struct nsfb_surface_rtns_s { |
nsfb_surfacefn_defaults_t *defaults; |
nsfb_surfacefn_init_t *initialise; |
nsfb_surfacefn_fini_t *finalise; |
nsfb_surfacefn_geometry_t *geometry; |
nsfb_surfacefn_parameters_t *parameters; |
nsfb_surfacefn_input_t *input; |
nsfb_surfacefn_claim_t *claim; |
nsfb_surfacefn_update_t *update; |
nsfb_surfacefn_cursor_t *cursor; |
} nsfb_surface_rtns_t; |
void _nsfb_register_surface(const enum nsfb_type_e type, const nsfb_surface_rtns_t *rtns, const char *name); |
/* macro which adds a builtin command with no argument limits */ |
#define NSFB_SURFACE_DEF(__name, __type, __rtns) \ |
static void __name##_register_surface(void) __attribute__((constructor)); \ |
void __name##_register_surface(void) { \ |
_nsfb_register_surface(__type, __rtns, #__name); \ |
} |
/** Obtain routines for a surface |
* |
* Obtain a vlist of methods for a surface type. |
* |
* @param type The surface type. |
* @return A vtable of routines which teh caller must deallocate or |
* NULL on error |
*/ |
nsfb_surface_rtns_t *nsfb_surface_get_rtns(enum nsfb_type_e type); |
/contrib/network/netsurf/libnsfb/.gitignore |
---|
0,0 → 1,2 |
build-* |
/contrib/network/netsurf/libnsfb/Makefile |
---|
0,0 → 1,93 |
# Component settings |
COMPONENT := nsfb |
COMPONENT_VERSION := 0.0.2 |
# Default to a static library |
COMPONENT_TYPE ?= lib-static |
# Setup the tooling |
PREFIX ?= /opt/netsurf |
NSSHARED ?= $(PREFIX)/share/netsurf-buildsystem |
include $(NSSHARED)/makefiles/Makefile.tools |
# Reevaluate when used, as BUILDDIR won't be defined yet |
TESTRUNNER = test/runtest.sh $(BUILDDIR) $(EXEEXT) |
# Toolchain flags |
WARNFLAGS := -Wall -Wextra -Wundef -Wpointer-arith -Wcast-align \ |
-Wwrite-strings -Wstrict-prototypes -Wmissing-prototypes \ |
-Wmissing-declarations -Wnested-externs -Werror -pedantic \ |
-Wno-overlength-strings # For nsglobe.c |
CFLAGS := -g -std=c99 -D_BSD_SOURCE -D_POSIX_C_SOURCE=200112L \ |
-I$(CURDIR)/include/ -I$(CURDIR)/src $(WARNFLAGS) $(CFLAGS) |
NSFB_XCB_PKG_NAMES := xcb xcb-icccm xcb-image xcb-keysyms xcb-atom |
$(eval $(call pkg_config_package_available,NSFB_VNC_AVAILABLE,libvncserver)) |
$(eval $(call pkg_config_package_available,NSFB_SDL_AVAILABLE,sdl)) |
$(eval $(call pkg_config_package_available,NSFB_XCB_AVAILABLE,$(NSFB_XCB_PKG_NAMES))) |
ifeq ($(NSFB_SDL_AVAILABLE),yes) |
$(eval $(call pkg_config_package_add_flags,sdl,CFLAGS)) |
$(eval $(call pkg_config_package_add_flags,sdl,TESTCFLAGS,TESTLDFLAGS)) |
REQUIRED_PKGS := $(REQUIRED_PKGS) sdl |
endif |
ifeq ($(NSFB_XCB_AVAILABLE),yes) |
# Size hint allocators were removed in xcb-icccm 0.3.0 |
$(eval $(call pkg_config_package_min_version,NSFB_XCB_ICCCM_SIZE_HINTS,xcb-icccm,0.3.0)) |
ifeq ($(NSFB_XCB_ICCCM_SIZE_HINTS),yes) |
CFLAGS := $(CFLAGS) -DNSFB_NEED_HINTS_ALLOC |
endif |
# xcb-icccm 0.3.8 introduced an additional "icccm_" in function names |
$(eval $(call pkg_config_package_min_version,NSFB_XCB_ICCCM_API_PREFIX,xcb-icccm,0.3.8)) |
ifeq ($(NSFB_XCB_ICCCM_API_PREFIX),yes) |
CFLAGS := $(CFLAGS) -DNSFB_NEED_ICCCM_API_PREFIX |
endif |
# xcbproto 1.6 incorporated atoms previously found in xcb_atom |
# However, libxcb <1.3 did not report xcbproto versions. Assume xcbproto 1.5 in this case. |
$(eval $(call pkg_config_package_min_version,NSFB_HAVE_MODERN_XCB,xcb,1.3)) |
ifeq ($(NSFB_HAVE_MODERN_XCB),yes) |
$(eval $(call pkg_config_get_variable,NSFB_XCBPROTO_VERSION,xcb,xcbproto_version)) |
NSFB_XCBPROTO_MAJOR_VERSION := $(word 1,$(subst ., ,$(NSFB_XCBPROTO_VERSION))) |
NSFB_XCBPROTO_MINOR_VERSION := $(word 2,$(subst ., ,$(NSFB_XCBPROTO_VERSION))) |
CFLAGS := $(CFLAGS) -DNSFB_XCBPROTO_MAJOR_VERSION=$(NSFB_XCBPROTO_MAJOR_VERSION) |
CFLAGS := $(CFLAGS) -DNSFB_XCBPROTO_MINOR_VERSION=$(NSFB_XCBPROTO_MINOR_VERSION) |
else |
CFLAGS := $(CFLAGS) -DNSFB_XCBPROTO_MAJOR_VERSION=1 |
CFLAGS := $(CFLAGS) -DNSFB_XCBPROTO_MINOR_VERSION=5 |
endif |
$(eval $(call pkg_config_package_add_flags,$(NSFB_XCB_PKG_NAMES),CFLAGS)) |
$(eval $(call pkg_config_package_add_flags,$(NSFB_XCB_PKG_NAMES),TESTCFLAGS,TESTLDFLAGS)) |
REQUIRED_PKGS := $(REQUIRED_PKGS) $(NSFB_XCB_PKG_NAMES) |
$(eval $(call pkg_config_package_available,NSFB_XCB_UTIL_AVAILABLE,xcb-util)) |
ifeq ($(NSFB_XCB_UTIL_AVAILABLE),yes) |
REQUIRED_PKGS := $(REQUIRED_PKGS) xcb-util |
endif |
endif |
ifeq ($(NSFB_VNC_AVAILABLE),yes) |
$(eval $(call pkg_config_package_add_flags,libvncserver,CFLAGS)) |
$(eval $(call pkg_config_package_add_flags,libvncserver,TESTCFLAGS,TESTLDFLAGS)) |
REQUIRED_PKGS := $(REQUIRED_PKGS) libvncserver |
endif |
TESTLDFLAGS := -lm -Wl,--whole-archive -l$(COMPONENT) -Wl,--no-whole-archive $(TESTLDFLAGS) |
include $(NSBUILD)/Makefile.top |
# Extra installation rules |
I := /include |
INSTALL_ITEMS := $(INSTALL_ITEMS) $(I):include/libnsfb.h |
INSTALL_ITEMS := $(INSTALL_ITEMS) $(I):include/libnsfb_plot.h |
INSTALL_ITEMS := $(INSTALL_ITEMS) $(I):include/libnsfb_plot_util.h |
INSTALL_ITEMS := $(INSTALL_ITEMS) $(I):include/libnsfb_event.h |
INSTALL_ITEMS := $(INSTALL_ITEMS) $(I):include/libnsfb_cursor.h |
INSTALL_ITEMS := $(INSTALL_ITEMS) /lib/pkgconfig:lib$(COMPONENT).pc.in |
INSTALL_ITEMS := $(INSTALL_ITEMS) /lib:$(OUTPUT) |
/contrib/network/netsurf/libnsfb/NOTE |
---|
0,0 → 1,5 |
extern nsfb_surface_rtns_t sdl_rtns; |
_nsfb_register_surface(NSFB_SURFACE_SDL, &sdl_rtns, "sdl"); |
NSFB_SURFACE_RAM IS NEEDED TOO |
/contrib/network/netsurf/libnsfb/libnsfb.pc.in |
---|
0,0 → 1,11 |
prefix=PREFIX |
exec_prefix=${prefix} |
libdir=${exec_prefix}/lib |
includedir=${prefix}/include |
Name: libnsfb |
Description: Provides framebuffer access for netsurf. |
Version: VERSION |
REQUIRED |
Libs: -L${libdir} -lnsfb |
Cflags: -I${includedir} |
/contrib/network/netsurf/libnsfb/test/Makefile |
---|
0,0 → 1,9 |
# Sources |
OBJS := bitmap.o nsglobe.o |
OUTFILE = bitmap |
CFLAGS += -I ../../include/ -I ../../ -I ../ -I ./ -I /home/sourcerer/kos_src/newenginek/kolibri/include -I /home/sourcerer/kos_src/me/include/SDL/ |
LIBS += -L /home/sourcerer/kos_src/newenginek/kolibri/lib -lm --whole-archive -lnsfb --no-whole-archive -lSDL |
include $(MENUETDEV)/makefiles/Makefile_for_program |
/contrib/network/netsurf/libnsfb/test/bezier |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/contrib/network/netsurf/libnsfb/test/bezier.c |
---|
0,0 → 1,175 |
/* libnsfb plotetr test program */ |
#include <stdio.h> |
#include <stdbool.h> |
#include <stdlib.h> |
#include "libnsfb.h" |
#include "libnsfb_plot.h" |
#include "libnsfb_event.h" |
#include "surface.h" |
//#include "../src/surface/sdl.c" |
#define UNUSED(x) ((x) = (x)) |
#include <menuet/os.h> |
int main(int argc, char **argv) |
{ |
extern nsfb_surface_rtns_t sdl_rtns; |
_nsfb_register_surface(NSFB_SURFACE_SDL, &sdl_rtns, "sdl"); |
__menuet__debug_out("Starting bezier\n"); |
freopen("stderr","w",stderr); |
freopen("stdout","w",stdout); |
const char *fename; |
enum nsfb_type_e fetype; |
nsfb_t *nsfb; |
nsfb_event_t event; |
int waitloop = 3; |
nsfb_bbox_t box; |
nsfb_bbox_t box2; |
uint8_t *fbptr; |
int fbstride; |
nsfb_point_t ctrla; |
nsfb_point_t ctrlb; |
int loop; |
nsfb_plot_pen_t pen; |
if (argc < 2) { |
fename="sdl"; |
} else { |
fename = argv[1]; |
} |
fetype = nsfb_type_from_name(fename); |
if (fetype == NSFB_SURFACE_NONE) { |
__menuet__debug_out("Can't convert\n"); |
fprintf(stderr, "Unable to convert \"%s\" to nsfb surface type\n", fename); |
return 1; |
} |
nsfb = nsfb_new(fetype); |
if (nsfb == NULL) { |
__menuet__debug_out("Can't allocate\n"); |
fprintf(stderr, "Unable to allocate \"%s\" nsfb surface\n", fename); |
return 2; |
} |
if (nsfb_init(nsfb) == -1) { |
__menuet__debug_out("Init failed\n"); |
fprintf(stderr, "Unable to initialise nsfb surface\n"); |
nsfb_free(nsfb); |
return 4; |
} |
/* get the geometry of the whole screen */ |
box.x0 = box.y0 = 0; |
nsfb_get_geometry(nsfb, &box.x1, &box.y1, NULL); |
nsfb_get_buffer(nsfb, &fbptr, &fbstride); |
/* claim the whole screen for update */ |
nsfb_claim(nsfb, &box); |
nsfb_plot_clg(nsfb, 0xffffffff); |
box2.x0=100; |
box2.y0=100; |
box2.x1=400; |
box2.y1=400; |
pen.stroke_colour = 0xff000000; |
pen.fill_colour = 0xffff0000; |
pen.stroke_type = NFSB_PLOT_OPTYPE_SOLID; |
pen.fill_type = NFSB_PLOT_OPTYPE_NONE; |
for (loop=-300;loop < 600;loop+=100) { |
ctrla.x = 100; |
ctrla.y = loop; |
ctrlb.x = 400; |
ctrlb.y = 500 - loop; |
nsfb_plot_cubic_bezier(nsfb, &box2, &ctrla, &ctrlb, &pen); |
} |
box2.x0=400; |
box2.y0=100; |
box2.x1=600; |
box2.y1=400; |
nsfb_plot_line(nsfb, &box2, &pen); |
box2.x0=800; |
box2.y0=100; |
box2.x1=600; |
box2.y1=400; |
nsfb_plot_line(nsfb, &box2, &pen); |
box2.x0=400; |
box2.y0=100; |
box2.x1=800; |
box2.y1=100; |
ctrla.x = 600; |
ctrla.y = 400; |
pen.stroke_colour = 0xffff0000; |
nsfb_plot_cubic_bezier(nsfb, &box2, &ctrla, &ctrla, &pen); |
box2.x0=400; |
box2.y0=100; |
box2.x1=800; |
box2.y1=100; |
ctrla.x = 600; |
ctrla.y = 400; |
pen.stroke_colour = 0xff0000ff; |
nsfb_plot_quadratic_bezier(nsfb, &box2, &ctrla, &pen); |
nsfb_update(nsfb, &box); |
/* wait for quit event or timeout */ |
while (waitloop > 0) { |
if (nsfb_event(nsfb, &event, 1000) == false) { |
break; |
} |
if (event.type == NSFB_EVENT_CONTROL) { |
if (event.value.controlcode == NSFB_CONTROL_TIMEOUT) { |
/* timeout */ |
waitloop--; |
} else if (event.value.controlcode == NSFB_CONTROL_QUIT) { |
break; |
} |
} |
} |
nsfb_free(nsfb); |
return 0; |
} |
/* |
* Local variables: |
* c-basic-offset: 4 |
* tab-width: 8 |
* End: |
*/ |
/contrib/network/netsurf/libnsfb/test/bezier.map |
---|
0,0 → 1,1602 |
Archive member included because of file (symbol) |
/home/sourcerer/kos_src/me//lib/libnsfb.a(cursor.o) |
(--whole-archive) |
/home/sourcerer/kos_src/me//lib/libnsfb.a(dump.o) |
(--whole-archive) |
/home/sourcerer/kos_src/me//lib/libnsfb.a(libnsfb.o) |
(--whole-archive) |
/home/sourcerer/kos_src/me//lib/libnsfb.a(palette.o) |
(--whole-archive) |
/home/sourcerer/kos_src/me//lib/libnsfb.a(16bpp.o) |
(--whole-archive) |
/home/sourcerer/kos_src/me//lib/libnsfb.a(32bpp-xbgr8888.o) |
(--whole-archive) |
/home/sourcerer/kos_src/me//lib/libnsfb.a(32bpp-xrgb8888.o) |
(--whole-archive) |
/home/sourcerer/kos_src/me//lib/libnsfb.a(8bpp.o) |
(--whole-archive) |
/home/sourcerer/kos_src/me//lib/libnsfb.a(api.o) |
(--whole-archive) |
/home/sourcerer/kos_src/me//lib/libnsfb.a(generic.o) |
(--whole-archive) |
/home/sourcerer/kos_src/me//lib/libnsfb.a(util.o) |
(--whole-archive) |
/home/sourcerer/kos_src/me//lib/libnsfb.a(able.o) |
(--whole-archive) |
/home/sourcerer/kos_src/me//lib/libnsfb.a(linux.o) |
(--whole-archive) |
/home/sourcerer/kos_src/me//lib/libnsfb.a(ram.o) |
(--whole-archive) |
/home/sourcerer/kos_src/me//lib/libnsfb.a(sdl.o) |
(--whole-archive) |
/home/sourcerer/kos_src/me//lib/libnsfb.a(surface.o) |
(--whole-archive) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_timer.o) |
/home/sourcerer/kos_src/me//lib/libnsfb.a(sdl.o) (SDL_RemoveTimer) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_systimer.o) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_timer.o) (SDL_GetTicks) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_events.o) |
/home/sourcerer/kos_src/me//lib/libnsfb.a(sdl.o) (SDL_PushEvent) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_keyboard.o) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_events.o) (SDL_CheckKeyRepeat) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_mouse.o) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_events.o) (SDL_MouseInit) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_quit.o) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_events.o) (SDL_QuitInit) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_cursor.o) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_mouse.o) (SDL_MoveCursor) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_pixels.o) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_cursor.o) (SDL_MapRGB) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_RLEaccel.o) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_pixels.o) (SDL_UnRLESurface) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_surface.o) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_cursor.o) (SDL_LockSurface) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_video.o) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_events.o) (current_video) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_menuetvideo.o) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_video.o) (mosvideo_bootstrab) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL.o) |
/home/sourcerer/kos_src/me//lib/libnsfb.a(sdl.o) (SDL_Quit) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_error.o) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL.o) (SDL_ClearError) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_fatal.o) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL.o) (SDL_InstallParachute) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_getenv.o) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL.o) (SDL_getenv) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_kolibri_audio.o) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL.o) (SDL_AudioQuit) |
/home/sourcerer/kos_src/me//lib/libSDL.a(init.o) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_kolibri_audio.o) (InitSound) |
/home/sourcerer/kos_src/me//lib/libSDL.a(setbuf.o) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_kolibri_audio.o) (SetBuffer) |
/home/sourcerer/kos_src/me//lib/libSDL.a(stopbuf.o) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_kolibri_audio.o) (StopBuffer) |
/home/sourcerer/kos_src/me//lib/libSDL.a(sndgetsize.o) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_kolibri_audio.o) (GetBufferSize) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_sysmutex.o) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_timer.o) (SDL_mutexP) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_syssem.o) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_sysmutex.o) (SDL_DestroySemaphore) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_systhread.o) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_events.o) (SDL_ThreadID) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_thread.o) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_events.o) (SDL_WaitThread) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_active.o) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_events.o) (SDL_AppActiveInit) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_resize.o) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_video.o) (SDL_PrivateResize) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_blit.o) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_pixels.o) (SDL_CalculateBlit) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_blit_N.o) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_blit.o) (SDL_CalculateBlitN) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_menuetevents.o) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_menuetvideo.o) (MenuetOS_InitOSKeymap) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_blit_0.o) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_blit.o) (SDL_CalculateBlit0) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_blit_1.o) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_blit.o) (SDL_CalculateBlit1) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_blit_A.o) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_blit_N.o) (SDL_CalculateAlphaBlit) |
/home/sourcerer/kos_src/me//lib/libc.a(dup.o) |
/home/sourcerer/kos_src/me//lib/libnsfb.a(dump.o) (dup) |
/home/sourcerer/kos_src/me//lib/libc.a(fdopen.o) |
/home/sourcerer/kos_src/me//lib/libnsfb.a(dump.o) (fdopen) |
/home/sourcerer/kos_src/me//lib/libc.a(debug.o) |
bezier.o (__menuet__debug_out) |
/home/sourcerer/kos_src/me//lib/libc.a(window.o) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_menuetvideo.o) (__menuet__define_window) |
/home/sourcerer/kos_src/me//lib/libc.a(param.o) |
/home/sourcerer/kos_src/me//stub/crt0.o (__menuet__app_param_area) |
/home/sourcerer/kos_src/me//lib/libc.a(keyb.o) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_menuetevents.o) (__menuet__getkey) |
/home/sourcerer/kos_src/me//lib/libc.a(image.o) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_menuetvideo.o) (__menuet__putimage) |
/home/sourcerer/kos_src/me//lib/libc.a(exit.o) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_kolibri_audio.o) (__menuet__sys_exit) |
/home/sourcerer/kos_src/me//lib/libc.a(event.o) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_menuetevents.o) (__menuet__check_for_event) |
/home/sourcerer/kos_src/me//lib/libc.a(delay.o) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_systimer.o) (__menuet__delay100) |
/home/sourcerer/kos_src/me//lib/libc.a(button.o) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_menuetevents.o) (__menuet__get_button_id) |
/home/sourcerer/kos_src/me//lib/libc.a(setmode.o) |
/home/sourcerer/kos_src/me//lib/libc.a(fdopen.o) (__setmode) |
/home/sourcerer/kos_src/me//lib/libc.a(fmode.o) |
/home/sourcerer/kos_src/me//lib/libc.a(fdopen.o) (_fmode) |
/home/sourcerer/kos_src/me//lib/libc.a(crt1.o) |
/home/sourcerer/kos_src/me//stub/crt0.o (__crt1_startup) |
/home/sourcerer/kos_src/me//lib/libc.a(crt0.o) |
/home/sourcerer/kos_src/me//lib/libc.a(crt1.o) (__crt0_setup_arguments) |
/home/sourcerer/kos_src/me//lib/libc.a(brk.o) |
/home/sourcerer/kos_src/me//lib/libc.a(crt1.o) (init_brk) |
/home/sourcerer/kos_src/me//lib/libc.a(strdup.o) |
/home/sourcerer/kos_src/me//lib/libnsfb.a(libnsfb.o) (strdup) |
/home/sourcerer/kos_src/me//lib/libc.a(memset.o) |
/home/sourcerer/kos_src/me//lib/libnsfb.a(palette.o) (memset) |
/home/sourcerer/kos_src/me//lib/libc.a(memmove.o) |
/home/sourcerer/kos_src/me//lib/libnsfb.a(generic.o) (memmove) |
/home/sourcerer/kos_src/me//lib/libc.a(strncpy.o) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_video.o) (strncpy) |
/home/sourcerer/kos_src/me//lib/libc.a(strncmp.o) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_video.o) (strncmp) |
/home/sourcerer/kos_src/me//lib/libc.a(strlen.o) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_video.o) (strlen) |
/home/sourcerer/kos_src/me//lib/libc.a(strcpy.o) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_video.o) (strcpy) |
/home/sourcerer/kos_src/me//lib/libc.a(strcmp.o) |
/home/sourcerer/kos_src/me//lib/libnsfb.a(surface.o) (strcmp) |
/home/sourcerer/kos_src/me//lib/libc.a(memcpy.o) |
/home/sourcerer/kos_src/me//lib/libnsfb.a(generic.o) (memcpy) |
/home/sourcerer/kos_src/me//lib/libc.a(memcmp.o) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_pixels.o) (memcmp) |
/home/sourcerer/kos_src/me//lib/libc.a(malloc.o) |
/home/sourcerer/kos_src/me//lib/libnsfb.a(libnsfb.o) (free) |
/home/sourcerer/kos_src/me//lib/libc.a(exit.o) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_fatal.o) (exit) |
/home/sourcerer/kos_src/me//lib/libc.a(calloc.o) |
/home/sourcerer/kos_src/me//lib/libnsfb.a(cursor.o) (calloc) |
/home/sourcerer/kos_src/me//lib/libc.a(abs.o) |
/home/sourcerer/kos_src/me//lib/libnsfb.a(16bpp.o) (abs) |
/home/sourcerer/kos_src/me//lib/libc.a(vsprintf.o) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_error.o) (vsprintf) |
/home/sourcerer/kos_src/me//lib/libc.a(stdout.o) |
bezier.o (__dj_stdout) |
/home/sourcerer/kos_src/me//lib/libc.a(stdiohk.o) |
/home/sourcerer/kos_src/me//lib/libc.a(stdout.o) (__stdio_cleanup_proc) |
/home/sourcerer/kos_src/me//lib/libc.a(stderr.o) |
bezier.o (__dj_stderr) |
/home/sourcerer/kos_src/me//lib/libc.a(sprintf.o) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_error.o) (sprintf) |
/home/sourcerer/kos_src/me//lib/libc.a(fwalk.o) |
/home/sourcerer/kos_src/me//lib/libc.a(stdiohk.o) (_fwalk) |
/home/sourcerer/kos_src/me//lib/libc.a(frlist.o) |
/home/sourcerer/kos_src/me//lib/libc.a(fwalk.o) (__file_rec_list) |
/home/sourcerer/kos_src/me//lib/libc.a(freopen.o) |
bezier.o (freopen) |
/home/sourcerer/kos_src/me//lib/libc.a(fprintf.o) |
bezier.o (fprintf) |
/home/sourcerer/kos_src/me//lib/libc.a(fflush.o) |
/home/sourcerer/kos_src/me//lib/libc.a(stdiohk.o) (fflush) |
/home/sourcerer/kos_src/me//lib/libc.a(fclose.o) |
/home/sourcerer/kos_src/me//lib/libnsfb.a(dump.o) (fclose) |
/home/sourcerer/kos_src/me//lib/libc.a(doprnt.o) |
/home/sourcerer/kos_src/me//lib/libc.a(vsprintf.o) (_doprnt) |
/home/sourcerer/kos_src/me//lib/libc.a(allocfil.o) |
/home/sourcerer/kos_src/me//lib/libc.a(fdopen.o) (__alloc_file) |
/home/sourcerer/kos_src/me//lib/libc.a(modfl.o) |
/home/sourcerer/kos_src/me//lib/libc.a(doprnt.o) (__modfl) |
/home/sourcerer/kos_src/me//lib/libc.a(lconv.o) |
/home/sourcerer/kos_src/me//lib/libc.a(doprnt.o) (localeconv) |
/home/sourcerer/kos_src/me//lib/libc.a(errno.o) |
/home/sourcerer/kos_src/me//lib/libc.a(brk.o) (errno) |
/home/sourcerer/kos_src/me//lib/libc.a(ct_flags.o) |
/home/sourcerer/kos_src/me//lib/libc.a(doprnt.o) (__dj_ctype_flags) |
/home/sourcerer/kos_src/me//lib/libc.a(debug.o) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_fatal.o) (__libclog_vprintf) |
/home/sourcerer/kos_src/me//lib/libc.a(write.o) |
/home/sourcerer/kos_src/me//lib/libc.a(fflush.o) (write) |
/home/sourcerer/kos_src/me//lib/libc.a(lseek.o) |
/home/sourcerer/kos_src/me//lib/libc.a(fdopen.o) (lseek) |
/home/sourcerer/kos_src/me//lib/libc.a(close.o) |
/home/sourcerer/kos_src/me//lib/libc.a(fclose.o) (close) |
/home/sourcerer/kos_src/me//lib/libc.a(open.o) |
/home/sourcerer/kos_src/me//lib/libc.a(freopen.o) (open) |
/home/sourcerer/kos_src/me//lib/libc.a(emu_init.o) |
/home/sourcerer/kos_src/me//lib/libc.a(crt1.o) (dosemu_inithandles) |
/home/sourcerer/kos_src/me//lib/libc.a(dosemu.o) |
/home/sourcerer/kos_src/me//lib/libc.a(lseek.o) (dosemu_lseek) |
/home/sourcerer/kos_src/me//lib/libc.a(_main.o) |
/home/sourcerer/kos_src/me//lib/libc.a(crt1.o) (__main) |
/home/sourcerer/kos_src/me//lib/libc.a(strrchr.o) |
/home/sourcerer/kos_src/me//lib/libc.a(emu_init.o) (strrchr) |
/home/sourcerer/kos_src/me//lib/libc.a(memchr.o) |
/home/sourcerer/kos_src/me//lib/libc.a(doprnt.o) (memchr) |
/home/sourcerer/kos_src/me//lib/libc.a(stdin.o) |
/home/sourcerer/kos_src/me//lib/libc.a(frlist.o) (__dj_stdin) |
/home/sourcerer/kos_src/me//lib/libc.a(remove.o) |
/home/sourcerer/kos_src/me//lib/libc.a(fclose.o) (remove) |
/home/sourcerer/kos_src/me//lib/libc.a(putc.o) |
/home/sourcerer/kos_src/me//lib/libc.a(doprnt.o) (putc) |
/home/sourcerer/kos_src/me//lib/libc.a(fputc.o) |
/home/sourcerer/kos_src/me//lib/libc.a(putc.o) (fputc) |
/home/sourcerer/kos_src/me//lib/libc.a(flsbuf.o) |
/home/sourcerer/kos_src/me//lib/libc.a(doprnt.o) (_flsbuf) |
/home/sourcerer/kos_src/me//lib/libc.a(hooks.o) |
/home/sourcerer/kos_src/me//lib/libc.a(fputc.o) (__libc_write_termios_hook) |
/home/sourcerer/kos_src/me//lib/libc.a(fixpath.o) |
/home/sourcerer/kos_src/me//lib/libc.a(dosemu.o) (_fixpath) |
/home/sourcerer/kos_src/me//lib/libc.a(systree.o) |
/home/sourcerer/kos_src/me//lib/libc.a(remove.o) (__kolibri__system_tree_access2) |
/home/sourcerer/kos_src/me//lib/libc.a(dosio.o) |
/home/sourcerer/kos_src/me//lib/libc.a(fputc.o) (__file_handle_modes) |
/home/sourcerer/kos_src/me//lib/libc.a(curdir.o) |
/home/sourcerer/kos_src/me//lib/libc.a(fixpath.o) (__libc_combine_path) |
Memory Configuration |
Name Origin Length Attributes |
*default* 0x0000000000000000 0xffffffffffffffff |
Linker script and memory map |
.text 0x0000000000000000 0x23a48 |
0x0000000000000000 code = . |
0x0000000000000000 _code = . |
*(.text) |
.text 0x0000000000000000 0x24 /home/sourcerer/kos_src/me//stub/crt0.o |
0x0000000000000000 __menuet__app_header |
0x0000000000000000 start |
0x0000000000000014 __menuet__memsize |
.text 0x0000000000000024 0x0 bezier.o |
.text 0x0000000000000024 0x2a4 /home/sourcerer/kos_src/me//lib/libnsfb.a(cursor.o) |
0x0000000000000024 nsfb_cursor_init |
0x000000000000006f nsfb_cursor_set |
0x00000000000000da nsfb_cursor_loc_set |
0x000000000000011c nsfb_cursor_loc_get |
0x0000000000000145 nsfb_cursor_plot |
0x000000000000026a nsfb_cursor_clear |
.text 0x00000000000002c8 0xbd /home/sourcerer/kos_src/me//lib/libnsfb.a(dump.o) |
0x00000000000002c8 nsfb_dump |
*fill* 0x0000000000000385 0x3 00 |
.text 0x0000000000000388 0x1a9 /home/sourcerer/kos_src/me//lib/libnsfb.a(libnsfb.o) |
0x0000000000000388 nsfb_new |
0x00000000000003d6 nsfb_init |
0x00000000000003e5 nsfb_free |
0x000000000000041f nsfb_event |
0x000000000000042e nsfb_claim |
0x000000000000043d nsfb_update |
0x000000000000044c nsfb_set_geometry |
0x0000000000000488 nsfb_set_parameters |
0x00000000000004dc nsfb_get_geometry |
0x000000000000050d nsfb_get_buffer |
*fill* 0x0000000000000531 0x3 00 |
.text 0x0000000000000534 0x1ca /home/sourcerer/kos_src/me//lib/libnsfb.a(palette.o) |
0x0000000000000534 nsfb_palette_free |
0x0000000000000567 nsfb_palette_new |
0x00000000000005e0 nsfb_palette_dither_init |
0x0000000000000623 nsfb_palette_dither_fini |
0x0000000000000635 nsfb_palette_generate_nsfb_8bpp |
*fill* 0x00000000000006fe 0x2 00 |
.text 0x0000000000000700 0x9df /home/sourcerer/kos_src/me//lib/libnsfb.a(16bpp.o) |
*fill* 0x00000000000010df 0x1 00 |
.text 0x00000000000010e0 0x894 /home/sourcerer/kos_src/me//lib/libnsfb.a(32bpp-xbgr8888.o) |
.text 0x0000000000001974 0x96e /home/sourcerer/kos_src/me//lib/libnsfb.a(32bpp-xrgb8888.o) |
*fill* 0x00000000000022e2 0x2 00 |
.text 0x00000000000022e4 0xcfb /home/sourcerer/kos_src/me//lib/libnsfb.a(8bpp.o) |
*fill* 0x0000000000002fdf 0x1 00 |
.text 0x0000000000002fe0 0x1b6 /home/sourcerer/kos_src/me//lib/libnsfb.a(api.o) |
0x0000000000002fe0 nsfb_plot_set_clip |
0x0000000000002fef nsfb_plot_get_clip |
0x0000000000002ffe nsfb_plot_clg |
0x000000000000300c nsfb_plot_rectangle |
0x000000000000301b nsfb_plot_rectangle_fill |
0x000000000000302a nsfb_plot_line |
0x0000000000003044 nsfb_plot_lines |
0x0000000000003053 nsfb_plot_polylines |
0x0000000000003062 nsfb_plot_polygon |
0x0000000000003071 nsfb_plot_arc |
0x0000000000003080 nsfb_plot_point |
0x000000000000308f nsfb_plot_ellipse |
0x000000000000309e nsfb_plot_ellipse_fill |
0x00000000000030ad nsfb_plot_copy |
0x000000000000312d nsfb_plot_bitmap |
0x000000000000313c nsfb_plot_glyph8 |
0x000000000000314b nsfb_plot_glyph1 |
0x000000000000315a nsfb_plot_readrect |
0x0000000000003169 nsfb_plot_cubic_bezier |
0x0000000000003178 nsfb_plot_quadratic_bezier |
0x0000000000003187 nsfb_plot_path |
*fill* 0x0000000000003196 0x2 00 |
.text 0x0000000000003198 0x10d5 /home/sourcerer/kos_src/me//lib/libnsfb.a(generic.o) |
0x0000000000004165 select_plotters |
*fill* 0x000000000000426d 0x3 00 |
.text 0x0000000000004270 0x466 /home/sourcerer/kos_src/me//lib/libnsfb.a(util.o) |
0x0000000000004270 nsfb_plot_clip |
0x000000000000439c nsfb_plot_clip_ctx |
0x00000000000043ae nsfb_plot_clip_line |
0x0000000000004638 nsfb_plot_clip_line_ctx |
0x000000000000464a nsfb_plot_add_rect |
0x00000000000046a5 nsfb_plot_bbox_intersect |
*fill* 0x00000000000046d6 0x2 00 |
.text 0x00000000000046d8 0x3b /home/sourcerer/kos_src/me//lib/libnsfb.a(able.o) |
*fill* 0x0000000000004713 0x1 00 |
.text 0x0000000000004714 0x36 /home/sourcerer/kos_src/me//lib/libnsfb.a(linux.o) |
*fill* 0x000000000000474a 0x2 00 |
.text 0x000000000000474c 0x112 /home/sourcerer/kos_src/me//lib/libnsfb.a(ram.o) |
*fill* 0x000000000000485e 0x2 00 |
.text 0x0000000000004860 0x579 /home/sourcerer/kos_src/me//lib/libnsfb.a(sdl.o) |
*fill* 0x0000000000004dd9 0x3 00 |
.text 0x0000000000004ddc 0x169 /home/sourcerer/kos_src/me//lib/libnsfb.a(surface.o) |
0x0000000000004e1f _nsfb_register_surface |
0x0000000000004e52 nsfb_surface_get_rtns |
0x0000000000004f08 nsfb_type_from_name |
*fill* 0x0000000000004f45 0x3 00 |
.text 0x0000000000004f48 0x3fd /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_timer.o) |
0x0000000000004f54 SDL_RemoveTimer |
0x0000000000004fcd SDL_SetTimerThreaded |
0x0000000000004ffd SDL_AddTimer |
0x00000000000050ca SDL_SetTimer |
0x0000000000005194 SDL_ThreadedTimerCheck |
0x00000000000052a2 SDL_TimerQuit |
0x00000000000052f2 SDL_TimerInit |
*fill* 0x0000000000005345 0x3 00 |
.text 0x0000000000005348 0x67 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_systimer.o) |
0x0000000000005348 SDL_StartTicks |
0x0000000000005360 SDL_GetTicks |
0x000000000000537c SDL_SYS_TimerInit |
0x0000000000005383 SDL_SYS_TimerQuit |
0x0000000000005388 SDL_SYS_StartTimer |
0x000000000000538f SDL_SYS_StopTimer |
0x0000000000005394 SDL_Delay |
*fill* 0x00000000000053af 0x1 00 |
.text 0x00000000000053b0 0x682 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_events.o) |
0x00000000000053b0 SDL_EventThreadID |
0x00000000000053ba SDL_GetEventFilter |
0x00000000000053c4 SDL_PumpEvents |
0x00000000000053f1 SDL_PeepEvents |
0x0000000000005611 SDL_PushEvent |
0x0000000000005627 SDL_PrivateSysWMEvent |
0x0000000000005685 SDL_WaitEvent |
0x00000000000056cf SDL_PollEvent |
0x00000000000056ea SDL_EventState |
0x000000000000579e SDL_SetEventFilter |
0x00000000000057c5 SDL_Unlock_EventThread |
0x00000000000057f4 SDL_Lock_EventThread |
0x00000000000058d4 SDL_StopEventLoop |
0x0000000000005941 SDL_StartEventLoop |
*fill* 0x0000000000005a32 0x2 00 |
.text 0x0000000000005a34 0xc2f /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_keyboard.o) |
0x0000000000005a34 SDL_EnableUNICODE |
0x0000000000005a4b SDL_GetKeyState |
0x0000000000005a62 SDL_GetModState |
0x0000000000005a6c SDL_SetModState |
0x0000000000005a79 SDL_GetKeyName |
0x0000000000005a98 SDL_CheckKeyRepeat |
0x0000000000005a9d SDL_EnableKeyRepeat |
0x0000000000005ae9 SDL_KeyboardInit |
0x0000000000006446 SDL_PrivateKeyboard |
0x0000000000006611 SDL_ResetKeyboard |
*fill* 0x0000000000006663 0x1 00 |
.text 0x0000000000006664 0x3fb /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_mouse.o) |
0x0000000000006664 SDL_MouseInit |
0x0000000000006696 SDL_GetMouseState |
0x00000000000066c0 SDL_GetRelativeMouseState |
0x0000000000006747 SDL_PrivateMouseButton |
0x00000000000068d5 SDL_PrivateMouseMotion |
*fill* 0x0000000000006a5f 0x1 00 |
.text 0x0000000000006a60 0x4d /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_quit.o) |
0x0000000000006a60 SDL_QuitInit |
0x0000000000006a67 SDL_PrivateQuit |
*fill* 0x0000000000006aad 0x3 00 |
.text 0x0000000000006ab0 0xfb3 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_cursor.o) |
0x0000000000006ab0 SDL_GetCursor |
0x0000000000006aba SDL_CursorPaletteChanged |
0x0000000000006ac9 SDL_MouseRect |
0x0000000000006b5a SDL_ResetCursor |
0x0000000000006b93 SDL_EraseCursorNoLock |
0x0000000000006cf9 SDL_EraseCursor |
0x0000000000006d86 SDL_DrawCursorNoLock |
0x00000000000073fa SDL_DrawCursor |
0x0000000000007487 SDL_MoveCursor |
0x0000000000007526 SDL_WarpMouse |
0x000000000000758f SDL_SetCursor |
0x00000000000076f9 SDL_ShowCursor |
0x0000000000007792 SDL_FreeCursor |
0x0000000000007818 SDL_CreateCursor |
0x0000000000007990 SDL_CursorInit |
0x00000000000079e7 SDL_CursorQuit |
*fill* 0x0000000000007a63 0x1 00 |
.text 0x0000000000007a64 0xc8e /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_pixels.o) |
0x0000000000007a64 SDL_DitherColors |
0x0000000000007ad1 SDL_CalculatePitch |
0x0000000000007b0a SDL_FindColor |
0x0000000000007b82 SDL_MapRGB |
0x0000000000007bf4 SDL_MapRGBA |
0x0000000000007c82 SDL_GetRGBA |
0x0000000000007d95 SDL_GetRGB |
0x0000000000007e59 SDL_ApplyGamma |
0x0000000000007eab SDL_InvalidateMap |
0x0000000000007ee5 SDL_FormatChanged |
0x0000000000007efd SDL_FreeBlitMap |
0x0000000000007f3b SDL_FreeFormat |
0x000000000000806c SDL_MapSurface |
0x000000000000832e SDL_AllocBlitMap |
0x00000000000083a0 SDL_AllocFormat |
0x00000000000086ae SDL_ReallocFormat |
*fill* 0x00000000000086f2 0x2 00 |
.text 0x00000000000086f4 0x39e4 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_RLEaccel.o) |
0x00000000000086f4 SDL_RLEBlit |
0x000000000000a7df SDL_RLEAlphaBlit |
0x000000000000b65a SDL_UnRLESurface |
0x000000000000b859 SDL_RLESurface |
.text 0x000000000000c0d8 0xd19 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_surface.o) |
0x000000000000c0d8 SDL_SetClipRect |
0x000000000000c193 SDL_GetClipRect |
0x000000000000c1b1 SDL_LockSurface |
0x000000000000c208 SDL_FreeSurface |
0x000000000000c2d4 SDL_UnlockSurface |
0x000000000000c320 SDL_FillRect |
0x000000000000c5c1 SDL_LowerBlit |
0x000000000000c62d SDL_UpperBlit |
0x000000000000c7e4 SDL_SetAlpha |
0x000000000000c8fa SDL_SetColorKey |
0x000000000000c9c5 SDL_CreateRGBSurface |
0x000000000000cb98 SDL_ConvertSurface |
0x000000000000cd94 SDL_CreateRGBSurfaceFrom |
*fill* 0x000000000000cdf1 0x3 00 |
.text 0x000000000000cdf4 0x18ea /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_video.o) |
0x000000000000cdf4 SDL_GetVideoSurface |
0x000000000000ce0b SDL_GetVideoInfo |
0x000000000000ce1f SDL_ListModes |
0x000000000000ce53 SDL_GL_SwapBuffers |
0x000000000000ce75 SDL_GL_UpdateRectsLock |
0x000000000000ce7a SDL_GL_UpdateRects |
0x000000000000ce7f SDL_GL_Lock |
0x000000000000ce84 SDL_GL_Unlock |
0x000000000000ce89 SDL_WM_GetCaption |
0x000000000000ceb7 SDL_WM_GrabInput |
0x000000000000cf69 SDL_WM_IconifyWindow |
0x000000000000cf8c SDL_WM_ToggleFullScreen |
0x000000000000d02e SDL_GetWMInfo |
0x000000000000d058 SDL_VideoModeOK |
0x000000000000d12f SDL_WM_SetIcon |
0x000000000000d362 SDL_WM_SetCaption |
0x000000000000d436 SDL_GL_GetAttribute |
0x000000000000d473 SDL_GL_SetAttribute |
0x000000000000d507 SDL_GL_GetProcAddress |
0x000000000000d54a SDL_GL_LoadLibrary |
0x000000000000d57f SDL_VideoQuit |
0x000000000000d6db SDL_UpdateRects |
0x000000000000d8a5 SDL_UpdateRect |
0x000000000000da5a SDL_SetPalette |
0x000000000000dbc6 SDL_SetColors |
0x000000000000dbe1 SDL_Flip |
0x000000000000dcb8 SDL_DisplayFormat |
0x000000000000dd03 SDL_DisplayFormatAlpha |
0x000000000000dddb SDL_SetVideoMode |
0x000000000000e44a SDL_VideoDriverName |
0x000000000000e480 SDL_VideoInit |
*fill* 0x000000000000e6de 0x2 00 |
.text 0x000000000000e6e0 0x6bc /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_menuetvideo.o) |
0x000000000000e6e0 get_skinh |
0x000000000000e70c MenuetOS_SetColors |
0x000000000000e713 MenuetOS_VideoQuit |
0x000000000000e73f MenuetOS_FinalQuit |
0x000000000000e744 MenuetOS_SetCaption |
0x000000000000e7b4 KolibriOS_FreeWMCursor |
0x000000000000e7ca KolibriOS_CheckMouseMode |
0x000000000000e9df KolibriOS_ShowWMCursor |
0x000000000000ea63 KolibriOS_CreateWMCursor |
0x000000000000ec00 MenuetOS_SDL_RepaintWnd |
0x000000000000ec94 MenuetOS_SetVideoMode |
.text 0x000000000000ed9c 0x1a8 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL.o) |
0x000000000000ed9c SDL_WasInit |
0x000000000000edb2 SDL_Linked_Version |
0x000000000000edbc SDL_QuitSubSystem |
0x000000000000ee0f SDL_Quit |
0x000000000000ee28 SDL_InitSubSystem |
0x000000000000ef0a SDL_Init |
.text 0x000000000000ef44 0x4d4 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_error.o) |
0x000000000000ef44 SDL_ClearError |
0x000000000000ef53 SDL_GetErrorMsgUNICODE |
0x000000000000f1e1 SDL_GetErrorMsg |
0x000000000000f248 SDL_GetError |
0x000000000000f25f SDL_printf |
0x000000000000f2bb SDL_SetError |
0x000000000000f3cb SDL_Error |
.text 0x000000000000f418 0x28 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_fatal.o) |
0x000000000000f418 SDL_InstallParachute |
0x000000000000f41d SDL_UninstallParachute |
0x000000000000f422 SDL_printf_error |
.text 0x000000000000f440 0x179 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_getenv.o) |
0x000000000000f440 SDL_getenv |
0x000000000000f4b2 SDL_putenv |
*fill* 0x000000000000f5b9 0x3 00 |
.text 0x000000000000f5bc 0xad6 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_kolibri_audio.o) |
0x000000000000f5bc SDL_AudioQuit |
0x000000000000f5c1 SDL_PauseAudio |
0x000000000000f603 SDL_LockAudio |
0x000000000000f635 SDL_UnlockAudio |
0x000000000000f644 SDL_CloseAudio |
0x000000000000f6a0 SDL_OpenAudio |
0x000000000001000c SDL_AudioDriverName |
0x000000000001003c SDL_AudioInit |
*fill* 0x0000000000010092 0xe 00 |
.text 0x00000000000100a0 0xbf /home/sourcerer/kos_src/me//lib/libSDL.a(init.o) |
0x00000000000100a0 InitSound |
0x0000000000010104 CreateBuffer |
0x0000000000010134 DestroyBuffer |
*fill* 0x000000000001015f 0x1 00 |
.text 0x0000000000010160 0x57 /home/sourcerer/kos_src/me//lib/libSDL.a(setbuf.o) |
0x0000000000010160 SetBuffer |
0x000000000001018c PlayBuffer |
*fill* 0x00000000000101b7 0x9 00 |
.text 0x00000000000101c0 0x2b /home/sourcerer/kos_src/me//lib/libSDL.a(stopbuf.o) |
0x00000000000101c0 StopBuffer |
*fill* 0x00000000000101eb 0x5 00 |
.text 0x00000000000101f0 0x2e /home/sourcerer/kos_src/me//lib/libSDL.a(sndgetsize.o) |
0x00000000000101f0 GetBufferSize |
*fill* 0x000000000001021e 0x2 00 |
.text 0x0000000000010220 0x99 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_sysmutex.o) |
0x0000000000010220 SDL_mutexP |
0x0000000000010227 SDL_mutexV |
0x000000000001022e SDL_DestroyMutex |
0x0000000000010260 SDL_CreateMutex |
*fill* 0x00000000000102b9 0x3 00 |
.text 0x00000000000102bc 0x74 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_syssem.o) |
0x00000000000102bc SDL_DestroySemaphore |
0x00000000000102c1 SDL_SemValue |
0x00000000000102c8 SDL_SemPost |
0x00000000000102dd SDL_SemWait |
0x00000000000102f2 SDL_SemWaitTimeout |
0x0000000000010307 SDL_SemTryWait |
0x000000000001031c SDL_CreateSemaphore |
.text 0x0000000000010330 0x2b /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_systhread.o) |
0x0000000000010330 SDL_SYS_SetupThread |
0x0000000000010335 SDL_ThreadID |
0x000000000001033c SDL_SYS_WaitThread |
0x0000000000010341 SDL_SYS_KillThread |
0x0000000000010346 SDL_SYS_CreateThread |
*fill* 0x000000000001035b 0x1 00 |
.text 0x000000000001035c 0x39a /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_thread.o) |
0x000000000001035c SDL_GetThreadID |
0x00000000000103e2 SDL_WaitThread |
0x0000000000010422 SDL_KillThread |
0x000000000001044b SDL_GetErrBuf |
0x00000000000104b6 SDL_RunThread |
0x00000000000104fd SDL_ThreadsQuit |
0x0000000000010524 SDL_ThreadsInit |
0x000000000001054f SDL_CreateThread |
*fill* 0x00000000000106f6 0x2 00 |
.text 0x00000000000106f8 0xbf /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_active.o) |
0x00000000000106f8 SDL_AppActiveInit |
0x0000000000010706 SDL_GetAppState |
0x0000000000010710 SDL_PrivateAppActive |
*fill* 0x00000000000107b7 0x1 00 |
.text 0x00000000000107b8 0xb9 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_resize.o) |
0x00000000000107b8 SDL_PrivateResize |
*fill* 0x0000000000010871 0x3 00 |
.text 0x0000000000010874 0x524 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_blit.o) |
0x00000000000109e3 SDL_CalculateBlit |
.text 0x0000000000010d98 0x4fa8 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_blit_N.o) |
0x0000000000015bcc SDL_CalculateBlitN |
.text 0x0000000000015d40 0x2e4 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_menuetevents.o) |
0x0000000000015d40 MenuetOS_InitOSKeymap |
0x0000000000015d58 kol_event_wait_time |
0x0000000000015d69 MenuetOS_PumpEvents |
.text 0x0000000000016024 0xa1f /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_blit_0.o) |
0x000000000001693f SDL_CalculateBlit0 |
*fill* 0x0000000000016a43 0x1 00 |
.text 0x0000000000016a44 0x1f10 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_blit_1.o) |
0x00000000000188f9 SDL_CalculateBlit1 |
.text 0x0000000000018954 0x44a5 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_blit_A.o) |
0x000000000001cc90 SDL_CalculateAlphaBlit |
*fill* 0x000000000001cdf9 0x3 00 |
.text 0x000000000001cdfc 0x8 /home/sourcerer/kos_src/me//lib/libc.a(dup.o) |
0x000000000001cdfc dup |
.text 0x000000000001ce04 0x123 /home/sourcerer/kos_src/me//lib/libc.a(fdopen.o) |
0x000000000001ce04 fdopen |
*fill* 0x000000000001cf27 0x1 00 |
.text 0x000000000001cf28 0x1f /home/sourcerer/kos_src/me//lib/libc.a(debug.o) |
0x000000000001cf28 __menuet__debug_out |
*fill* 0x000000000001cf47 0x1 00 |
.text 0x000000000001cf48 0x43 /home/sourcerer/kos_src/me//lib/libc.a(window.o) |
0x000000000001cf48 __menuet__define_window |
0x000000000001cf7a __menuet__window_redraw |
*fill* 0x000000000001cf8b 0x1 00 |
.text 0x000000000001cf8c 0x0 /home/sourcerer/kos_src/me//lib/libc.a(param.o) |
.text 0x000000000001cf8c 0x17 /home/sourcerer/kos_src/me//lib/libc.a(keyb.o) |
0x000000000001cf8c __menuet__getkey |
*fill* 0x000000000001cfa3 0x1 00 |
.text 0x000000000001cfa4 0x2b /home/sourcerer/kos_src/me//lib/libc.a(image.o) |
0x000000000001cfa4 __menuet__putimage |
*fill* 0x000000000001cfcf 0x1 00 |
.text 0x000000000001cfd0 0xa /home/sourcerer/kos_src/me//lib/libc.a(exit.o) |
0x000000000001cfd0 __menuet__sys_exit |
*fill* 0x000000000001cfda 0x2 00 |
.text 0x000000000001cfdc 0x29 /home/sourcerer/kos_src/me//lib/libc.a(event.o) |
0x000000000001cfdc __menuet__wait_for_event |
0x000000000001cfe8 __menuet__check_for_event |
0x000000000001cff4 __menuet__set_bitfield_for_wanted_events |
*fill* 0x000000000001d005 0x3 00 |
.text 0x000000000001d008 0x24 /home/sourcerer/kos_src/me//lib/libc.a(delay.o) |
0x000000000001d008 __menuet__delay100 |
0x000000000001d019 __menuet(int, double, long,...) |
.text 0x000000000001d02c 0x48 /home/sourcerer/kos_src/me//lib/libc.a(button.o) |
0x000000000001d02c __menuet__make_button |
0x000000000001d05c __menuet__get_button_id |
.text 0x000000000001d074 0x7 /home/sourcerer/kos_src/me//lib/libc.a(setmode.o) |
0x000000000001d074 __setmode |
*fill* 0x000000000001d07b 0x1 00 |
.text 0x000000000001d07c 0x0 /home/sourcerer/kos_src/me//lib/libc.a(fmode.o) |
.text 0x000000000001d07c 0x43 /home/sourcerer/kos_src/me//lib/libc.a(crt1.o) |
0x000000000001d07c __crt1_startup |
*fill* 0x000000000001d0bf 0x1 00 |
.text 0x000000000001d0c0 0x148 /home/sourcerer/kos_src/me//lib/libc.a(crt0.o) |
0x000000000001d0c0 _exit |
0x000000000001d14b __crt0_setup_arguments |
.text 0x000000000001d208 0x163 /home/sourcerer/kos_src/me//lib/libc.a(brk.o) |
0x000000000001d208 init_brk |
0x000000000001d25c sbrk |
*fill* 0x000000000001d36b 0x1 00 |
.text 0x000000000001d36c 0x3e /home/sourcerer/kos_src/me//lib/libc.a(strdup.o) |
0x000000000001d36c strdup |
*fill* 0x000000000001d3aa 0x2 00 |
.text 0x000000000001d3ac 0x3d /home/sourcerer/kos_src/me//lib/libc.a(memset.o) |
0x000000000001d3ac memset |
*fill* 0x000000000001d3e9 0x3 00 |
.text 0x000000000001d3ec 0x26 /home/sourcerer/kos_src/me//lib/libc.a(memmove.o) |
0x000000000001d3ec memmove |
*fill* 0x000000000001d412 0x2 00 |
.text 0x000000000001d414 0x21 /home/sourcerer/kos_src/me//lib/libc.a(strncpy.o) |
0x000000000001d414 strncpy |
*fill* 0x000000000001d435 0x3 00 |
.text 0x000000000001d438 0x25 /home/sourcerer/kos_src/me//lib/libc.a(strncmp.o) |
0x000000000001d438 strncmp |
*fill* 0x000000000001d45d 0x3 00 |
.text 0x000000000001d460 0x16 /home/sourcerer/kos_src/me//lib/libc.a(strlen.o) |
0x000000000001d460 strlen |
*fill* 0x000000000001d476 0x2 00 |
.text 0x000000000001d478 0x19 /home/sourcerer/kos_src/me//lib/libc.a(strcpy.o) |
0x000000000001d478 strcpy |
*fill* 0x000000000001d491 0x3 00 |
.text 0x000000000001d494 0x1f /home/sourcerer/kos_src/me//lib/libc.a(strcmp.o) |
0x000000000001d494 strcmp |
*fill* 0x000000000001d4b3 0x1 00 |
.text 0x000000000001d4b4 0x2b /home/sourcerer/kos_src/me//lib/libc.a(memcpy.o) |
0x000000000001d4b4 memcpy |
*fill* 0x000000000001d4df 0x1 00 |
.text 0x000000000001d4e0 0x35 /home/sourcerer/kos_src/me//lib/libc.a(memcmp.o) |
0x000000000001d4e0 memcmp |
*fill* 0x000000000001d515 0x3 00 |
.text 0x000000000001d518 0x373 /home/sourcerer/kos_src/me//lib/libc.a(malloc.o) |
0x000000000001d518 free |
0x000000000001d657 malloc |
0x000000000001d829 realloc |
*fill* 0x000000000001d88b 0x1 00 |
.text 0x000000000001d88c 0x23 /home/sourcerer/kos_src/me//lib/libc.a(exit.o) |
0x000000000001d88c exit |
*fill* 0x000000000001d8af 0x1 00 |
.text 0x000000000001d8b0 0x34 /home/sourcerer/kos_src/me//lib/libc.a(calloc.o) |
0x000000000001d8b0 calloc |
.text 0x000000000001d8e4 0xd /home/sourcerer/kos_src/me//lib/libc.a(abs.o) |
0x000000000001d8e4 abs |
*fill* 0x000000000001d8f1 0x3 00 |
.text 0x000000000001d8f4 0x31 /home/sourcerer/kos_src/me//lib/libc.a(vsprintf.o) |
0x000000000001d8f4 vsprintf |
*fill* 0x000000000001d925 0x3 00 |
.text 0x000000000001d928 0x4 /home/sourcerer/kos_src/me//lib/libc.a(stdout.o) |
.text 0x000000000001d92c 0x3f /home/sourcerer/kos_src/me//lib/libc.a(stdiohk.o) |
0x000000000001d92c __stdio_cleanup_proc |
*fill* 0x000000000001d96b 0x1 00 |
.text 0x000000000001d96c 0x4 /home/sourcerer/kos_src/me//lib/libc.a(stderr.o) |
.text 0x000000000001d970 0x32 /home/sourcerer/kos_src/me//lib/libc.a(sprintf.o) |
0x000000000001d970 sprintf |
*fill* 0x000000000001d9a2 0x2 00 |
.text 0x000000000001d9a4 0x3f /home/sourcerer/kos_src/me//lib/libc.a(fwalk.o) |
0x000000000001d9a4 _fwalk |
*fill* 0x000000000001d9e3 0x1 00 |
.text 0x000000000001d9e4 0x0 /home/sourcerer/kos_src/me//lib/libc.a(frlist.o) |
.text 0x000000000001d9e4 0x11f /home/sourcerer/kos_src/me//lib/libc.a(freopen.o) |
0x000000000001d9e4 freopen |
*fill* 0x000000000001db03 0x1 00 |
.text 0x000000000001db04 0x82 /home/sourcerer/kos_src/me//lib/libc.a(fprintf.o) |
0x000000000001db04 fprintf |
*fill* 0x000000000001db86 0x2 00 |
.text 0x000000000001db88 0xad /home/sourcerer/kos_src/me//lib/libc.a(fflush.o) |
0x000000000001db88 fflush |
*fill* 0x000000000001dc35 0x3 00 |
.text 0x000000000001dc38 0xb4 /home/sourcerer/kos_src/me//lib/libc.a(fclose.o) |
0x000000000001dc38 fclose |
.text 0x000000000001dcec 0x1517 /home/sourcerer/kos_src/me//lib/libc.a(doprnt.o) |
0x000000000001ded5 _doprnt |
*fill* 0x000000000001f203 0x1 00 |
.text 0x000000000001f204 0x9a /home/sourcerer/kos_src/me//lib/libc.a(allocfil.o) |
0x000000000001f208 __alloc_file |
*fill* 0x000000000001f29e 0x2 00 |
.text 0x000000000001f2a0 0x2c /home/sourcerer/kos_src/me//lib/libc.a(modfl.o) |
0x000000000001f2a0 __modfl |
.text 0x000000000001f2cc 0xa /home/sourcerer/kos_src/me//lib/libc.a(lconv.o) |
0x000000000001f2cc localeconv |
*fill* 0x000000000001f2d6 0x2 00 |
.text 0x000000000001f2d8 0xa /home/sourcerer/kos_src/me//lib/libc.a(errno.o) |
0x000000000001f2d8 __isatty |
*fill* 0x000000000001f2e2 0x2 00 |
.text 0x000000000001f2e4 0x0 /home/sourcerer/kos_src/me//lib/libc.a(ct_flags.o) |
.text 0x000000000001f2e4 0x8b /home/sourcerer/kos_src/me//lib/libc.a(debug.o) |
0x000000000001f2e4 __libclog_vprintf |
0x000000000001f349 __libclog_printf |
*fill* 0x000000000001f36f 0x1 00 |
.text 0x000000000001f370 0xc /home/sourcerer/kos_src/me//lib/libc.a(write.o) |
0x000000000001f370 write |
.text 0x000000000001f37c 0xc /home/sourcerer/kos_src/me//lib/libc.a(lseek.o) |
0x000000000001f37c lseek |
.text 0x000000000001f388 0xc /home/sourcerer/kos_src/me//lib/libc.a(close.o) |
0x000000000001f388 close |
.text 0x000000000001f394 0x13 /home/sourcerer/kos_src/me//lib/libc.a(open.o) |
0x000000000001f394 open |
*fill* 0x000000000001f3a7 0x1 00 |
.text 0x000000000001f3a8 0x70 /home/sourcerer/kos_src/me//lib/libc.a(emu_init.o) |
0x000000000001f3a8 dosemu_inithandles |
0x000000000001f3ed init_dir_stack |
.text 0x000000000001f418 0x5b3 /home/sourcerer/kos_src/me//lib/libc.a(dosemu.o) |
0x000000000001f418 dosemu_file_exists |
0x000000000001f467 dosemu_createtrunc |
0x000000000001f4b2 dosemu_getiostruct |
0x000000000001f4d7 dosemu_allochandle |
0x000000000001f4f7 dosemu_freehandle |
0x000000000001f513 dosemu_fileread |
0x000000000001f56a dosemu_filewrite |
0x000000000001f5cc dosemu_iosize |
0x000000000001f5fd dosemu_filesize |
0x000000000001f64c dosemu_tell |
0x000000000001f677 dosemu_lseek |
0x000000000001f6d5 dosemu_read |
0x000000000001f74e dosemu_write |
0x000000000001f783 dosemu_close |
0x000000000001f7ba _dosemu_flush |
0x000000000001f7bf dosemu_truncate |
0x000000000001f849 dosemu_open |
*fill* 0x000000000001f9cb 0x1 00 |
.text 0x000000000001f9cc 0x39 /home/sourcerer/kos_src/me//lib/libc.a(_main.o) |
0x000000000001f9cc __main |
*fill* 0x000000000001fa05 0x3 00 |
.text 0x000000000001fa08 0x24 /home/sourcerer/kos_src/me//lib/libc.a(strrchr.o) |
0x000000000001fa08 strrchr |
.text 0x000000000001fa2c 0x22 /home/sourcerer/kos_src/me//lib/libc.a(memchr.o) |
0x000000000001fa2c memchr |
*fill* 0x000000000001fa4e 0x2 00 |
.text 0x000000000001fa50 0x4 /home/sourcerer/kos_src/me//lib/libc.a(stdin.o) |
.text 0x000000000001fa54 0x87 /home/sourcerer/kos_src/me//lib/libc.a(remove.o) |
0x000000000001fa54 remove |
*fill* 0x000000000001fadb 0x1 00 |
.text 0x000000000001fadc 0xc /home/sourcerer/kos_src/me//lib/libc.a(putc.o) |
0x000000000001fadc putc |
.text 0x000000000001fae8 0xb7 /home/sourcerer/kos_src/me//lib/libc.a(fputc.o) |
0x000000000001fae8 fputc |
*fill* 0x000000000001fb9f 0x1 00 |
.text 0x000000000001fba0 0x148 /home/sourcerer/kos_src/me//lib/libc.a(flsbuf.o) |
0x000000000001fba0 _flsbuf |
.text 0x000000000001fce8 0x0 /home/sourcerer/kos_src/me//lib/libc.a(hooks.o) |
.text 0x000000000001fce8 0x66 /home/sourcerer/kos_src/me//lib/libc.a(fixpath.o) |
0x000000000001fce8 fix_slashes |
0x000000000001fd2a _fixpath |
*fill* 0x000000000001fd4e 0x2 00 |
.text 0x000000000001fd50 0x22 /home/sourcerer/kos_src/me//lib/libc.a(systree.o) |
0x000000000001fd50 __kolibri__system_tree_access |
0x000000000001fd61 __kolibri__system_tree_access2 |
*fill* 0x000000000001fd72 0x2 00 |
.text 0x000000000001fd74 0x14 /home/sourcerer/kos_src/me//lib/libc.a(dosio.o) |
0x000000000001fd74 __file_handle_set |
.text 0x000000000001fd88 0xe9 /home/sourcerer/kos_src/me//lib/libc.a(curdir.o) |
0x000000000001fd88 __get_curdir |
0x000000000001fe34 __libc_combine_path |
0x000000000001fe5d __chdir |
*(.fixup) |
*(.gnu.warning) |
*(.gnu.linkonce.t*) |
*(.const) |
*(.ro*) |
.rodata.str1.1 |
0x000000000001fe71 0xc7 bezier.o |
.rodata.str1.1 |
0x000000000001ff38 0x2d /home/sourcerer/kos_src/me//lib/libnsfb.a(dump.o) |
0x31 (size before relaxing) |
*fill* 0x000000000001ff65 0x3 00 |
.rodata 0x000000000001ff68 0x50 /home/sourcerer/kos_src/me//lib/libnsfb.a(16bpp.o) |
0x000000000001ff68 _nsfb_16bpp_plotters |
.rodata 0x000000000001ffb8 0x50 /home/sourcerer/kos_src/me//lib/libnsfb.a(32bpp-xbgr8888.o) |
0x000000000001ffb8 _nsfb_32bpp_xbgr8888_plotters |
.rodata 0x0000000000020008 0x50 /home/sourcerer/kos_src/me//lib/libnsfb.a(32bpp-xrgb8888.o) |
0x0000000000020008 _nsfb_32bpp_xrgb8888_plotters |
.rodata 0x0000000000020058 0x50 /home/sourcerer/kos_src/me//lib/libnsfb.a(8bpp.o) |
0x0000000000020058 _nsfb_8bpp_plotters |
.rodata 0x00000000000200a8 0x20 /home/sourcerer/kos_src/me//lib/libnsfb.a(generic.o) |
.rodata.cst4 0x00000000000200c8 0x10 /home/sourcerer/kos_src/me//lib/libnsfb.a(generic.o) |
.rodata.str1.1 |
0x00000000000200d8 0x5 /home/sourcerer/kos_src/me//lib/libnsfb.a(able.o) |
*fill* 0x00000000000200dd 0x3 00 |
.rodata 0x00000000000200e0 0x24 /home/sourcerer/kos_src/me//lib/libnsfb.a(able.o) |
0x00000000000200e0 able_rtns |
.rodata.str1.1 |
0x0000000000020104 0x6 /home/sourcerer/kos_src/me//lib/libnsfb.a(linux.o) |
*fill* 0x000000000002010a 0x2 00 |
.rodata 0x000000000002010c 0x24 /home/sourcerer/kos_src/me//lib/libnsfb.a(linux.o) |
0x000000000002010c linux_rtns |
.rodata.str1.1 |
0x0000000000020130 0x4 /home/sourcerer/kos_src/me//lib/libnsfb.a(ram.o) |
.rodata 0x0000000000020134 0x24 /home/sourcerer/kos_src/me//lib/libnsfb.a(ram.o) |
0x0000000000020134 ram_rtns |
.rodata.str1.1 |
0x0000000000020158 0x31 /home/sourcerer/kos_src/me//lib/libnsfb.a(sdl.o) |
0x35 (size before relaxing) |
*fill* 0x0000000000020189 0x3 00 |
.rodata 0x000000000002018c 0x24 /home/sourcerer/kos_src/me//lib/libnsfb.a(sdl.o) |
0x000000000002018c sdl_rtns |
.rodata.str1.1 |
0x00000000000201b0 0x9e /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_timer.o) |
.rodata.str1.1 |
0x000000000002024e 0x1a /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_events.o) |
.rodata.str1.1 |
0x0000000000020268 0x567 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_keyboard.o) |
0x5b3 (size before relaxing) |
*fill* 0x00000000000207cf 0x1 00 |
.rodata 0x00000000000207d0 0x70 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_keyboard.o) |
.rodata.str1.1 |
0x0000000000020840 0x2a /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_cursor.o) |
*fill* 0x000000000002086a 0x2 00 |
.rodata 0x000000000002086c 0x10 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_RLEaccel.o) |
.rodata.str1.1 |
0x000000000002087c 0x67 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_surface.o) |
.rodata.str1.1 |
0x00000000000208e3 0x19d /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_video.o) |
.rodata 0x0000000000020a80 0x38 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_video.o) |
.rodata.str1.1 |
0x0000000000020ab8 0x20 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_menuetvideo.o) |
.rodata.str1.1 |
0x0000000000020ad8 0x65 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL.o) |
.rodata.str1.1 |
0x0000000000020b3d 0x8e /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_error.o) |
0x91 (size before relaxing) |
.rodata.str1.1 |
0x0000000000020bcb 0x192 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_kolibri_audio.o) |
.rodata.str1.1 |
0x0000000000020d5d 0x27 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_syssem.o) |
.rodata.str1.1 |
0x0000000000020d84 0x2b /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_systhread.o) |
.rodata.str1.1 |
0x0000000000020daf 0x1f /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_blit.o) |
*fill* 0x0000000000020dce 0x2 00 |
.rodata 0x0000000000020dd0 0x2350 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_blit_N.o) |
.rodata 0x0000000000023120 0x600 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_menuetevents.o) |
.rodata 0x0000000000023720 0x28 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_blit_0.o) |
.rodata 0x0000000000023748 0x140 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_blit_1.o) |
.rodata 0x0000000000023888 0x1c /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_blit_A.o) |
.rodata.str1.1 |
0x00000000000238a4 0x2a /home/sourcerer/kos_src/me//lib/libc.a(doprnt.o) |
*fill* 0x00000000000238ce 0x2 00 |
.rodata 0x00000000000238d0 0x13c /home/sourcerer/kos_src/me//lib/libc.a(doprnt.o) |
.rodata.cst4 0x0000000000023a0c 0x10 /home/sourcerer/kos_src/me//lib/libc.a(doprnt.o) |
0x14 (size before relaxing) |
*fill* 0x0000000000023a1c 0x4 00 |
.rodata.cst16 0x0000000000023a20 0x20 /home/sourcerer/kos_src/me//lib/libc.a(doprnt.o) |
.rodata.cst8 0x0000000000023a40 0x8 /home/sourcerer/kos_src/me//lib/libc.a(doprnt.o) |
*(.gnu.linkonce.r*) |
0x0000000000023a48 ecode = . |
0x0000000000023a48 _ecode = . |
.iplt 0x0000000000023a50 0x0 |
.iplt 0x0000000000000000 0x0 /home/sourcerer/kos_src/me//stub/crt0.o |
.text.startup 0x0000000000023a48 0x3a0 |
.text.startup 0x0000000000023a48 0x330 bezier.o |
0x0000000000023a48 main |
.text.startup 0x0000000000023d78 0x1c /home/sourcerer/kos_src/me//lib/libnsfb.a(able.o) |
.text.startup 0x0000000000023d94 0x1c /home/sourcerer/kos_src/me//lib/libnsfb.a(linux.o) |
.text.startup 0x0000000000023db0 0x1c /home/sourcerer/kos_src/me//lib/libnsfb.a(ram.o) |
.text.startup 0x0000000000023dcc 0x1c /home/sourcerer/kos_src/me//lib/libnsfb.a(sdl.o) |
.rel.dyn 0x0000000000023de8 0x0 |
.rel.iplt 0x0000000000000000 0x0 /home/sourcerer/kos_src/me//stub/crt0.o |
.rel.text 0x0000000000000000 0x0 /home/sourcerer/kos_src/me//stub/crt0.o |
.rel.text.startup |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//stub/crt0.o |
.rel.rodata 0x0000000000000000 0x0 /home/sourcerer/kos_src/me//stub/crt0.o |
.rel.data 0x0000000000000000 0x0 /home/sourcerer/kos_src/me//stub/crt0.o |
.rdata |
.data 0x0000000000023df0 0x201c |
0x0000000000023df0 djgpp_first_ctor = . |
*(.ctor) |
*(.ctors) |
0x0000000000023df0 djgpp_last_ctor = . |
0x0000000000023df0 djgpp_first_dtor = . |
*(.dtor) |
*(.dtors) |
0x0000000000023df0 djgpp_last_dtor = . |
*(.gcc_exc*) |
0x0000000000023df0 __EH_FRAME_BEGIN__ = . |
*(.eh_fram*) |
.eh_frame 0x0000000000023df0 0x5c bezier.o |
.eh_frame 0x0000000000023e4c 0x120 /home/sourcerer/kos_src/me//lib/libnsfb.a(cursor.o) |
0x138 (size before relaxing) |
.eh_frame 0x0000000000023f6c 0x2c /home/sourcerer/kos_src/me//lib/libnsfb.a(dump.o) |
0x44 (size before relaxing) |
.eh_frame 0x0000000000023f98 0x170 /home/sourcerer/kos_src/me//lib/libnsfb.a(libnsfb.o) |
0x188 (size before relaxing) |
.eh_frame 0x0000000000024108 0xc4 /home/sourcerer/kos_src/me//lib/libnsfb.a(palette.o) |
0xdc (size before relaxing) |
.eh_frame 0x00000000000241cc 0x1b0 /home/sourcerer/kos_src/me//lib/libnsfb.a(16bpp.o) |
0x1c8 (size before relaxing) |
.eh_frame 0x000000000002437c 0x16c /home/sourcerer/kos_src/me//lib/libnsfb.a(32bpp-xbgr8888.o) |
0x184 (size before relaxing) |
.eh_frame 0x00000000000244e8 0x1ac /home/sourcerer/kos_src/me//lib/libnsfb.a(32bpp-xrgb8888.o) |
0x1c4 (size before relaxing) |
.eh_frame 0x0000000000024694 0x1cc /home/sourcerer/kos_src/me//lib/libnsfb.a(8bpp.o) |
0x1e4 (size before relaxing) |
.eh_frame 0x0000000000024860 0x2bc /home/sourcerer/kos_src/me//lib/libnsfb.a(api.o) |
0x2d4 (size before relaxing) |
.eh_frame 0x0000000000024b1c 0x3d4 /home/sourcerer/kos_src/me//lib/libnsfb.a(generic.o) |
0x3ec (size before relaxing) |
.eh_frame 0x0000000000024ef0 0xec /home/sourcerer/kos_src/me//lib/libnsfb.a(util.o) |
0x104 (size before relaxing) |
.eh_frame 0x0000000000024fdc 0xa0 /home/sourcerer/kos_src/me//lib/libnsfb.a(able.o) |
0xb8 (size before relaxing) |
.eh_frame 0x000000000002507c 0x100 /home/sourcerer/kos_src/me//lib/libnsfb.a(linux.o) |
0x118 (size before relaxing) |
.eh_frame 0x000000000002517c 0xd8 /home/sourcerer/kos_src/me//lib/libnsfb.a(ram.o) |
0xf0 (size before relaxing) |
.eh_frame 0x0000000000025254 0x1b0 /home/sourcerer/kos_src/me//lib/libnsfb.a(sdl.o) |
0x1c8 (size before relaxing) |
.eh_frame 0x0000000000025404 0x118 /home/sourcerer/kos_src/me//lib/libnsfb.a(surface.o) |
0x130 (size before relaxing) |
0x000000000002551c __EH_FRAME_END__ = . |
0x000000000002551c 0x4 LONG 0x0 |
*(.gnu.linkonce.d*) |
*(.rodata) |
*(.rodata.*) |
*(.data) |
.data 0x0000000000025520 0x0 bezier.o |
.data 0x0000000000025520 0x0 /home/sourcerer/kos_src/me//lib/libnsfb.a(cursor.o) |
.data 0x0000000000025520 0x0 /home/sourcerer/kos_src/me//lib/libnsfb.a(dump.o) |
.data 0x0000000000025520 0x0 /home/sourcerer/kos_src/me//lib/libnsfb.a(libnsfb.o) |
.data 0x0000000000025520 0x0 /home/sourcerer/kos_src/me//lib/libnsfb.a(palette.o) |
.data 0x0000000000025520 0x0 /home/sourcerer/kos_src/me//lib/libnsfb.a(16bpp.o) |
.data 0x0000000000025520 0x0 /home/sourcerer/kos_src/me//lib/libnsfb.a(32bpp-xbgr8888.o) |
.data 0x0000000000025520 0x0 /home/sourcerer/kos_src/me//lib/libnsfb.a(32bpp-xrgb8888.o) |
.data 0x0000000000025520 0x0 /home/sourcerer/kos_src/me//lib/libnsfb.a(8bpp.o) |
.data 0x0000000000025520 0x0 /home/sourcerer/kos_src/me//lib/libnsfb.a(api.o) |
.data 0x0000000000025520 0x0 /home/sourcerer/kos_src/me//lib/libnsfb.a(generic.o) |
.data 0x0000000000025520 0x0 /home/sourcerer/kos_src/me//lib/libnsfb.a(util.o) |
.data 0x0000000000025520 0x0 /home/sourcerer/kos_src/me//lib/libnsfb.a(able.o) |
.data 0x0000000000025520 0x0 /home/sourcerer/kos_src/me//lib/libnsfb.a(linux.o) |
.data 0x0000000000025520 0x0 /home/sourcerer/kos_src/me//lib/libnsfb.a(ram.o) |
.data 0x0000000000025520 0x50c /home/sourcerer/kos_src/me//lib/libnsfb.a(sdl.o) |
0x0000000000025520 sdl_nsfb_map |
.data 0x0000000000025a2c 0x0 /home/sourcerer/kos_src/me//lib/libnsfb.a(surface.o) |
.data 0x0000000000025a2c 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_timer.o) |
.data 0x0000000000025a2c 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_systimer.o) |
.data 0x0000000000025a2c 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_events.o) |
.data 0x0000000000025a2c 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_keyboard.o) |
.data 0x0000000000025a2c 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_mouse.o) |
.data 0x0000000000025a2c 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_quit.o) |
.data 0x0000000000025a2c 0x44 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_cursor.o) |
.data 0x0000000000025a70 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_pixels.o) |
.data 0x0000000000025a70 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_RLEaccel.o) |
.data 0x0000000000025a70 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_surface.o) |
.data 0x0000000000025a70 0x20 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_video.o) |
.data 0x0000000000025a90 0x24 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_menuetvideo.o) |
0x0000000000025a90 def_title |
0x0000000000025aa4 mosvideo_bootstrab |
.data 0x0000000000025ab4 0x3 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL.o) |
*fill* 0x0000000000025ab7 0x1 00 |
.data 0x0000000000025ab8 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_error.o) |
.data 0x0000000000025ab8 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_fatal.o) |
.data 0x0000000000025ab8 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_getenv.o) |
.data 0x0000000000025ab8 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_kolibri_audio.o) |
*fill* 0x0000000000025ab8 0x8 00 |
.data 0x0000000000025ac0 0x17 /home/sourcerer/kos_src/me//lib/libSDL.a(init.o) |
0x0000000000025ac0 hSound |
0x0000000000025ac4 hrdwSound |
*fill* 0x0000000000025ad7 0x1 00 |
.data 0x0000000000025ad8 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_sysmutex.o) |
.data 0x0000000000025ad8 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_syssem.o) |
.data 0x0000000000025ad8 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_systhread.o) |
.data 0x0000000000025ad8 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_thread.o) |
.data 0x0000000000025ad8 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_active.o) |
.data 0x0000000000025ad8 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_resize.o) |
.data 0x0000000000025ad8 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_blit.o) |
.data 0x0000000000025ad8 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_blit_N.o) |
.data 0x0000000000025ad8 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_menuetevents.o) |
.data 0x0000000000025ad8 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_blit_0.o) |
.data 0x0000000000025ad8 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_blit_1.o) |
.data 0x0000000000025ad8 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_blit_A.o) |
.data 0x0000000000025ad8 0x0 /home/sourcerer/kos_src/me//lib/libc.a(dup.o) |
.data 0x0000000000025ad8 0x0 /home/sourcerer/kos_src/me//lib/libc.a(fdopen.o) |
.data 0x0000000000025ad8 0x0 /home/sourcerer/kos_src/me//lib/libc.a(debug.o) |
.data 0x0000000000025ad8 0x0 /home/sourcerer/kos_src/me//lib/libc.a(window.o) |
.data 0x0000000000025ad8 0x0 /home/sourcerer/kos_src/me//lib/libc.a(param.o) |
.data 0x0000000000025ad8 0x0 /home/sourcerer/kos_src/me//lib/libc.a(keyb.o) |
.data 0x0000000000025ad8 0x0 /home/sourcerer/kos_src/me//lib/libc.a(image.o) |
.data 0x0000000000025ad8 0x0 /home/sourcerer/kos_src/me//lib/libc.a(exit.o) |
.data 0x0000000000025ad8 0x0 /home/sourcerer/kos_src/me//lib/libc.a(event.o) |
.data 0x0000000000025ad8 0x0 /home/sourcerer/kos_src/me//lib/libc.a(delay.o) |
.data 0x0000000000025ad8 0x0 /home/sourcerer/kos_src/me//lib/libc.a(button.o) |
.data 0x0000000000025ad8 0x0 /home/sourcerer/kos_src/me//lib/libc.a(setmode.o) |
.data 0x0000000000025ad8 0x4 /home/sourcerer/kos_src/me//lib/libc.a(fmode.o) |
0x0000000000025ad8 _fmode |
.data 0x0000000000025adc 0x4 /home/sourcerer/kos_src/me//lib/libc.a(crt1.o) |
0x0000000000025adc __bss_count |
.data 0x0000000000025ae0 0x0 /home/sourcerer/kos_src/me//lib/libc.a(crt0.o) |
.data 0x0000000000025ae0 0x0 /home/sourcerer/kos_src/me//lib/libc.a(brk.o) |
.data 0x0000000000025ae0 0x0 /home/sourcerer/kos_src/me//lib/libc.a(strdup.o) |
.data 0x0000000000025ae0 0x0 /home/sourcerer/kos_src/me//lib/libc.a(memset.o) |
.data 0x0000000000025ae0 0x0 /home/sourcerer/kos_src/me//lib/libc.a(memmove.o) |
.data 0x0000000000025ae0 0x0 /home/sourcerer/kos_src/me//lib/libc.a(strncpy.o) |
.data 0x0000000000025ae0 0x0 /home/sourcerer/kos_src/me//lib/libc.a(strncmp.o) |
.data 0x0000000000025ae0 0x0 /home/sourcerer/kos_src/me//lib/libc.a(strlen.o) |
.data 0x0000000000025ae0 0x0 /home/sourcerer/kos_src/me//lib/libc.a(strcpy.o) |
.data 0x0000000000025ae0 0x0 /home/sourcerer/kos_src/me//lib/libc.a(strcmp.o) |
.data 0x0000000000025ae0 0x0 /home/sourcerer/kos_src/me//lib/libc.a(memcpy.o) |
.data 0x0000000000025ae0 0x0 /home/sourcerer/kos_src/me//lib/libc.a(memcmp.o) |
.data 0x0000000000025ae0 0x0 /home/sourcerer/kos_src/me//lib/libc.a(malloc.o) |
.data 0x0000000000025ae0 0x0 /home/sourcerer/kos_src/me//lib/libc.a(exit.o) |
.data 0x0000000000025ae0 0x0 /home/sourcerer/kos_src/me//lib/libc.a(calloc.o) |
.data 0x0000000000025ae0 0x0 /home/sourcerer/kos_src/me//lib/libc.a(abs.o) |
.data 0x0000000000025ae0 0x0 /home/sourcerer/kos_src/me//lib/libc.a(vsprintf.o) |
.data 0x0000000000025ae0 0x24 /home/sourcerer/kos_src/me//lib/libc.a(stdout.o) |
0x0000000000025ae0 __dj_stdout |
.data 0x0000000000025b04 0x4 /home/sourcerer/kos_src/me//lib/libc.a(stdiohk.o) |
0x0000000000025b04 __stdio_cleanup_hook |
.data 0x0000000000025b08 0x24 /home/sourcerer/kos_src/me//lib/libc.a(stderr.o) |
0x0000000000025b08 __dj_stderr |
.data 0x0000000000025b2c 0x0 /home/sourcerer/kos_src/me//lib/libc.a(sprintf.o) |
.data 0x0000000000025b2c 0x0 /home/sourcerer/kos_src/me//lib/libc.a(fwalk.o) |
.data 0x0000000000025b2c 0x5c /home/sourcerer/kos_src/me//lib/libc.a(frlist.o) |
0x0000000000025b2c __file_rec_list |
.data 0x0000000000025b88 0x0 /home/sourcerer/kos_src/me//lib/libc.a(freopen.o) |
.data 0x0000000000025b88 0x0 /home/sourcerer/kos_src/me//lib/libc.a(fprintf.o) |
.data 0x0000000000025b88 0x0 /home/sourcerer/kos_src/me//lib/libc.a(fflush.o) |
.data 0x0000000000025b88 0x0 /home/sourcerer/kos_src/me//lib/libc.a(fclose.o) |
.data 0x0000000000025b88 0xb /home/sourcerer/kos_src/me//lib/libc.a(doprnt.o) |
*fill* 0x0000000000025b93 0x1 00 |
.data 0x0000000000025b94 0x0 /home/sourcerer/kos_src/me//lib/libc.a(allocfil.o) |
.data 0x0000000000025b94 0x0 /home/sourcerer/kos_src/me//lib/libc.a(modfl.o) |
.data 0x0000000000025b94 0x33 /home/sourcerer/kos_src/me//lib/libc.a(lconv.o) |
*fill* 0x0000000000025bc7 0x1 00 |
.data 0x0000000000025bc8 0x0 /home/sourcerer/kos_src/me//lib/libc.a(errno.o) |
.data 0x0000000000025bc8 0x202 /home/sourcerer/kos_src/me//lib/libc.a(ct_flags.o) |
0x0000000000025bc8 __dj_ctype_flags |
*fill* 0x0000000000025dca 0x2 00 |
.data 0x0000000000025dcc 0x0 /home/sourcerer/kos_src/me//lib/libc.a(debug.o) |
.data 0x0000000000025dcc 0x0 /home/sourcerer/kos_src/me//lib/libc.a(write.o) |
.data 0x0000000000025dcc 0x0 /home/sourcerer/kos_src/me//lib/libc.a(lseek.o) |
.data 0x0000000000025dcc 0x0 /home/sourcerer/kos_src/me//lib/libc.a(close.o) |
.data 0x0000000000025dcc 0x0 /home/sourcerer/kos_src/me//lib/libc.a(open.o) |
.data 0x0000000000025dcc 0x0 /home/sourcerer/kos_src/me//lib/libc.a(emu_init.o) |
.data 0x0000000000025dcc 0x0 /home/sourcerer/kos_src/me//lib/libc.a(dosemu.o) |
.data 0x0000000000025dcc 0x4 /home/sourcerer/kos_src/me//lib/libc.a(_main.o) |
.data 0x0000000000025dd0 0x0 /home/sourcerer/kos_src/me//lib/libc.a(strrchr.o) |
.data 0x0000000000025dd0 0x0 /home/sourcerer/kos_src/me//lib/libc.a(memchr.o) |
.data 0x0000000000025dd0 0x24 /home/sourcerer/kos_src/me//lib/libc.a(stdin.o) |
0x0000000000025dd0 __dj_stdin |
.data 0x0000000000025df4 0x0 /home/sourcerer/kos_src/me//lib/libc.a(remove.o) |
.data 0x0000000000025df4 0x0 /home/sourcerer/kos_src/me//lib/libc.a(putc.o) |
.data 0x0000000000025df4 0x0 /home/sourcerer/kos_src/me//lib/libc.a(fputc.o) |
.data 0x0000000000025df4 0x0 /home/sourcerer/kos_src/me//lib/libc.a(flsbuf.o) |
.data 0x0000000000025df4 0x0 /home/sourcerer/kos_src/me//lib/libc.a(hooks.o) |
.data 0x0000000000025df4 0x0 /home/sourcerer/kos_src/me//lib/libc.a(fixpath.o) |
.data 0x0000000000025df4 0x0 /home/sourcerer/kos_src/me//lib/libc.a(systree.o) |
.data 0x0000000000025df4 0x18 /home/sourcerer/kos_src/me//lib/libc.a(dosio.o) |
0x0000000000025df4 __file_handle_modes |
.data 0x0000000000025e0c 0x0 /home/sourcerer/kos_src/me//lib/libc.a(curdir.o) |
0x0000000000025e0c edata = . |
0x0000000000025e0c _edata = . |
0x0000000000025e0c bss = . |
.igot.plt 0x0000000000025e0c 0x0 |
.igot.plt 0x0000000000000000 0x0 /home/sourcerer/kos_src/me//stub/crt0.o |
.init_array 0x0000000000025e0c 0x10 |
.init_array 0x0000000000025e0c 0x4 /home/sourcerer/kos_src/me//lib/libnsfb.a(able.o) |
.init_array 0x0000000000025e10 0x4 /home/sourcerer/kos_src/me//lib/libnsfb.a(linux.o) |
.init_array 0x0000000000025e14 0x4 /home/sourcerer/kos_src/me//lib/libnsfb.a(ram.o) |
.init_array 0x0000000000025e18 0x4 /home/sourcerer/kos_src/me//lib/libnsfb.a(sdl.o) |
.bss 0x0000000000025e1c 0x20230 |
*(.bss) |
.bss 0x0000000000025e1c 0x10000 /home/sourcerer/kos_src/me//stub/crt0.o |
.bss 0x0000000000035e1c 0x0 bezier.o |
.bss 0x0000000000035e1c 0x0 /home/sourcerer/kos_src/me//lib/libnsfb.a(cursor.o) |
.bss 0x0000000000035e1c 0x0 /home/sourcerer/kos_src/me//lib/libnsfb.a(dump.o) |
.bss 0x0000000000035e1c 0x0 /home/sourcerer/kos_src/me//lib/libnsfb.a(libnsfb.o) |
.bss 0x0000000000035e1c 0x0 /home/sourcerer/kos_src/me//lib/libnsfb.a(palette.o) |
.bss 0x0000000000035e1c 0x0 /home/sourcerer/kos_src/me//lib/libnsfb.a(16bpp.o) |
.bss 0x0000000000035e1c 0x0 /home/sourcerer/kos_src/me//lib/libnsfb.a(32bpp-xbgr8888.o) |
.bss 0x0000000000035e1c 0x0 /home/sourcerer/kos_src/me//lib/libnsfb.a(32bpp-xrgb8888.o) |
.bss 0x0000000000035e1c 0x0 /home/sourcerer/kos_src/me//lib/libnsfb.a(8bpp.o) |
.bss 0x0000000000035e1c 0x0 /home/sourcerer/kos_src/me//lib/libnsfb.a(api.o) |
.bss 0x0000000000035e1c 0x0 /home/sourcerer/kos_src/me//lib/libnsfb.a(generic.o) |
.bss 0x0000000000035e1c 0x0 /home/sourcerer/kos_src/me//lib/libnsfb.a(util.o) |
.bss 0x0000000000035e1c 0x0 /home/sourcerer/kos_src/me//lib/libnsfb.a(able.o) |
.bss 0x0000000000035e1c 0x0 /home/sourcerer/kos_src/me//lib/libnsfb.a(linux.o) |
.bss 0x0000000000035e1c 0x0 /home/sourcerer/kos_src/me//lib/libnsfb.a(ram.o) |
.bss 0x0000000000035e1c 0x0 /home/sourcerer/kos_src/me//lib/libnsfb.a(sdl.o) |
.bss 0x0000000000035e1c 0xc4 /home/sourcerer/kos_src/me//lib/libnsfb.a(surface.o) |
.bss 0x0000000000035ee0 0x24 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_timer.o) |
0x0000000000035ee0 SDL_timer_started |
0x0000000000035ee4 SDL_timer_running |
0x0000000000035ee8 SDL_alarm_interval |
0x0000000000035eec SDL_alarm_callback |
.bss 0x0000000000035f04 0x4 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_systimer.o) |
.bss 0x0000000000035f08 0xe4c /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_events.o) |
0x0000000000035f08 SDL_EventOK |
0x0000000000035f0c SDL_ProcessEvents |
.bss 0x0000000000036d54 0x678 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_keyboard.o) |
0x0000000000036d54 SDL_TranslateUNICODE |
0x0000000000036d58 SDL_KeyRepeat |
.bss 0x00000000000373cc 0xa /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_mouse.o) |
*fill* 0x00000000000373d6 0x2 00 |
.bss 0x00000000000373d8 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_quit.o) |
.bss 0x00000000000373d8 0x18 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_cursor.o) |
0x00000000000373d8 SDL_cursorstate |
0x00000000000373dc SDL_cursor |
0x00000000000373e0 SDL_cursorlock |
.bss 0x00000000000373f0 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_pixels.o) |
.bss 0x00000000000373f0 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_RLEaccel.o) |
.bss 0x00000000000373f0 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_surface.o) |
.bss 0x00000000000373f0 0x4 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_video.o) |
0x00000000000373f0 current_video |
.bss 0x00000000000373f4 0x10 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_menuetvideo.o) |
.bss 0x0000000000037404 0x8 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL.o) |
.bss 0x000000000003740c 0xb08 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_error.o) |
.bss 0x0000000000037f14 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_fatal.o) |
.bss 0x0000000000037f14 0x4 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_getenv.o) |
.bss 0x0000000000037f18 0x4438 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_kolibri_audio.o) |
0x0000000000037f18 audio_thread_stack |
.bss 0x000000000003c350 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_sysmutex.o) |
.bss 0x000000000003c350 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_syssem.o) |
.bss 0x000000000003c350 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_systhread.o) |
.bss 0x000000000003c350 0x31c /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_thread.o) |
0x000000000003c350 _creating_thread_lock |
.bss 0x000000000003c66c 0x1 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_active.o) |
*fill* 0x000000000003c66d 0x3 00 |
.bss 0x000000000003c670 0x8 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_resize.o) |
.bss 0x000000000003c678 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_blit.o) |
.bss 0x000000000003c678 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_blit_N.o) |
.bss 0x000000000003c678 0xc /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_menuetevents.o) |
.bss 0x000000000003c684 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_blit_0.o) |
.bss 0x000000000003c684 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_blit_1.o) |
.bss 0x000000000003c684 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_blit_A.o) |
.bss 0x000000000003c684 0x0 /home/sourcerer/kos_src/me//lib/libc.a(dup.o) |
.bss 0x000000000003c684 0x0 /home/sourcerer/kos_src/me//lib/libc.a(fdopen.o) |
.bss 0x000000000003c684 0x0 /home/sourcerer/kos_src/me//lib/libc.a(debug.o) |
.bss 0x000000000003c684 0x0 /home/sourcerer/kos_src/me//lib/libc.a(window.o) |
.bss 0x000000000003c684 0x800 /home/sourcerer/kos_src/me//lib/libc.a(param.o) |
0x000000000003c684 __menuet__app_param_area |
0x000000000003ca84 __menuet__app_path_area |
.bss 0x000000000003ce84 0x0 /home/sourcerer/kos_src/me//lib/libc.a(keyb.o) |
.bss 0x000000000003ce84 0x0 /home/sourcerer/kos_src/me//lib/libc.a(image.o) |
.bss 0x000000000003ce84 0x0 /home/sourcerer/kos_src/me//lib/libc.a(exit.o) |
.bss 0x000000000003ce84 0x0 /home/sourcerer/kos_src/me//lib/libc.a(event.o) |
.bss 0x000000000003ce84 0x0 /home/sourcerer/kos_src/me//lib/libc.a(delay.o) |
.bss 0x000000000003ce84 0x0 /home/sourcerer/kos_src/me//lib/libc.a(button.o) |
.bss 0x000000000003ce84 0x4 /home/sourcerer/kos_src/me//lib/libc.a(setmode.o) |
0x000000000003ce84 __setmode_stdio_hook |
.bss 0x000000000003ce88 0x0 /home/sourcerer/kos_src/me//lib/libc.a(fmode.o) |
.bss 0x000000000003ce88 0x14 /home/sourcerer/kos_src/me//lib/libc.a(crt1.o) |
0x000000000003ce88 __crt0_argc |
0x000000000003ce8c __crt0_argv |
0x000000000003ce90 __dos_argv0 |
0x000000000003ce94 _crt0_startup_flags |
0x000000000003ce98 environ |
.bss 0x000000000003ce9c 0x0 /home/sourcerer/kos_src/me//lib/libc.a(crt0.o) |
.bss 0x000000000003ce9c 0x18 /home/sourcerer/kos_src/me//lib/libc.a(brk.o) |
.bss 0x000000000003ceb4 0x0 /home/sourcerer/kos_src/me//lib/libc.a(strdup.o) |
.bss 0x000000000003ceb4 0x0 /home/sourcerer/kos_src/me//lib/libc.a(memset.o) |
.bss 0x000000000003ceb4 0x0 /home/sourcerer/kos_src/me//lib/libc.a(memmove.o) |
.bss 0x000000000003ceb4 0x0 /home/sourcerer/kos_src/me//lib/libc.a(strncpy.o) |
.bss 0x000000000003ceb4 0x0 /home/sourcerer/kos_src/me//lib/libc.a(strncmp.o) |
.bss 0x000000000003ceb4 0x0 /home/sourcerer/kos_src/me//lib/libc.a(strlen.o) |
.bss 0x000000000003ceb4 0x0 /home/sourcerer/kos_src/me//lib/libc.a(strcpy.o) |
.bss 0x000000000003ceb4 0x0 /home/sourcerer/kos_src/me//lib/libc.a(strcmp.o) |
.bss 0x000000000003ceb4 0x0 /home/sourcerer/kos_src/me//lib/libc.a(memcpy.o) |
.bss 0x000000000003ceb4 0x0 /home/sourcerer/kos_src/me//lib/libc.a(memcmp.o) |
.bss 0x000000000003ceb4 0x80 /home/sourcerer/kos_src/me//lib/libc.a(malloc.o) |
.bss 0x000000000003cf34 0x8 /home/sourcerer/kos_src/me//lib/libc.a(exit.o) |
0x000000000003cf34 __atexit_ptr |
0x000000000003cf38 keypress_at_exit |
.bss 0x000000000003cf3c 0x0 /home/sourcerer/kos_src/me//lib/libc.a(calloc.o) |
.bss 0x000000000003cf3c 0x0 /home/sourcerer/kos_src/me//lib/libc.a(abs.o) |
.bss 0x000000000003cf3c 0x0 /home/sourcerer/kos_src/me//lib/libc.a(vsprintf.o) |
.bss 0x000000000003cf3c 0x0 /home/sourcerer/kos_src/me//lib/libc.a(stdout.o) |
.bss 0x000000000003cf3c 0x0 /home/sourcerer/kos_src/me//lib/libc.a(stdiohk.o) |
.bss 0x000000000003cf3c 0x0 /home/sourcerer/kos_src/me//lib/libc.a(stderr.o) |
.bss 0x000000000003cf3c 0x0 /home/sourcerer/kos_src/me//lib/libc.a(sprintf.o) |
.bss 0x000000000003cf3c 0x0 /home/sourcerer/kos_src/me//lib/libc.a(fwalk.o) |
.bss 0x000000000003cf3c 0x0 /home/sourcerer/kos_src/me//lib/libc.a(frlist.o) |
.bss 0x000000000003cf3c 0x0 /home/sourcerer/kos_src/me//lib/libc.a(freopen.o) |
.bss 0x000000000003cf3c 0x0 /home/sourcerer/kos_src/me//lib/libc.a(fprintf.o) |
.bss 0x000000000003cf3c 0x0 /home/sourcerer/kos_src/me//lib/libc.a(fflush.o) |
.bss 0x000000000003cf3c 0x0 /home/sourcerer/kos_src/me//lib/libc.a(fclose.o) |
.bss 0x000000000003cf3c 0x4 /home/sourcerer/kos_src/me//lib/libc.a(doprnt.o) |
.bss 0x000000000003cf40 0x0 /home/sourcerer/kos_src/me//lib/libc.a(allocfil.o) |
.bss 0x000000000003cf40 0x0 /home/sourcerer/kos_src/me//lib/libc.a(modfl.o) |
.bss 0x000000000003cf40 0x0 /home/sourcerer/kos_src/me//lib/libc.a(lconv.o) |
.bss 0x000000000003cf40 0x4 /home/sourcerer/kos_src/me//lib/libc.a(errno.o) |
0x000000000003cf40 errno |
.bss 0x000000000003cf44 0x0 /home/sourcerer/kos_src/me//lib/libc.a(ct_flags.o) |
.bss 0x000000000003cf44 0x400 /home/sourcerer/kos_src/me//lib/libc.a(debug.o) |
.bss 0x000000000003d344 0x0 /home/sourcerer/kos_src/me//lib/libc.a(write.o) |
.bss 0x000000000003d344 0x0 /home/sourcerer/kos_src/me//lib/libc.a(lseek.o) |
.bss 0x000000000003d344 0x0 /home/sourcerer/kos_src/me//lib/libc.a(close.o) |
.bss 0x000000000003d344 0x0 /home/sourcerer/kos_src/me//lib/libc.a(open.o) |
.bss 0x000000000003d344 0x8800 /home/sourcerer/kos_src/me//lib/libc.a(emu_init.o) |
0x000000000003d344 _io_handles |
0x0000000000045744 __curdir_buf |
.bss 0x0000000000045b44 0x100 /home/sourcerer/kos_src/me//lib/libc.a(dosemu.o) |
.bss 0x0000000000045c44 0x0 /home/sourcerer/kos_src/me//lib/libc.a(_main.o) |
.bss 0x0000000000045c44 0x0 /home/sourcerer/kos_src/me//lib/libc.a(strrchr.o) |
.bss 0x0000000000045c44 0x0 /home/sourcerer/kos_src/me//lib/libc.a(memchr.o) |
.bss 0x0000000000045c44 0x0 /home/sourcerer/kos_src/me//lib/libc.a(stdin.o) |
.bss 0x0000000000045c44 0x0 /home/sourcerer/kos_src/me//lib/libc.a(remove.o) |
.bss 0x0000000000045c44 0x0 /home/sourcerer/kos_src/me//lib/libc.a(putc.o) |
.bss 0x0000000000045c44 0x0 /home/sourcerer/kos_src/me//lib/libc.a(fputc.o) |
.bss 0x0000000000045c44 0x0 /home/sourcerer/kos_src/me//lib/libc.a(flsbuf.o) |
.bss 0x0000000000045c44 0x8 /home/sourcerer/kos_src/me//lib/libc.a(hooks.o) |
0x0000000000045c44 __libc_read_termios_hook |
0x0000000000045c48 __libc_write_termios_hook |
.bss 0x0000000000045c4c 0x0 /home/sourcerer/kos_src/me//lib/libc.a(fixpath.o) |
.bss 0x0000000000045c4c 0x0 /home/sourcerer/kos_src/me//lib/libc.a(systree.o) |
.bss 0x0000000000045c4c 0x0 /home/sourcerer/kos_src/me//lib/libc.a(dosio.o) |
.bss 0x0000000000045c4c 0x400 /home/sourcerer/kos_src/me//lib/libc.a(curdir.o) |
*(.note.gnu.build-id) |
0x000000000004604c end = . |
0x000000000004604c _end = . |
LOAD /home/sourcerer/kos_src/me//stub/crt0.o |
LOAD bezier.o |
LOAD /home/sourcerer/kos_src/me//lib/libm.a |
LOAD /home/sourcerer/kos_src/me//lib/libnsfb.a |
LOAD /home/sourcerer/kos_src/me//lib/libSDL.a |
LOAD /home/sourcerer/kos_src/me//lib/libc.a |
OUTPUT(bezier elf32-i386) |
.comment 0x0000000000000000 0x38 |
.comment 0x0000000000000000 0x1c bezier.o |
0x1d (size before relaxing) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libnsfb.a(cursor.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libnsfb.a(dump.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libnsfb.a(libnsfb.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libnsfb.a(palette.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libnsfb.a(16bpp.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libnsfb.a(32bpp-xbgr8888.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libnsfb.a(32bpp-xrgb8888.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libnsfb.a(8bpp.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libnsfb.a(api.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libnsfb.a(generic.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libnsfb.a(util.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libnsfb.a(able.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libnsfb.a(linux.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libnsfb.a(ram.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libnsfb.a(sdl.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libnsfb.a(surface.o) |
.comment 0x000000000000001c 0x1c /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_timer.o) |
0x1d (size before relaxing) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_systimer.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_events.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_keyboard.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_mouse.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_quit.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_cursor.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_pixels.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_RLEaccel.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_surface.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_video.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_menuetvideo.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libSDL.a(SDL.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_error.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_fatal.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_getenv.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_kolibri_audio.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_sysmutex.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_syssem.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_systhread.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_thread.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_active.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_resize.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_blit.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_blit_N.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_menuetevents.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_blit_0.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_blit_1.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_blit_A.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(dup.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(fdopen.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(debug.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(window.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(param.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(keyb.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(image.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(exit.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(event.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(delay.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(button.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(setmode.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(fmode.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(crt1.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(crt0.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(brk.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(strdup.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(strncpy.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(strncmp.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(strlen.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(strcpy.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(strcmp.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(memcpy.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(memcmp.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(malloc.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(exit.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(calloc.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(abs.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(vsprintf.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(stdout.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(stdiohk.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(stderr.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(sprintf.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(fwalk.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(frlist.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(freopen.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(fprintf.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(fflush.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(fclose.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(doprnt.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(allocfil.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(lconv.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(errno.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(ct_flags.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(debug.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(write.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(lseek.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(close.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(open.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(emu_init.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(dosemu.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(_main.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(strrchr.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(memchr.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(stdin.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(remove.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(putc.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(fputc.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(flsbuf.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(hooks.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(fixpath.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(systree.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(dosio.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(curdir.o) |
.note.GNU-stack |
0x0000000000000000 0x0 |
.note.GNU-stack |
0x0000000000000000 0x0 bezier.o |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libnsfb.a(cursor.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libnsfb.a(dump.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libnsfb.a(libnsfb.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libnsfb.a(palette.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libnsfb.a(16bpp.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libnsfb.a(32bpp-xbgr8888.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libnsfb.a(32bpp-xrgb8888.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libnsfb.a(8bpp.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libnsfb.a(api.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libnsfb.a(generic.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libnsfb.a(util.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libnsfb.a(able.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libnsfb.a(linux.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libnsfb.a(ram.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libnsfb.a(sdl.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libnsfb.a(surface.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_timer.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_systimer.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_events.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_keyboard.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_mouse.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_quit.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_cursor.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_pixels.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_RLEaccel.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_surface.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_video.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_menuetvideo.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_error.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_fatal.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_getenv.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_kolibri_audio.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_sysmutex.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_syssem.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_systhread.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_thread.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_active.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_resize.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_blit.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_blit_N.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_menuetevents.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_blit_0.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_blit_1.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_blit_A.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(dup.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(fdopen.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(debug.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(window.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(param.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(keyb.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(image.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(exit.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(event.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(delay.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(button.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(setmode.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(fmode.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(crt1.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(crt0.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(brk.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(strdup.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(strncpy.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(strncmp.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(strlen.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(strcpy.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(strcmp.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(memcpy.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(memcmp.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(malloc.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(exit.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(calloc.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(abs.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(vsprintf.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(stdout.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(stdiohk.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(stderr.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(sprintf.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(fwalk.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(frlist.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(freopen.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(fprintf.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(fflush.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(fclose.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(doprnt.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(allocfil.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(lconv.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(errno.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(ct_flags.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(debug.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(write.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(lseek.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(close.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(open.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(emu_init.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(dosemu.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(_main.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(strrchr.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(memchr.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(stdin.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(remove.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(putc.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(fputc.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(flsbuf.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(hooks.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(fixpath.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(systree.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(dosio.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(curdir.o) |
/contrib/network/netsurf/libnsfb/test/bitmap |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/contrib/network/netsurf/libnsfb/test/bitmap.c |
---|
0,0 → 1,187 |
/* libnsfb plotter test program */ |
#include <stdio.h> |
#include <stdbool.h> |
#include <stdlib.h> |
#include <unistd.h> |
#include <sys/types.h> |
#include <sys/stat.h> |
#include <fcntl.h> |
#include <string.h> |
#include "libnsfb.h" |
#include "libnsfb_plot.h" |
#include "libnsfb_event.h" |
#include "surface.h" |
#include <menuet/os.h> |
#define UNUSED(x) ((x) = (x)) |
extern const struct { |
unsigned int width; |
unsigned int height; |
unsigned int bytes_per_pixel; /* 3:RGB, 4:RGBA */ |
unsigned char pixel_data[132 * 135 * 4 + 1]; |
} nsglobe; |
static bool |
dump(nsfb_t *nsfb, const char *filename) |
{ |
int fd; |
if (filename == NULL) |
return false; |
fd = open(filename, O_RDWR | O_CREAT | O_TRUNC, S_IRWXU); |
if (fd < 0) |
return false; |
nsfb_dump(nsfb, fd); |
close(fd); |
return true; |
} |
int main(int argc, char **argv) |
{ |
extern nsfb_surface_rtns_t sdl_rtns; |
extern nsfb_surface_rtns_t ram_rtns; |
_nsfb_register_surface(NSFB_SURFACE_SDL, &sdl_rtns, "sdl"); |
_nsfb_register_surface(NSFB_SURFACE_RAM, &ram_rtns, "ram"); |
const char *fename; |
enum nsfb_type_e fetype; |
nsfb_t *nsfb; |
nsfb_t *bmp; |
nsfb_event_t event; |
int waitloop = 3; |
nsfb_bbox_t box; |
nsfb_bbox_t box2; |
nsfb_bbox_t box3; |
uint8_t *fbptr; |
int fbstride; |
const char *dumpfile = NULL; |
__menuet__debug_out("Init..\n"); |
if (argc < 2) { |
fename="sdl"; |
} else { |
fename = argv[1]; |
if (argc >= 3) { |
dumpfile = argv[2]; |
} |
} |
fetype = nsfb_type_from_name(fename); |
if (fetype == NSFB_SURFACE_NONE) { |
fprintf(stderr, "Unable to convert \"%s\" to nsfb surface type\n", fename); |
return 1; |
} |
nsfb = nsfb_new(fetype); |
if (nsfb == NULL) { |
fprintf(stderr, "Unable to allocate \"%s\" nsfb surface\n", fename); |
return 2; |
} |
if (nsfb_init(nsfb) == -1) { |
fprintf(stderr, "Unable to initialise nsfb surface\n"); |
nsfb_free(nsfb); |
return 4; |
} |
__menuet__debug_out("New ram surface...\n"); |
bmp = nsfb_new(NSFB_SURFACE_RAM); |
if (bmp == NULL) { |
__menuet__debug_out("No ram surface :D ..\n"); |
return 5; |
} |
__menuet__debug_out("Oh shit :D ..\n"); |
nsfb_set_geometry(bmp, nsglobe.width, nsglobe.height, NSFB_FMT_ABGR8888); |
nsfb_init(bmp); |
nsfb_get_buffer(bmp, &fbptr, &fbstride); |
memcpy(fbptr, nsglobe.pixel_data, nsglobe.width * nsglobe.height * 4); |
/* get the geometry of the whole screen */ |
box.x0 = box.y0 = 0; |
nsfb_get_geometry(nsfb, &box.x1, &box.y1, NULL); |
/* claim the whole screen for update */ |
nsfb_claim(nsfb, &box); |
nsfb_plot_clg(nsfb, 0xffffffff); |
box3.x0 = 0; |
box3.y0 = 0; |
box3.x1 = 132; |
box3.y1 = 135; |
nsfb_plot_copy(bmp, &box3, nsfb, &box3); |
box3.x0 = 132; |
box3.y0 = 135; |
box3.x1 = box3.x0 + 264; |
box3.y1 = box3.y0 + 135; |
nsfb_plot_copy(bmp, &box3, nsfb, &box3); |
box3.x0 = 396; |
box3.y0 = 270; |
box3.x1 = box3.x0 + 264; |
box3.y1 = box3.y0 + 270; |
nsfb_plot_copy(bmp, &box3, nsfb, &box3); |
box2.x0 = 64; |
box2.y0 = 64; |
box2.x1 = 128; |
box2.y1 = 128; |
box3.x0 = 270; |
box3.y0 = 270; |
box3.x1 = box3.x0 + 64; |
box3.y1 = box3.y0 + 64; |
nsfb_plot_copy(nsfb, &box2, nsfb, &box3); |
nsfb_update(nsfb, &box); |
/* wait for quit event or timeout */ |
while (waitloop > 0) { |
if (nsfb_event(nsfb, &event, 1000) == false) { |
break; |
} |
if (event.type == NSFB_EVENT_CONTROL) { |
if (event.value.controlcode == NSFB_CONTROL_TIMEOUT) { |
/* timeout */ |
waitloop--; |
} else if (event.value.controlcode == NSFB_CONTROL_QUIT) { |
break; |
} |
} |
} |
//dump(nsfb, dumpfile); |
nsfb_free(bmp); |
nsfb_free(nsfb); |
return 0; |
} |
/* |
* Local variables: |
* c-basic-offset: 4 |
* tab-width: 8 |
* End: |
*/ |
/contrib/network/netsurf/libnsfb/test/bitmap.map |
---|
0,0 → 1,1593 |
Archive member included because of file (symbol) |
/home/sourcerer/kos_src/me//lib/libnsfb.a(cursor.o) |
(--whole-archive) |
/home/sourcerer/kos_src/me//lib/libnsfb.a(dump.o) |
(--whole-archive) |
/home/sourcerer/kos_src/me//lib/libnsfb.a(libnsfb.o) |
(--whole-archive) |
/home/sourcerer/kos_src/me//lib/libnsfb.a(palette.o) |
(--whole-archive) |
/home/sourcerer/kos_src/me//lib/libnsfb.a(16bpp.o) |
(--whole-archive) |
/home/sourcerer/kos_src/me//lib/libnsfb.a(32bpp-xbgr8888.o) |
(--whole-archive) |
/home/sourcerer/kos_src/me//lib/libnsfb.a(32bpp-xrgb8888.o) |
(--whole-archive) |
/home/sourcerer/kos_src/me//lib/libnsfb.a(8bpp.o) |
(--whole-archive) |
/home/sourcerer/kos_src/me//lib/libnsfb.a(api.o) |
(--whole-archive) |
/home/sourcerer/kos_src/me//lib/libnsfb.a(generic.o) |
(--whole-archive) |
/home/sourcerer/kos_src/me//lib/libnsfb.a(util.o) |
(--whole-archive) |
/home/sourcerer/kos_src/me//lib/libnsfb.a(able.o) |
(--whole-archive) |
/home/sourcerer/kos_src/me//lib/libnsfb.a(linux.o) |
(--whole-archive) |
/home/sourcerer/kos_src/me//lib/libnsfb.a(ram.o) |
(--whole-archive) |
/home/sourcerer/kos_src/me//lib/libnsfb.a(sdl.o) |
(--whole-archive) |
/home/sourcerer/kos_src/me//lib/libnsfb.a(surface.o) |
(--whole-archive) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_timer.o) |
/home/sourcerer/kos_src/me//lib/libnsfb.a(sdl.o) (SDL_RemoveTimer) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_systimer.o) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_timer.o) (SDL_GetTicks) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_events.o) |
/home/sourcerer/kos_src/me//lib/libnsfb.a(sdl.o) (SDL_PushEvent) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_keyboard.o) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_events.o) (SDL_CheckKeyRepeat) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_mouse.o) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_events.o) (SDL_MouseInit) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_quit.o) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_events.o) (SDL_QuitInit) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_cursor.o) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_mouse.o) (SDL_MoveCursor) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_pixels.o) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_cursor.o) (SDL_MapRGB) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_RLEaccel.o) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_pixels.o) (SDL_UnRLESurface) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_surface.o) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_cursor.o) (SDL_LockSurface) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_video.o) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_events.o) (current_video) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_menuetvideo.o) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_video.o) (mosvideo_bootstrab) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL.o) |
/home/sourcerer/kos_src/me//lib/libnsfb.a(sdl.o) (SDL_Quit) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_error.o) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL.o) (SDL_ClearError) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_fatal.o) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL.o) (SDL_InstallParachute) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_getenv.o) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL.o) (SDL_getenv) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_kolibri_audio.o) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL.o) (SDL_AudioQuit) |
/home/sourcerer/kos_src/me//lib/libSDL.a(init.o) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_kolibri_audio.o) (InitSound) |
/home/sourcerer/kos_src/me//lib/libSDL.a(setbuf.o) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_kolibri_audio.o) (SetBuffer) |
/home/sourcerer/kos_src/me//lib/libSDL.a(stopbuf.o) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_kolibri_audio.o) (StopBuffer) |
/home/sourcerer/kos_src/me//lib/libSDL.a(sndgetsize.o) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_kolibri_audio.o) (GetBufferSize) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_sysmutex.o) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_timer.o) (SDL_mutexP) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_syssem.o) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_sysmutex.o) (SDL_DestroySemaphore) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_systhread.o) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_events.o) (SDL_ThreadID) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_thread.o) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_events.o) (SDL_WaitThread) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_active.o) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_events.o) (SDL_AppActiveInit) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_resize.o) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_video.o) (SDL_PrivateResize) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_blit.o) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_pixels.o) (SDL_CalculateBlit) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_blit_N.o) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_blit.o) (SDL_CalculateBlitN) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_menuetevents.o) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_menuetvideo.o) (MenuetOS_InitOSKeymap) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_blit_0.o) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_blit.o) (SDL_CalculateBlit0) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_blit_1.o) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_blit.o) (SDL_CalculateBlit1) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_blit_A.o) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_blit_N.o) (SDL_CalculateAlphaBlit) |
/home/sourcerer/kos_src/me//lib/libc.a(dup.o) |
/home/sourcerer/kos_src/me//lib/libnsfb.a(dump.o) (dup) |
/home/sourcerer/kos_src/me//lib/libc.a(fdopen.o) |
/home/sourcerer/kos_src/me//lib/libnsfb.a(dump.o) (fdopen) |
/home/sourcerer/kos_src/me//lib/libc.a(debug.o) |
bitmap.o (__menuet__debug_out) |
/home/sourcerer/kos_src/me//lib/libc.a(window.o) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_menuetvideo.o) (__menuet__define_window) |
/home/sourcerer/kos_src/me//lib/libc.a(param.o) |
/home/sourcerer/kos_src/me//stub/crt0.o (__menuet__app_param_area) |
/home/sourcerer/kos_src/me//lib/libc.a(keyb.o) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_menuetevents.o) (__menuet__getkey) |
/home/sourcerer/kos_src/me//lib/libc.a(image.o) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_menuetvideo.o) (__menuet__putimage) |
/home/sourcerer/kos_src/me//lib/libc.a(exit.o) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_kolibri_audio.o) (__menuet__sys_exit) |
/home/sourcerer/kos_src/me//lib/libc.a(event.o) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_menuetevents.o) (__menuet__check_for_event) |
/home/sourcerer/kos_src/me//lib/libc.a(delay.o) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_systimer.o) (__menuet__delay100) |
/home/sourcerer/kos_src/me//lib/libc.a(button.o) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_menuetevents.o) (__menuet__get_button_id) |
/home/sourcerer/kos_src/me//lib/libc.a(setmode.o) |
/home/sourcerer/kos_src/me//lib/libc.a(fdopen.o) (__setmode) |
/home/sourcerer/kos_src/me//lib/libc.a(fmode.o) |
/home/sourcerer/kos_src/me//lib/libc.a(fdopen.o) (_fmode) |
/home/sourcerer/kos_src/me//lib/libc.a(crt1.o) |
/home/sourcerer/kos_src/me//stub/crt0.o (__crt1_startup) |
/home/sourcerer/kos_src/me//lib/libc.a(crt0.o) |
/home/sourcerer/kos_src/me//lib/libc.a(crt1.o) (__crt0_setup_arguments) |
/home/sourcerer/kos_src/me//lib/libc.a(brk.o) |
/home/sourcerer/kos_src/me//lib/libc.a(crt1.o) (init_brk) |
/home/sourcerer/kos_src/me//lib/libc.a(strdup.o) |
/home/sourcerer/kos_src/me//lib/libnsfb.a(libnsfb.o) (strdup) |
/home/sourcerer/kos_src/me//lib/libc.a(memset.o) |
/home/sourcerer/kos_src/me//lib/libnsfb.a(palette.o) (memset) |
/home/sourcerer/kos_src/me//lib/libc.a(memmove.o) |
/home/sourcerer/kos_src/me//lib/libnsfb.a(generic.o) (memmove) |
/home/sourcerer/kos_src/me//lib/libc.a(strncpy.o) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_video.o) (strncpy) |
/home/sourcerer/kos_src/me//lib/libc.a(strncmp.o) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_video.o) (strncmp) |
/home/sourcerer/kos_src/me//lib/libc.a(strlen.o) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_video.o) (strlen) |
/home/sourcerer/kos_src/me//lib/libc.a(strcpy.o) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_video.o) (strcpy) |
/home/sourcerer/kos_src/me//lib/libc.a(strcmp.o) |
/home/sourcerer/kos_src/me//lib/libnsfb.a(surface.o) (strcmp) |
/home/sourcerer/kos_src/me//lib/libc.a(memcpy.o) |
bitmap.o (memcpy) |
/home/sourcerer/kos_src/me//lib/libc.a(memcmp.o) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_pixels.o) (memcmp) |
/home/sourcerer/kos_src/me//lib/libc.a(malloc.o) |
/home/sourcerer/kos_src/me//lib/libnsfb.a(libnsfb.o) (free) |
/home/sourcerer/kos_src/me//lib/libc.a(exit.o) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_fatal.o) (exit) |
/home/sourcerer/kos_src/me//lib/libc.a(calloc.o) |
/home/sourcerer/kos_src/me//lib/libnsfb.a(cursor.o) (calloc) |
/home/sourcerer/kos_src/me//lib/libc.a(abs.o) |
/home/sourcerer/kos_src/me//lib/libnsfb.a(16bpp.o) (abs) |
/home/sourcerer/kos_src/me//lib/libc.a(vsprintf.o) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_error.o) (vsprintf) |
/home/sourcerer/kos_src/me//lib/libc.a(stderr.o) |
bitmap.o (__dj_stderr) |
/home/sourcerer/kos_src/me//lib/libc.a(sprintf.o) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_error.o) (sprintf) |
/home/sourcerer/kos_src/me//lib/libc.a(fprintf.o) |
bitmap.o (fprintf) |
/home/sourcerer/kos_src/me//lib/libc.a(fflush.o) |
/home/sourcerer/kos_src/me//lib/libc.a(fprintf.o) (fflush) |
/home/sourcerer/kos_src/me//lib/libc.a(fclose.o) |
/home/sourcerer/kos_src/me//lib/libnsfb.a(dump.o) (fclose) |
/home/sourcerer/kos_src/me//lib/libc.a(doprnt.o) |
/home/sourcerer/kos_src/me//lib/libc.a(vsprintf.o) (_doprnt) |
/home/sourcerer/kos_src/me//lib/libc.a(allocfil.o) |
/home/sourcerer/kos_src/me//lib/libc.a(fdopen.o) (__alloc_file) |
/home/sourcerer/kos_src/me//lib/libc.a(modfl.o) |
/home/sourcerer/kos_src/me//lib/libc.a(doprnt.o) (__modfl) |
/home/sourcerer/kos_src/me//lib/libc.a(lconv.o) |
/home/sourcerer/kos_src/me//lib/libc.a(doprnt.o) (localeconv) |
/home/sourcerer/kos_src/me//lib/libc.a(errno.o) |
/home/sourcerer/kos_src/me//lib/libc.a(brk.o) (errno) |
/home/sourcerer/kos_src/me//lib/libc.a(ct_flags.o) |
/home/sourcerer/kos_src/me//lib/libc.a(doprnt.o) (__dj_ctype_flags) |
/home/sourcerer/kos_src/me//lib/libc.a(debug.o) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_fatal.o) (__libclog_vprintf) |
/home/sourcerer/kos_src/me//lib/libc.a(write.o) |
/home/sourcerer/kos_src/me//lib/libc.a(fflush.o) (write) |
/home/sourcerer/kos_src/me//lib/libc.a(lseek.o) |
/home/sourcerer/kos_src/me//lib/libc.a(fdopen.o) (lseek) |
/home/sourcerer/kos_src/me//lib/libc.a(close.o) |
/home/sourcerer/kos_src/me//lib/libc.a(fclose.o) (close) |
/home/sourcerer/kos_src/me//lib/libc.a(emu_init.o) |
/home/sourcerer/kos_src/me//lib/libc.a(crt1.o) (dosemu_inithandles) |
/home/sourcerer/kos_src/me//lib/libc.a(dosemu.o) |
/home/sourcerer/kos_src/me//lib/libc.a(lseek.o) (dosemu_lseek) |
/home/sourcerer/kos_src/me//lib/libc.a(_main.o) |
/home/sourcerer/kos_src/me//lib/libc.a(crt1.o) (__main) |
/home/sourcerer/kos_src/me//lib/libc.a(strrchr.o) |
/home/sourcerer/kos_src/me//lib/libc.a(emu_init.o) (strrchr) |
/home/sourcerer/kos_src/me//lib/libc.a(memchr.o) |
/home/sourcerer/kos_src/me//lib/libc.a(doprnt.o) (memchr) |
/home/sourcerer/kos_src/me//lib/libc.a(stdiohk.o) |
/home/sourcerer/kos_src/me//lib/libc.a(stderr.o) (__stdio_cleanup_proc) |
/home/sourcerer/kos_src/me//lib/libc.a(remove.o) |
/home/sourcerer/kos_src/me//lib/libc.a(fclose.o) (remove) |
/home/sourcerer/kos_src/me//lib/libc.a(putc.o) |
/home/sourcerer/kos_src/me//lib/libc.a(doprnt.o) (putc) |
/home/sourcerer/kos_src/me//lib/libc.a(fwalk.o) |
/home/sourcerer/kos_src/me//lib/libc.a(stdiohk.o) (_fwalk) |
/home/sourcerer/kos_src/me//lib/libc.a(frlist.o) |
/home/sourcerer/kos_src/me//lib/libc.a(allocfil.o) (__file_rec_list) |
/home/sourcerer/kos_src/me//lib/libc.a(fputc.o) |
/home/sourcerer/kos_src/me//lib/libc.a(putc.o) (fputc) |
/home/sourcerer/kos_src/me//lib/libc.a(flsbuf.o) |
/home/sourcerer/kos_src/me//lib/libc.a(doprnt.o) (_flsbuf) |
/home/sourcerer/kos_src/me//lib/libc.a(hooks.o) |
/home/sourcerer/kos_src/me//lib/libc.a(fputc.o) (__libc_write_termios_hook) |
/home/sourcerer/kos_src/me//lib/libc.a(fixpath.o) |
/home/sourcerer/kos_src/me//lib/libc.a(dosemu.o) (_fixpath) |
/home/sourcerer/kos_src/me//lib/libc.a(systree.o) |
/home/sourcerer/kos_src/me//lib/libc.a(remove.o) (__kolibri__system_tree_access2) |
/home/sourcerer/kos_src/me//lib/libc.a(dosio.o) |
/home/sourcerer/kos_src/me//lib/libc.a(fputc.o) (__file_handle_modes) |
/home/sourcerer/kos_src/me//lib/libc.a(curdir.o) |
/home/sourcerer/kos_src/me//lib/libc.a(fixpath.o) (__libc_combine_path) |
/home/sourcerer/kos_src/me//lib/libc.a(stdout.o) |
/home/sourcerer/kos_src/me//lib/libc.a(frlist.o) (__dj_stdout) |
/home/sourcerer/kos_src/me//lib/libc.a(stdin.o) |
/home/sourcerer/kos_src/me//lib/libc.a(frlist.o) (__dj_stdin) |
Memory Configuration |
Name Origin Length Attributes |
*default* 0x0000000000000000 0xffffffffffffffff |
Linker script and memory map |
.text 0x0000000000000000 0x34f98 |
0x0000000000000000 code = . |
0x0000000000000000 _code = . |
*(.text) |
.text 0x0000000000000000 0x24 /home/sourcerer/kos_src/me//stub/crt0.o |
0x0000000000000000 __menuet__app_header |
0x0000000000000000 start |
0x0000000000000014 __menuet__memsize |
.text 0x0000000000000024 0x0 bitmap.o |
.text 0x0000000000000024 0x0 nsglobe.o |
.text 0x0000000000000024 0x2a4 /home/sourcerer/kos_src/me//lib/libnsfb.a(cursor.o) |
0x0000000000000024 nsfb_cursor_init |
0x000000000000006f nsfb_cursor_set |
0x00000000000000da nsfb_cursor_loc_set |
0x000000000000011c nsfb_cursor_loc_get |
0x0000000000000145 nsfb_cursor_plot |
0x000000000000026a nsfb_cursor_clear |
.text 0x00000000000002c8 0xbd /home/sourcerer/kos_src/me//lib/libnsfb.a(dump.o) |
0x00000000000002c8 nsfb_dump |
*fill* 0x0000000000000385 0x3 00 |
.text 0x0000000000000388 0x1a9 /home/sourcerer/kos_src/me//lib/libnsfb.a(libnsfb.o) |
0x0000000000000388 nsfb_new |
0x00000000000003d6 nsfb_init |
0x00000000000003e5 nsfb_free |
0x000000000000041f nsfb_event |
0x000000000000042e nsfb_claim |
0x000000000000043d nsfb_update |
0x000000000000044c nsfb_set_geometry |
0x0000000000000488 nsfb_set_parameters |
0x00000000000004dc nsfb_get_geometry |
0x000000000000050d nsfb_get_buffer |
*fill* 0x0000000000000531 0x3 00 |
.text 0x0000000000000534 0x1ca /home/sourcerer/kos_src/me//lib/libnsfb.a(palette.o) |
0x0000000000000534 nsfb_palette_free |
0x0000000000000567 nsfb_palette_new |
0x00000000000005e0 nsfb_palette_dither_init |
0x0000000000000623 nsfb_palette_dither_fini |
0x0000000000000635 nsfb_palette_generate_nsfb_8bpp |
*fill* 0x00000000000006fe 0x2 00 |
.text 0x0000000000000700 0x9df /home/sourcerer/kos_src/me//lib/libnsfb.a(16bpp.o) |
*fill* 0x00000000000010df 0x1 00 |
.text 0x00000000000010e0 0x894 /home/sourcerer/kos_src/me//lib/libnsfb.a(32bpp-xbgr8888.o) |
.text 0x0000000000001974 0x96e /home/sourcerer/kos_src/me//lib/libnsfb.a(32bpp-xrgb8888.o) |
*fill* 0x00000000000022e2 0x2 00 |
.text 0x00000000000022e4 0xcfb /home/sourcerer/kos_src/me//lib/libnsfb.a(8bpp.o) |
*fill* 0x0000000000002fdf 0x1 00 |
.text 0x0000000000002fe0 0x1b6 /home/sourcerer/kos_src/me//lib/libnsfb.a(api.o) |
0x0000000000002fe0 nsfb_plot_set_clip |
0x0000000000002fef nsfb_plot_get_clip |
0x0000000000002ffe nsfb_plot_clg |
0x000000000000300c nsfb_plot_rectangle |
0x000000000000301b nsfb_plot_rectangle_fill |
0x000000000000302a nsfb_plot_line |
0x0000000000003044 nsfb_plot_lines |
0x0000000000003053 nsfb_plot_polylines |
0x0000000000003062 nsfb_plot_polygon |
0x0000000000003071 nsfb_plot_arc |
0x0000000000003080 nsfb_plot_point |
0x000000000000308f nsfb_plot_ellipse |
0x000000000000309e nsfb_plot_ellipse_fill |
0x00000000000030ad nsfb_plot_copy |
0x000000000000312d nsfb_plot_bitmap |
0x000000000000313c nsfb_plot_glyph8 |
0x000000000000314b nsfb_plot_glyph1 |
0x000000000000315a nsfb_plot_readrect |
0x0000000000003169 nsfb_plot_cubic_bezier |
0x0000000000003178 nsfb_plot_quadratic_bezier |
0x0000000000003187 nsfb_plot_path |
*fill* 0x0000000000003196 0x2 00 |
.text 0x0000000000003198 0x10d5 /home/sourcerer/kos_src/me//lib/libnsfb.a(generic.o) |
0x0000000000004165 select_plotters |
*fill* 0x000000000000426d 0x3 00 |
.text 0x0000000000004270 0x466 /home/sourcerer/kos_src/me//lib/libnsfb.a(util.o) |
0x0000000000004270 nsfb_plot_clip |
0x000000000000439c nsfb_plot_clip_ctx |
0x00000000000043ae nsfb_plot_clip_line |
0x0000000000004638 nsfb_plot_clip_line_ctx |
0x000000000000464a nsfb_plot_add_rect |
0x00000000000046a5 nsfb_plot_bbox_intersect |
*fill* 0x00000000000046d6 0x2 00 |
.text 0x00000000000046d8 0x3b /home/sourcerer/kos_src/me//lib/libnsfb.a(able.o) |
*fill* 0x0000000000004713 0x1 00 |
.text 0x0000000000004714 0x36 /home/sourcerer/kos_src/me//lib/libnsfb.a(linux.o) |
*fill* 0x000000000000474a 0x2 00 |
.text 0x000000000000474c 0x112 /home/sourcerer/kos_src/me//lib/libnsfb.a(ram.o) |
*fill* 0x000000000000485e 0x2 00 |
.text 0x0000000000004860 0x579 /home/sourcerer/kos_src/me//lib/libnsfb.a(sdl.o) |
*fill* 0x0000000000004dd9 0x3 00 |
.text 0x0000000000004ddc 0x169 /home/sourcerer/kos_src/me//lib/libnsfb.a(surface.o) |
0x0000000000004e1f _nsfb_register_surface |
0x0000000000004e52 nsfb_surface_get_rtns |
0x0000000000004f08 nsfb_type_from_name |
*fill* 0x0000000000004f45 0x3 00 |
.text 0x0000000000004f48 0x3fd /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_timer.o) |
0x0000000000004f54 SDL_RemoveTimer |
0x0000000000004fcd SDL_SetTimerThreaded |
0x0000000000004ffd SDL_AddTimer |
0x00000000000050ca SDL_SetTimer |
0x0000000000005194 SDL_ThreadedTimerCheck |
0x00000000000052a2 SDL_TimerQuit |
0x00000000000052f2 SDL_TimerInit |
*fill* 0x0000000000005345 0x3 00 |
.text 0x0000000000005348 0x67 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_systimer.o) |
0x0000000000005348 SDL_StartTicks |
0x0000000000005360 SDL_GetTicks |
0x000000000000537c SDL_SYS_TimerInit |
0x0000000000005383 SDL_SYS_TimerQuit |
0x0000000000005388 SDL_SYS_StartTimer |
0x000000000000538f SDL_SYS_StopTimer |
0x0000000000005394 SDL_Delay |
*fill* 0x00000000000053af 0x1 00 |
.text 0x00000000000053b0 0x682 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_events.o) |
0x00000000000053b0 SDL_EventThreadID |
0x00000000000053ba SDL_GetEventFilter |
0x00000000000053c4 SDL_PumpEvents |
0x00000000000053f1 SDL_PeepEvents |
0x0000000000005611 SDL_PushEvent |
0x0000000000005627 SDL_PrivateSysWMEvent |
0x0000000000005685 SDL_WaitEvent |
0x00000000000056cf SDL_PollEvent |
0x00000000000056ea SDL_EventState |
0x000000000000579e SDL_SetEventFilter |
0x00000000000057c5 SDL_Unlock_EventThread |
0x00000000000057f4 SDL_Lock_EventThread |
0x00000000000058d4 SDL_StopEventLoop |
0x0000000000005941 SDL_StartEventLoop |
*fill* 0x0000000000005a32 0x2 00 |
.text 0x0000000000005a34 0xc2f /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_keyboard.o) |
0x0000000000005a34 SDL_EnableUNICODE |
0x0000000000005a4b SDL_GetKeyState |
0x0000000000005a62 SDL_GetModState |
0x0000000000005a6c SDL_SetModState |
0x0000000000005a79 SDL_GetKeyName |
0x0000000000005a98 SDL_CheckKeyRepeat |
0x0000000000005a9d SDL_EnableKeyRepeat |
0x0000000000005ae9 SDL_KeyboardInit |
0x0000000000006446 SDL_PrivateKeyboard |
0x0000000000006611 SDL_ResetKeyboard |
*fill* 0x0000000000006663 0x1 00 |
.text 0x0000000000006664 0x3fb /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_mouse.o) |
0x0000000000006664 SDL_MouseInit |
0x0000000000006696 SDL_GetMouseState |
0x00000000000066c0 SDL_GetRelativeMouseState |
0x0000000000006747 SDL_PrivateMouseButton |
0x00000000000068d5 SDL_PrivateMouseMotion |
*fill* 0x0000000000006a5f 0x1 00 |
.text 0x0000000000006a60 0x4d /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_quit.o) |
0x0000000000006a60 SDL_QuitInit |
0x0000000000006a67 SDL_PrivateQuit |
*fill* 0x0000000000006aad 0x3 00 |
.text 0x0000000000006ab0 0xfb3 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_cursor.o) |
0x0000000000006ab0 SDL_GetCursor |
0x0000000000006aba SDL_CursorPaletteChanged |
0x0000000000006ac9 SDL_MouseRect |
0x0000000000006b5a SDL_ResetCursor |
0x0000000000006b93 SDL_EraseCursorNoLock |
0x0000000000006cf9 SDL_EraseCursor |
0x0000000000006d86 SDL_DrawCursorNoLock |
0x00000000000073fa SDL_DrawCursor |
0x0000000000007487 SDL_MoveCursor |
0x0000000000007526 SDL_WarpMouse |
0x000000000000758f SDL_SetCursor |
0x00000000000076f9 SDL_ShowCursor |
0x0000000000007792 SDL_FreeCursor |
0x0000000000007818 SDL_CreateCursor |
0x0000000000007990 SDL_CursorInit |
0x00000000000079e7 SDL_CursorQuit |
*fill* 0x0000000000007a63 0x1 00 |
.text 0x0000000000007a64 0xc8e /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_pixels.o) |
0x0000000000007a64 SDL_DitherColors |
0x0000000000007ad1 SDL_CalculatePitch |
0x0000000000007b0a SDL_FindColor |
0x0000000000007b82 SDL_MapRGB |
0x0000000000007bf4 SDL_MapRGBA |
0x0000000000007c82 SDL_GetRGBA |
0x0000000000007d95 SDL_GetRGB |
0x0000000000007e59 SDL_ApplyGamma |
0x0000000000007eab SDL_InvalidateMap |
0x0000000000007ee5 SDL_FormatChanged |
0x0000000000007efd SDL_FreeBlitMap |
0x0000000000007f3b SDL_FreeFormat |
0x000000000000806c SDL_MapSurface |
0x000000000000832e SDL_AllocBlitMap |
0x00000000000083a0 SDL_AllocFormat |
0x00000000000086ae SDL_ReallocFormat |
*fill* 0x00000000000086f2 0x2 00 |
.text 0x00000000000086f4 0x39e4 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_RLEaccel.o) |
0x00000000000086f4 SDL_RLEBlit |
0x000000000000a7df SDL_RLEAlphaBlit |
0x000000000000b65a SDL_UnRLESurface |
0x000000000000b859 SDL_RLESurface |
.text 0x000000000000c0d8 0xd19 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_surface.o) |
0x000000000000c0d8 SDL_SetClipRect |
0x000000000000c193 SDL_GetClipRect |
0x000000000000c1b1 SDL_LockSurface |
0x000000000000c208 SDL_FreeSurface |
0x000000000000c2d4 SDL_UnlockSurface |
0x000000000000c320 SDL_FillRect |
0x000000000000c5c1 SDL_LowerBlit |
0x000000000000c62d SDL_UpperBlit |
0x000000000000c7e4 SDL_SetAlpha |
0x000000000000c8fa SDL_SetColorKey |
0x000000000000c9c5 SDL_CreateRGBSurface |
0x000000000000cb98 SDL_ConvertSurface |
0x000000000000cd94 SDL_CreateRGBSurfaceFrom |
*fill* 0x000000000000cdf1 0x3 00 |
.text 0x000000000000cdf4 0x18ea /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_video.o) |
0x000000000000cdf4 SDL_GetVideoSurface |
0x000000000000ce0b SDL_GetVideoInfo |
0x000000000000ce1f SDL_ListModes |
0x000000000000ce53 SDL_GL_SwapBuffers |
0x000000000000ce75 SDL_GL_UpdateRectsLock |
0x000000000000ce7a SDL_GL_UpdateRects |
0x000000000000ce7f SDL_GL_Lock |
0x000000000000ce84 SDL_GL_Unlock |
0x000000000000ce89 SDL_WM_GetCaption |
0x000000000000ceb7 SDL_WM_GrabInput |
0x000000000000cf69 SDL_WM_IconifyWindow |
0x000000000000cf8c SDL_WM_ToggleFullScreen |
0x000000000000d02e SDL_GetWMInfo |
0x000000000000d058 SDL_VideoModeOK |
0x000000000000d12f SDL_WM_SetIcon |
0x000000000000d362 SDL_WM_SetCaption |
0x000000000000d436 SDL_GL_GetAttribute |
0x000000000000d473 SDL_GL_SetAttribute |
0x000000000000d507 SDL_GL_GetProcAddress |
0x000000000000d54a SDL_GL_LoadLibrary |
0x000000000000d57f SDL_VideoQuit |
0x000000000000d6db SDL_UpdateRects |
0x000000000000d8a5 SDL_UpdateRect |
0x000000000000da5a SDL_SetPalette |
0x000000000000dbc6 SDL_SetColors |
0x000000000000dbe1 SDL_Flip |
0x000000000000dcb8 SDL_DisplayFormat |
0x000000000000dd03 SDL_DisplayFormatAlpha |
0x000000000000dddb SDL_SetVideoMode |
0x000000000000e44a SDL_VideoDriverName |
0x000000000000e480 SDL_VideoInit |
*fill* 0x000000000000e6de 0x2 00 |
.text 0x000000000000e6e0 0x6bc /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_menuetvideo.o) |
0x000000000000e6e0 get_skinh |
0x000000000000e70c MenuetOS_SetColors |
0x000000000000e713 MenuetOS_VideoQuit |
0x000000000000e73f MenuetOS_FinalQuit |
0x000000000000e744 MenuetOS_SetCaption |
0x000000000000e7b4 KolibriOS_FreeWMCursor |
0x000000000000e7ca KolibriOS_CheckMouseMode |
0x000000000000e9df KolibriOS_ShowWMCursor |
0x000000000000ea63 KolibriOS_CreateWMCursor |
0x000000000000ec00 MenuetOS_SDL_RepaintWnd |
0x000000000000ec94 MenuetOS_SetVideoMode |
.text 0x000000000000ed9c 0x1a8 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL.o) |
0x000000000000ed9c SDL_WasInit |
0x000000000000edb2 SDL_Linked_Version |
0x000000000000edbc SDL_QuitSubSystem |
0x000000000000ee0f SDL_Quit |
0x000000000000ee28 SDL_InitSubSystem |
0x000000000000ef0a SDL_Init |
.text 0x000000000000ef44 0x4d4 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_error.o) |
0x000000000000ef44 SDL_ClearError |
0x000000000000ef53 SDL_GetErrorMsgUNICODE |
0x000000000000f1e1 SDL_GetErrorMsg |
0x000000000000f248 SDL_GetError |
0x000000000000f25f SDL_printf |
0x000000000000f2bb SDL_SetError |
0x000000000000f3cb SDL_Error |
.text 0x000000000000f418 0x28 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_fatal.o) |
0x000000000000f418 SDL_InstallParachute |
0x000000000000f41d SDL_UninstallParachute |
0x000000000000f422 SDL_printf_error |
.text 0x000000000000f440 0x179 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_getenv.o) |
0x000000000000f440 SDL_getenv |
0x000000000000f4b2 SDL_putenv |
*fill* 0x000000000000f5b9 0x3 00 |
.text 0x000000000000f5bc 0xad6 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_kolibri_audio.o) |
0x000000000000f5bc SDL_AudioQuit |
0x000000000000f5c1 SDL_PauseAudio |
0x000000000000f603 SDL_LockAudio |
0x000000000000f635 SDL_UnlockAudio |
0x000000000000f644 SDL_CloseAudio |
0x000000000000f6a0 SDL_OpenAudio |
0x000000000001000c SDL_AudioDriverName |
0x000000000001003c SDL_AudioInit |
*fill* 0x0000000000010092 0xe 00 |
.text 0x00000000000100a0 0xbf /home/sourcerer/kos_src/me//lib/libSDL.a(init.o) |
0x00000000000100a0 InitSound |
0x0000000000010104 CreateBuffer |
0x0000000000010134 DestroyBuffer |
*fill* 0x000000000001015f 0x1 00 |
.text 0x0000000000010160 0x57 /home/sourcerer/kos_src/me//lib/libSDL.a(setbuf.o) |
0x0000000000010160 SetBuffer |
0x000000000001018c PlayBuffer |
*fill* 0x00000000000101b7 0x9 00 |
.text 0x00000000000101c0 0x2b /home/sourcerer/kos_src/me//lib/libSDL.a(stopbuf.o) |
0x00000000000101c0 StopBuffer |
*fill* 0x00000000000101eb 0x5 00 |
.text 0x00000000000101f0 0x2e /home/sourcerer/kos_src/me//lib/libSDL.a(sndgetsize.o) |
0x00000000000101f0 GetBufferSize |
*fill* 0x000000000001021e 0x2 00 |
.text 0x0000000000010220 0x99 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_sysmutex.o) |
0x0000000000010220 SDL_mutexP |
0x0000000000010227 SDL_mutexV |
0x000000000001022e SDL_DestroyMutex |
0x0000000000010260 SDL_CreateMutex |
*fill* 0x00000000000102b9 0x3 00 |
.text 0x00000000000102bc 0x74 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_syssem.o) |
0x00000000000102bc SDL_DestroySemaphore |
0x00000000000102c1 SDL_SemValue |
0x00000000000102c8 SDL_SemPost |
0x00000000000102dd SDL_SemWait |
0x00000000000102f2 SDL_SemWaitTimeout |
0x0000000000010307 SDL_SemTryWait |
0x000000000001031c SDL_CreateSemaphore |
.text 0x0000000000010330 0x2b /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_systhread.o) |
0x0000000000010330 SDL_SYS_SetupThread |
0x0000000000010335 SDL_ThreadID |
0x000000000001033c SDL_SYS_WaitThread |
0x0000000000010341 SDL_SYS_KillThread |
0x0000000000010346 SDL_SYS_CreateThread |
*fill* 0x000000000001035b 0x1 00 |
.text 0x000000000001035c 0x39a /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_thread.o) |
0x000000000001035c SDL_GetThreadID |
0x00000000000103e2 SDL_WaitThread |
0x0000000000010422 SDL_KillThread |
0x000000000001044b SDL_GetErrBuf |
0x00000000000104b6 SDL_RunThread |
0x00000000000104fd SDL_ThreadsQuit |
0x0000000000010524 SDL_ThreadsInit |
0x000000000001054f SDL_CreateThread |
*fill* 0x00000000000106f6 0x2 00 |
.text 0x00000000000106f8 0xbf /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_active.o) |
0x00000000000106f8 SDL_AppActiveInit |
0x0000000000010706 SDL_GetAppState |
0x0000000000010710 SDL_PrivateAppActive |
*fill* 0x00000000000107b7 0x1 00 |
.text 0x00000000000107b8 0xb9 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_resize.o) |
0x00000000000107b8 SDL_PrivateResize |
*fill* 0x0000000000010871 0x3 00 |
.text 0x0000000000010874 0x524 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_blit.o) |
0x00000000000109e3 SDL_CalculateBlit |
.text 0x0000000000010d98 0x4fa8 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_blit_N.o) |
0x0000000000015bcc SDL_CalculateBlitN |
.text 0x0000000000015d40 0x2e4 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_menuetevents.o) |
0x0000000000015d40 MenuetOS_InitOSKeymap |
0x0000000000015d58 kol_event_wait_time |
0x0000000000015d69 MenuetOS_PumpEvents |
.text 0x0000000000016024 0xa1f /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_blit_0.o) |
0x000000000001693f SDL_CalculateBlit0 |
*fill* 0x0000000000016a43 0x1 00 |
.text 0x0000000000016a44 0x1f10 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_blit_1.o) |
0x00000000000188f9 SDL_CalculateBlit1 |
.text 0x0000000000018954 0x44a5 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_blit_A.o) |
0x000000000001cc90 SDL_CalculateAlphaBlit |
*fill* 0x000000000001cdf9 0x3 00 |
.text 0x000000000001cdfc 0x8 /home/sourcerer/kos_src/me//lib/libc.a(dup.o) |
0x000000000001cdfc dup |
.text 0x000000000001ce04 0x123 /home/sourcerer/kos_src/me//lib/libc.a(fdopen.o) |
0x000000000001ce04 fdopen |
*fill* 0x000000000001cf27 0x1 00 |
.text 0x000000000001cf28 0x1f /home/sourcerer/kos_src/me//lib/libc.a(debug.o) |
0x000000000001cf28 __menuet__debug_out |
*fill* 0x000000000001cf47 0x1 00 |
.text 0x000000000001cf48 0x43 /home/sourcerer/kos_src/me//lib/libc.a(window.o) |
0x000000000001cf48 __menuet__define_window |
0x000000000001cf7a __menuet__window_redraw |
*fill* 0x000000000001cf8b 0x1 00 |
.text 0x000000000001cf8c 0x0 /home/sourcerer/kos_src/me//lib/libc.a(param.o) |
.text 0x000000000001cf8c 0x17 /home/sourcerer/kos_src/me//lib/libc.a(keyb.o) |
0x000000000001cf8c __menuet__getkey |
*fill* 0x000000000001cfa3 0x1 00 |
.text 0x000000000001cfa4 0x2b /home/sourcerer/kos_src/me//lib/libc.a(image.o) |
0x000000000001cfa4 __menuet__putimage |
*fill* 0x000000000001cfcf 0x1 00 |
.text 0x000000000001cfd0 0xa /home/sourcerer/kos_src/me//lib/libc.a(exit.o) |
0x000000000001cfd0 __menuet__sys_exit |
*fill* 0x000000000001cfda 0x2 00 |
.text 0x000000000001cfdc 0x29 /home/sourcerer/kos_src/me//lib/libc.a(event.o) |
0x000000000001cfdc __menuet__wait_for_event |
0x000000000001cfe8 __menuet__check_for_event |
0x000000000001cff4 __menuet__set_bitfield_for_wanted_events |
*fill* 0x000000000001d005 0x3 00 |
.text 0x000000000001d008 0x24 /home/sourcerer/kos_src/me//lib/libc.a(delay.o) |
0x000000000001d008 __menuet__delay100 |
0x000000000001d019 __menuet(int, double, long,...) |
.text 0x000000000001d02c 0x48 /home/sourcerer/kos_src/me//lib/libc.a(button.o) |
0x000000000001d02c __menuet__make_button |
0x000000000001d05c __menuet__get_button_id |
.text 0x000000000001d074 0x7 /home/sourcerer/kos_src/me//lib/libc.a(setmode.o) |
0x000000000001d074 __setmode |
*fill* 0x000000000001d07b 0x1 00 |
.text 0x000000000001d07c 0x0 /home/sourcerer/kos_src/me//lib/libc.a(fmode.o) |
.text 0x000000000001d07c 0x43 /home/sourcerer/kos_src/me//lib/libc.a(crt1.o) |
0x000000000001d07c __crt1_startup |
*fill* 0x000000000001d0bf 0x1 00 |
.text 0x000000000001d0c0 0x148 /home/sourcerer/kos_src/me//lib/libc.a(crt0.o) |
0x000000000001d0c0 _exit |
0x000000000001d14b __crt0_setup_arguments |
.text 0x000000000001d208 0x163 /home/sourcerer/kos_src/me//lib/libc.a(brk.o) |
0x000000000001d208 init_brk |
0x000000000001d25c sbrk |
*fill* 0x000000000001d36b 0x1 00 |
.text 0x000000000001d36c 0x3e /home/sourcerer/kos_src/me//lib/libc.a(strdup.o) |
0x000000000001d36c strdup |
*fill* 0x000000000001d3aa 0x2 00 |
.text 0x000000000001d3ac 0x3d /home/sourcerer/kos_src/me//lib/libc.a(memset.o) |
0x000000000001d3ac memset |
*fill* 0x000000000001d3e9 0x3 00 |
.text 0x000000000001d3ec 0x26 /home/sourcerer/kos_src/me//lib/libc.a(memmove.o) |
0x000000000001d3ec memmove |
*fill* 0x000000000001d412 0x2 00 |
.text 0x000000000001d414 0x21 /home/sourcerer/kos_src/me//lib/libc.a(strncpy.o) |
0x000000000001d414 strncpy |
*fill* 0x000000000001d435 0x3 00 |
.text 0x000000000001d438 0x25 /home/sourcerer/kos_src/me//lib/libc.a(strncmp.o) |
0x000000000001d438 strncmp |
*fill* 0x000000000001d45d 0x3 00 |
.text 0x000000000001d460 0x16 /home/sourcerer/kos_src/me//lib/libc.a(strlen.o) |
0x000000000001d460 strlen |
*fill* 0x000000000001d476 0x2 00 |
.text 0x000000000001d478 0x19 /home/sourcerer/kos_src/me//lib/libc.a(strcpy.o) |
0x000000000001d478 strcpy |
*fill* 0x000000000001d491 0x3 00 |
.text 0x000000000001d494 0x1f /home/sourcerer/kos_src/me//lib/libc.a(strcmp.o) |
0x000000000001d494 strcmp |
*fill* 0x000000000001d4b3 0x1 00 |
.text 0x000000000001d4b4 0x2b /home/sourcerer/kos_src/me//lib/libc.a(memcpy.o) |
0x000000000001d4b4 memcpy |
*fill* 0x000000000001d4df 0x1 00 |
.text 0x000000000001d4e0 0x35 /home/sourcerer/kos_src/me//lib/libc.a(memcmp.o) |
0x000000000001d4e0 memcmp |
*fill* 0x000000000001d515 0x3 00 |
.text 0x000000000001d518 0x373 /home/sourcerer/kos_src/me//lib/libc.a(malloc.o) |
0x000000000001d518 free |
0x000000000001d657 malloc |
0x000000000001d829 realloc |
*fill* 0x000000000001d88b 0x1 00 |
.text 0x000000000001d88c 0x23 /home/sourcerer/kos_src/me//lib/libc.a(exit.o) |
0x000000000001d88c exit |
*fill* 0x000000000001d8af 0x1 00 |
.text 0x000000000001d8b0 0x34 /home/sourcerer/kos_src/me//lib/libc.a(calloc.o) |
0x000000000001d8b0 calloc |
.text 0x000000000001d8e4 0xd /home/sourcerer/kos_src/me//lib/libc.a(abs.o) |
0x000000000001d8e4 abs |
*fill* 0x000000000001d8f1 0x3 00 |
.text 0x000000000001d8f4 0x31 /home/sourcerer/kos_src/me//lib/libc.a(vsprintf.o) |
0x000000000001d8f4 vsprintf |
*fill* 0x000000000001d925 0x3 00 |
.text 0x000000000001d928 0x4 /home/sourcerer/kos_src/me//lib/libc.a(stderr.o) |
.text 0x000000000001d92c 0x32 /home/sourcerer/kos_src/me//lib/libc.a(sprintf.o) |
0x000000000001d92c sprintf |
*fill* 0x000000000001d95e 0x2 00 |
.text 0x000000000001d960 0x82 /home/sourcerer/kos_src/me//lib/libc.a(fprintf.o) |
0x000000000001d960 fprintf |
*fill* 0x000000000001d9e2 0x2 00 |
.text 0x000000000001d9e4 0xad /home/sourcerer/kos_src/me//lib/libc.a(fflush.o) |
0x000000000001d9e4 fflush |
*fill* 0x000000000001da91 0x3 00 |
.text 0x000000000001da94 0xb4 /home/sourcerer/kos_src/me//lib/libc.a(fclose.o) |
0x000000000001da94 fclose |
.text 0x000000000001db48 0x1517 /home/sourcerer/kos_src/me//lib/libc.a(doprnt.o) |
0x000000000001dd31 _doprnt |
*fill* 0x000000000001f05f 0x1 00 |
.text 0x000000000001f060 0x9a /home/sourcerer/kos_src/me//lib/libc.a(allocfil.o) |
0x000000000001f064 __alloc_file |
*fill* 0x000000000001f0fa 0x2 00 |
.text 0x000000000001f0fc 0x2c /home/sourcerer/kos_src/me//lib/libc.a(modfl.o) |
0x000000000001f0fc __modfl |
.text 0x000000000001f128 0xa /home/sourcerer/kos_src/me//lib/libc.a(lconv.o) |
0x000000000001f128 localeconv |
*fill* 0x000000000001f132 0x2 00 |
.text 0x000000000001f134 0xa /home/sourcerer/kos_src/me//lib/libc.a(errno.o) |
0x000000000001f134 __isatty |
*fill* 0x000000000001f13e 0x2 00 |
.text 0x000000000001f140 0x0 /home/sourcerer/kos_src/me//lib/libc.a(ct_flags.o) |
.text 0x000000000001f140 0x8b /home/sourcerer/kos_src/me//lib/libc.a(debug.o) |
0x000000000001f140 __libclog_vprintf |
0x000000000001f1a5 __libclog_printf |
*fill* 0x000000000001f1cb 0x1 00 |
.text 0x000000000001f1cc 0xc /home/sourcerer/kos_src/me//lib/libc.a(write.o) |
0x000000000001f1cc write |
.text 0x000000000001f1d8 0xc /home/sourcerer/kos_src/me//lib/libc.a(lseek.o) |
0x000000000001f1d8 lseek |
.text 0x000000000001f1e4 0xc /home/sourcerer/kos_src/me//lib/libc.a(close.o) |
0x000000000001f1e4 close |
.text 0x000000000001f1f0 0x70 /home/sourcerer/kos_src/me//lib/libc.a(emu_init.o) |
0x000000000001f1f0 dosemu_inithandles |
0x000000000001f235 init_dir_stack |
.text 0x000000000001f260 0x5b3 /home/sourcerer/kos_src/me//lib/libc.a(dosemu.o) |
0x000000000001f260 dosemu_file_exists |
0x000000000001f2af dosemu_createtrunc |
0x000000000001f2fa dosemu_getiostruct |
0x000000000001f31f dosemu_allochandle |
0x000000000001f33f dosemu_freehandle |
0x000000000001f35b dosemu_fileread |
0x000000000001f3b2 dosemu_filewrite |
0x000000000001f414 dosemu_iosize |
0x000000000001f445 dosemu_filesize |
0x000000000001f494 dosemu_tell |
0x000000000001f4bf dosemu_lseek |
0x000000000001f51d dosemu_read |
0x000000000001f596 dosemu_write |
0x000000000001f5cb dosemu_close |
0x000000000001f602 _dosemu_flush |
0x000000000001f607 dosemu_truncate |
0x000000000001f691 dosemu_open |
*fill* 0x000000000001f813 0x1 00 |
.text 0x000000000001f814 0x39 /home/sourcerer/kos_src/me//lib/libc.a(_main.o) |
0x000000000001f814 __main |
*fill* 0x000000000001f84d 0x3 00 |
.text 0x000000000001f850 0x24 /home/sourcerer/kos_src/me//lib/libc.a(strrchr.o) |
0x000000000001f850 strrchr |
.text 0x000000000001f874 0x22 /home/sourcerer/kos_src/me//lib/libc.a(memchr.o) |
0x000000000001f874 memchr |
*fill* 0x000000000001f896 0x2 00 |
.text 0x000000000001f898 0x3f /home/sourcerer/kos_src/me//lib/libc.a(stdiohk.o) |
0x000000000001f898 __stdio_cleanup_proc |
*fill* 0x000000000001f8d7 0x1 00 |
.text 0x000000000001f8d8 0x87 /home/sourcerer/kos_src/me//lib/libc.a(remove.o) |
0x000000000001f8d8 remove |
*fill* 0x000000000001f95f 0x1 00 |
.text 0x000000000001f960 0xc /home/sourcerer/kos_src/me//lib/libc.a(putc.o) |
0x000000000001f960 putc |
.text 0x000000000001f96c 0x3f /home/sourcerer/kos_src/me//lib/libc.a(fwalk.o) |
0x000000000001f96c _fwalk |
*fill* 0x000000000001f9ab 0x1 00 |
.text 0x000000000001f9ac 0x0 /home/sourcerer/kos_src/me//lib/libc.a(frlist.o) |
.text 0x000000000001f9ac 0xb7 /home/sourcerer/kos_src/me//lib/libc.a(fputc.o) |
0x000000000001f9ac fputc |
*fill* 0x000000000001fa63 0x1 00 |
.text 0x000000000001fa64 0x148 /home/sourcerer/kos_src/me//lib/libc.a(flsbuf.o) |
0x000000000001fa64 _flsbuf |
.text 0x000000000001fbac 0x0 /home/sourcerer/kos_src/me//lib/libc.a(hooks.o) |
.text 0x000000000001fbac 0x66 /home/sourcerer/kos_src/me//lib/libc.a(fixpath.o) |
0x000000000001fbac fix_slashes |
0x000000000001fbee _fixpath |
*fill* 0x000000000001fc12 0x2 00 |
.text 0x000000000001fc14 0x22 /home/sourcerer/kos_src/me//lib/libc.a(systree.o) |
0x000000000001fc14 __kolibri__system_tree_access |
0x000000000001fc25 __kolibri__system_tree_access2 |
*fill* 0x000000000001fc36 0x2 00 |
.text 0x000000000001fc38 0x14 /home/sourcerer/kos_src/me//lib/libc.a(dosio.o) |
0x000000000001fc38 __file_handle_set |
.text 0x000000000001fc4c 0xe9 /home/sourcerer/kos_src/me//lib/libc.a(curdir.o) |
0x000000000001fc4c __get_curdir |
0x000000000001fcf8 __libc_combine_path |
0x000000000001fd21 __chdir |
*fill* 0x000000000001fd35 0x3 00 |
.text 0x000000000001fd38 0x4 /home/sourcerer/kos_src/me//lib/libc.a(stdout.o) |
.text 0x000000000001fd3c 0x4 /home/sourcerer/kos_src/me//lib/libc.a(stdin.o) |
*(.fixup) |
*(.gnu.warning) |
*(.gnu.linkonce.t*) |
*(.const) |
*(.ro*) |
.rodata.str1.1 |
0x000000000001fd40 0xbf bitmap.o |
*fill* 0x000000000001fdff 0x1 00 |
.rodata 0x000000000001fe00 0x11680 nsglobe.o |
0x000000000001fe00 nsglobe |
.rodata.str1.1 |
0x0000000000031480 0x2f /home/sourcerer/kos_src/me//lib/libnsfb.a(dump.o) |
0x31 (size before relaxing) |
*fill* 0x00000000000314af 0x1 00 |
.rodata 0x00000000000314b0 0x50 /home/sourcerer/kos_src/me//lib/libnsfb.a(16bpp.o) |
0x00000000000314b0 _nsfb_16bpp_plotters |
.rodata 0x0000000000031500 0x50 /home/sourcerer/kos_src/me//lib/libnsfb.a(32bpp-xbgr8888.o) |
0x0000000000031500 _nsfb_32bpp_xbgr8888_plotters |
.rodata 0x0000000000031550 0x50 /home/sourcerer/kos_src/me//lib/libnsfb.a(32bpp-xrgb8888.o) |
0x0000000000031550 _nsfb_32bpp_xrgb8888_plotters |
.rodata 0x00000000000315a0 0x50 /home/sourcerer/kos_src/me//lib/libnsfb.a(8bpp.o) |
0x00000000000315a0 _nsfb_8bpp_plotters |
.rodata 0x00000000000315f0 0x20 /home/sourcerer/kos_src/me//lib/libnsfb.a(generic.o) |
.rodata.cst4 0x0000000000031610 0x10 /home/sourcerer/kos_src/me//lib/libnsfb.a(generic.o) |
.rodata.str1.1 |
0x0000000000031620 0x5 /home/sourcerer/kos_src/me//lib/libnsfb.a(able.o) |
*fill* 0x0000000000031625 0x3 00 |
.rodata 0x0000000000031628 0x24 /home/sourcerer/kos_src/me//lib/libnsfb.a(able.o) |
0x0000000000031628 able_rtns |
.rodata.str1.1 |
0x000000000003164c 0x6 /home/sourcerer/kos_src/me//lib/libnsfb.a(linux.o) |
*fill* 0x0000000000031652 0x2 00 |
.rodata 0x0000000000031654 0x24 /home/sourcerer/kos_src/me//lib/libnsfb.a(linux.o) |
0x0000000000031654 linux_rtns |
.rodata.str1.1 |
0x0000000000000000 0x4 /home/sourcerer/kos_src/me//lib/libnsfb.a(ram.o) |
.rodata 0x0000000000031678 0x24 /home/sourcerer/kos_src/me//lib/libnsfb.a(ram.o) |
0x0000000000031678 ram_rtns |
.rodata.str1.1 |
0x000000000003169c 0x31 /home/sourcerer/kos_src/me//lib/libnsfb.a(sdl.o) |
0x35 (size before relaxing) |
*fill* 0x00000000000316cd 0x3 00 |
.rodata 0x00000000000316d0 0x24 /home/sourcerer/kos_src/me//lib/libnsfb.a(sdl.o) |
0x00000000000316d0 sdl_rtns |
.rodata.str1.1 |
0x00000000000316f4 0x9e /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_timer.o) |
.rodata.str1.1 |
0x0000000000031792 0x1a /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_events.o) |
.rodata.str1.1 |
0x00000000000317ac 0x567 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_keyboard.o) |
0x5b3 (size before relaxing) |
*fill* 0x0000000000031d13 0x1 00 |
.rodata 0x0000000000031d14 0x70 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_keyboard.o) |
.rodata.str1.1 |
0x0000000000031d84 0x2a /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_cursor.o) |
*fill* 0x0000000000031dae 0x2 00 |
.rodata 0x0000000000031db0 0x10 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_RLEaccel.o) |
.rodata.str1.1 |
0x0000000000031dc0 0x67 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_surface.o) |
.rodata.str1.1 |
0x0000000000031e27 0x19d /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_video.o) |
.rodata 0x0000000000031fc4 0x38 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_video.o) |
.rodata.str1.1 |
0x0000000000031ffc 0x20 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_menuetvideo.o) |
.rodata.str1.1 |
0x000000000003201c 0x65 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL.o) |
.rodata.str1.1 |
0x0000000000032081 0x8e /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_error.o) |
0x91 (size before relaxing) |
.rodata.str1.1 |
0x000000000003210f 0x192 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_kolibri_audio.o) |
.rodata.str1.1 |
0x00000000000322a1 0x27 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_syssem.o) |
.rodata.str1.1 |
0x00000000000322c8 0x2b /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_systhread.o) |
.rodata.str1.1 |
0x00000000000322f3 0x1f /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_blit.o) |
*fill* 0x0000000000032312 0x2 00 |
.rodata 0x0000000000032314 0x2350 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_blit_N.o) |
.rodata 0x0000000000034664 0x600 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_menuetevents.o) |
.rodata 0x0000000000034c64 0x28 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_blit_0.o) |
.rodata 0x0000000000034c8c 0x140 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_blit_1.o) |
.rodata 0x0000000000034dcc 0x1c /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_blit_A.o) |
.rodata.str1.1 |
0x0000000000034de8 0x2a /home/sourcerer/kos_src/me//lib/libc.a(doprnt.o) |
*fill* 0x0000000000034e12 0xe 00 |
.rodata 0x0000000000034e20 0x13c /home/sourcerer/kos_src/me//lib/libc.a(doprnt.o) |
.rodata.cst4 0x0000000000034f5c 0x10 /home/sourcerer/kos_src/me//lib/libc.a(doprnt.o) |
0x14 (size before relaxing) |
*fill* 0x0000000000034f6c 0x4 00 |
.rodata.cst16 0x0000000000034f70 0x20 /home/sourcerer/kos_src/me//lib/libc.a(doprnt.o) |
.rodata.cst8 0x0000000000034f90 0x8 /home/sourcerer/kos_src/me//lib/libc.a(doprnt.o) |
*(.gnu.linkonce.r*) |
0x0000000000034f98 ecode = . |
0x0000000000034f98 _ecode = . |
.iplt 0x0000000000034fa0 0x0 |
.iplt 0x0000000000000000 0x0 /home/sourcerer/kos_src/me//stub/crt0.o |
.text.startup 0x0000000000034f98 0x34e |
.text.startup 0x0000000000034f98 0x2de bitmap.o |
0x0000000000034f98 main |
.text.startup 0x0000000000035276 0x1c /home/sourcerer/kos_src/me//lib/libnsfb.a(able.o) |
.text.startup 0x0000000000035292 0x1c /home/sourcerer/kos_src/me//lib/libnsfb.a(linux.o) |
.text.startup 0x00000000000352ae 0x1c /home/sourcerer/kos_src/me//lib/libnsfb.a(ram.o) |
.text.startup 0x00000000000352ca 0x1c /home/sourcerer/kos_src/me//lib/libnsfb.a(sdl.o) |
.rel.dyn 0x00000000000352e8 0x0 |
.rel.iplt 0x0000000000000000 0x0 /home/sourcerer/kos_src/me//stub/crt0.o |
.rel.text 0x0000000000000000 0x0 /home/sourcerer/kos_src/me//stub/crt0.o |
.rel.text.startup |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//stub/crt0.o |
.rel.rodata 0x0000000000000000 0x0 /home/sourcerer/kos_src/me//stub/crt0.o |
.rel.data 0x0000000000000000 0x0 /home/sourcerer/kos_src/me//stub/crt0.o |
.rdata |
.data 0x00000000000352f0 0x201c |
0x00000000000352f0 djgpp_first_ctor = . |
*(.ctor) |
*(.ctors) |
0x00000000000352f0 djgpp_last_ctor = . |
0x00000000000352f0 djgpp_first_dtor = . |
*(.dtor) |
*(.dtors) |
0x00000000000352f0 djgpp_last_dtor = . |
*(.gcc_exc*) |
0x00000000000352f0 __EH_FRAME_BEGIN__ = . |
*(.eh_fram*) |
.eh_frame 0x00000000000352f0 0x5c bitmap.o |
.eh_frame 0x000000000003534c 0x120 /home/sourcerer/kos_src/me//lib/libnsfb.a(cursor.o) |
0x138 (size before relaxing) |
.eh_frame 0x000000000003546c 0x2c /home/sourcerer/kos_src/me//lib/libnsfb.a(dump.o) |
0x44 (size before relaxing) |
.eh_frame 0x0000000000035498 0x170 /home/sourcerer/kos_src/me//lib/libnsfb.a(libnsfb.o) |
0x188 (size before relaxing) |
.eh_frame 0x0000000000035608 0xc4 /home/sourcerer/kos_src/me//lib/libnsfb.a(palette.o) |
0xdc (size before relaxing) |
.eh_frame 0x00000000000356cc 0x1b0 /home/sourcerer/kos_src/me//lib/libnsfb.a(16bpp.o) |
0x1c8 (size before relaxing) |
.eh_frame 0x000000000003587c 0x16c /home/sourcerer/kos_src/me//lib/libnsfb.a(32bpp-xbgr8888.o) |
0x184 (size before relaxing) |
.eh_frame 0x00000000000359e8 0x1ac /home/sourcerer/kos_src/me//lib/libnsfb.a(32bpp-xrgb8888.o) |
0x1c4 (size before relaxing) |
.eh_frame 0x0000000000035b94 0x1cc /home/sourcerer/kos_src/me//lib/libnsfb.a(8bpp.o) |
0x1e4 (size before relaxing) |
.eh_frame 0x0000000000035d60 0x2bc /home/sourcerer/kos_src/me//lib/libnsfb.a(api.o) |
0x2d4 (size before relaxing) |
.eh_frame 0x000000000003601c 0x3d4 /home/sourcerer/kos_src/me//lib/libnsfb.a(generic.o) |
0x3ec (size before relaxing) |
.eh_frame 0x00000000000363f0 0xec /home/sourcerer/kos_src/me//lib/libnsfb.a(util.o) |
0x104 (size before relaxing) |
.eh_frame 0x00000000000364dc 0xa0 /home/sourcerer/kos_src/me//lib/libnsfb.a(able.o) |
0xb8 (size before relaxing) |
.eh_frame 0x000000000003657c 0x100 /home/sourcerer/kos_src/me//lib/libnsfb.a(linux.o) |
0x118 (size before relaxing) |
.eh_frame 0x000000000003667c 0xd8 /home/sourcerer/kos_src/me//lib/libnsfb.a(ram.o) |
0xf0 (size before relaxing) |
.eh_frame 0x0000000000036754 0x1b0 /home/sourcerer/kos_src/me//lib/libnsfb.a(sdl.o) |
0x1c8 (size before relaxing) |
.eh_frame 0x0000000000036904 0x118 /home/sourcerer/kos_src/me//lib/libnsfb.a(surface.o) |
0x130 (size before relaxing) |
0x0000000000036a1c __EH_FRAME_END__ = . |
0x0000000000036a1c 0x4 LONG 0x0 |
*(.gnu.linkonce.d*) |
*(.rodata) |
*(.rodata.*) |
*(.data) |
.data 0x0000000000036a20 0x0 bitmap.o |
.data 0x0000000000036a20 0x0 nsglobe.o |
.data 0x0000000000036a20 0x0 /home/sourcerer/kos_src/me//lib/libnsfb.a(cursor.o) |
.data 0x0000000000036a20 0x0 /home/sourcerer/kos_src/me//lib/libnsfb.a(dump.o) |
.data 0x0000000000036a20 0x0 /home/sourcerer/kos_src/me//lib/libnsfb.a(libnsfb.o) |
.data 0x0000000000036a20 0x0 /home/sourcerer/kos_src/me//lib/libnsfb.a(palette.o) |
.data 0x0000000000036a20 0x0 /home/sourcerer/kos_src/me//lib/libnsfb.a(16bpp.o) |
.data 0x0000000000036a20 0x0 /home/sourcerer/kos_src/me//lib/libnsfb.a(32bpp-xbgr8888.o) |
.data 0x0000000000036a20 0x0 /home/sourcerer/kos_src/me//lib/libnsfb.a(32bpp-xrgb8888.o) |
.data 0x0000000000036a20 0x0 /home/sourcerer/kos_src/me//lib/libnsfb.a(8bpp.o) |
.data 0x0000000000036a20 0x0 /home/sourcerer/kos_src/me//lib/libnsfb.a(api.o) |
.data 0x0000000000036a20 0x0 /home/sourcerer/kos_src/me//lib/libnsfb.a(generic.o) |
.data 0x0000000000036a20 0x0 /home/sourcerer/kos_src/me//lib/libnsfb.a(util.o) |
.data 0x0000000000036a20 0x0 /home/sourcerer/kos_src/me//lib/libnsfb.a(able.o) |
.data 0x0000000000036a20 0x0 /home/sourcerer/kos_src/me//lib/libnsfb.a(linux.o) |
.data 0x0000000000036a20 0x0 /home/sourcerer/kos_src/me//lib/libnsfb.a(ram.o) |
.data 0x0000000000036a20 0x50c /home/sourcerer/kos_src/me//lib/libnsfb.a(sdl.o) |
0x0000000000036a20 sdl_nsfb_map |
.data 0x0000000000036f2c 0x0 /home/sourcerer/kos_src/me//lib/libnsfb.a(surface.o) |
.data 0x0000000000036f2c 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_timer.o) |
.data 0x0000000000036f2c 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_systimer.o) |
.data 0x0000000000036f2c 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_events.o) |
.data 0x0000000000036f2c 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_keyboard.o) |
.data 0x0000000000036f2c 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_mouse.o) |
.data 0x0000000000036f2c 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_quit.o) |
.data 0x0000000000036f2c 0x44 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_cursor.o) |
.data 0x0000000000036f70 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_pixels.o) |
.data 0x0000000000036f70 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_RLEaccel.o) |
.data 0x0000000000036f70 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_surface.o) |
.data 0x0000000000036f70 0x20 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_video.o) |
.data 0x0000000000036f90 0x24 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_menuetvideo.o) |
0x0000000000036f90 def_title |
0x0000000000036fa4 mosvideo_bootstrab |
.data 0x0000000000036fb4 0x3 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL.o) |
*fill* 0x0000000000036fb7 0x1 00 |
.data 0x0000000000036fb8 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_error.o) |
.data 0x0000000000036fb8 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_fatal.o) |
.data 0x0000000000036fb8 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_getenv.o) |
.data 0x0000000000036fb8 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_kolibri_audio.o) |
*fill* 0x0000000000036fb8 0x8 00 |
.data 0x0000000000036fc0 0x17 /home/sourcerer/kos_src/me//lib/libSDL.a(init.o) |
0x0000000000036fc0 hSound |
0x0000000000036fc4 hrdwSound |
*fill* 0x0000000000036fd7 0x1 00 |
.data 0x0000000000036fd8 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_sysmutex.o) |
.data 0x0000000000036fd8 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_syssem.o) |
.data 0x0000000000036fd8 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_systhread.o) |
.data 0x0000000000036fd8 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_thread.o) |
.data 0x0000000000036fd8 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_active.o) |
.data 0x0000000000036fd8 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_resize.o) |
.data 0x0000000000036fd8 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_blit.o) |
.data 0x0000000000036fd8 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_blit_N.o) |
.data 0x0000000000036fd8 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_menuetevents.o) |
.data 0x0000000000036fd8 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_blit_0.o) |
.data 0x0000000000036fd8 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_blit_1.o) |
.data 0x0000000000036fd8 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_blit_A.o) |
.data 0x0000000000036fd8 0x0 /home/sourcerer/kos_src/me//lib/libc.a(dup.o) |
.data 0x0000000000036fd8 0x0 /home/sourcerer/kos_src/me//lib/libc.a(fdopen.o) |
.data 0x0000000000036fd8 0x0 /home/sourcerer/kos_src/me//lib/libc.a(debug.o) |
.data 0x0000000000036fd8 0x0 /home/sourcerer/kos_src/me//lib/libc.a(window.o) |
.data 0x0000000000036fd8 0x0 /home/sourcerer/kos_src/me//lib/libc.a(param.o) |
.data 0x0000000000036fd8 0x0 /home/sourcerer/kos_src/me//lib/libc.a(keyb.o) |
.data 0x0000000000036fd8 0x0 /home/sourcerer/kos_src/me//lib/libc.a(image.o) |
.data 0x0000000000036fd8 0x0 /home/sourcerer/kos_src/me//lib/libc.a(exit.o) |
.data 0x0000000000036fd8 0x0 /home/sourcerer/kos_src/me//lib/libc.a(event.o) |
.data 0x0000000000036fd8 0x0 /home/sourcerer/kos_src/me//lib/libc.a(delay.o) |
.data 0x0000000000036fd8 0x0 /home/sourcerer/kos_src/me//lib/libc.a(button.o) |
.data 0x0000000000036fd8 0x0 /home/sourcerer/kos_src/me//lib/libc.a(setmode.o) |
.data 0x0000000000036fd8 0x4 /home/sourcerer/kos_src/me//lib/libc.a(fmode.o) |
0x0000000000036fd8 _fmode |
.data 0x0000000000036fdc 0x4 /home/sourcerer/kos_src/me//lib/libc.a(crt1.o) |
0x0000000000036fdc __bss_count |
.data 0x0000000000036fe0 0x0 /home/sourcerer/kos_src/me//lib/libc.a(crt0.o) |
.data 0x0000000000036fe0 0x0 /home/sourcerer/kos_src/me//lib/libc.a(brk.o) |
.data 0x0000000000036fe0 0x0 /home/sourcerer/kos_src/me//lib/libc.a(strdup.o) |
.data 0x0000000000036fe0 0x0 /home/sourcerer/kos_src/me//lib/libc.a(memset.o) |
.data 0x0000000000036fe0 0x0 /home/sourcerer/kos_src/me//lib/libc.a(memmove.o) |
.data 0x0000000000036fe0 0x0 /home/sourcerer/kos_src/me//lib/libc.a(strncpy.o) |
.data 0x0000000000036fe0 0x0 /home/sourcerer/kos_src/me//lib/libc.a(strncmp.o) |
.data 0x0000000000036fe0 0x0 /home/sourcerer/kos_src/me//lib/libc.a(strlen.o) |
.data 0x0000000000036fe0 0x0 /home/sourcerer/kos_src/me//lib/libc.a(strcpy.o) |
.data 0x0000000000036fe0 0x0 /home/sourcerer/kos_src/me//lib/libc.a(strcmp.o) |
.data 0x0000000000036fe0 0x0 /home/sourcerer/kos_src/me//lib/libc.a(memcpy.o) |
.data 0x0000000000036fe0 0x0 /home/sourcerer/kos_src/me//lib/libc.a(memcmp.o) |
.data 0x0000000000036fe0 0x0 /home/sourcerer/kos_src/me//lib/libc.a(malloc.o) |
.data 0x0000000000036fe0 0x0 /home/sourcerer/kos_src/me//lib/libc.a(exit.o) |
.data 0x0000000000036fe0 0x0 /home/sourcerer/kos_src/me//lib/libc.a(calloc.o) |
.data 0x0000000000036fe0 0x0 /home/sourcerer/kos_src/me//lib/libc.a(abs.o) |
.data 0x0000000000036fe0 0x0 /home/sourcerer/kos_src/me//lib/libc.a(vsprintf.o) |
.data 0x0000000000036fe0 0x24 /home/sourcerer/kos_src/me//lib/libc.a(stderr.o) |
0x0000000000036fe0 __dj_stderr |
.data 0x0000000000037004 0x0 /home/sourcerer/kos_src/me//lib/libc.a(sprintf.o) |
.data 0x0000000000037004 0x0 /home/sourcerer/kos_src/me//lib/libc.a(fprintf.o) |
.data 0x0000000000037004 0x0 /home/sourcerer/kos_src/me//lib/libc.a(fflush.o) |
.data 0x0000000000037004 0x0 /home/sourcerer/kos_src/me//lib/libc.a(fclose.o) |
.data 0x0000000000037004 0xb /home/sourcerer/kos_src/me//lib/libc.a(doprnt.o) |
*fill* 0x000000000003700f 0x1 00 |
.data 0x0000000000037010 0x0 /home/sourcerer/kos_src/me//lib/libc.a(allocfil.o) |
.data 0x0000000000037010 0x0 /home/sourcerer/kos_src/me//lib/libc.a(modfl.o) |
.data 0x0000000000037010 0x33 /home/sourcerer/kos_src/me//lib/libc.a(lconv.o) |
*fill* 0x0000000000037043 0x1 00 |
.data 0x0000000000037044 0x0 /home/sourcerer/kos_src/me//lib/libc.a(errno.o) |
.data 0x0000000000037044 0x202 /home/sourcerer/kos_src/me//lib/libc.a(ct_flags.o) |
0x0000000000037044 __dj_ctype_flags |
*fill* 0x0000000000037246 0x2 00 |
.data 0x0000000000037248 0x0 /home/sourcerer/kos_src/me//lib/libc.a(debug.o) |
.data 0x0000000000037248 0x0 /home/sourcerer/kos_src/me//lib/libc.a(write.o) |
.data 0x0000000000037248 0x0 /home/sourcerer/kos_src/me//lib/libc.a(lseek.o) |
.data 0x0000000000037248 0x0 /home/sourcerer/kos_src/me//lib/libc.a(close.o) |
.data 0x0000000000037248 0x0 /home/sourcerer/kos_src/me//lib/libc.a(emu_init.o) |
.data 0x0000000000037248 0x0 /home/sourcerer/kos_src/me//lib/libc.a(dosemu.o) |
.data 0x0000000000037248 0x4 /home/sourcerer/kos_src/me//lib/libc.a(_main.o) |
.data 0x000000000003724c 0x0 /home/sourcerer/kos_src/me//lib/libc.a(strrchr.o) |
.data 0x000000000003724c 0x0 /home/sourcerer/kos_src/me//lib/libc.a(memchr.o) |
.data 0x000000000003724c 0x4 /home/sourcerer/kos_src/me//lib/libc.a(stdiohk.o) |
0x000000000003724c __stdio_cleanup_hook |
.data 0x0000000000037250 0x0 /home/sourcerer/kos_src/me//lib/libc.a(remove.o) |
.data 0x0000000000037250 0x0 /home/sourcerer/kos_src/me//lib/libc.a(putc.o) |
.data 0x0000000000037250 0x0 /home/sourcerer/kos_src/me//lib/libc.a(fwalk.o) |
.data 0x0000000000037250 0x5c /home/sourcerer/kos_src/me//lib/libc.a(frlist.o) |
0x0000000000037250 __file_rec_list |
.data 0x00000000000372ac 0x0 /home/sourcerer/kos_src/me//lib/libc.a(fputc.o) |
.data 0x00000000000372ac 0x0 /home/sourcerer/kos_src/me//lib/libc.a(flsbuf.o) |
.data 0x00000000000372ac 0x0 /home/sourcerer/kos_src/me//lib/libc.a(hooks.o) |
.data 0x00000000000372ac 0x0 /home/sourcerer/kos_src/me//lib/libc.a(fixpath.o) |
.data 0x00000000000372ac 0x0 /home/sourcerer/kos_src/me//lib/libc.a(systree.o) |
.data 0x00000000000372ac 0x18 /home/sourcerer/kos_src/me//lib/libc.a(dosio.o) |
0x00000000000372ac __file_handle_modes |
.data 0x00000000000372c4 0x0 /home/sourcerer/kos_src/me//lib/libc.a(curdir.o) |
.data 0x00000000000372c4 0x24 /home/sourcerer/kos_src/me//lib/libc.a(stdout.o) |
0x00000000000372c4 __dj_stdout |
.data 0x00000000000372e8 0x24 /home/sourcerer/kos_src/me//lib/libc.a(stdin.o) |
0x00000000000372e8 __dj_stdin |
0x000000000003730c edata = . |
0x000000000003730c _edata = . |
0x000000000003730c bss = . |
.igot.plt 0x000000000003730c 0x0 |
.igot.plt 0x0000000000000000 0x0 /home/sourcerer/kos_src/me//stub/crt0.o |
.init_array 0x000000000003730c 0x10 |
.init_array 0x000000000003730c 0x4 /home/sourcerer/kos_src/me//lib/libnsfb.a(able.o) |
.init_array 0x0000000000037310 0x4 /home/sourcerer/kos_src/me//lib/libnsfb.a(linux.o) |
.init_array 0x0000000000037314 0x4 /home/sourcerer/kos_src/me//lib/libnsfb.a(ram.o) |
.init_array 0x0000000000037318 0x4 /home/sourcerer/kos_src/me//lib/libnsfb.a(sdl.o) |
.bss 0x000000000003731c 0x20230 |
*(.bss) |
.bss 0x000000000003731c 0x10000 /home/sourcerer/kos_src/me//stub/crt0.o |
.bss 0x000000000004731c 0x0 bitmap.o |
.bss 0x000000000004731c 0x0 nsglobe.o |
.bss 0x000000000004731c 0x0 /home/sourcerer/kos_src/me//lib/libnsfb.a(cursor.o) |
.bss 0x000000000004731c 0x0 /home/sourcerer/kos_src/me//lib/libnsfb.a(dump.o) |
.bss 0x000000000004731c 0x0 /home/sourcerer/kos_src/me//lib/libnsfb.a(libnsfb.o) |
.bss 0x000000000004731c 0x0 /home/sourcerer/kos_src/me//lib/libnsfb.a(palette.o) |
.bss 0x000000000004731c 0x0 /home/sourcerer/kos_src/me//lib/libnsfb.a(16bpp.o) |
.bss 0x000000000004731c 0x0 /home/sourcerer/kos_src/me//lib/libnsfb.a(32bpp-xbgr8888.o) |
.bss 0x000000000004731c 0x0 /home/sourcerer/kos_src/me//lib/libnsfb.a(32bpp-xrgb8888.o) |
.bss 0x000000000004731c 0x0 /home/sourcerer/kos_src/me//lib/libnsfb.a(8bpp.o) |
.bss 0x000000000004731c 0x0 /home/sourcerer/kos_src/me//lib/libnsfb.a(api.o) |
.bss 0x000000000004731c 0x0 /home/sourcerer/kos_src/me//lib/libnsfb.a(generic.o) |
.bss 0x000000000004731c 0x0 /home/sourcerer/kos_src/me//lib/libnsfb.a(util.o) |
.bss 0x000000000004731c 0x0 /home/sourcerer/kos_src/me//lib/libnsfb.a(able.o) |
.bss 0x000000000004731c 0x0 /home/sourcerer/kos_src/me//lib/libnsfb.a(linux.o) |
.bss 0x000000000004731c 0x0 /home/sourcerer/kos_src/me//lib/libnsfb.a(ram.o) |
.bss 0x000000000004731c 0x0 /home/sourcerer/kos_src/me//lib/libnsfb.a(sdl.o) |
.bss 0x000000000004731c 0xc4 /home/sourcerer/kos_src/me//lib/libnsfb.a(surface.o) |
.bss 0x00000000000473e0 0x24 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_timer.o) |
0x00000000000473e0 SDL_timer_started |
0x00000000000473e4 SDL_timer_running |
0x00000000000473e8 SDL_alarm_interval |
0x00000000000473ec SDL_alarm_callback |
.bss 0x0000000000047404 0x4 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_systimer.o) |
.bss 0x0000000000047408 0xe4c /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_events.o) |
0x0000000000047408 SDL_EventOK |
0x000000000004740c SDL_ProcessEvents |
.bss 0x0000000000048254 0x678 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_keyboard.o) |
0x0000000000048254 SDL_TranslateUNICODE |
0x0000000000048258 SDL_KeyRepeat |
.bss 0x00000000000488cc 0xa /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_mouse.o) |
*fill* 0x00000000000488d6 0x2 00 |
.bss 0x00000000000488d8 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_quit.o) |
.bss 0x00000000000488d8 0x18 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_cursor.o) |
0x00000000000488d8 SDL_cursorstate |
0x00000000000488dc SDL_cursor |
0x00000000000488e0 SDL_cursorlock |
.bss 0x00000000000488f0 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_pixels.o) |
.bss 0x00000000000488f0 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_RLEaccel.o) |
.bss 0x00000000000488f0 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_surface.o) |
.bss 0x00000000000488f0 0x4 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_video.o) |
0x00000000000488f0 current_video |
.bss 0x00000000000488f4 0x10 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_menuetvideo.o) |
.bss 0x0000000000048904 0x8 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL.o) |
.bss 0x000000000004890c 0xb08 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_error.o) |
.bss 0x0000000000049414 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_fatal.o) |
.bss 0x0000000000049414 0x4 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_getenv.o) |
.bss 0x0000000000049418 0x4438 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_kolibri_audio.o) |
0x0000000000049418 audio_thread_stack |
.bss 0x000000000004d850 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_sysmutex.o) |
.bss 0x000000000004d850 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_syssem.o) |
.bss 0x000000000004d850 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_systhread.o) |
.bss 0x000000000004d850 0x31c /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_thread.o) |
0x000000000004d850 _creating_thread_lock |
.bss 0x000000000004db6c 0x1 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_active.o) |
*fill* 0x000000000004db6d 0x3 00 |
.bss 0x000000000004db70 0x8 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_resize.o) |
.bss 0x000000000004db78 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_blit.o) |
.bss 0x000000000004db78 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_blit_N.o) |
.bss 0x000000000004db78 0xc /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_menuetevents.o) |
.bss 0x000000000004db84 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_blit_0.o) |
.bss 0x000000000004db84 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_blit_1.o) |
.bss 0x000000000004db84 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_blit_A.o) |
.bss 0x000000000004db84 0x0 /home/sourcerer/kos_src/me//lib/libc.a(dup.o) |
.bss 0x000000000004db84 0x0 /home/sourcerer/kos_src/me//lib/libc.a(fdopen.o) |
.bss 0x000000000004db84 0x0 /home/sourcerer/kos_src/me//lib/libc.a(debug.o) |
.bss 0x000000000004db84 0x0 /home/sourcerer/kos_src/me//lib/libc.a(window.o) |
.bss 0x000000000004db84 0x800 /home/sourcerer/kos_src/me//lib/libc.a(param.o) |
0x000000000004db84 __menuet__app_param_area |
0x000000000004df84 __menuet__app_path_area |
.bss 0x000000000004e384 0x0 /home/sourcerer/kos_src/me//lib/libc.a(keyb.o) |
.bss 0x000000000004e384 0x0 /home/sourcerer/kos_src/me//lib/libc.a(image.o) |
.bss 0x000000000004e384 0x0 /home/sourcerer/kos_src/me//lib/libc.a(exit.o) |
.bss 0x000000000004e384 0x0 /home/sourcerer/kos_src/me//lib/libc.a(event.o) |
.bss 0x000000000004e384 0x0 /home/sourcerer/kos_src/me//lib/libc.a(delay.o) |
.bss 0x000000000004e384 0x0 /home/sourcerer/kos_src/me//lib/libc.a(button.o) |
.bss 0x000000000004e384 0x4 /home/sourcerer/kos_src/me//lib/libc.a(setmode.o) |
0x000000000004e384 __setmode_stdio_hook |
.bss 0x000000000004e388 0x0 /home/sourcerer/kos_src/me//lib/libc.a(fmode.o) |
.bss 0x000000000004e388 0x14 /home/sourcerer/kos_src/me//lib/libc.a(crt1.o) |
0x000000000004e388 __crt0_argc |
0x000000000004e38c __crt0_argv |
0x000000000004e390 __dos_argv0 |
0x000000000004e394 _crt0_startup_flags |
0x000000000004e398 environ |
.bss 0x000000000004e39c 0x0 /home/sourcerer/kos_src/me//lib/libc.a(crt0.o) |
.bss 0x000000000004e39c 0x18 /home/sourcerer/kos_src/me//lib/libc.a(brk.o) |
.bss 0x000000000004e3b4 0x0 /home/sourcerer/kos_src/me//lib/libc.a(strdup.o) |
.bss 0x000000000004e3b4 0x0 /home/sourcerer/kos_src/me//lib/libc.a(memset.o) |
.bss 0x000000000004e3b4 0x0 /home/sourcerer/kos_src/me//lib/libc.a(memmove.o) |
.bss 0x000000000004e3b4 0x0 /home/sourcerer/kos_src/me//lib/libc.a(strncpy.o) |
.bss 0x000000000004e3b4 0x0 /home/sourcerer/kos_src/me//lib/libc.a(strncmp.o) |
.bss 0x000000000004e3b4 0x0 /home/sourcerer/kos_src/me//lib/libc.a(strlen.o) |
.bss 0x000000000004e3b4 0x0 /home/sourcerer/kos_src/me//lib/libc.a(strcpy.o) |
.bss 0x000000000004e3b4 0x0 /home/sourcerer/kos_src/me//lib/libc.a(strcmp.o) |
.bss 0x000000000004e3b4 0x0 /home/sourcerer/kos_src/me//lib/libc.a(memcpy.o) |
.bss 0x000000000004e3b4 0x0 /home/sourcerer/kos_src/me//lib/libc.a(memcmp.o) |
.bss 0x000000000004e3b4 0x80 /home/sourcerer/kos_src/me//lib/libc.a(malloc.o) |
.bss 0x000000000004e434 0x8 /home/sourcerer/kos_src/me//lib/libc.a(exit.o) |
0x000000000004e434 __atexit_ptr |
0x000000000004e438 keypress_at_exit |
.bss 0x000000000004e43c 0x0 /home/sourcerer/kos_src/me//lib/libc.a(calloc.o) |
.bss 0x000000000004e43c 0x0 /home/sourcerer/kos_src/me//lib/libc.a(abs.o) |
.bss 0x000000000004e43c 0x0 /home/sourcerer/kos_src/me//lib/libc.a(vsprintf.o) |
.bss 0x000000000004e43c 0x0 /home/sourcerer/kos_src/me//lib/libc.a(stderr.o) |
.bss 0x000000000004e43c 0x0 /home/sourcerer/kos_src/me//lib/libc.a(sprintf.o) |
.bss 0x000000000004e43c 0x0 /home/sourcerer/kos_src/me//lib/libc.a(fprintf.o) |
.bss 0x000000000004e43c 0x0 /home/sourcerer/kos_src/me//lib/libc.a(fflush.o) |
.bss 0x000000000004e43c 0x0 /home/sourcerer/kos_src/me//lib/libc.a(fclose.o) |
.bss 0x000000000004e43c 0x4 /home/sourcerer/kos_src/me//lib/libc.a(doprnt.o) |
.bss 0x000000000004e440 0x0 /home/sourcerer/kos_src/me//lib/libc.a(allocfil.o) |
.bss 0x000000000004e440 0x0 /home/sourcerer/kos_src/me//lib/libc.a(modfl.o) |
.bss 0x000000000004e440 0x0 /home/sourcerer/kos_src/me//lib/libc.a(lconv.o) |
.bss 0x000000000004e440 0x4 /home/sourcerer/kos_src/me//lib/libc.a(errno.o) |
0x000000000004e440 errno |
.bss 0x000000000004e444 0x0 /home/sourcerer/kos_src/me//lib/libc.a(ct_flags.o) |
.bss 0x000000000004e444 0x400 /home/sourcerer/kos_src/me//lib/libc.a(debug.o) |
.bss 0x000000000004e844 0x0 /home/sourcerer/kos_src/me//lib/libc.a(write.o) |
.bss 0x000000000004e844 0x0 /home/sourcerer/kos_src/me//lib/libc.a(lseek.o) |
.bss 0x000000000004e844 0x0 /home/sourcerer/kos_src/me//lib/libc.a(close.o) |
.bss 0x000000000004e844 0x8800 /home/sourcerer/kos_src/me//lib/libc.a(emu_init.o) |
0x000000000004e844 _io_handles |
0x0000000000056c44 __curdir_buf |
.bss 0x0000000000057044 0x100 /home/sourcerer/kos_src/me//lib/libc.a(dosemu.o) |
.bss 0x0000000000057144 0x0 /home/sourcerer/kos_src/me//lib/libc.a(_main.o) |
.bss 0x0000000000057144 0x0 /home/sourcerer/kos_src/me//lib/libc.a(strrchr.o) |
.bss 0x0000000000057144 0x0 /home/sourcerer/kos_src/me//lib/libc.a(memchr.o) |
.bss 0x0000000000057144 0x0 /home/sourcerer/kos_src/me//lib/libc.a(stdiohk.o) |
.bss 0x0000000000057144 0x0 /home/sourcerer/kos_src/me//lib/libc.a(remove.o) |
.bss 0x0000000000057144 0x0 /home/sourcerer/kos_src/me//lib/libc.a(putc.o) |
.bss 0x0000000000057144 0x0 /home/sourcerer/kos_src/me//lib/libc.a(fwalk.o) |
.bss 0x0000000000057144 0x0 /home/sourcerer/kos_src/me//lib/libc.a(frlist.o) |
.bss 0x0000000000057144 0x0 /home/sourcerer/kos_src/me//lib/libc.a(fputc.o) |
.bss 0x0000000000057144 0x0 /home/sourcerer/kos_src/me//lib/libc.a(flsbuf.o) |
.bss 0x0000000000057144 0x8 /home/sourcerer/kos_src/me//lib/libc.a(hooks.o) |
0x0000000000057144 __libc_read_termios_hook |
0x0000000000057148 __libc_write_termios_hook |
.bss 0x000000000005714c 0x0 /home/sourcerer/kos_src/me//lib/libc.a(fixpath.o) |
.bss 0x000000000005714c 0x0 /home/sourcerer/kos_src/me//lib/libc.a(systree.o) |
.bss 0x000000000005714c 0x0 /home/sourcerer/kos_src/me//lib/libc.a(dosio.o) |
.bss 0x000000000005714c 0x400 /home/sourcerer/kos_src/me//lib/libc.a(curdir.o) |
.bss 0x000000000005754c 0x0 /home/sourcerer/kos_src/me//lib/libc.a(stdout.o) |
.bss 0x000000000005754c 0x0 /home/sourcerer/kos_src/me//lib/libc.a(stdin.o) |
*(.note.gnu.build-id) |
0x000000000005754c end = . |
0x000000000005754c _end = . |
LOAD /home/sourcerer/kos_src/me//stub/crt0.o |
LOAD bitmap.o |
LOAD nsglobe.o |
LOAD /home/sourcerer/kos_src/me//lib/libm.a |
LOAD /home/sourcerer/kos_src/me//lib/libnsfb.a |
LOAD /home/sourcerer/kos_src/me//lib/libSDL.a |
LOAD /home/sourcerer/kos_src/me//lib/libc.a |
OUTPUT(bitmap elf32-i386) |
.comment 0x0000000000000000 0x38 |
.comment 0x0000000000000000 0x1c bitmap.o |
0x1d (size before relaxing) |
.comment 0x0000000000000000 0x1d nsglobe.o |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libnsfb.a(cursor.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libnsfb.a(dump.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libnsfb.a(libnsfb.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libnsfb.a(palette.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libnsfb.a(16bpp.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libnsfb.a(32bpp-xbgr8888.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libnsfb.a(32bpp-xrgb8888.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libnsfb.a(8bpp.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libnsfb.a(api.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libnsfb.a(generic.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libnsfb.a(util.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libnsfb.a(able.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libnsfb.a(linux.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libnsfb.a(ram.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libnsfb.a(sdl.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libnsfb.a(surface.o) |
.comment 0x000000000000001c 0x1c /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_timer.o) |
0x1d (size before relaxing) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_systimer.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_events.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_keyboard.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_mouse.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_quit.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_cursor.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_pixels.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_RLEaccel.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_surface.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_video.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_menuetvideo.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libSDL.a(SDL.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_error.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_fatal.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_getenv.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_kolibri_audio.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_sysmutex.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_syssem.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_systhread.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_thread.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_active.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_resize.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_blit.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_blit_N.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_menuetevents.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_blit_0.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_blit_1.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_blit_A.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(dup.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(fdopen.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(debug.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(window.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(param.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(keyb.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(image.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(exit.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(event.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(delay.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(button.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(setmode.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(fmode.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(crt1.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(crt0.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(brk.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(strdup.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(strncpy.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(strncmp.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(strlen.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(strcpy.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(strcmp.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(memcpy.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(memcmp.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(malloc.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(exit.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(calloc.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(abs.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(vsprintf.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(stderr.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(sprintf.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(fprintf.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(fflush.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(fclose.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(doprnt.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(allocfil.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(lconv.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(errno.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(ct_flags.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(debug.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(write.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(lseek.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(close.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(emu_init.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(dosemu.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(_main.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(strrchr.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(memchr.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(stdiohk.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(remove.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(putc.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(fwalk.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(frlist.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(fputc.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(flsbuf.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(hooks.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(fixpath.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(systree.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(dosio.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(curdir.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(stdout.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(stdin.o) |
.note.GNU-stack |
0x0000000000000000 0x0 |
.note.GNU-stack |
0x0000000000000000 0x0 bitmap.o |
.note.GNU-stack |
0x0000000000000000 0x0 nsglobe.o |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libnsfb.a(cursor.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libnsfb.a(dump.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libnsfb.a(libnsfb.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libnsfb.a(palette.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libnsfb.a(16bpp.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libnsfb.a(32bpp-xbgr8888.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libnsfb.a(32bpp-xrgb8888.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libnsfb.a(8bpp.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libnsfb.a(api.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libnsfb.a(generic.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libnsfb.a(util.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libnsfb.a(able.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libnsfb.a(linux.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libnsfb.a(ram.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libnsfb.a(sdl.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libnsfb.a(surface.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_timer.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_systimer.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_events.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_keyboard.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_mouse.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_quit.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_cursor.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_pixels.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_RLEaccel.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_surface.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_video.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_menuetvideo.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_error.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_fatal.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_getenv.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_kolibri_audio.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_sysmutex.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_syssem.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_systhread.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_thread.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_active.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_resize.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_blit.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_blit_N.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_menuetevents.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_blit_0.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_blit_1.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_blit_A.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(dup.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(fdopen.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(debug.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(window.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(param.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(keyb.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(image.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(exit.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(event.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(delay.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(button.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(setmode.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(fmode.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(crt1.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(crt0.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(brk.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(strdup.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(strncpy.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(strncmp.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(strlen.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(strcpy.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(strcmp.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(memcpy.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(memcmp.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(malloc.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(exit.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(calloc.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(abs.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(vsprintf.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(stderr.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(sprintf.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(fprintf.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(fflush.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(fclose.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(doprnt.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(allocfil.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(lconv.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(errno.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(ct_flags.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(debug.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(write.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(lseek.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(close.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(emu_init.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(dosemu.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(_main.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(strrchr.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(memchr.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(stdiohk.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(remove.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(putc.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(fwalk.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(frlist.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(fputc.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(flsbuf.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(hooks.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(fixpath.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(systree.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(dosio.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(curdir.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(stdout.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(stdin.o) |
/contrib/network/netsurf/libnsfb/test/frontend.c |
---|
0,0 → 1,72 |
#include <stdio.h> |
#include <stdbool.h> |
#include <stdlib.h> |
#include <unistd.h> |
#include "libnsfb.h" |
#include "libnsfb_event.h" |
int main(int argc, char **argv) |
{ |
nsfb_t *nsfb; |
const char *fename; |
enum nsfb_type_e fetype; |
nsfb_event_t event; |
int waitloop = 3; |
if (argc < 2) { |
fename="sdl"; |
} else { |
fename = argv[1]; |
} |
fetype = nsfb_type_from_name(fename); |
if (fetype == NSFB_SURFACE_NONE) { |
fprintf(stderr, "Unable to convert \"%s\" to nsfb surface type\n", fename); |
return 1; |
} |
nsfb = nsfb_new(fetype); |
if (nsfb == NULL) { |
fprintf(stderr, "Unable to allocate \"%s\" nsfb surface\n", fename); |
return 2; |
} |
if (nsfb_set_geometry(nsfb, 0, 0, NSFB_FMT_ANY) == -1) { |
fprintf(stderr, "Unable to set surface geometry\n"); |
nsfb_free(nsfb); |
return 3; |
} |
if (nsfb_init(nsfb) == -1) { |
fprintf(stderr, "Unable to initialise nsfb surface\n"); |
nsfb_free(nsfb); |
return 4; |
} |
/* wait for quit event or timeout */ |
while (waitloop > 0) { |
if (nsfb_event(nsfb, &event, 1000) == false) { |
break; |
} |
if (event.type == NSFB_EVENT_CONTROL) { |
if (event.value.controlcode == NSFB_CONTROL_TIMEOUT) { |
/* timeout */ |
waitloop--; |
} else if (event.value.controlcode == NSFB_CONTROL_QUIT) { |
break; |
} |
} |
} |
nsfb_free(nsfb); |
return 0; |
} |
/* |
* Local variables: |
* c-basic-offset: 4 |
* tab-width: 8 |
* End: |
*/ |
/contrib/network/netsurf/libnsfb/test/nsglobe.c |
---|
0,0 → 1,2933 |
/* GIMP RGBA C-Source image dump (nnglobe.c) */ |
const struct { |
unsigned int width; |
unsigned int height; |
unsigned int bytes_per_pixel; /* 3:RGB, 4:RGBA */ |
unsigned char pixel_data[132 * 135 * 4 + 1]; |
} nsglobe = { |
132, 135, 4, |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\377\0\0" |
"\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0" |
"\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377" |
"\0\0\0\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377" |
"\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0" |
"\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0" |
"\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0" |
"\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0" |
"\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377" |
"\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0" |
"\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0" |
"\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0" |
"\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\377" |
"\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0" |
"\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0" |
"\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0" |
"\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377" |
"\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0" |
"\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0" |
"\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377" |
"\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0" |
"\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\17$0\377\0\0\0\377\0\0\0\377\0\0\0" |
"\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377" |
"\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0" |
"\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0" |
"\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377" |
"\4\12\15\377\24.=\377\36Qn\3773x\236\377G\211\253\377\\\301\370\377\\\301" |
"\370\377\201\324\367\377|\326\377\377z\325\377\377z\325\377\377z\325\377" |
"\377x\324\377\377v\323\377\377v\323\377\377o\317\377\377Z\277\367\377Z\277" |
"\367\377G\211\253\3773x\236\377\36Qn\377\17$0\377\4\12\15\377\0\0\0\377\0" |
"\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0" |
"\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377" |
"\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0" |
"\0\0\377\0\0\0\377\10\24\32\377\31Fb\377G\211\253\377|\326\377\377\211\334" |
"\377\377\207\333\377\377\207\333\377\377\207\333\377\377\177\330\377\377" |
"~\327\377\377~\327\377\377~\327\377\377~\327\377\377|\326\377\377z\325\377" |
"\377z\325\377\377x\324\377\377v\323\377\377t\322\377\377t\322\377\377t\322" |
"\377\377t\322\377\377o\317\377\377o\317\377\377k\315\377\377k\315\377\377" |
"k\315\377\377Z\277\367\377G\211\253\377\36Qn\377\10\27\40\377\0\0\0\377\0" |
"\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0" |
"\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0" |
"\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377" |
"\0\0\0\377\0\0\0\377\0\0\0\377\25<S\377A\202\244\377\203\316\353\377\216" |
"\336\377\377\213\336\377\377\213\336\377\377\204\323\364\377\216\336\377" |
"\377\207\333\377\377\207\333\377\377\207\333\377\377\201\324\367\377\204" |
"\332\377\377~\327\377\377\177\330\377\377~\327\377\377|\326\377\377z\325" |
"\377\377z\325\377\377x\324\377\377v\323\377\377t\322\377\377t\322\377\377" |
"t\322\377\377l\316\377\377o\317\377\377o\317\377\377o\317\377\377o\317\377" |
"\377h\314\377\377h\314\377\377e\312\377\377e\312\377\377e\312\377\377\\\301" |
"\370\377>\211\263\377\25<S\377\3\4\6\377\0\0\0\377\0\0\0\377\0\0\0\377\0" |
"\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0" |
"\0\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0" |
"\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377" |
"\0\0\0\377\0\0\0\377\17$0\3773x\236\377\201\313\347\377\222\341\377\377\222" |
"\341\377\377\216\336\377\377\216\336\377\377\215\336\377\377\213\336\377" |
"\377\213\336\377\377\211\334\377\377\207\333\377\377\207\333\377\377\207" |
"\333\377\377\207\333\377\377\204\332\377\377~\327\377\377\177\330\377\377" |
"~\327\377\377~\327\377\377|\326\377\377z\325\377\377z\325\377\377x\324\377" |
"\377v\323\377\377t\322\377\377t\322\377\377t\322\377\377t\322\377\377o\317" |
"\377\377o\317\377\377k\315\377\377k\315\377\377h\314\377\377h\314\377\377" |
"e\312\377\377e\312\377\377c\311\377\377c\311\377\377c\311\377\377Z\277\367" |
"\3773x\236\377\24.=\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377" |
"\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377" |
"\0\0\0\377\0\0\0\377\0\0\0\377\4\12\15\377\36Qn\377\201\313\347\377\227\343" |
"\377\377\222\341\377\377\222\341\377\377\222\341\377\377\222\341\377\377" |
"\222\341\377\377\216\336\377\377\215\336\377\377\215\336\377\377\213\336" |
"\377\377\213\336\377\377\213\336\377\377\207\333\377\377\207\333\377\377" |
"\207\333\377\377\204\332\377\377\204\332\377\377\204\332\377\377~\327\377" |
"\377~\327\377\377|\326\377\377z\325\377\377z\325\377\377x\324\377\377v\323" |
"\377\377v\323\377\377t\322\377\377t\322\377\377l\316\377\377l\316\377\377" |
"t\322\377\377l\316\377\377k\315\377\377k\315\377\377h\314\377\377h\314\377" |
"\377e\312\377\377e\312\377\377c\311\377\377a\310\377\377a\310\377\377]\306" |
"\377\377]\306\377\377D\271\376\377\35Wz\377\6\16\24\377\0\0\0\377\0\0\0\377" |
"\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0" |
"\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0" |
"\0\0\377\0\0\0\377\4\12\15\377\35Wz\377\203\316\353\377\231\344\376\377\231" |
"\344\376\377\227\343\377\377\227\343\377\377\227\343\377\377\222\341\377" |
"\377\222\341\377\377\222\341\377\377\222\341\377\377\215\336\377\377\215" |
"\336\377\377\215\336\377\377\215\336\377\377\213\336\377\377\207\333\377" |
"\377\211\334\377\377\207\333\377\377\207\333\377\377\204\332\377\377\177" |
"\330\377\377\204\332\377\377~\327\377\377~\327\377\377|\326\377\377z\325" |
"\377\377z\325\377\377x\324\377\377x\324\377\377t\322\377\377v\323\377\377" |
"l\316\377\377l\316\377\377o\317\377\377l\316\377\377k\315\377\377k\315\377" |
"\377k\315\377\377h\314\377\377e\312\377\377e\312\377\377c\311\377\377c\311" |
"\377\377c\311\377\377_\307\377\377]\306\377\377]\306\377\377]\304\375\377" |
"\\\301\370\3773x\236\377\10\24\32\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0" |
"\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377" |
"\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\6\16\24\3773x\236\377\204\323\364" |
"\377\234\346\376\377\234\346\376\377\231\344\376\377\231\344\376\377\231" |
"\344\376\377\227\343\377\377\222\341\377\377\225\343\377\377\222\341\377" |
"\377\223\342\377\377\222\341\377\377\222\341\377\377\222\341\377\377\215" |
"\336\377\377\211\334\377\377\213\336\377\377\213\336\377\377\211\334\377" |
"\377\207\333\377\377\207\333\377\377\204\332\377\377\204\332\377\377~\327" |
"\377\377\200\330\377\377~\327\377\377|\326\377\377|\326\377\377z\325\377" |
"\377x\324\377\377v\323\377\377v\323\377\377t\322\377\377t\322\377\377t\322" |
"\377\377t\322\377\377t\322\377\377k\315\377\377l\316\377\377h\314\377\377" |
"h\314\377\377h\314\377\377e\312\377\377c\311\377\377c\311\377\377_\307\377" |
"\377_\307\377\377_\307\377\377]\306\377\377]\304\375\377W\303\377\377V\302" |
"\377\377T\301\376\3773x\236\377\10\24\32\377\0\0\0\377\0\0\0\377\0\0\0\377" |
"\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377" |
"\0\0\0\377\0\0\0\377\25<S\377\203\316\353\377\241\350\377\377\241\350\377" |
"\377\234\346\376\377\234\346\376\377\234\346\376\377\231\344\376\377\231" |
"\344\376\377\231\344\376\377\231\344\376\377\225\343\377\377\225\343\377" |
"\377\222\341\377\377\222\341\377\377\222\341\377\377\222\341\377\377\216" |
"\336\377\377\216\336\377\377\215\336\377\377\213\336\377\377\211\334\377" |
"\377\211\334\377\377\204\332\377\377\207\333\377\377\204\332\377\377~\327" |
"\377\377\200\330\377\377\200\330\377\377~\327\377\377|\326\377\377z\325\377" |
"\377z\325\377\377x\324\377\377v\323\377\377t\322\377\377t\322\377\377t\322" |
"\377\377l\316\377\377t\322\377\377l\316\377\377l\316\377\377k\315\377\377" |
"h\314\377\377h\314\377\377h\314\377\377e\312\377\377c\311\377\377_\307\377" |
"\377c\311\377\377_\307\377\377]\304\375\377]\304\375\377W\303\377\377W\303" |
"\377\377W\303\377\377V\302\377\377N\276\377\377&p\234\377\4\12\15\377\0\0" |
"\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0" |
"\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377" |
"\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\36Qn\377\234\346\376\377\241\350" |
"\377\377\241\350\377\377\234\346\376\377\234\346\376\377\234\346\376\377" |
"\234\346\376\377\231\344\376\377\231\344\376\377\231\344\376\377\225\343" |
"\377\377\225\343\377\377\225\343\377\377\222\341\377\377\222\341\377\377" |
"\222\341\377\377\216\336\377\377\215\336\377\377\213\336\377\377\213\336" |
"\377\377\211\334\377\377\207\333\377\377\207\333\377\377\204\332\377\377" |
"\204\332\377\377\200\330\377\377\200\330\377\377~\327\377\377|\326\377\377" |
"z\325\377\377z\325\377\377x\324\377\377v\323\377\377x\324\377\377t\322\377" |
"\377t\322\377\377t\322\377\377l\316\377\377l\316\377\377l\316\377\377k\315" |
"\377\377h\314\377\377h\314\377\377e\312\377\377e\312\377\377c\311\377\377" |
"c\311\377\377_\307\377\377_\307\377\377]\306\377\377]\304\375\377]\306\377" |
"\377W\303\377\377W\303\377\377V\302\377\377T\301\376\377T\301\376\377D\266" |
"\372\377\25<S\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0" |
"\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377" |
"\0\0\0\377\3\4\6\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377G\211\253\377" |
"\241\350\377\377\241\350\377\377\241\350\377\377\234\346\376\377\241\350" |
"\377\377\236\346\377\377\234\346\376\377\234\346\376\377\231\344\376\377" |
"\231\344\376\377\231\344\376\377\225\343\377\377\223\342\377\377\223\342" |
"\377\377\222\341\377\377\222\341\377\377\215\336\377\377\215\336\377\377" |
"\215\336\377\377\213\336\377\377\211\334\377\377\207\333\377\377\207\333" |
"\377\377\204\332\377\377\204\332\377\377\200\330\377\377\200\330\377\377" |
"\200\330\377\377~\327\377\377~\327\377\377z\325\377\377z\325\377\377x\324" |
"\377\377v\323\377\377v\323\377\377t\322\377\377p\320\377\377p\320\377\377" |
"o\317\377\377k\315\377\377k\315\377\377k\315\377\377e\312\377\377h\314\377" |
"\377c\311\377\377c\311\377\377c\311\377\377c\311\377\377]\306\377\377a\310" |
"\377\377]\306\377\377]\304\375\377X\303\377\377V\302\377\377V\302\377\377" |
"V\302\377\377T\301\376\377T\301\376\377N\276\377\377G\211\253\377\10\27\40" |
"\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377" |
"\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377" |
"\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\24""5H\377\24.=\377\0\0\0\377\0" |
"\0\0\377\0\0\0\377\0\0\0\377\203\316\353\377\241\350\377\377\241\350\377" |
"\377\241\350\377\377\234\346\376\377\241\350\377\377\241\350\377\377\234" |
"\346\376\377\234\346\376\377\234\346\376\377\231\344\376\377\231\344\376" |
"\377\225\343\377\377\225\343\377\377\223\342\377\377\223\342\377\377\222" |
"\341\377\377\222\341\377\377\215\336\377\377\215\336\377\377\213\336\377" |
"\377\213\336\377\377\207\333\377\377\207\333\377\377\207\333\377\377\204" |
"\332\377\377\205\332\377\377\200\330\377\377\200\330\377\377~\327\377\377" |
"|\326\377\377|\326\377\377z\325\377\377x\324\377\377v\323\377\377v\323\377" |
"\377t\322\377\377p\320\377\377p\320\377\377o\317\377\377o\317\377\377o\317" |
"\377\377k\315\377\377k\315\377\377e\312\377\377h\314\377\377e\312\377\377" |
"c\311\377\377c\311\377\377_\307\377\377]\306\377\377]\306\377\377]\304\375" |
"\377V\302\377\377V\302\377\377V\302\377\377V\302\377\377T\301\376\377T\301" |
"\376\377N\276\377\377N\276\377\377D\266\372\377\36Qn\377\0\0\0\377\0\0\0" |
"\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0" |
"\0\0\3773x\236\377\234\346\376\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377" |
"\17$0\377\246\354\377\377\246\354\377\377\241\350\377\377\246\354\377\377" |
"\241\350\377\377\241\350\377\377\236\346\377\377\241\350\377\377\241\350" |
"\377\377\234\346\376\377\234\346\376\377\231\344\376\377\231\344\376\377" |
"\231\344\376\377\225\343\377\377\223\342\377\377\222\341\377\377\222\341" |
"\377\377\215\336\377\377\215\336\377\377\215\336\377\377\213\336\377\377" |
"\213\336\377\377\211\334\377\377\207\333\377\377\207\333\377\377\200\330" |
"\377\377~\327\377\377~\327\377\377~\327\377\377~\327\377\377|\326\377\377" |
"z\325\377\377x\324\377\377w\323\377\377v\323\377\377v\323\377\377t\322\377" |
"\377p\320\377\377o\317\377\377o\317\377\377k\315\377\377k\315\377\377h\314" |
"\377\377h\314\377\377e\312\377\377c\311\377\377c\311\377\377_\307\377\377" |
"c\311\377\377]\306\377\377]\306\377\377]\306\377\377X\303\377\377]\304\375" |
"\377W\303\377\377V\302\377\377T\301\376\377T\301\376\377N\276\377\377J\274" |
"\377\377J\274\377\377J\274\377\3773x\236\377\4\12\15\377\0\0\0\377\0\0\0" |
"\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\377\0\0\0" |
"\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\10\24\32\377\201\313\347\377" |
"\246\354\377\377G\211\253\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\36" |
"Qn\377\246\354\377\377\246\354\377\377\246\354\377\377\241\350\377\377\246" |
"\354\377\377\241\350\377\377\241\350\377\377\241\350\377\377\234\346\376" |
"\377\234\346\376\377\237\347\377\377\231\344\376\377\225\343\377\377\231" |
"\344\376\377\225\343\377\377\223\342\377\377\223\342\377\377\222\341\377" |
"\377\222\341\377\377\222\341\377\377\213\336\377\377\213\336\377\377\213" |
"\336\377\377\211\334\377\377\207\333\377\377\207\333\377\377\207\333\377" |
"\377\207\333\377\377\200\330\377\377\200\330\377\377~\327\377\377|\326\377" |
"\377|\326\377\377x\324\377\377w\323\377\377v\323\377\377p\320\377\377p\320" |
"\377\377p\320\377\377p\320\377\377o\317\377\377o\317\377\377k\315\377\377" |
"h\314\377\377h\314\377\377e\312\377\377e\312\377\377c\311\377\377c\311\377" |
"\377_\307\377\377]\306\377\377]\306\377\377]\304\375\377X\303\377\377V\302" |
"\377\377W\303\377\377V\302\377\377T\301\376\377T\301\376\377N\276\377\377" |
"T\301\376\377Q\277\377\377J\274\377\377I\274\377\377\37\222\335\377\11\33" |
"'\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\377\0\0" |
"\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\24.=\377\203\316\353\377\250" |
"\355\377\377\250\355\377\377\35Wz\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0" |
"\377G\211\253\377\246\354\377\377\246\354\377\377\246\354\377\377\246\354" |
"\377\377\241\350\377\377\243\351\377\377\241\350\377\377\241\350\377\377" |
"\241\350\377\377\241\350\377\377\234\346\376\377\234\346\376\377\225\343" |
"\377\377\231\344\376\377\231\344\376\377\225\343\377\377\223\342\377\377" |
"\222\341\377\377\222\341\377\377\215\336\377\377\215\336\377\377\215\336" |
"\377\377\213\336\377\377\213\336\377\377\211\334\377\377\207\333\377\377" |
"\204\332\377\377\204\332\377\377~\327\377\377~\327\377\377~\327\377\377|" |
"\326\377\377|\326\377\377x\324\377\377w\323\377\377w\323\377\377v\323\377" |
"\377t\322\377\377p\320\377\377p\320\377\377o\317\377\377m\316\377\377k\315" |
"\377\377h\314\377\377h\314\377\377h\314\377\377e\312\377\377c\311\377\377" |
"c\311\377\377_\307\377\377\205\332\377\377\207\333\377\377]\304\375\377]" |
"\306\377\377X\303\377\377V\302\377\377V\302\377\377V\302\377\377T\301\376" |
"\377N\276\377\377N\276\377\377N\276\377\377T\301\376\377I\274\377\377I\274" |
"\377\377D\266\372\377\31Fb\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0" |
"\0\0\377\0\0\0\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0" |
"\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\25<S\377\241\350" |
"\377\377\250\355\377\377\255\357\377\377\250\355\377\377\24.=\377\0\0\0\377" |
"\0\0\0\377\0\0\0\377\0\0\0\377\203\316\353\377\250\355\377\377\246\354\377" |
"\377\246\354\377\377\246\354\377\377\246\354\377\377\241\350\377\377\241" |
"\350\377\377\241\350\377\377\234\346\376\377\241\350\377\377\237\347\377" |
"\377\234\346\376\377\234\346\376\377\231\344\376\377\231\344\376\377\225" |
"\343\377\377\223\342\377\377\223\342\377\377\222\341\377\377\222\341\377" |
"\377\215\336\377\377\215\336\377\377\213\336\377\377\211\334\377\377\211" |
"\334\377\377\207\333\377\377\207\333\377\377\204\332\377\377\204\332\377" |
"\377\204\332\377\377~\327\377\377|\326\377\377|\326\377\377|\326\377\377" |
"z\325\377\377w\323\377\377v\323\377\377v\323\377\377p\320\377\377p\320\377" |
"\377o\317\377\377o\317\377\377k\315\377\377k\315\377\377h\314\377\377e\312" |
"\377\377h\314\377\377c\311\377\377c\311\377\377h\314\377\377\370\374\377" |
"\377\376\377\377\377t\322\377\377X\303\377\377X\303\377\377X\303\377\377" |
"V\302\377\377Q\277\377\377N\276\377\377T\301\376\377T\301\376\377N\276\377" |
"\377J\274\377\377J\274\377\377I\274\377\377I\274\377\377I\274\377\377\36" |
"Qn\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0" |
"\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0" |
"\0\0\377\0\0\0\377\36Qn\377\246\354\377\377\250\355\377\377\255\357\377\377" |
"\255\357\377\377\241\350\377\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377" |
"\17$0\377\250\355\377\377\255\357\377\377\250\355\377\377\246\354\377\377" |
"\246\354\377\377\246\354\377\377\243\351\377\377\243\351\377\377\243\351" |
"\377\377\241\350\377\377\234\346\376\377\237\347\377\377\234\346\376\377" |
"\234\346\376\377\231\344\376\377\231\344\376\377\225\343\377\377\225\343" |
"\377\377\223\342\377\377\222\341\377\377\222\341\377\377\222\341\377\377" |
"\216\336\377\377\213\336\377\377\213\336\377\377\211\334\377\377\207\333" |
"\377\377\204\332\377\377\204\332\377\377~\327\377\377\177\330\377\377~\327" |
"\377\377~\327\377\377|\326\377\377x\324\377\377w\323\377\377w\323\377\377" |
"v\323\377\377s\321\377\377v\323\377\377p\320\377\377o\317\377\377o\317\377" |
"\377l\316\377\377k\315\377\377h\314\377\377h\314\377\377e\312\377\377e\312" |
"\377\377c\311\377\377\241\350\377\377\376\377\377\377\376\377\377\377\307" |
"\363\377\377]\306\377\377X\303\377\377X\303\377\377V\302\377\377V\302\377" |
"\377T\301\376\377J\274\377\377N\276\377\377J\274\377\377J\274\377\377J\274" |
"\377\377I\274\377\377I\274\377\377D\271\376\377D\271\376\377\32e\225\377" |
"\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\35W" |
"z\377\250\355\377\377\250\355\377\377\255\357\377\377\255\357\377\377\255" |
"\357\377\377\201\313\347\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\36Q" |
"n\377\255\357\377\377\250\355\377\377\255\357\377\377\250\355\377\377\250" |
"\355\377\377\246\354\377\377\246\354\377\377\246\354\377\377\243\351\377" |
"\377\241\350\377\377\241\350\377\377\237\347\377\377\237\347\377\377\237" |
"\347\377\377\231\344\376\377\231\344\376\377\225\343\377\377\225\343\377" |
"\377\223\342\377\377\222\341\377\377\222\341\377\377\215\336\377\377\216" |
"\336\377\377\215\336\377\377\213\336\377\377\211\334\377\377\207\333\377" |
"\377\207\333\377\377\204\332\377\377\207\333\377\377\177\330\377\377~\327" |
"\377\377|\326\377\377|\326\377\377|\326\377\377w\323\377\377w\323\377\377" |
"v\323\377\377v\323\377\377p\320\377\377p\320\377\377o\317\377\377o\317\377" |
"\377l\316\377\377k\315\377\377h\314\377\377e\312\377\377h\314\377\377e\312" |
"\377\377h\314\377\377\361\372\377\377\376\377\377\377\376\377\377\377\376" |
"\377\377\377\211\334\377\377X\303\377\377V\302\377\377V\302\377\377V\302" |
"\377\377V\302\377\377T\301\376\377T\301\376\377N\276\377\377J\274\377\377" |
"J\274\377\377I\274\377\377I\274\377\377G\272\377\377D\271\376\377B\270\376" |
"\377&p\234\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377" |
"\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377A\202\244" |
"\377\250\355\377\377\250\355\377\377\255\357\377\377\255\357\377\377\255" |
"\357\377\377\260\360\377\377A\202\244\377\0\0\0\377\0\0\0\377\0\0\0\377\0" |
"\0\0\377G\211\253\377\255\357\377\377\255\357\377\377\255\357\377\377\250" |
"\355\377\377\250\355\377\377\246\354\377\377\246\354\377\377\246\354\377" |
"\377\241\350\377\377\243\351\377\377\241\350\377\377\237\347\377\377\237" |
"\347\377\377\234\346\376\377\234\346\376\377\225\343\377\377\225\343\377" |
"\377\225\343\377\377\225\343\377\377\223\342\377\377\222\341\377\377\222" |
"\341\377\377\215\336\377\377\215\336\377\377\215\336\377\377\213\336\377" |
"\377\211\334\377\377\207\333\377\377\204\332\377\377\204\332\377\377\177" |
"\330\377\377~\327\377\377~\327\377\377~\327\377\377|\326\377\377y\325\377" |
"\377x\324\377\377x\324\377\377t\322\377\377s\321\377\377p\320\377\377p\320" |
"\377\377o\317\377\377l\316\377\377k\315\377\377h\314\377\377h\314\377\377" |
"e\312\377\377e\312\377\377\241\350\377\377\376\377\377\377\376\377\377\377" |
"\376\377\377\377\376\377\377\377\352\370\377\377]\304\375\377V\302\377\377" |
"V\302\377\377V\302\377\377T\301\376\377T\301\376\377J\274\377\377N\276\377" |
"\377J\274\377\377J\274\377\377J\274\377\377I\274\377\377H\273\377\377D\271" |
"\376\377D\271\376\377D\266\372\3773x\236\377\0\0\0\377\0\0\0\377\0\0\0\377" |
"\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0" |
"\0\3773x\236\377\250\355\377\377\255\357\377\377\255\357\377\377\255\357" |
"\377\377\255\357\377\377\255\357\377\377\260\360\377\377\255\357\377\377" |
"\201\313\347\377G\211\253\377\36Qn\377\17$0\377\202\313\347\377\260\360\377" |
"\377\260\360\377\377\255\357\377\377\255\357\377\377\255\357\377\377\250" |
"\355\377\377\246\354\377\377\246\354\377\377\246\354\377\377\243\351\377" |
"\377\241\350\377\377\237\347\377\377\237\347\377\377\237\347\377\377\234" |
"\346\376\377\231\344\376\377\231\344\376\377\225\343\377\377\225\343\377" |
"\377\222\341\377\377\222\341\377\377\222\341\377\377\215\336\377\377\215" |
"\336\377\377\213\336\377\377\211\334\377\377\211\334\377\377\204\332\377" |
"\377\207\333\377\377\204\332\377\377\177\330\377\377~\327\377\377~\327\377" |
"\377|\326\377\377|\326\377\377y\325\377\377x\324\377\377t\322\377\377t\322" |
"\377\377s\321\377\377p\320\377\377p\320\377\377p\320\377\377l\316\377\377" |
"k\315\377\377h\314\377\377h\314\377\377e\312\377\377e\312\377\377\352\370" |
"\377\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377" |
"\376\377\377\377\255\357\377\377V\302\377\377V\302\377\377V\302\377\377T" |
"\301\376\377T\301\376\377T\301\376\377J\274\377\377J\274\377\377N\276\377" |
"\377I\274\377\377k\315\377\377\250\355\377\377w\323\377\377D\271\376\377" |
"@\267\377\377B\270\376\377&p\234\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0" |
"\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\36Qn\377\246\354\377" |
"\377\250\355\377\377\255\357\377\377\255\357\377\377\255\357\377\377\260" |
"\360\377\377\260\360\377\377\263\361\377\377\263\361\377\377\263\361\377" |
"\377\263\361\377\377\263\361\377\377\263\361\377\377\263\361\377\377\260" |
"\360\377\377\260\360\377\377\255\357\377\377\255\357\377\377\255\357\377" |
"\377\250\355\377\377\246\354\377\377\246\354\377\377\246\354\377\377\243" |
"\351\377\377\243\351\377\377\237\347\377\377\237\347\377\377\237\347\377" |
"\377\234\346\376\377\237\347\377\377\231\344\376\377\231\344\376\377\225" |
"\343\377\377\225\343\377\377\222\341\377\377\225\343\377\377\215\336\377" |
"\377\215\336\377\377\213\336\377\377\211\334\377\377\211\334\377\377\204" |
"\332\377\377\207\333\377\377\204\332\377\377\177\330\377\377\204\332\377" |
"\377~\327\377\377|\326\377\377|\326\377\377|\326\377\377x\324\377\377x\324" |
"\377\377t\322\377\377s\321\377\377p\320\377\377p\320\377\377p\320\377\377" |
"l\316\377\377l\316\377\377h\314\377\377h\314\377\377e\312\377\377\231\344" |
"\376\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377" |
"\376\377\377\377\376\377\377\377\376\377\377\377o\317\377\377X\303\377\377" |
"X\303\377\377T\301\376\377T\301\376\377J\274\377\377T\301\376\377]\306\377" |
"\377\231\344\376\377\334\366\377\377\376\377\377\377\376\377\377\377\263" |
"\361\377\377D\271\376\377D\271\376\377?\267\377\377<\265\376\377\27[\207" |
"\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0" |
"\377\24""5H\377\241\350\377\377\246\354\377\377\250\355\377\377\250\355\377" |
"\377\255\357\377\377\260\360\377\377\260\360\377\377\263\361\377\377\263" |
"\361\377\377\263\361\377\377\263\361\377\377\263\361\377\377\263\361\377" |
"\377\263\361\377\377\263\361\377\377\263\361\377\377\260\360\377\377\260" |
"\360\377\377\255\357\377\377\250\355\377\377\250\355\377\377\246\354\377" |
"\377\246\354\377\377\246\354\377\377\243\351\377\377\243\351\377\377\237" |
"\347\377\377\237\347\377\377\237\347\377\377\237\347\377\377\231\344\376" |
"\377\225\343\377\377\231\344\376\377\225\343\377\377\222\341\377\377\222" |
"\341\377\377\222\341\377\377\215\336\377\377\215\336\377\377\213\336\377" |
"\377\213\336\377\377\211\334\377\377\207\333\377\377\207\333\377\377\207" |
"\333\377\377\177\330\377\377~\327\377\377~\327\377\377|\326\377\377|\326" |
"\377\377x\324\377\377x\324\377\377t\322\377\377t\322\377\377v\323\377\377" |
"p\320\377\377p\320\377\377p\320\377\377l\316\377\377l\316\377\377h\314\377" |
"\377h\314\377\377e\312\377\377\352\370\377\377\376\377\377\377\376\377\377" |
"\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377\376" |
"\377\377\377\307\363\377\377X\303\377\377Q\277\377\377T\301\376\377V\302" |
"\377\377\216\336\377\377\307\363\377\377\376\377\377\377\374\376\377\377" |
"\376\377\377\377\376\377\377\377\374\376\377\377\207\333\377\377D\271\376" |
"\377@\267\377\377B\270\376\377<\265\376\377<\265\376\377\31Fb\377\0\0\0\377" |
"\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0" |
"\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\24.=\377\231\344\376\377\246" |
"\354\377\377\250\355\377\377\250\355\377\377\255\357\377\377\255\357\377" |
"\377\260\360\377\377\260\360\377\377\263\361\377\377\263\361\377\377\263" |
"\361\377\377\267\362\377\377\267\362\377\377\267\362\377\377\263\361\377" |
"\377\263\361\377\377\263\361\377\377\260\360\377\377\260\360\377\377\255" |
"\357\377\377\255\357\377\377\255\357\377\377\250\355\377\377\246\354\377" |
"\377\243\351\377\377\246\354\377\377\241\350\377\377\237\347\377\377\237" |
"\347\377\377\237\347\377\377\234\346\376\377\231\344\376\377\231\344\376" |
"\377\225\343\377\377\225\343\377\377\223\342\377\377\222\341\377\377\222" |
"\341\377\377\222\341\377\377\215\336\377\377\213\336\377\377\211\334\377" |
"\377\211\334\377\377\207\333\377\377\207\333\377\377\204\332\377\377\177" |
"\330\377\377\177\330\377\377\177\330\377\377|\326\377\377|\326\377\377|\326" |
"\377\377\223\342\377\377\334\366\377\377\263\361\377\377\231\344\376\377" |
"v\323\377\377p\320\377\377p\320\377\377l\316\377\377l\316\377\377k\315\377" |
"\377h\314\377\377\216\336\377\377\374\376\377\377\376\377\377\377\376\377" |
"\377\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377" |
"\376\377\377\377\376\377\377\377\207\333\377\377\200\327\376\377\307\363" |
"\377\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377" |
"\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377]\304\375" |
"\377D\271\376\377D\271\376\377@\267\377\377@\267\377\377<\265\376\3778\263" |
"\376\377\24""5H\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0" |
"\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\6\16\24\377\203" |
"\316\353\377\246\354\377\377\246\354\377\377\250\355\377\377\255\357\377" |
"\377\255\357\377\377\255\357\377\377\260\360\377\377\260\360\377\377\263" |
"\361\377\377\263\361\377\377\267\362\377\377\267\362\377\377\267\362\377" |
"\377\267\362\377\377\267\362\377\377\263\361\377\377\263\361\377\377\263" |
"\361\377\377\260\360\377\377\255\357\377\377\255\357\377\377\250\355\377" |
"\377\250\355\377\377\246\354\377\377\246\354\377\377\246\354\377\377\241" |
"\350\377\377\241\350\377\377\237\347\377\377\237\347\377\377\234\346\376" |
"\377\237\347\377\377\225\343\377\377\231\344\376\377\225\343\377\377\223" |
"\342\377\377\222\341\377\377\222\341\377\377\215\336\377\377\215\336\377" |
"\377\213\336\377\377\213\336\377\377\211\334\377\377\212\335\377\377\204" |
"\332\377\377\204\332\377\377\177\330\377\377\204\332\377\377\177\330\377" |
"\377|\326\377\377|\326\377\377|\326\377\377\253\356\377\377\376\377\377\377" |
"\374\376\377\377\376\377\377\377\376\377\377\377\334\366\377\377\263\361" |
"\377\377\222\341\377\377l\316\377\377k\315\377\377g\313\377\377\334\366\377" |
"\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377\376" |
"\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377" |
"\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377\376" |
"\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377" |
"\377\376\377\377\377\361\372\377\377D\271\376\377D\271\376\377@\267\377\377" |
"@\267\377\377@\267\377\377<\265\376\377<\265\376\377:\262\373\377\11\33'" |
"\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\377\0\0" |
"\0\377\0\0\0\377\0\0\0\377\0\0\0\377G\211\253\377\243\351\377\377\246\354" |
"\377\377\246\354\377\377\250\355\377\377\250\355\377\377\255\357\377\377" |
"\255\357\377\377\260\360\377\377\260\360\377\377\263\361\377\377\263\361" |
"\377\377\267\362\377\377\267\362\377\377\267\362\377\377\267\362\377\377" |
"\267\362\377\377\263\361\377\377\263\361\377\377\260\360\377\377\260\360" |
"\377\377\255\357\377\377\255\357\377\377\255\357\377\377\250\355\377\377" |
"\246\354\377\377\246\354\377\377\246\354\377\377\243\351\377\377\241\350" |
"\377\377\237\347\377\377\237\347\377\377\234\346\376\377\237\347\377\377" |
"\231\344\376\377\231\344\376\377\225\343\377\377\223\342\377\377\222\341" |
"\377\377\223\342\377\377\215\336\377\377\215\336\377\377\213\336\377\377" |
"\213\336\377\377\211\334\377\377\207\333\377\377\207\333\377\377\204\332" |
"\377\377\177\330\377\377~\327\377\377\177\330\377\377~\327\377\377|\326\377" |
"\377x\324\377\377|\326\377\377\374\376\377\377\376\377\377\377\376\377\377" |
"\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377\376" |
"\377\377\377\334\366\377\377\307\363\377\377\376\377\377\377\376\377\377" |
"\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377\376" |
"\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377" |
"\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377\376" |
"\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377" |
"\377\267\362\377\377D\271\376\377D\271\376\377D\271\376\377@\267\377\377" |
"<\265\376\377<\265\376\377<\265\376\377;\264\376\377!\216\323\377\3\4\6\377" |
"\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0" |
"\377\0\0\0\377\36Qn\377\246\354\377\377\243\351\377\377\246\354\377\377\246" |
"\354\377\377\250\355\377\377\250\355\377\377\255\357\377\377\255\357\377" |
"\377\260\360\377\377\260\360\377\377\263\361\377\377\263\361\377\377\263" |
"\361\377\377\267\362\377\377\267\362\377\377\267\362\377\377\263\361\377" |
"\377\263\361\377\377\263\361\377\377\260\360\377\377\260\360\377\377\255" |
"\357\377\377\255\357\377\377\255\357\377\377\250\355\377\377\246\354\377" |
"\377\243\351\377\377\246\354\377\377\243\351\377\377\241\350\377\377\237" |
"\347\377\377\237\347\377\377\237\347\377\377\231\344\376\377\225\343\377" |
"\377\231\344\376\377\225\343\377\377\223\342\377\377\222\341\377\377\223" |
"\342\377\377\215\336\377\377\215\336\377\377\213\336\377\377\211\334\377" |
"\377\211\334\377\377\207\333\377\377\204\332\377\377\204\332\377\377\177" |
"\330\377\377~\327\377\377\177\330\377\377|\326\377\377|\326\377\377|\326" |
"\377\377x\324\377\377\307\363\377\377\374\376\377\377\376\377\377\377\376" |
"\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377" |
"\377\376\377\377\377\376\377\377\377\374\376\377\377\376\377\377\377\376" |
"\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377" |
"\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377\376" |
"\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377" |
"\377\376\377\377\377\376\377\377\377\376\377\377\377\370\374\377\377\216" |
"\336\377\377D\271\376\377D\271\376\377@\267\377\377@\267\377\377@\267\377" |
"\377<\265\376\377<\265\376\377;\264\376\3778\263\376\377\32e\225\377\0\0" |
"\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0" |
"\377\24.=\377\234\346\376\377\246\354\377\377\241\350\377\377\246\354\377" |
"\377\246\354\377\377\246\354\377\377\246\354\377\377\253\356\377\377\255" |
"\357\377\377\255\357\377\377\260\360\377\377\263\361\377\377\263\361\377" |
"\377\263\361\377\377\263\361\377\377\263\361\377\377\263\361\377\377\263" |
"\361\377\377\263\361\377\377\263\361\377\377\260\360\377\377\260\360\377" |
"\377\255\357\377\377\255\357\377\377\255\357\377\377\250\355\377\377\246" |
"\354\377\377\246\354\377\377\241\350\377\377\241\350\377\377\241\350\377" |
"\377\237\347\377\377\237\347\377\377\234\346\376\377\234\346\376\377\225" |
"\343\377\377\231\344\376\377\225\343\377\377\223\342\377\377\222\341\377" |
"\377\222\341\377\377\215\336\377\377\215\336\377\377\213\336\377\377\211" |
"\334\377\377\211\334\377\377\207\333\377\377\207\333\377\377\205\332\377" |
"\377\200\330\377\377\200\330\377\377\200\330\377\377|\326\377\377|\326\377" |
"\377|\326\377\377w\323\377\377\234\346\376\377\376\376\377\377\376\377\377" |
"\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377\376" |
"\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377" |
"\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377\376" |
"\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377" |
"\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377\376" |
"\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377" |
"\377a\310\377\377D\271\376\377D\271\376\377@\267\377\377@\267\377\377@\267" |
"\377\377<\265\376\377<\265\376\377<\265\376\3778\263\376\3777\262\377\377" |
"\24""5H\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377" |
"\4\12\15\377\201\313\347\377\234\346\376\377\241\350\377\377\241\350\377" |
"\377\246\354\377\377\246\354\377\377\246\354\377\377\250\355\377\377\250" |
"\355\377\377\255\357\377\377\255\357\377\377\260\360\377\377\260\360\377" |
"\377\263\361\377\377\263\361\377\377\263\361\377\377\263\361\377\377\263" |
"\361\377\377\263\361\377\377\263\361\377\377\260\360\377\377\260\360\377" |
"\377\255\357\377\377\255\357\377\377\250\355\377\377\250\355\377\377\246" |
"\354\377\377\246\354\377\377\246\354\377\377\241\350\377\377\246\354\377" |
"\377\237\347\377\377\237\347\377\377\237\347\377\377\234\346\376\377\234" |
"\346\376\377\231\344\376\377\225\343\377\377\225\343\377\377\223\342\377" |
"\377\222\341\377\377\222\341\377\377\222\341\377\377\215\336\377\377\213" |
"\336\377\377\213\336\377\377\211\334\377\377\207\333\377\377\207\333\377" |
"\377\200\330\377\377\200\330\377\377\200\330\377\377|\326\377\377|\326\377" |
"\377|\326\377\377w\323\377\377w\323\377\377w\323\377\377\370\374\377\377" |
"\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377" |
"\377\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377" |
"\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377" |
"\377\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377" |
"\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377" |
"\377\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377" |
"\361\372\377\377D\271\376\377D\271\376\377D\271\376\377@\267\377\377@\267" |
"\377\377<\265\376\377<\265\376\377<\265\376\377=\265\376\3778\263\376\377" |
"7\262\377\3771\257\376\377\10\24\32\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0" |
"\0\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377" |
"\0\0\0\377\0\0\0\377A\202\244\377\241\350\377\377\237\347\377\377\241\350" |
"\377\377\246\354\377\377\246\354\377\377\246\354\377\377\246\354\377\377" |
"\250\355\377\377\253\356\377\377\255\357\377\377\255\357\377\377\255\357" |
"\377\377\260\360\377\377\260\360\377\377\260\360\377\377\263\361\377\377" |
"\263\361\377\377\263\361\377\377\263\361\377\377\260\360\377\377\260\360" |
"\377\377\260\360\377\377\255\357\377\377\255\357\377\377\250\355\377\377" |
"\250\355\377\377\246\354\377\377\246\354\377\377\246\354\377\377\243\351" |
"\377\377\241\350\377\377\237\347\377\377\237\347\377\377\237\347\377\377" |
"\234\346\376\377\231\344\376\377\231\344\376\377\231\344\376\377\225\343" |
"\377\377\222\341\377\377\222\341\377\377\222\341\377\377\215\336\377\377" |
"\215\336\377\377\213\336\377\377\211\334\377\377\211\334\377\377\207\333" |
"\377\377\207\333\377\377\205\332\377\377\200\330\377\377\200\330\377\377" |
"|\326\377\377|\326\377\377|\326\377\377z\325\377\377w\323\377\377v\323\377" |
"\377\307\363\377\377\376\376\377\377\376\377\377\377\376\377\377\377\376" |
"\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377" |
"\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377\376" |
"\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377" |
"\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377\376" |
"\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377" |
"\377\376\377\377\377\307\363\377\377H\273\377\377D\271\376\377D\271\376\377" |
"D\271\376\377@\267\377\377@\267\377\377<\265\376\377<\265\376\3778\263\376" |
"\3778\263\376\3777\262\377\3777\262\377\377&p\234\377\0\0\0\377\0\0\0\377" |
"\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\377\0\0" |
"\0\377\0\0\0\377\0\0\0\377\11\33'\377\225\343\377\377\237\347\377\377\237" |
"\347\377\377\241\350\377\377\241\350\377\377\243\351\377\377\246\354\377" |
"\377\246\354\377\377\250\355\377\377\250\355\377\377\253\356\377\377\253" |
"\356\377\377\255\357\377\377\255\357\377\377\260\360\377\377\260\360\377" |
"\377\260\360\377\377\260\360\377\377\260\360\377\377\260\360\377\377\260" |
"\360\377\377\260\360\377\377\255\357\377\377\255\357\377\377\255\357\377" |
"\377\250\355\377\377\246\354\377\377\246\354\377\377\246\354\377\377\243" |
"\351\377\377\243\351\377\377\241\350\377\377\237\347\377\377\237\347\377" |
"\377\234\346\376\377\237\347\377\377\231\344\376\377\225\343\377\377\225" |
"\343\377\377\223\342\377\377\225\343\377\377\222\341\377\377\222\341\377" |
"\377\215\336\377\377\215\336\377\377\213\336\377\377\213\336\377\377\211" |
"\334\377\377\207\333\377\377\200\330\377\377\205\332\377\377\200\330\377" |
"\377\200\330\377\377\200\330\377\377|\326\377\377z\325\377\377z\325\377\377" |
"z\325\377\377v\323\377\377\221\340\377\377\376\376\377\377\376\377\377\377" |
"\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377" |
"\377\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377" |
"\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377" |
"\377\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377" |
"\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377" |
"\377\377\376\377\377\377\370\374\377\377\250\355\377\377D\271\376\377D\271" |
"\376\377D\271\376\377@\267\377\377@\267\377\377<\265\376\377<\265\376\377" |
"<\265\376\3778\263\376\3777\262\377\3777\262\377\3771\257\376\3771\257\377" |
"\377\24.=\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377" |
"\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377G\211\253\377\234\346\376" |
"\377\241\350\377\377\237\347\377\377\237\347\377\377\241\350\377\377\241" |
"\350\377\377\246\354\377\377\246\354\377\377\246\354\377\377\246\354\377" |
"\377\250\355\377\377\253\356\377\377\253\356\377\377G\211\253\377\35Wz\377" |
"G\211\253\377\202\313\347\377\246\354\377\377\260\360\377\377\260\360\377" |
"\377\255\357\377\377\255\357\377\377\255\357\377\377\250\355\377\377\250" |
"\355\377\377\250\355\377\377\246\354\377\377\246\354\377\377\243\351\377" |
"\377\243\351\377\377\243\351\377\377\241\350\377\377\237\347\377\377\237" |
"\347\377\377\234\346\376\377\231\344\376\377\231\344\376\377\225\343\377" |
"\377\225\343\377\377\223\342\377\377\222\341\377\377\222\341\377\377\222" |
"\341\377\377\216\336\377\377\216\336\377\377\211\334\377\377\213\336\377" |
"\377\207\333\377\377\207\333\377\377\204\332\377\377\204\332\377\377~\327" |
"\377\377\200\330\377\377\200\330\377\377|\326\377\377z\325\377\377z\325\377" |
"\377z\325\377\377v\323\377\377v\323\377\377\361\372\377\377\376\377\377\377" |
"\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377" |
"\377\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377" |
"\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377" |
"\377\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377" |
"\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377" |
"\377\377\376\377\377\377\376\376\377\377\376\376\377\377\334\366\377\377" |
"\204\332\377\377D\266\372\377@\267\377\377@\267\377\377=\265\376\377=\265" |
"\376\377=\265\376\3778\263\376\3778\263\376\3777\262\377\3777\262\377\377" |
"1\257\377\377!\216\323\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0" |
"\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\36Qn\377\231\344" |
"\376\377\234\346\376\377\234\346\376\377\237\347\377\377\237\347\377\377" |
"\241\350\377\377\241\350\377\377\241\350\377\377\246\354\377\377\246\354" |
"\377\377\246\354\377\377\250\355\377\377\250\355\377\377\253\356\377\377" |
"\24.=\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\250\355\377\377\255\357" |
"\377\377\255\357\377\377\255\357\377\377\255\357\377\377\250\355\377\377" |
"\250\355\377\377\246\354\377\377\246\354\377\377\246\354\377\377\241\350" |
"\377\377\243\351\377\377\241\350\377\377\234\346\376\377\237\347\377\377" |
"\237\347\377\377\234\346\376\377\231\344\376\377\231\344\376\377\231\344" |
"\376\377\225\343\377\377\223\342\377\377\222\341\377\377\222\341\377\377" |
"\215\336\377\377\215\336\377\377\213\336\377\377\213\336\377\377\207\333" |
"\377\377\207\333\377\377\207\333\377\377\204\332\377\377\200\330\377\377" |
"\200\330\377\377\200\330\377\377|\326\377\377|\326\377\377z\325\377\377w" |
"\323\377\377w\323\377\377v\323\377\377t\322\377\377\267\362\377\377\376\377" |
"\377\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377" |
"\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377" |
"\377\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377" |
"\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377" |
"\377\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377" |
"\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377" |
"\377\377\376\377\377\377\352\370\377\377\216\336\377\377D\266\372\377=\265" |
"\376\377=\265\376\3778\263\376\3778\263\376\3778\263\376\3777\262\377\377" |
"1\257\377\3771\257\377\377/\256\377\377\31Fb\377\0\0\0\377\0\0\0\377\0\0" |
"\0\377\0\0\0\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\3\4\6\377\201" |
"\313\347\377\231\344\376\377\231\344\376\377\234\346\376\377\237\347\377" |
"\377\237\347\377\377\241\350\377\377\241\350\377\377\241\350\377\377\246" |
"\354\377\377\243\351\377\377\246\354\377\377\246\354\377\377\246\354\377" |
"\377\250\355\377\377\6\16\24\377\0\0\0\377\0\0\0\377\0\0\0\377\17$0\377\255" |
"\357\377\377\250\355\377\377\250\355\377\377\255\357\377\377\250\355\377" |
"\377\250\355\377\377\250\355\377\377\246\354\377\377\246\354\377\377\243" |
"\351\377\377\241\350\377\377\241\350\377\377\241\350\377\377\241\350\377" |
"\377\237\347\377\377\234\346\376\377\237\347\377\377\231\344\376\377\231" |
"\344\376\377\225\343\377\377\223\342\377\377\223\342\377\377\222\341\377" |
"\377\222\341\377\377\222\341\377\377\211\334\377\377\213\336\377\377\213" |
"\336\377\377\211\334\377\377\207\333\377\377\207\333\377\377\204\332\377" |
"\377\200\330\377\377\200\330\377\377\200\330\377\377|\326\377\377|\326\377" |
"\377z\325\377\377v\323\377\377v\323\377\377v\323\377\377t\322\377\377\205" |
"\332\377\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377" |
"\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377\376" |
"\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377" |
"\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377\376" |
"\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377" |
"\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377\376" |
"\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377" |
"\377\361\372\377\377\221\340\377\377G\272\377\377=\265\376\3778\263\376\377" |
"8\263\376\3777\262\377\3777\262\377\3771\257\377\3771\257\377\377*\253\377" |
"\377\6\16\24\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\377\0\0\0\377" |
"\0\0\0\377\0\0\0\377\36Qn\377\227\343\377\377\231\344\376\377\231\344\376" |
"\377\234\346\376\377\234\346\376\377\237\347\377\377\237\347\377\377\237" |
"\347\377\377\241\350\377\377\241\350\377\377\243\351\377\377\246\354\377" |
"\377\243\351\377\377\250\355\377\377\234\346\376\377\0\0\0\377\0\0\0\377" |
"\0\0\0\377\0\0\0\377\25<S\377\250\355\377\377\250\355\377\377\250\355\377" |
"\377\250\355\377\377\246\354\377\377\246\354\377\377\250\355\377\377\243" |
"\351\377\377\246\354\377\377\243\351\377\377\243\351\377\377\241\350\377" |
"\377\241\350\377\377\234\346\376\377\234\346\376\377\234\346\376\377\231" |
"\344\376\377\231\344\376\377\225\343\377\377\225\343\377\377\223\342\377" |
"\377\222\341\377\377\222\341\377\377\215\336\377\377\216\336\377\377\216" |
"\336\377\377\213\336\377\377\211\334\377\377\211\334\377\377\207\333\377" |
"\377\207\333\377\377\207\333\377\377\200\330\377\377\200\330\377\377|\326" |
"\377\377|\326\377\377|\326\377\377z\325\377\377w\323\377\377v\323\377\377" |
"t\322\377\377t\322\377\377\227\343\377\377\376\376\377\377\376\377\377\377" |
"\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377" |
"\377\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377" |
"\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377" |
"\377\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377" |
"\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377" |
"\377\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377" |
"\376\377\377\377\376\377\377\377\376\377\377\377\374\376\377\377\370\374" |
"\377\377\241\350\377\377H\273\377\3778\263\376\3777\262\377\3771\257\377" |
"\3771\257\377\3771\257\377\377/\256\377\377\35Wz\377\0\0\0\377\0\0\0\377" |
"\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\203\316\353\377" |
"\227\343\377\377\225\343\377\377\231\344\376\377\231\344\376\377\237\347" |
"\377\377\234\346\376\377\237\347\377\377\237\347\377\377\241\350\377\377" |
"\241\350\377\377\243\351\377\377\243\351\377\377\243\351\377\377\246\354" |
"\377\377|\326\377\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\36Qn\377\246" |
"\354\377\377\246\354\377\377\246\354\377\377\246\354\377\377\246\354\377" |
"\377\246\354\377\377\246\354\377\377\241\350\377\377\243\351\377\377\243" |
"\351\377\377\241\350\377\377\241\350\377\377\236\346\377\377\241\350\377" |
"\377\234\346\376\377\231\344\376\377\231\344\376\377\231\344\376\377\225" |
"\343\377\377\225\343\377\377\223\342\377\377\222\341\377\377\225\343\377" |
"\377\215\336\377\377\213\336\377\377\213\336\377\377\212\335\377\377\212" |
"\335\377\377\212\335\377\377\204\332\377\377\204\332\377\377\204\332\377" |
"\377\204\332\377\377~\327\377\377~\327\377\377|\326\377\377|\326\377\377" |
"x\324\377\377w\323\377\377w\323\377\377\205\332\377\377\334\366\377\377\376" |
"\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377" |
"\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377\376" |
"\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377" |
"\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377\376" |
"\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377" |
"\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377\376" |
"\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377" |
"\377\376\377\377\377\376\377\377\377\376\377\377\377\370\374\377\377\376" |
"\377\377\377l\316\377\3775\262\377\3772\260\377\3772\260\377\3771\257\377" |
"\377/\256\377\377\30\230\355\377\4\12\15\377\0\0\0\377\0\0\0\377\0\0\0\377" |
"\0\0\0\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\377" |
"\0\0\0\377\0\0\0\377\0\0\0\377\36Qn\377\225\343\377\377\225\343\377\377\225" |
"\343\377\377\225\343\377\377\231\344\376\377\231\344\376\377\237\347\377" |
"\377\237\347\377\377\237\347\377\377\237\347\377\377\241\350\377\377\241" |
"\350\377\377\243\351\377\377\243\351\377\377\250\355\377\377\202\313\347" |
"\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\3773x\236\377\246\354\377\377\246" |
"\354\377\377\243\351\377\377\246\354\377\377\246\354\377\377\246\354\377" |
"\377\243\351\377\377\243\351\377\377\241\350\377\377\241\350\377\377\241" |
"\350\377\377\234\346\376\377\234\346\376\377\234\346\376\377\234\346\376" |
"\377\231\344\376\377\231\344\376\377\225\343\377\377\225\343\377\377\225" |
"\343\377\377\223\342\377\377\222\341\377\377\222\341\377\377\215\336\377" |
"\377\215\336\377\377\213\336\377\377\212\335\377\377\212\335\377\377\204" |
"\332\377\377\207\333\377\377\204\332\377\377~\327\377\377\177\330\377\377" |
"\177\330\377\377~\327\377\377|\326\377\377|\326\377\377x\324\377\377w\323" |
"\377\377\267\362\377\377\376\377\377\377\376\377\377\377\376\377\377\377" |
"\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377" |
"\377\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377" |
"\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377" |
"\377\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377" |
"\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377" |
"\377\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377" |
"\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377" |
"\377\377\376\377\377\377\376\377\377\377\370\374\377\377\352\370\377\377" |
"_\307\377\3775\262\377\3772\260\377\3772\260\377\377/\256\377\377/\256\377" |
"\377,\255\377\377\36Qn\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0" |
"\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0" |
"\0\377\0\0\0\377|\326\377\377\222\341\377\377\227\343\377\377\227\343\377" |
"\377\225\343\377\377\231\344\376\377\231\344\376\377\234\346\376\377\234" |
"\346\376\377\237\347\377\377\237\347\377\377\237\347\377\377\241\350\377" |
"\377\241\350\377\377\243\351\377\377\243\351\377\377A\202\244\377\1\2\2\377" |
"\0\0\0\377\0\0\0\377\0\0\0\377A\202\244\377\246\354\377\377\243\351\377\377" |
"\246\354\377\377\246\354\377\377\243\351\377\377\243\351\377\377\243\351" |
"\377\377\241\350\377\377\241\350\377\377\236\346\377\377\241\350\377\377" |
"\236\346\377\377\234\346\376\377\234\346\376\377\231\344\376\377\231\344" |
"\376\377\231\344\376\377\225\343\377\377\223\342\377\377\223\342\377\377" |
"\222\341\377\377\223\342\377\377\215\336\377\377\215\336\377\377\213\336" |
"\377\377\213\336\377\377\212\335\377\377\207\333\377\377\207\333\377\377" |
"\204\332\377\377\204\332\377\377\204\332\377\377~\327\377\377~\327\377\377" |
"|\326\377\377|\326\377\377x\324\377\377\237\347\377\377\361\372\377\377\376" |
"\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377" |
"\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377\376" |
"\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377" |
"\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377\376" |
"\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377" |
"\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377\376" |
"\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377" |
"\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377\376" |
"\376\377\377\376\377\377\377\243\351\377\377?\267\377\3775\262\377\3775\262" |
"\377\3772\260\377\3772\260\377\3771\257\377\377/\256\377\377,\255\377\377" |
"\32\225\347\377\3\4\6\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\25<S\377" |
"\221\340\377\377\222\341\377\377\222\341\377\377\222\341\377\377\225\343" |
"\377\377\231\344\376\377\231\344\376\377\231\344\376\377\234\346\376\377" |
"\234\346\376\377\237\347\377\377\237\347\377\377\234\346\376\377\241\350" |
"\377\377\243\351\377\377\243\351\377\377A\202\244\377\1\2\2\377\0\0\0\377" |
"\0\0\0\377\0\0\0\377G\211\253\377\243\351\377\377\243\351\377\377\243\351" |
"\377\377\241\350\377\377\243\351\377\377\241\350\377\377\241\350\377\377" |
"\241\350\377\377\234\346\376\377\241\350\377\377\236\346\377\377\234\346" |
"\376\377\234\346\376\377\234\346\376\377\231\344\376\377\231\344\376\377" |
"\225\343\377\377\225\343\377\377\223\342\377\377\222\341\377\377\222\341" |
"\377\377\215\336\377\377\215\336\377\377\215\336\377\377\213\336\377\377" |
"\212\335\377\377\212\335\377\377\207\333\377\377\204\332\377\377\204\332" |
"\377\377\204\332\377\377~\327\377\377~\327\377\377~\327\377\377|\326\377" |
"\377\207\333\377\377\334\366\377\377\376\377\377\377\376\377\377\377\376" |
"\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377" |
"\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377\376" |
"\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377" |
"\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377\376" |
"\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377" |
"\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377\376" |
"\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377" |
"\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377\307" |
"\363\377\377X\303\377\3778\263\376\377;\264\376\3775\262\377\3772\260\377" |
"\3772\260\377\3771\257\377\3771\257\377\377/\256\377\377,\255\377\377/\256" |
"\377\377\31Fb\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\377\0\0\0\377\0\0\0\377\1\2\2\377\1\2\2\377G\211\253\377" |
"\221\340\377\377\221\340\377\377\221\340\377\377\221\340\377\377\225\343" |
"\377\377\225\343\377\377\231\344\376\377\231\344\376\377\231\344\376\377" |
"\234\346\376\377\234\346\376\377\234\346\376\377\241\350\377\377\234\346" |
"\376\377\241\350\377\377\234\346\376\377\35Wz\377\0\0\0\377\0\0\0\377\0\0" |
"\0\377\0\0\0\377\201\313\347\377\241\350\377\377\241\350\377\377\241\350" |
"\377\377\241\350\377\377\241\350\377\377\234\346\376\377\241\350\377\377" |
"\234\346\376\377\234\346\376\377\241\350\377\377\234\346\376\377\234\346" |
"\376\377\231\344\376\377\231\344\376\377\225\343\377\377\231\344\376\377" |
"\225\343\377\377\223\342\377\377\223\342\377\377\222\341\377\377\222\341" |
"\377\377\215\336\377\377\215\336\377\377\213\336\377\377\213\336\377\377" |
"\213\336\377\377\207\333\377\377\207\333\377\377\207\333\377\377\204\332" |
"\377\377\200\330\377\377\200\330\377\377~\327\377\377~\327\377\377\225\343" |
"\377\377\376\377\377\377\374\376\377\377\376\377\377\377\376\377\377\377" |
"\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377" |
"\377\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377" |
"\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377" |
"\377\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377" |
"\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377" |
"\377\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377" |
"\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377" |
"\377\377\376\377\377\377\370\374\377\377\361\372\377\377|\326\377\377=\265" |
"\376\3778\263\376\3778\263\376\3775\262\377\3775\262\377\3777\262\377\377" |
"1\257\377\3771\257\377\3771\257\377\377/\256\377\377,\255\377\377*\253\377" |
"\377&\212\311\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\1\2\2\377\10\24\32\377\204\323" |
"\364\377\221\340\377\377\221\340\377\377\231\344\376\377\221\340\377\377" |
"\222\341\377\377\227\343\377\377\225\343\377\377\225\343\377\377\231\344" |
"\376\377\231\344\376\377\234\346\376\377\234\346\376\377\233\345\376\377" |
"\241\350\377\377\236\346\377\377\241\350\377\377\36Qn\377\0\0\0\377\0\0\0" |
"\377\0\0\0\377\0\0\0\377\201\313\347\377\241\350\377\377\241\350\377\377" |
"\241\350\377\377\241\350\377\377\234\346\376\377\241\350\377\377\241\350" |
"\377\377\241\350\377\377\234\346\376\377\234\346\376\377\234\346\376\377" |
"\231\344\376\377\231\344\376\377\231\344\376\377\231\344\376\377\225\343" |
"\377\377\222\341\377\377\223\342\377\377\222\341\377\377\223\342\377\377" |
"\215\336\377\377\215\336\377\377\215\336\377\377\213\336\377\377\211\334" |
"\377\377\211\334\377\377\207\333\377\377\207\333\377\377\204\332\377\377" |
"\204\332\377\377\200\330\377\377\200\330\377\377~\327\377\377|\326\377\377" |
"\222\341\377\377\361\372\377\377\376\377\377\377\376\377\377\377\376\377" |
"\377\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377" |
"\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377" |
"\377\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377" |
"\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377" |
"\377\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377" |
"\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377" |
"\377\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377" |
"\376\376\377\377\376\376\377\377\243\351\377\377H\273\377\377<\265\376\377" |
"=\265\376\377=\265\376\3778\263\376\3775\262\377\3775\262\377\3777\262\377" |
"\3771\257\377\3771\257\377\377/\256\377\377,\255\377\377,\255\377\377*\253" |
"\377\377*\253\377\377\10\27\40\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377" |
"\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\31Fb\377\221" |
"\340\377\377\217\337\377\377\223\342\377\377\221\340\377\377\221\340\377" |
"\377\222\341\377\377\222\341\377\377\227\343\377\377\222\341\377\377\231" |
"\344\376\377\227\343\377\377\231\344\376\377\231\344\376\377\234\346\376" |
"\377\234\346\376\377\234\346\376\377\241\350\377\377\25<S\377\0\0\0\377\0" |
"\0\0\377\0\0\0\377\0\0\0\377\227\343\377\377\234\346\376\377\241\350\377" |
"\377\241\350\377\377\234\346\376\377\234\346\376\377\241\350\377\377\234" |
"\346\376\377\234\346\376\377\234\346\376\377\231\344\376\377\231\344\376" |
"\377\227\343\377\377\231\344\376\377\227\343\377\377\225\343\377\377\223" |
"\342\377\377\223\342\377\377\222\341\377\377\222\341\377\377\215\336\377" |
"\377\215\336\377\377\215\336\377\377\213\336\377\377\211\334\377\377\211" |
"\334\377\377\207\333\377\377\207\333\377\377\204\332\377\377\204\332\377" |
"\377\204\332\377\377\200\330\377\377\200\330\377\377~\327\377\377|\326\377" |
"\377z\325\377\377z\325\377\377\246\354\377\377\352\370\377\377\376\377\377" |
"\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377\376" |
"\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377" |
"\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377\376" |
"\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377" |
"\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377\376" |
"\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377" |
"\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377\376" |
"\376\377\377a\310\377\377@\267\377\377@\267\377\377<\265\376\377<\265\376" |
"\377=\265\376\3778\263\376\3775\262\377\3775\262\377\3771\257\377\3771\257" |
"\377\3771\257\377\377/\256\377\377,\255\377\377/\256\377\377/\256\377\377" |
"*\253\377\377\35Wz\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377z\325\377\377\217\337\377" |
"\377\217\337\377\377\204\323\364\377\221\340\377\377\221\340\377\377\222" |
"\341\377\377\222\341\377\377\222\341\377\377\227\343\377\377\227\343\377" |
"\377\227\343\377\377\231\344\376\377\231\344\376\377\231\344\376\377\231" |
"\344\376\377\234\346\376\377\234\346\376\377\24""5H\377\0\0\0\377\0\0\0\377" |
"\0\0\0\377\0\0\0\377\241\350\377\377\241\350\377\377\234\346\376\377\234" |
"\346\376\377\234\346\376\377\234\346\376\377\234\346\376\377\234\346\376" |
"\377\231\344\376\377\231\344\376\377\227\343\377\377\231\344\376\377\231" |
"\344\376\377\222\341\377\377\227\343\377\377\223\342\377\377\223\342\377" |
"\377\222\341\377\377\222\341\377\377\215\336\377\377\222\341\377\377\215" |
"\336\377\377\213\336\377\377\213\336\377\377\213\336\377\377\211\334\377" |
"\377\207\333\377\377\207\333\377\377\204\332\377\377~\327\377\377~\327\377" |
"\377\200\330\377\377~\327\377\377z\325\377\377z\325\377\377z\325\377\377" |
"z\325\377\377v\323\377\377v\323\377\377\234\346\376\377\334\366\377\377\376" |
"\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377" |
"\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377\376" |
"\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377" |
"\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377\376" |
"\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377" |
"\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377\376" |
"\377\377\377\376\377\377\377\376\377\377\377\370\374\377\377|\326\377\377" |
"@\267\377\377<\265\376\377<\265\376\377<\265\376\377=\265\376\3778\263\376" |
"\377;\264\376\3775\262\377\3775\262\377\3771\257\377\377/\256\377\377/\256" |
"\377\377,\255\377\377*\253\377\377*\253\377\377*\253\377\377!\216\323\377" |
"\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\377\0\0\0\377" |
"\0\0\0\377\0\0\0\377\17$0\377\213\336\377\377\211\334\377\377\213\336\377" |
"\377\215\336\377\377\215\336\377\377\215\336\377\377\223\342\377\377\222" |
"\341\377\377\222\341\377\377\223\342\377\377\223\342\377\377\225\343\377" |
"\377\225\343\377\377\231\344\376\377\231\344\376\377\231\344\376\377\231" |
"\344\376\377\231\344\376\377\231\344\376\377\237\347\377\377\237\347\377" |
"\377\234\346\376\377\234\346\376\377\234\346\376\377\234\346\376\377\234" |
"\346\376\377\234\346\376\377\231\344\376\377\234\346\376\377\231\344\376" |
"\377\231\344\376\377\231\344\376\377\225\343\377\377\231\344\376\377\225" |
"\343\377\377\225\343\377\377\223\342\377\377\223\342\377\377\223\342\377" |
"\377\222\341\377\377\222\341\377\377\215\336\377\377\222\341\377\377\211" |
"\334\377\377\215\336\377\377\213\336\377\377\213\336\377\377\207\333\377" |
"\377\207\333\377\377\207\333\377\377\204\332\377\377\204\332\377\377\204" |
"\332\377\377~\327\377\377~\327\377\377~\327\377\377|\326\377\377z\325\377" |
"\377z\325\377\377x\324\377\377v\323\377\377t\322\377\377t\322\377\377t\322" |
"\377\377\222\341\377\377\334\366\377\377\376\377\377\377\376\377\377\377" |
"\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377" |
"\377\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377" |
"\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377" |
"\377\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377" |
"\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377" |
"\377\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377" |
"\307\363\377\377B\270\376\377<\265\376\377<\265\376\377<\265\376\377;\264" |
"\376\377;\264\376\3777\262\377\3771\257\377\3771\257\377\3772\260\377\377" |
"1\257\377\377/\256\377\377,\255\377\377,\255\377\377*\253\377\377'\252\376" |
"\377'\252\376\377\17$0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0" |
"\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0" |
"\0\0\377\0\0\0\377\0\0\0\377\0\0\0\3773x\236\377\211\334\377\377\213\336" |
"\377\377\213\336\377\377\213\336\377\377\215\336\377\377\215\336\377\377" |
"\215\336\377\377\222\341\377\377\222\341\377\377\222\341\377\377\223\342" |
"\377\377\223\342\377\377\225\343\377\377\225\343\377\377\225\343\377\377" |
"\231\344\376\377\225\343\377\377\231\344\376\377\225\343\377\377\231\344" |
"\376\377\231\344\376\377\231\344\376\377\231\344\376\377\231\344\376\377" |
"\231\344\376\377\231\344\376\377\231\344\376\377\231\344\376\377\231\344" |
"\376\377\231\344\376\377\231\344\376\377\231\344\376\377\231\344\376\377" |
"\225\343\377\377\225\343\377\377\223\342\377\377\222\341\377\377\222\341" |
"\377\377\222\341\377\377\222\341\377\377\222\341\377\377\215\336\377\377" |
"\216\336\377\377\216\336\377\377\215\336\377\377\211\334\377\377\207\333" |
"\377\377\207\333\377\377\207\333\377\377\204\332\377\377\204\332\377\377" |
"\177\330\377\377\177\330\377\377~\327\377\377~\327\377\377|\326\377\377z" |
"\325\377\377z\325\377\377x\324\377\377v\323\377\377v\323\377\377t\322\377" |
"\377t\322\377\377o\317\377\377l\316\377\377o\317\377\377\211\334\377\377" |
"\307\363\377\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377" |
"\377\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377" |
"\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377" |
"\377\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377" |
"\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377" |
"\377\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377" |
"\376\377\377\377\376\377\377\377J\274\377\377@\267\377\377<\265\376\377:" |
"\263\374\3775\262\377\3775\262\377\3777\262\377\3771\257\377\3772\260\377" |
"\3771\257\377\377/\256\377\377/\256\377\377,\255\377\377,\255\377\377*\253" |
"\377\377'\252\376\377'\252\376\377\27[\207\377\0\0\0\377\0\0\0\377\0\0\0" |
"\377\0\0\0\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377G\211\253\377\207" |
"\333\377\377\207\333\377\377\213\336\377\377\213\336\377\377\213\336\377" |
"\377\215\336\377\377\215\336\377\377\215\336\377\377\222\341\377\377\222" |
"\341\377\377\222\341\377\377\223\342\377\377\223\342\377\377\223\342\377" |
"\377\225\343\377\377\225\343\377\377\225\343\377\377\225\343\377\377\231" |
"\344\376\377\231\344\376\377\231\344\376\377\231\344\376\377\231\344\376" |
"\377\225\343\377\377\231\344\376\377\231\344\376\377\225\343\377\377\231" |
"\344\376\377\225\343\377\377\231\344\376\377\225\343\377\377\225\343\377" |
"\377\225\343\377\377\223\342\377\377\223\342\377\377\223\342\377\377\222" |
"\341\377\377\222\341\377\377\222\341\377\377\215\336\377\377\222\341\377" |
"\377\215\336\377\377\215\336\377\377\213\336\377\377\213\336\377\377\211" |
"\334\377\377\207\333\377\377\207\333\377\377\207\333\377\377\204\332\377" |
"\377\177\330\377\377\204\332\377\377~\327\377\377~\327\377\377|\326\377\377" |
"z\325\377\377z\325\377\377z\325\377\377x\324\377\377v\323\377\377t\322\377" |
"\377t\322\377\377l\316\377\377t\322\377\377o\317\377\377o\317\377\377k\315" |
"\377\377k\315\377\377\246\354\377\377\374\376\377\377\376\377\377\377\376" |
"\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377" |
"\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377\376" |
"\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377" |
"\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377\376" |
"\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377" |
"\377\376\377\377\377\374\376\377\377\225\343\377\377<\265\376\377<\265\376" |
"\377<\265\376\377:\263\374\3777\262\377\3775\262\377\3775\262\377\3772\260" |
"\377\3771\257\377\377/\256\377\377,\255\377\377,\255\377\377,\255\377\377" |
"*\253\377\377'\252\376\377'\252\376\377&\212\311\377\0\0\0\377\0\0\0\377" |
"\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\4\12\15\377\201\324" |
"\367\377\207\333\377\377\207\333\377\377\211\334\377\377\211\334\377\377" |
"\213\336\377\377\213\336\377\377\215\336\377\377\215\336\377\377\215\336" |
"\377\377\222\341\377\377\222\341\377\377\222\341\377\377\222\341\377\377" |
"\223\342\377\377\225\343\377\377\222\341\377\377\225\343\377\377\225\343" |
"\377\377\225\343\377\377\225\343\377\377\225\343\377\377\225\343\377\377" |
"\227\343\377\377\227\343\377\377\225\343\377\377\231\344\376\377\225\343" |
"\377\377\225\343\377\377\225\343\377\377\225\343\377\377\223\342\377\377" |
"\223\342\377\377\223\342\377\377\223\342\377\377\222\341\377\377\222\341" |
"\377\377\222\341\377\377\222\341\377\377\215\336\377\377\216\336\377\377" |
"\216\336\377\377\211\334\377\377\213\336\377\377\211\334\377\377\211\334" |
"\377\377\207\333\377\377\207\333\377\377\204\332\377\377\204\332\377\377" |
"\204\332\377\377\177\330\377\377\177\330\377\377~\327\377\377~\327\377\377" |
"|\326\377\377z\325\377\377z\325\377\377x\324\377\377t\322\377\377t\322\377" |
"\377t\322\377\377t\322\377\377t\322\377\377l\316\377\377o\317\377\377k\315" |
"\377\377k\315\377\377h\314\377\377\307\363\377\377\376\377\377\377\376\377" |
"\377\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377" |
"\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377" |
"\377\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377" |
"\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377" |
"\377\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377" |
"\376\377\377\377\376\377\377\377\376\377\377\377\334\366\377\377<\265\376" |
"\377<\265\376\377<\265\376\3775\262\377\3777\262\377\3775\262\377\3772\260" |
"\377\3772\260\377\3771\257\377\377/\256\377\377,\255\377\377*\253\377\377" |
"*\253\377\377*\253\377\377'\252\376\377'\252\376\377#\250\376\377\6\16\24" |
"\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377" |
"\24""5H\377\204\332\377\377\207\333\377\377\204\332\377\377\207\333\377\377" |
"\211\334\377\377\213\336\377\377\211\334\377\377\213\336\377\377\215\336" |
"\377\377\215\336\377\377\215\336\377\377\215\336\377\377\222\341\377\377" |
"\222\341\377\377\222\341\377\377\222\341\377\377\222\341\377\377\222\341" |
"\377\377\223\342\377\377\223\342\377\377\223\342\377\377\223\342\377\377" |
"\223\342\377\377\225\343\377\377\225\343\377\377\225\343\377\377\222\341" |
"\377\377\227\343\377\377\223\342\377\377\223\342\377\377\223\342\377\377" |
"\223\342\377\377\223\342\377\377\222\341\377\377\222\341\377\377\222\341" |
"\377\377\222\341\377\377\215\336\377\377\215\336\377\377\215\336\377\377" |
"\213\336\377\377\213\336\377\377\213\336\377\377\213\336\377\377\211\334" |
"\377\377\207\333\377\377\207\333\377\377\207\333\377\377\204\332\377\377" |
"\204\332\377\377\204\332\377\377\200\330\377\377~\327\377\377~\327\377\377" |
"|\326\377\377|\326\377\377z\325\377\377x\324\377\377v\323\377\377v\323\377" |
"\377t\322\377\377t\322\377\377t\322\377\377l\316\377\377o\317\377\377o\317" |
"\377\377o\317\377\377k\315\377\377h\314\377\377\361\372\377\377\376\377\377" |
"\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377\376" |
"\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377" |
"\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377\376" |
"\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377" |
"\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377\376" |
"\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377" |
"\377e\312\377\377;\264\376\377;\264\376\3775\262\377\3777\262\377\3775\262" |
"\377\3771\257\377\3771\257\377\3771\257\377\377/\256\377\377/\256\377\377" |
"*\253\377\377,\255\377\377*\253\377\377'\252\376\377'\252\376\377#\250\376" |
"\377\24""5H\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377" |
"\0\0\0\3773x\236\377\207\333\377\377\204\332\377\377\207\333\377\377\207" |
"\333\377\377\207\333\377\377\211\334\377\377\211\334\377\377\211\334\377" |
"\377\213\336\377\377\213\336\377\377\215\336\377\377\215\336\377\377\222" |
"\341\377\377\216\336\377\377\222\341\377\377\222\341\377\377\222\341\377" |
"\377\222\341\377\377\222\341\377\377\222\341\377\377\223\342\377\377\223" |
"\342\377\377\223\342\377\377\223\342\377\377\223\342\377\377\222\341\377" |
"\377\222\341\377\377\222\341\377\377\222\341\377\377\222\341\377\377\222" |
"\341\377\377\222\341\377\377\223\342\377\377\222\341\377\377\222\341\377" |
"\377\215\336\377\377\222\341\377\377\215\336\377\377\215\336\377\377\215" |
"\336\377\377\213\336\377\377\213\336\377\377\213\336\377\377\211\334\377" |
"\377\207\333\377\377\207\333\377\377\207\333\377\377\204\332\377\377\207" |
"\333\377\377~\327\377\377\177\330\377\377~\327\377\377~\327\377\377|\326" |
"\377\377|\326\377\377z\325\377\377z\325\377\377x\324\377\377v\323\377\377" |
"t\322\377\377t\322\377\377t\322\377\377l\316\377\377t\322\377\377o\317\377" |
"\377k\315\377\377k\315\377\377k\315\377\377z\325\377\377\376\377\377\377" |
"\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377" |
"\377\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377" |
"\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377" |
"\377\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377" |
"\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377" |
"\377\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377" |
"\361\372\377\377\255\357\377\377;\264\376\3775\262\377\3778\263\376\3777" |
"\262\377\3775\262\377\3771\257\377\3771\257\377\3771\257\377\377/\256\377" |
"\377,\255\377\377,\255\377\377*\253\377\377'\252\376\377'\252\376\377'\252" |
"\376\377#\250\376\377\27[\207\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377" |
"\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\377\0" |
"\0\0\377\0\0\0\377\0\0\0\377\\\301\370\377~\327\377\377\204\332\377\377\204" |
"\332\377\377\207\333\377\377\207\333\377\377\207\333\377\377\211\334\377" |
"\377\211\334\377\377\213\336\377\377\213\336\377\377\213\336\377\377\215" |
"\336\377\377\215\336\377\377\216\336\377\377\215\336\377\377\215\336\377" |
"\377\222\341\377\377\222\341\377\377\222\341\377\377\222\341\377\377\222" |
"\341\377\377\223\342\377\377\223\342\377\377\222\341\377\377\222\341\377" |
"\377\222\341\377\377\222\341\377\377\222\341\377\377\222\341\377\377\222" |
"\341\377\377\222\341\377\377\222\341\377\377\215\336\377\377\222\341\377" |
"\377\215\336\377\377\215\336\377\377\215\336\377\377\215\336\377\377\213" |
"\336\377\377\213\336\377\377\211\334\377\377\213\336\377\377\207\333\377" |
"\377\207\333\377\377\207\333\377\377\207\333\377\377\204\332\377\377\204" |
"\332\377\377~\327\377\377\200\330\377\377~\327\377\377~\327\377\377~\327" |
"\377\377z\325\377\377z\325\377\377z\325\377\377x\324\377\377v\323\377\377" |
"v\323\377\377t\322\377\377t\322\377\377o\317\377\377l\316\377\377o\317\377" |
"\377o\317\377\377k\315\377\377k\315\377\377e\312\377\377\234\346\376\377" |
"\374\376\377\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377" |
"\377\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377" |
"\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377" |
"\377\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377" |
"\376\377\377\377\376\377\377\377\370\374\377\377\376\377\377\377\376\377" |
"\377\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377" |
"\376\377\377\377\376\377\377\377\370\374\377\377?\267\377\377;\264\376\377" |
"5\262\377\3775\262\377\3775\262\377\3771\257\377\3771\257\377\3771\257\377" |
"\377,\255\377\377,\255\377\377,\255\377\377*\253\377\377'\252\376\377'\252" |
"\376\377#\250\376\377#\250\376\377!\216\323\377\0\0\0\377\0\0\0\377\0\0\0" |
"\377\0\0\0\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377" |
"\0\0\0\377\0\0\0\377\0\0\0\377\1\2\2\377\201\324\367\377\200\330\377\377" |
"~\327\377\377~\327\377\377\204\332\377\377\204\332\377\377\207\333\377\377" |
"\207\333\377\377\207\333\377\377\211\334\377\377\213\336\377\377\211\334" |
"\377\377\213\336\377\377\211\334\377\377\216\336\377\377\216\336\377\377" |
"\215\336\377\377\215\336\377\377\215\336\377\377\215\336\377\377\222\341" |
"\377\377\215\336\377\377\215\336\377\377\223\342\377\377\222\341\377\377" |
"\222\341\377\377\222\341\377\377\222\341\377\377\222\341\377\377\215\336" |
"\377\377\222\341\377\377\215\336\377\377\215\336\377\377\215\336\377\377" |
"\215\336\377\377\215\336\377\377\215\336\377\377\213\336\377\377\213\336" |
"\377\377\213\336\377\377\213\336\377\377\211\334\377\377\207\333\377\377" |
"\204\332\377\377\207\333\377\377\204\332\377\377\204\332\377\377\204\332" |
"\377\377~\327\377\377\204\332\377\377~\327\377\377~\327\377\377|\326\377" |
"\377|\326\377\377z\325\377\377z\325\377\377x\324\377\377x\324\377\377v\323" |
"\377\377t\322\377\377t\322\377\377t\322\377\377o\317\377\377o\317\377\377" |
"o\317\377\377k\315\377\377o\317\377\377e\312\377\377k\315\377\377\307\363" |
"\377\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377" |
"\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377" |
"\377\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377" |
"\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377" |
"\377\377\376\377\377\377\376\377\377\377\231\344\376\377\263\361\377\377" |
"\361\372\377\377\376\377\377\377\361\372\377\377\376\377\377\377\376\377" |
"\377\377\376\377\377\377\376\377\377\377\370\374\377\377\204\332\377\377" |
";\264\376\3775\262\377\3775\262\377\3771\257\377\3771\257\377\3771\257\377" |
"\377/\256\377\377,\255\377\377*\253\377\377*\253\377\377*\253\377\377'\252" |
"\376\377'\252\376\377#\250\376\377#\250\376\377#\250\376\377\3\4\6\377\0" |
"\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\11\33'\377\200\327\376\377" |
"\200\330\377\377\200\330\377\377\200\330\377\377\200\330\377\377\205\332" |
"\377\377\205\332\377\377\207\333\377\377\207\333\377\377\207\333\377\377" |
"\207\333\377\377\211\334\377\377\213\336\377\377\212\335\377\377\213\336" |
"\377\377\213\336\377\377\213\336\377\377\213\336\377\377\213\336\377\377" |
"\215\336\377\377\215\336\377\377\215\336\377\377\215\336\377\377\215\336" |
"\377\377\215\336\377\377\215\336\377\377\215\336\377\377\222\341\377\377" |
"\215\336\377\377\215\336\377\377\215\336\377\377\215\336\377\377\215\336" |
"\377\377\215\336\377\377\213\336\377\377\213\336\377\377\213\336\377\377" |
"\213\336\377\377\213\336\377\377\207\333\377\377\211\334\377\377\207\333" |
"\377\377\207\333\377\377\207\333\377\377\204\332\377\377\204\332\377\377" |
"\204\332\377\377\204\332\377\377~\327\377\377\177\330\377\377~\327\377\377" |
"|\326\377\377z\325\377\377z\325\377\377z\325\377\377x\324\377\377v\323\377" |
"\377v\323\377\377t\322\377\377t\322\377\377t\322\377\377t\322\377\377l\316" |
"\377\377t\322\377\377k\315\377\377k\315\377\377h\314\377\377h\314\377\377" |
"h\314\377\377\361\372\377\377\376\377\377\377\376\377\377\377\376\377\377" |
"\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377\376" |
"\377\377\377\376\377\377\377\361\372\377\377\376\376\377\377\376\377\377" |
"\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377\376" |
"\377\377\377\376\377\377\377\376\376\377\377\307\363\377\377H\273\377\377" |
"D\271\376\377D\271\376\377a\310\377\377\231\344\376\377\307\363\377\377\376" |
"\377\377\377\370\374\377\377\352\370\377\377\374\376\377\377\307\363\377" |
"\3777\262\377\3775\262\377\3775\262\377\3771\257\377\3771\257\377\3771\257" |
"\377\377/\256\377\377*\253\377\377/\256\377\377(\252\376\377(\252\376\377" |
"'\252\376\377'\252\376\377#\250\376\377#\250\376\377!\247\376\377\11\33'" |
"\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\25<S\377|\326\377" |
"\377|\326\377\377\200\330\377\377\200\330\377\377\200\330\377\377\200\330" |
"\377\377\205\332\377\377\200\330\377\377\207\333\377\377\207\333\377\377" |
"\207\333\377\377\207\333\377\377\212\335\377\377\207\333\377\377\212\335" |
"\377\377\212\335\377\377\212\335\377\377\213\336\377\377\213\336\377\377" |
"\213\336\377\377\213\336\377\377\215\336\377\377\215\336\377\377\215\336" |
"\377\377\216\336\377\377\216\336\377\377\216\336\377\377\216\336\377\377" |
"\215\336\377\377\215\336\377\377\215\336\377\377\213\336\377\377\213\336" |
"\377\377\213\336\377\377\211\334\377\377\213\336\377\377\213\336\377\377" |
"\207\333\377\377\207\333\377\377\207\333\377\377\207\333\377\377\207\333" |
"\377\377\204\332\377\377\204\332\377\377\207\333\377\377~\327\377\377~\327" |
"\377\377\177\330\377\377~\327\377\377~\327\377\377|\326\377\377|\326\377" |
"\377z\325\377\377x\324\377\377x\324\377\377x\324\377\377v\323\377\377t\322" |
"\377\377t\322\377\377t\322\377\377o\317\377\377l\316\377\377t\322\377\377" |
"l\316\377\377o\317\377\377k\315\377\377h\314\377\377h\314\377\377v\323\377" |
"\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377\376" |
"\377\377\377\376\377\377\377\376\377\377\377\352\370\377\377\250\355\377" |
"\377k\315\377\377t\322\377\377\376\376\377\377\376\377\377\377\376\377\377" |
"\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377\376" |
"\377\377\377\376\376\377\377v\323\377\377H\273\377\377H\273\377\377D\271" |
"\376\377D\271\376\377D\271\376\377<\265\376\377B\270\376\377t\322\377\377" |
"\241\350\377\377\334\366\377\377\334\366\377\3775\262\377\3775\262\377\377" |
"5\262\377\3771\257\377\3771\257\377\377/\256\377\377*\253\377\377/\256\377" |
"\377(\252\376\377/\256\377\377(\252\376\377'\252\376\377!\247\376\377#\250" |
"\376\377!\247\376\377!\247\376\377\24""5H\377\0\0\0\377\0\0\0\377\0\0\0\377" |
"\0\0\0\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\377\0\0\0\377" |
"\0\0\0\377\0\0\0\377\35Wz\377|\326\377\377|\326\377\377~\327\377\377~\327" |
"\377\377\200\330\377\377\200\330\377\377\200\330\377\377\200\330\377\377" |
"\204\332\377\377\204\332\377\377\207\333\377\377\207\333\377\377\207\333" |
"\377\377\207\333\377\377\213\336\377\377\207\333\377\377\211\334\377\377" |
"\213\336\377\377\213\336\377\377\211\334\377\377\213\336\377\377\213\336" |
"\377\377\213\336\377\377\213\336\377\377\213\336\377\377\213\336\377\377" |
"\211\334\377\377\213\336\377\377\213\336\377\377\213\336\377\377\213\336" |
"\377\377\211\334\377\377\211\334\377\377\213\336\377\377\211\334\377\377" |
"\211\334\377\377\212\335\377\377\207\333\377\377\204\332\377\377\207\333" |
"\377\377\207\333\377\377\204\332\377\377\204\332\377\377\204\332\377\377" |
"\204\332\377\377~\327\377\377~\327\377\377~\327\377\377|\326\377\377|\326" |
"\377\377|\326\377\377|\326\377\377x\324\377\377x\324\377\377v\323\377\377" |
"x\324\377\377t\322\377\377t\322\377\377t\322\377\377o\317\377\377l\316\377" |
"\377l\316\377\377l\316\377\377l\316\377\377k\315\377\377h\314\377\377h\314" |
"\377\377h\314\377\377\234\346\376\377\376\377\377\377\376\377\377\377\376" |
"\377\377\377\374\376\377\377\370\374\377\377\263\361\377\377y\325\377\377" |
"]\306\377\377V\302\377\377X\303\377\377V\302\377\377\255\357\377\377\376" |
"\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377" |
"\377\376\377\377\377\376\377\377\377\334\366\377\377H\273\377\377H\273\377" |
"\377D\271\376\377D\271\376\377@\267\377\377@\267\377\377@\267\377\377?\267" |
"\377\377;\264\376\377;\264\376\377;\264\376\377:\263\374\3777\262\377\377" |
"1\257\377\3772\260\377\3772\260\377\3771\257\377\377/\256\377\377*\253\377" |
"\377*\253\377\377*\253\377\377(\252\376\377(\252\376\377'\252\376\377!\247" |
"\376\377#\250\376\377!\247\376\377\37\246\376\377\36Qn\377\0\0\0\377\0\0" |
"\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0" |
"\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377A\202\244\377z\325\377\377|\326\377" |
"\377|\326\377\377~\327\377\377~\327\377\377\200\330\377\377\200\330\377\377" |
"\200\330\377\377~\327\377\377\204\332\377\377\204\332\377\377\204\332\377" |
"\377\207\333\377\377\204\332\377\377\207\333\377\377\207\333\377\377\207" |
"\333\377\377\211\334\377\377\211\334\377\377\211\334\377\377A\202\244\377" |
"\36Qn\377\36Qn\377\25<S\377\24.=\377\204\323\364\377\213\336\377\377\211" |
"\334\377\377\211\334\377\377\211\334\377\377\211\334\377\377\211\334\377" |
"\377\211\334\377\377\211\334\377\377\207\333\377\377\207\333\377\377\204" |
"\332\377\377\207\333\377\377\207\333\377\377\204\332\377\377\204\332\377" |
"\377\207\333\377\377~\327\377\377~\327\377\377\177\330\377\377\177\330\377" |
"\377~\327\377\377~\327\377\377|\326\377\377|\326\377\377|\326\377\377y\325" |
"\377\377x\324\377\377x\324\377\377t\322\377\377t\322\377\377t\322\377\377" |
"t\322\377\377t\322\377\377l\316\377\377o\317\377\377t\322\377\377k\315\377" |
"\377k\315\377\377h\314\377\377h\314\377\377h\314\377\377e\312\377\377\307" |
"\363\377\377\376\377\377\377\376\377\377\377\307\363\377\377\213\336\377" |
"\377_\307\377\377_\307\377\377]\304\375\377]\304\375\377V\302\377\377X\303" |
"\377\377V\302\377\377]\304\375\377\361\372\377\377\376\377\377\377\376\377" |
"\377\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377" |
"\200\327\376\377D\271\376\377H\273\377\377D\266\372\377D\271\376\377D\271" |
"\376\377@\267\377\377<\265\376\377?\267\377\377;\264\376\377;\264\376\377" |
"5\262\377\3777\262\377\3777\262\377\3772\260\377\3771\257\377\3771\257\377" |
"\3771\257\377\377/\256\377\377/\256\377\377*\253\377\377*\253\377\377(\252" |
"\376\377'\252\376\377'\252\376\377!\247\376\377#\250\376\377!\247\376\377" |
"\37\246\376\377\32e\225\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0" |
"\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0" |
"\0\377G\211\253\377z\325\377\377z\325\377\377z\325\377\377z\325\377\377|" |
"\326\377\377|\326\377\377~\327\377\377\200\330\377\377~\327\377\377\204\332" |
"\377\377~\327\377\377\207\333\377\377\204\332\377\377\204\332\377\377\204" |
"\332\377\377\207\333\377\377\207\333\377\377\207\333\377\377\207\333\377" |
"\377\204\332\377\377\36Qn\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377|\326" |
"\377\377\211\334\377\377\211\334\377\377\211\334\377\377\205\332\377\377" |
"\207\333\377\377\207\333\377\377\207\333\377\377\207\333\377\377\207\333" |
"\377\377\207\333\377\377\207\333\377\377\204\332\377\377\204\332\377\377" |
"\204\332\377\377~\327\377\377\177\330\377\377\177\330\377\377\204\332\377" |
"\377~\327\377\377~\327\377\377|\326\377\377|\326\377\377|\326\377\377|\326" |
"\377\377x\324\377\377x\324\377\377x\324\377\377t\322\377\377t\322\377\377" |
"t\322\377\377t\322\377\377o\317\377\377l\316\377\377t\322\377\377o\317\377" |
"\377o\317\377\377k\315\377\377h\314\377\377g\313\377\377k\315\377\377e\312" |
"\377\377e\312\377\377v\323\377\377\234\346\376\377e\312\377\377a\310\377" |
"\377_\307\377\377]\306\377\377]\306\377\377]\306\377\377X\303\377\377X\303" |
"\377\377V\302\377\377V\302\377\377Q\277\377\377\207\333\377\377\376\377\377" |
"\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377\352" |
"\370\377\377I\274\377\377H\273\377\377D\271\376\377D\271\376\377D\271\376" |
"\377D\271\376\377<\265\376\377@\267\377\377<\265\376\377<\265\376\377;\264" |
"\376\377;\264\376\3775\262\377\3775\262\377\3772\260\377\3772\260\377\377" |
"1\257\377\377/\256\377\377/\256\377\377,\255\377\377(\252\376\377(\252\376" |
"\377(\252\376\377(\252\376\377!\247\376\377'\252\376\377!\247\376\377\37" |
"\246\376\377\37\246\376\377&\212\311\377\0\0\0\377\0\0\0\377\0\0\0\377\0" |
"\0\0\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\377\0\0\0\377" |
"\0\0\0\377\0\0\0\377Z\277\367\377x\324\377\377z\325\377\377z\325\377\377" |
"z\325\377\377|\326\377\377|\326\377\377~\327\377\377|\326\377\377~\327\377" |
"\377~\327\377\377~\327\377\377\204\332\377\377~\327\377\377\204\332\377\377" |
"\204\332\377\377\204\332\377\377\204\332\377\377\204\332\377\377\207\333" |
"\377\377\207\333\377\377\36Qn\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377" |
"\202\313\347\377\205\332\377\377\205\332\377\377\207\333\377\377\207\333" |
"\377\377\207\333\377\377\207\333\377\377\207\333\377\377\204\332\377\377" |
"\204\332\377\377\204\332\377\377\204\332\377\377\204\332\377\377\204\332" |
"\377\377\177\330\377\377~\327\377\377\204\332\377\377\177\330\377\377~\327" |
"\377\377~\327\377\377|\326\377\377|\326\377\377y\325\377\377y\325\377\377" |
"y\325\377\377x\324\377\377x\324\377\377x\324\377\377t\322\377\377t\322\377" |
"\377t\322\377\377o\317\377\377o\317\377\377o\317\377\377o\317\377\377o\317" |
"\377\377k\315\377\377k\315\377\377h\314\377\377k\315\377\377g\313\377\377" |
"e\312\377\377e\312\377\377a\310\377\377a\310\377\377a\310\377\377a\310\377" |
"\377]\306\377\377]\306\377\377]\304\375\377W\303\377\377X\303\377\377V\302" |
"\377\377V\302\377\377V\302\377\377V\302\377\377Q\277\377\377\307\363\377" |
"\377\376\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377\216" |
"\336\377\377H\273\377\377H\273\377\377D\271\376\377D\271\376\377@\267\377" |
"\377@\267\377\377@\267\377\377<\265\376\377;\264\376\377;\264\376\377;\264" |
"\376\3775\262\377\3775\262\377\3772\260\377\3772\260\377\3771\257\377\377" |
"1\257\377\377/\256\377\377,\255\377\377*\253\377\377/\256\377\377(\252\376" |
"\377(\252\376\377'\252\376\377%\250\376\377!\247\376\377!\247\376\377\37" |
"\246\376\377\37\246\376\377!\216\323\377\0\0\0\377\0\0\0\377\0\0\0\377\0" |
"\0\0\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\377\0\0\0\377" |
"\0\0\0\377\0\0\0\377Z\277\367\377v\323\377\377v\323\377\377z\325\377\377" |
"z\325\377\377z\325\377\377|\326\377\377|\326\377\377|\326\377\377~\327\377" |
"\377~\327\377\377\177\330\377\377\177\330\377\377\177\330\377\377\204\332" |
"\377\377~\327\377\377~\327\377\377\204\332\377\377\207\333\377\377\204\332" |
"\377\377\207\333\377\3773x\236\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377" |
"G\211\253\377\205\332\377\377\205\332\377\377\205\332\377\377\205\332\377" |
"\377\200\330\377\377\207\333\377\377\204\332\377\377\204\332\377\377\204" |
"\332\377\377~\327\377\377~\327\377\377\177\330\377\377\204\332\377\377~\327" |
"\377\377~\327\377\377~\327\377\377~\327\377\377|\326\377\377|\326\377\377" |
"|\326\377\377|\326\377\377y\325\377\377x\324\377\377x\324\377\377x\324\377" |
"\377t\322\377\377t\322\377\377t\322\377\377t\322\377\377t\322\377\377l\316" |
"\377\377o\317\377\377o\317\377\377k\315\377\377k\315\377\377k\315\377\377" |
"h\314\377\377h\314\377\377e\312\377\377e\312\377\377e\312\377\377c\311\377" |
"\377c\311\377\377a\310\377\377]\306\377\377]\306\377\377]\304\375\377]\304" |
"\375\377]\304\375\377X\303\377\377V\302\377\377V\302\377\377V\302\377\377" |
"V\302\377\377Q\277\377\377Q\277\377\377e\312\377\377\376\377\377\377\376" |
"\377\377\377\376\377\377\377\370\374\377\377J\274\377\377H\273\377\377H\273" |
"\377\377D\271\376\377B\270\376\377D\271\376\377<\265\376\377<\265\376\377" |
"<\265\376\377?\267\377\377;\264\376\377;\264\376\3775\262\377\3775\262\377" |
"\3775\262\377\3772\260\377\3771\257\377\3771\257\377\377,\255\377\377,\255" |
"\377\377,\255\377\377(\252\376\377(\252\376\377'\252\376\377'\252\376\377" |
"!\247\376\377'\252\376\377!\247\376\377\37\246\376\377\37\246\376\377\32" |
"\225\347\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377p\320\377" |
"\377t\322\377\377v\323\377\377v\323\377\377x\324\377\377z\325\377\377z\325" |
"\377\377z\325\377\377|\326\377\377|\326\377\377|\326\377\377~\327\377\377" |
"~\327\377\377\177\330\377\377\177\330\377\377~\327\377\377\204\332\377\377" |
"~\327\377\377~\327\377\377~\327\377\377~\327\377\377G\211\253\377\0\0\0\377" |
"\0\0\0\377\0\0\0\377\0\0\0\377A\202\244\377\205\332\377\377\205\332\377\377" |
"\200\330\377\377\207\333\377\377\200\330\377\377\200\330\377\377~\327\377" |
"\377~\327\377\377\177\330\377\377\204\332\377\377\177\330\377\377\177\330" |
"\377\377~\327\377\377~\327\377\377~\327\377\377|\326\377\377|\326\377\377" |
"|\326\377\377|\326\377\377y\325\377\377x\324\377\377x\324\377\377x\324\377" |
"\377t\322\377\377x\324\377\377t\322\377\377t\322\377\377t\322\377\377l\316" |
"\377\377l\316\377\377t\322\377\377o\317\377\377o\317\377\377k\315\377\377" |
"k\315\377\377h\314\377\377h\314\377\377k\315\377\377e\312\377\377e\312\377" |
"\377c\311\377\377c\311\377\377a\310\377\377a\310\377\377a\310\377\377]\306" |
"\377\377]\304\375\377]\304\375\377]\304\375\377X\303\377\377V\302\377\377" |
"V\302\377\377V\302\377\377Q\277\377\377Q\277\377\377Q\277\377\377Q\277\377" |
"\377\250\355\377\377\374\376\377\377\374\376\377\377\227\343\377\377H\273" |
"\377\377D\271\376\377D\271\376\377D\271\376\377B\270\376\377@\267\377\377" |
"@\267\377\377@\267\377\377<\265\376\377;\264\376\3775\262\377\377;\264\376" |
"\3775\262\377\3775\262\377\3771\257\377\3772\260\377\3771\257\377\377/\256" |
"\377\377,\255\377\377,\255\377\377*\253\377\377(\252\376\377'\252\376\377" |
"'\252\376\377%\250\376\377!\247\376\377!\247\376\377\37\246\376\377\37\246" |
"\376\377\37\246\376\377\30\230\355\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0" |
"\0\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\377\0\0\0\377\0" |
"\0\0\377\0\0\0\377t\322\377\377t\322\377\377t\322\377\377v\323\377\377t\322" |
"\377\377x\324\377\377x\324\377\377x\324\377\377z\325\377\377z\325\377\377" |
"|\326\377\377|\326\377\377|\326\377\377|\326\377\377~\327\377\377|\326\377" |
"\377\200\330\377\377\200\330\377\377\200\330\377\377\200\330\377\377\200" |
"\330\377\377Z\277\367\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\36Qn\377" |
"\200\330\377\377\200\330\377\377\200\330\377\377\200\330\377\377\200\330" |
"\377\377\200\330\377\377\200\330\377\377\200\330\377\377~\327\377\377\200" |
"\330\377\377~\327\377\377~\327\377\377|\326\377\377|\326\377\377|\326\377" |
"\377z\325\377\377z\325\377\377z\325\377\377z\325\377\377x\324\377\377x\324" |
"\377\377v\323\377\377x\324\377\377t\322\377\377t\322\377\377t\322\377\377" |
"t\322\377\377l\316\377\377p\320\377\377p\320\377\377o\317\377\377o\317\377" |
"\377k\315\377\377k\315\377\377h\314\377\377h\314\377\377h\314\377\377h\314" |
"\377\377c\311\377\377c\311\377\377c\311\377\377c\311\377\377_\307\377\377" |
"_\307\377\377]\306\377\377]\306\377\377]\304\375\377W\303\377\377W\303\377" |
"\377W\303\377\377V\302\377\377V\302\377\377T\301\376\377T\301\376\377J\274" |
"\377\377T\301\376\377J\274\377\377T\301\376\377\352\370\377\377\374\376\377" |
"\377Q\277\377\377H\273\377\377H\273\377\377D\271\376\377B\270\376\377B\270" |
"\376\377@\267\377\377<\265\376\377<\265\376\377<\265\376\377;\264\376\377" |
"5\262\377\377;\264\376\3775\262\377\3775\262\377\3771\257\377\3771\257\377" |
"\3771\257\377\377/\256\377\377,\255\377\377*\253\377\377,\255\377\377(\252" |
"\376\377'\252\376\377'\252\376\377#\250\376\377#\250\376\377!\247\376\377" |
"\37\246\376\377\37\246\376\377\33\244\376\377\33\244\376\377\0\0\0\377\0" |
"\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377" |
"\0\0\0\377\0\0\0\377\0\0\0\377\4\12\15\377t\322\377\377t\322\377\377t\322" |
"\377\377t\322\377\377t\322\377\377v\323\377\377v\323\377\377x\324\377\377" |
"x\324\377\377z\325\377\377z\325\377\377z\325\377\377z\325\377\377|\326\377" |
"\377|\326\377\377|\326\377\377|\326\377\377~\327\377\377~\327\377\377~\327" |
"\377\377~\327\377\377\201\313\347\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0" |
"\377\25<S\377\200\330\377\377\200\330\377\377\200\330\377\377~\327\377\377" |
"\200\330\377\377\200\330\377\377~\327\377\377~\327\377\377~\327\377\377~" |
"\327\377\377|\326\377\377|\326\377\377|\326\377\377z\325\377\377z\325\377" |
"\377z\325\377\377z\325\377\377x\324\377\377x\324\377\377v\323\377\377v\323" |
"\377\377t\322\377\377t\322\377\377t\322\377\377t\322\377\377t\322\377\377" |
"t\322\377\377t\322\377\377l\316\377\377l\316\377\377k\315\377\377k\315\377" |
"\377k\315\377\377h\314\377\377h\314\377\377e\312\377\377e\312\377\377e\312" |
"\377\377c\311\377\377c\311\377\377_\307\377\377c\311\377\377_\307\377\377" |
"]\306\377\377]\306\377\377]\306\377\377]\304\375\377V\302\377\377W\303\377" |
"\377W\303\377\377V\302\377\377T\301\376\377T\301\376\377T\301\376\377T\301" |
"\376\377J\274\377\377J\274\377\377I\274\377\377e\312\377\377c\311\377\377" |
"D\271\376\377D\271\376\377D\271\376\377D\271\376\377B\270\376\377@\267\377" |
"\377<\265\376\377@\267\377\377<\265\376\377<\265\376\377;\264\376\3775\262" |
"\377\3775\262\377\3772\260\377\3772\260\377\3771\257\377\377/\256\377\377" |
"/\256\377\377,\255\377\377,\255\377\377*\253\377\377*\253\377\377'\252\376" |
"\377'\252\376\377'\252\376\377#\250\376\377!\247\376\377\37\246\376\377\37" |
"\246\376\377\37\246\376\377\32\243\376\377\32\243\376\377\4\12\15\377\0\0" |
"\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0" |
"\0\0\377\0\0\0\377\0\0\0\377\10\24\32\377l\316\377\377o\317\377\377t\322" |
"\377\377t\322\377\377t\322\377\377t\322\377\377v\323\377\377v\323\377\377" |
"v\323\377\377x\324\377\377x\324\377\377z\325\377\377z\325\377\377z\325\377" |
"\377z\325\377\377z\325\377\377|\326\377\377|\326\377\377|\326\377\377|\326" |
"\377\377|\326\377\377|\326\377\377\4\12\15\377\0\0\0\377\0\0\0\377\0\0\0" |
"\377\17$0\377~\327\377\377~\327\377\377~\327\377\377~\327\377\377|\326\377" |
"\377|\326\377\377|\326\377\377|\326\377\377|\326\377\377|\326\377\377|\326" |
"\377\377z\325\377\377z\325\377\377z\325\377\377z\325\377\377x\324\377\377" |
"x\324\377\377v\323\377\377v\323\377\377v\323\377\377t\322\377\377t\322\377" |
"\377t\322\377\377t\322\377\377t\322\377\377l\316\377\377l\316\377\377l\316" |
"\377\377p\320\377\377l\316\377\377k\315\377\377k\315\377\377h\314\377\377" |
"h\314\377\377e\312\377\377h\314\377\377e\312\377\377c\311\377\377c\311\377" |
"\377c\311\377\377_\307\377\377_\307\377\377]\306\377\377]\306\377\377]\306" |
"\377\377]\304\375\377W\303\377\377]\304\375\377V\302\377\377V\302\377\377" |
"T\301\376\377N\276\377\377T\301\376\377N\276\377\377N\276\377\377T\301\376" |
"\377J\274\377\377J\274\377\377I\274\377\377H\273\377\377H\273\377\377D\271" |
"\376\377D\271\376\377B\270\376\377B\270\376\377@\267\377\377@\267\377\377" |
"<\265\376\377<\265\376\377<\265\376\3775\262\377\377;\264\376\3775\262\377" |
"\3775\262\377\3772\260\377\3771\257\377\3771\257\377\377/\256\377\377,\255" |
"\377\377,\255\377\377,\255\377\377*\253\377\377'\252\376\377'\252\376\377" |
"#\250\376\377#\250\376\377!\247\376\377!\247\376\377\37\246\376\377\33\244" |
"\376\377\33\244\376\377\27\242\377\377\6\16\24\377\0\0\0\377\0\0\0\377\0" |
"\0\0\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\377\0\0\0\377" |
"\0\0\0\377\10\24\32\377o\317\377\377o\317\377\377o\317\377\377t\322\377\377" |
"t\322\377\377t\322\377\377t\322\377\377t\322\377\377t\322\377\377v\323\377" |
"\377x\324\377\377x\324\377\377x\324\377\377z\325\377\377z\325\377\377z\325" |
"\377\377z\325\377\377z\325\377\377z\325\377\377|\326\377\377|\326\377\377" |
"|\326\377\377\17$0\377\0\0\0\377\0\0\0\377\0\0\0\377\6\16\24\377|\326\377" |
"\377|\326\377\377|\326\377\377|\326\377\377|\326\377\377z\325\377\377|\326" |
"\377\377z\325\377\377z\325\377\377z\325\377\377z\325\377\377z\325\377\377" |
"x\324\377\377x\324\377\377z\325\377\377v\323\377\377v\323\377\377v\323\377" |
"\377t\322\377\377t\322\377\377t\322\377\377t\322\377\377t\322\377\377l\316" |
"\377\377t\322\377\377l\316\377\377l\316\377\377t\322\377\377l\316\377\377" |
"l\316\377\377k\315\377\377h\314\377\377k\315\377\377e\312\377\377h\314\377" |
"\377e\312\377\377c\311\377\377c\311\377\377c\311\377\377_\307\377\377_\307" |
"\377\377]\306\377\377]\306\377\377]\304\375\377]\306\377\377V\302\377\377" |
"W\303\377\377V\302\377\377V\302\377\377V\302\377\377T\301\376\377T\301\376" |
"\377N\276\377\377N\276\377\377J\274\377\377N\276\377\377J\274\377\377J\274" |
"\377\377H\273\377\377I\274\377\377D\271\376\377D\271\376\377D\271\376\377" |
"B\270\376\377@\267\377\377<\265\376\377<\265\376\377<\265\376\377<\265\376" |
"\3778\263\376\377;\264\376\3775\262\377\3772\260\377\3772\260\377\3772\260" |
"\377\3771\257\377\3771\257\377\377/\256\377\377,\255\377\377*\253\377\377" |
"*\253\377\377'\252\376\377'\252\376\377'\252\376\377#\250\376\377#\250\376" |
"\377!\247\376\377\37\246\376\377\37\246\376\377\33\244\376\377\33\244\376" |
"\377\32\243\376\377\10\24\32\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\4\12\15" |
"\377o\317\377\377o\317\377\377o\317\377\377l\316\377\377t\322\377\377t\322" |
"\377\377t\322\377\377t\322\377\377t\322\377\377t\322\377\377v\323\377\377" |
"v\323\377\377v\323\377\377v\323\377\377x\324\377\377x\324\377\377x\324\377" |
"\377z\325\377\377z\325\377\377z\325\377\377z\325\377\377z\325\377\377\24" |
"""5H\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377|\326\377\377z\325\377\377" |
"z\325\377\377z\325\377\377z\325\377\377z\325\377\377z\325\377\377z\325\377" |
"\377x\324\377\377x\324\377\377x\324\377\377x\324\377\377v\323\377\377v\323" |
"\377\377v\323\377\377v\323\377\377t\322\377\377t\322\377\377v\323\377\377" |
"t\322\377\377t\322\377\377t\322\377\377l\316\377\377l\316\377\377t\322\377" |
"\377l\316\377\377l\316\377\377l\316\377\377l\316\377\377l\316\377\377h\314" |
"\377\377h\314\377\377h\314\377\377e\312\377\377c\311\377\377c\311\377\377" |
"c\311\377\377_\307\377\377_\307\377\377_\307\377\377]\306\377\377]\306\377" |
"\377]\304\375\377]\304\375\377W\303\377\377W\303\377\377V\302\377\377V\302" |
"\377\377V\302\377\377T\301\376\377T\301\376\377T\301\376\377T\301\376\377" |
"J\274\377\377J\274\377\377N\276\377\377I\274\377\377I\274\377\377I\274\377" |
"\377D\271\376\377D\271\376\377D\271\376\377D\266\372\377@\267\377\377@\267" |
"\377\377@\267\377\377<\265\376\377<\265\376\377=\265\376\3778\263\376\377" |
";\264\376\3775\262\377\3772\260\377\3772\260\377\3771\257\377\377/\256\377" |
"\377/\256\377\377,\255\377\377*\253\377\377,\255\377\377*\253\377\377'\252" |
"\376\377'\252\376\377#\250\376\377#\250\376\377\37\246\376\377\37\246\376" |
"\377\37\246\376\377\37\246\376\377\33\244\376\377\33\244\376\377\27\242\377" |
"\377\4\12\15\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377o\317\377\377k" |
"\315\377\377o\317\377\377t\322\377\377l\316\377\377l\316\377\377t\322\377" |
"\377t\322\377\377t\322\377\377t\322\377\377t\322\377\377t\322\377\377t\322" |
"\377\377v\323\377\377t\322\377\377v\323\377\377v\323\377\377x\324\377\377" |
"x\324\377\377x\324\377\377x\324\377\377z\325\377\377\35Wz\377\0\0\0\377\0" |
"\0\0\377\0\0\0\377\0\0\0\377A\202\244\377z\325\377\377x\324\377\377z\325" |
"\377\377x\324\377\377x\324\377\377z\325\377\377z\325\377\377x\324\377\377" |
"x\324\377\377v\323\377\377v\323\377\377v\323\377\377t\322\377\377t\322\377" |
"\377t\322\377\377t\322\377\377t\322\377\377t\322\377\377l\316\377\377o\317" |
"\377\377l\316\377\377l\316\377\377t\322\377\377l\316\377\377o\317\377\377" |
"l\316\377\377l\316\377\377f\313\377\377f\313\377\377h\314\377\377h\314\377" |
"\377h\314\377\377e\312\377\377c\311\377\377c\311\377\377c\311\377\377c\311" |
"\377\377_\307\377\377_\307\377\377]\306\377\377]\304\375\377]\304\375\377" |
"W\303\377\377W\303\377\377W\303\377\377V\302\377\377V\302\377\377V\302\377" |
"\377T\301\376\377Q\277\377\377J\274\377\377T\301\376\377Q\277\377\377J\274" |
"\377\377J\274\377\377I\274\377\377I\274\377\377H\273\377\377H\273\377\377" |
"D\271\376\377B\270\376\377B\270\376\377@\267\377\377<\265\376\377<\265\376" |
"\377<\265\376\377=\265\376\3778\263\376\3778\263\376\3775\262\377\3772\260" |
"\377\3772\260\377\3772\260\377\3771\257\377\377/\256\377\377,\255\377\377" |
",\255\377\377*\253\377\377*\253\377\377'\252\376\377'\252\376\377'\252\376" |
"\377#\250\376\377#\250\376\377#\250\376\377\37\246\376\377\37\246\376\377" |
"\33\244\376\377\33\244\376\377\27\242\377\377\27\242\377\377\0\0\0\377\0" |
"\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377" |
"\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\\\301\370\377k\315\377\377o\317" |
"\377\377o\317\377\377o\317\377\377l\316\377\377t\322\377\377l\316\377\377" |
"t\322\377\377t\322\377\377t\322\377\377t\322\377\377t\322\377\377t\322\377" |
"\377t\322\377\377t\322\377\377v\323\377\377v\323\377\377v\323\377\377v\323" |
"\377\377v\323\377\377v\323\377\377G\211\253\377\4\12\15\377\24""5H\377\35" |
"Wz\377A\202\244\377\\\301\370\377z\325\377\377v\323\377\377v\323\377\377" |
"v\323\377\377v\323\377\377v\323\377\377v\323\377\377v\323\377\377v\323\377" |
"\377t\322\377\377t\322\377\377t\322\377\377v\323\377\377t\322\377\377t\322" |
"\377\377t\322\377\377o\317\377\377l\316\377\377t\322\377\377l\316\377\377" |
"t\322\377\377l\316\377\377l\316\377\377o\317\377\377k\315\377\377f\313\377" |
"\377l\316\377\377f\313\377\377f\313\377\377e\312\377\377h\314\377\377c\311" |
"\377\377c\311\377\377c\311\377\377c\311\377\377_\307\377\377_\307\377\377" |
"_\307\377\377]\306\377\377]\304\375\377]\304\375\377W\303\377\377W\303\377" |
"\377W\303\377\377W\303\377\377V\302\377\377T\301\376\377T\301\376\377T\301" |
"\376\377J\274\377\377T\301\376\377T\301\376\377J\274\377\377N\276\377\377" |
"J\274\377\377I\274\377\377I\274\377\377D\271\376\377D\271\376\377D\271\376" |
"\377B\270\376\377@\267\377\377<\265\376\377<\265\376\377<\265\376\377=\265" |
"\376\3778\263\376\3778\263\376\3778\263\376\3775\262\377\3775\262\377\377" |
"2\260\377\3771\257\377\3771\257\377\377/\256\377\377,\255\377\377*\253\377" |
"\377,\255\377\377*\253\377\377'\252\376\377'\252\376\377#\250\376\377#\250" |
"\376\377#\250\376\377\37\246\376\377\37\246\376\377\37\246\376\377\33\244" |
"\376\377\33\244\376\377\33\244\376\377\22\231\364\377\0\0\0\377\0\0\0\377" |
"\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\377" |
"\0\0\0\377\0\0\0\377\0\0\0\377Z\277\367\377k\315\377\377k\315\377\377k\315" |
"\377\377o\317\377\377l\316\377\377t\322\377\377l\316\377\377t\322\377\377" |
"l\316\377\377l\316\377\377o\317\377\377t\322\377\377t\322\377\377t\322\377" |
"\377t\322\377\377t\322\377\377t\322\377\377t\322\377\377t\322\377\377t\322" |
"\377\377v\323\377\377v\323\377\377v\323\377\377v\323\377\377z\325\377\377" |
"x\324\377\377x\324\377\377x\324\377\377v\323\377\377v\323\377\377v\323\377" |
"\377t\322\377\377t\322\377\377t\322\377\377t\322\377\377t\322\377\377t\322" |
"\377\377t\322\377\377t\322\377\377t\322\377\377t\322\377\377t\322\377\377" |
"l\316\377\377o\317\377\377o\317\377\377t\322\377\377l\316\377\377l\316\377" |
"\377l\316\377\377k\315\377\377k\315\377\377k\315\377\377l\316\377\377f\313" |
"\377\377f\313\377\377e\312\377\377c\311\377\377e\312\377\377c\311\377\377" |
"c\311\377\377c\311\377\377_\307\377\377_\307\377\377]\306\377\377]\306\377" |
"\377]\306\377\377]\304\375\377W\303\377\377]\304\375\377W\303\377\377V\302" |
"\377\377W\303\377\377V\302\377\377T\301\376\377J\274\377\377Q\277\377\377" |
"T\301\376\377J\274\377\377J\274\377\377J\274\377\377J\274\377\377I\274\377" |
"\377I\274\377\377D\271\376\377D\271\376\377D\271\376\377D\271\376\377B\270" |
"\376\377@\267\377\377@\267\377\377=\265\376\377=\265\376\3778\263\376\377" |
"8\263\376\3777\262\377\3777\262\377\3772\260\377\3772\260\377\3772\260\377" |
"\3771\257\377\377/\256\377\377,\255\377\377,\255\377\377,\255\377\377*\253" |
"\377\377'\252\376\377'\252\376\377'\252\376\377#\250\376\377#\250\376\377" |
"\37\246\376\377\37\246\376\377\37\246\376\377\33\244\376\377\33\244\376\377" |
"\27\242\377\377\32\225\347\377\32\225\347\377\0\0\0\377\0\0\0\377\0\0\0\377" |
"\0\0\0\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\377\0\0\0\377" |
"\0\0\0\377\0\0\0\377Z\277\367\377h\314\377\377h\314\377\377k\315\377\377" |
"k\315\377\377l\316\377\377l\316\377\377l\316\377\377l\316\377\377l\316\377" |
"\377t\322\377\377l\316\377\377t\322\377\377l\316\377\377t\322\377\377t\322" |
"\377\377l\316\377\377v\323\377\377t\322\377\377t\322\377\377t\322\377\377" |
"t\322\377\377t\322\377\377t\322\377\377t\322\377\377v\323\377\377v\323\377" |
"\377v\323\377\377r\321\377\377v\323\377\377r\321\377\377r\321\377\377v\323" |
"\377\377t\322\377\377t\322\377\377t\322\377\377t\322\377\377l\316\377\377" |
"t\322\377\377t\322\377\377l\316\377\377o\317\377\377o\317\377\377t\322\377" |
"\377l\316\377\377l\316\377\377l\316\377\377l\316\377\377l\316\377\377l\316" |
"\377\377h\314\377\377h\314\377\377h\314\377\377h\314\377\377e\312\377\377" |
"e\312\377\377e\312\377\377e\312\377\377e\312\377\377e\312\377\377_\307\377" |
"\377_\307\377\377_\307\377\377]\306\377\377]\306\377\377]\306\377\377]\306" |
"\377\377W\303\377\377W\303\377\377W\303\377\377W\303\377\377W\303\377\377" |
"T\301\376\377T\301\376\377T\301\376\377N\276\377\377T\301\376\377J\274\377" |
"\377J\274\377\377J\274\377\377J\274\377\377I\274\377\377G\272\377\377G\272" |
"\377\377D\271\376\377B\270\376\377B\270\376\377B\270\376\377B\270\376\377" |
"<\265\376\377@\267\377\377<\265\376\377<\265\376\377;\264\376\3775\262\377" |
"\3775\262\377\3771\257\377\3771\257\377\3771\257\377\3771\257\377\3771\257" |
"\377\377/\256\377\377,\255\377\377*\253\377\377*\253\377\377(\252\376\377" |
"'\252\376\377'\252\376\377'\252\376\377!\247\376\377!\247\376\377\37\246" |
"\376\377\37\246\376\377\37\246\376\377\32\243\376\377\33\244\376\377\21\233" |
"\371\377\11\33'\377\17$0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0" |
"\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0" |
"\0\0\377G\211\253\377h\314\377\377h\314\377\377h\314\377\377k\315\377\377" |
"k\315\377\377l\316\377\377l\316\377\377l\316\377\377o\317\377\377o\317\377" |
"\377o\317\377\377t\322\377\377l\316\377\377t\322\377\377l\316\377\377t\322" |
"\377\377l\316\377\377t\322\377\377t\322\377\377t\322\377\377t\322\377\377" |
"l\316\377\377t\322\377\377t\322\377\377s\321\377\377s\321\377\377r\321\377" |
"\377v\323\377\377s\321\377\377s\321\377\377r\321\377\377r\321\377\377t\322" |
"\377\377t\322\377\377o\317\377\377o\317\377\377t\322\377\377l\316\377\377" |
"l\316\377\377t\322\377\377o\317\377\377o\317\377\377l\316\377\377l\316\377" |
"\377l\316\377\377l\316\377\377o\317\377\377k\315\377\377h\314\377\377h\314" |
"\377\377h\314\377\377h\314\377\377e\312\377\377e\312\377\377e\312\377\377" |
"e\312\377\377c\311\377\377e\312\377\377_\307\377\377_\307\377\377_\307\377" |
"\377]\306\377\377]\306\377\377]\304\375\377]\304\375\377W\303\377\377W\303" |
"\377\377W\303\377\377W\303\377\377W\303\377\377T\301\376\377T\301\376\377" |
"N\276\377\377T\301\376\377N\276\377\377N\276\377\377N\276\377\377N\276\377" |
"\377I\274\377\377I\274\377\377I\274\377\377I\274\377\377G\272\377\377D\271" |
"\376\377D\271\376\377B\270\376\377B\270\376\377<\265\376\377<\265\376\377" |
"<\265\376\377<\265\376\377<\265\376\377;\264\376\3775\262\377\3775\262\377" |
"\3777\262\377\3771\257\377\3771\257\377\3771\257\377\3771\257\377\377,\255" |
"\377\377,\255\377\377,\255\377\377*\253\377\377(\252\376\377'\252\376\377" |
"%\250\376\377!\247\376\377!\247\376\377!\247\376\377\37\246\376\377\37\246" |
"\376\377\33\244\376\377\33\244\376\377\27\242\377\377\25<S\377\0\0\0\377" |
"\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377A\202\244\377" |
"h\314\377\377e\312\377\377h\314\377\377h\314\377\377h\314\377\377k\315\377" |
"\377k\315\377\377l\316\377\377k\315\377\377k\315\377\377o\317\377\377l\316" |
"\377\377o\317\377\377o\317\377\377l\316\377\377t\322\377\377t\322\377\377" |
"l\316\377\377l\316\377\377t\322\377\377l\316\377\377l\316\377\377t\322\377" |
"\377l\316\377\377s\321\377\377s\321\377\377m\316\377\377m\316\377\377m\316" |
"\377\377s\321\377\377m\316\377\377r\321\377\377t\322\377\377l\316\377\377" |
"t\322\377\377l\316\377\377o\317\377\377o\317\377\377o\317\377\377l\316\377" |
"\377k\315\377\377k\315\377\377o\317\377\377k\315\377\377k\315\377\377k\315" |
"\377\377h\314\377\377h\314\377\377h\314\377\377h\314\377\377e\312\377\377" |
"e\312\377\377e\312\377\377e\312\377\377_\307\377\377e\312\377\377_\307\377" |
"\377_\307\377\377_\307\377\377_\307\377\377_\307\377\377]\306\377\377]\304" |
"\375\377]\304\375\377W\303\377\377W\303\377\377W\303\377\377W\303\377\377" |
"V\302\377\377T\301\376\377T\301\376\377T\301\376\377T\301\376\377N\276\377" |
"\377N\276\377\377N\276\377\377J\274\377\377I\274\377\377I\274\377\377I\274" |
"\377\377G\272\377\377G\272\377\377D\271\376\377D\271\376\377B\270\376\377" |
"B\270\376\377B\270\376\377<\265\376\377<\265\376\377<\265\376\3778\263\376" |
"\3778\263\376\377;\264\376\3775\262\377\3771\257\377\3777\262\377\3771\257" |
"\377\3771\257\377\3771\257\377\377/\256\377\377/\256\377\377*\253\377\377" |
"*\253\377\377*\253\377\377'\252\376\377'\252\376\377!\247\376\377%\250\376" |
"\377!\247\376\377!\247\376\377\37\246\376\377\37\246\376\377\33\244\376\377" |
"\32\243\376\377\31Fb\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377" |
"\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\377" |
"\0\0\0\377\0\0\0\377\0\0\0\377\35Wz\377c\311\377\377h\314\377\377e\312\377" |
"\377h\314\377\377h\314\377\377h\314\377\377h\314\377\377h\314\377\377k\315" |
"\377\377k\315\377\377k\315\377\377k\315\377\377k\315\377\377k\315\377\377" |
"o\317\377\377o\317\377\377l\316\377\377t\322\377\377l\316\377\377l\316\377" |
"\377t\322\377\377o\317\377\377o\317\377\377o\317\377\377m\316\377\377m\316" |
"\377\377m\316\377\377s\321\377\377m\316\377\377m\316\377\377s\321\377\377" |
"m\316\377\377l\316\377\377t\322\377\377l\316\377\377l\316\377\377o\317\377" |
"\377k\315\377\377k\315\377\377k\315\377\377k\315\377\377k\315\377\377k\315" |
"\377\377h\314\377\377h\314\377\377h\314\377\377h\314\377\377h\314\377\377" |
"e\312\377\377h\314\377\377e\312\377\377e\312\377\377e\312\377\377e\312\377" |
"\377e\312\377\377_\307\377\377c\311\377\377_\307\377\377_\307\377\377]\306" |
"\377\377]\306\377\377]\306\377\377]\304\375\377V\302\377\377W\303\377\377" |
"W\303\377\377W\303\377\377T\301\376\377T\301\376\377T\301\376\377T\301\376" |
"\377N\276\377\377N\276\377\377T\301\376\377N\276\377\377I\274\377\377N\276" |
"\377\377I\274\377\377I\274\377\377I\274\377\377G\272\377\377B\270\376\377" |
"B\270\376\377B\270\376\377B\270\376\377?\267\377\377?\267\377\377<\265\376" |
"\377<\265\376\377<\265\376\3778\263\376\3778\263\376\3775\262\377\3775\262" |
"\377\3775\262\377\3771\257\377\3771\257\377\3771\257\377\377/\256\377\377" |
"*\253\377\377*\253\377\377*\253\377\377*\253\377\377'\252\376\377'\252\376" |
"\377'\252\376\377'\252\376\377!\247\376\377!\247\376\377\37\246\376\377\37" |
"\246\376\377\33\244\376\377\33\244\376\377\35Wz\377\0\0\0\377\0\0\0\377\0" |
"\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\25" |
"<S\377c\311\377\377e\312\377\377e\312\377\377h\314\377\377h\314\377\377h" |
"\314\377\377h\314\377\377h\314\377\377h\314\377\377h\314\377\377h\314\377" |
"\377h\314\377\377k\315\377\377k\315\377\377o\317\377\377k\315\377\377l\316" |
"\377\377l\316\377\377l\316\377\377l\316\377\377l\316\377\377t\322\377\377" |
"l\316\377\377l\316\377\377o\317\377\377o\317\377\377o\317\377\377o\317\377" |
"\377s\321\377\377m\316\377\377r\321\377\377m\316\377\377l\316\377\377l\316" |
"\377\377l\316\377\377l\316\377\377l\316\377\377k\315\377\377k\315\377\377" |
"k\315\377\377h\314\377\377h\314\377\377h\314\377\377h\314\377\377h\314\377" |
"\377e\312\377\377h\314\377\377c\311\377\377e\312\377\377e\312\377\377c\311" |
"\377\377e\312\377\377e\312\377\377_\307\377\377_\307\377\377_\307\377\377" |
"_\307\377\377_\307\377\377]\306\377\377]\306\377\377]\306\377\377]\304\375" |
"\377W\303\377\377]\304\375\377W\303\377\377V\302\377\377V\302\377\377T\301" |
"\376\377T\301\376\377T\301\376\377N\276\377\377N\276\377\377N\276\377\377" |
"N\276\377\377N\276\377\377N\276\377\377I\274\377\377I\274\377\377G\272\377" |
"\377G\272\377\377D\271\376\377D\271\376\377B\270\376\377B\270\376\377B\270" |
"\376\377<\265\376\377?\267\377\377<\265\376\377=\265\376\377=\265\376\377" |
"7\262\377\3777\262\377\3777\262\377\3771\257\377\3771\257\377\3771\257\377" |
"\3771\257\377\377/\256\377\377,\255\377\377,\255\377\377*\253\377\377*\253" |
"\377\377'\252\376\377'\252\376\377%\250\376\377%\250\376\377!\247\376\377" |
"!\247\376\377\37\246\376\377\37\246\376\377\37\246\376\377\33\244\376\377" |
"\31Fb\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0" |
"\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\377\0\0\0\377\0\0\0\377\0\0\0\377\17$0\377c\311\377\377c\311\377\377c" |
"\311\377\377e\312\377\377c\311\377\377c\311\377\377h\314\377\377h\314\377" |
"\377h\314\377\377h\314\377\377h\314\377\377h\314\377\377h\314\377\377h\314" |
"\377\377k\315\377\377k\315\377\377l\316\377\377l\316\377\377l\316\377\377" |
"l\316\377\377l\316\377\377l\316\377\377l\316\377\377l\316\377\377l\316\377" |
"\377l\316\377\377l\316\377\377k\315\377\377k\315\377\377k\315\377\377m\316" |
"\377\377k\315\377\377l\316\377\377k\315\377\377k\315\377\377k\315\377\377" |
"k\315\377\377h\314\377\377h\314\377\377h\314\377\377h\314\377\377h\314\377" |
"\377h\314\377\377e\312\377\377e\312\377\377h\314\377\377e\312\377\377e\312" |
"\377\377c\311\377\377e\312\377\377c\311\377\377_\307\377\377_\307\377\377" |
"e\312\377\377_\307\377\377_\307\377\377]\306\377\377]\306\377\377]\306\377" |
"\377]\304\375\377W\303\377\377W\303\377\377W\303\377\377W\303\377\377V\302" |
"\377\377V\302\377\377T\301\376\377T\301\376\377T\301\376\377N\276\377\377" |
"N\276\377\377T\301\376\377N\276\377\377L\275\377\377L\275\377\377I\274\377" |
"\377I\274\377\377G\272\377\377G\272\377\377G\272\377\377D\271\376\377B\270" |
"\376\377B\270\376\377B\270\376\377<\265\376\377?\267\377\377<\265\376\377" |
"<\265\376\377=\265\376\3778\263\376\3777\262\377\3777\262\377\3777\262\377" |
"\3771\257\377\3771\257\377\3771\257\377\3771\257\377\377/\256\377\377,\255" |
"\377\377,\255\377\377,\255\377\377*\253\377\377'\252\376\377'\252\376\377" |
"%\250\376\377!\247\376\377'\252\376\377!\247\376\377\37\246\376\377\37\246" |
"\376\377\32\243\376\377\25<S\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377" |
"\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\3\4" |
"\6\377]\306\377\377_\307\377\377c\311\377\377c\311\377\377c\311\377\377c" |
"\311\377\377e\312\377\377e\312\377\377h\314\377\377c\311\377\377h\314\377" |
"\377h\314\377\377h\314\377\377h\314\377\377h\314\377\377h\314\377\377h\314" |
"\377\377h\314\377\377l\316\377\377f\313\377\377l\316\377\377h\314\377\377" |
"f\313\377\377l\316\377\377k\315\377\377k\315\377\377k\315\377\377k\315\377" |
"\377h\314\377\377k\315\377\377k\315\377\377h\314\377\377h\314\377\377h\314" |
"\377\377h\314\377\377h\314\377\377h\314\377\377h\314\377\377h\314\377\377" |
"h\314\377\377h\314\377\377c\311\377\377h\314\377\377h\314\377\377e\312\377" |
"\377c\311\377\377c\311\377\377c\311\377\377e\312\377\377_\307\377\377c\311" |
"\377\377_\307\377\377_\307\377\377_\307\377\377]\306\377\377]\306\377\377" |
"]\306\377\377]\304\375\377]\304\375\377W\303\377\377W\303\377\377W\303\377" |
"\377W\303\377\377V\302\377\377V\302\377\377T\301\376\377T\301\376\377N\276" |
"\377\377N\276\377\377T\301\376\377J\274\377\377N\276\377\377L\275\377\377" |
"L\275\377\377I\274\377\377I\274\377\377I\274\377\377G\272\377\377G\272\377" |
"\377B\270\376\377B\270\376\377B\270\376\377?\267\377\377?\267\377\377?\267" |
"\377\377<\265\376\377;\264\376\377;\264\376\3778\263\376\3778\263\376\377" |
"7\262\377\3777\262\377\3771\257\377\3771\257\377\3771\257\377\3771\257\377" |
"\377/\256\377\377,\255\377\377,\255\377\377*\253\377\377*\253\377\377'\252" |
"\376\377'\252\376\377'\252\376\377%\250\376\377!\247\376\377!\247\376\377" |
"\37\246\376\377\37\246\376\377\30\230\355\377\24.=\377\0\0\0\377\0\0\0\377" |
"\0\0\0\377\0\0\0\377\0\0\0\377\4\12\15\377\3\4\6\377\0\0\0\377\0\0\0\377" |
"\0\0\0\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0" |
"\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377!\216\323\377c\311\377\377_\307\377" |
"\377c\311\377\377c\311\377\377c\311\377\377c\311\377\377c\311\377\377e\312" |
"\377\377e\312\377\377c\311\377\377h\314\377\377c\311\377\377h\314\377\377" |
"e\312\377\377h\314\377\377h\314\377\377h\314\377\377h\314\377\377h\314\377" |
"\377h\314\377\377h\314\377\377h\314\377\377h\314\377\377h\314\377\377h\314" |
"\377\377h\314\377\377h\314\377\377h\314\377\377h\314\377\377h\314\377\377" |
"h\314\377\377h\314\377\377h\314\377\377h\314\377\377e\312\377\377h\314\377" |
"\377h\314\377\377c\311\377\377h\314\377\377h\314\377\377e\312\377\377e\312" |
"\377\377c\311\377\377c\311\377\377c\311\377\377c\311\377\377c\311\377\377" |
"c\311\377\377_\307\377\377_\307\377\377_\307\377\377_\307\377\377]\306\377" |
"\377]\306\377\377]\306\377\377]\306\377\377]\306\377\377W\303\377\377W\303" |
"\377\377W\303\377\377V\302\377\377V\302\377\377V\302\377\377T\301\376\377" |
"T\301\376\377T\301\376\377N\276\377\377T\301\376\377J\274\377\377T\301\376" |
"\377J\274\377\377N\276\377\377I\274\377\377I\274\377\377G\272\377\377G\272" |
"\377\377G\272\377\377D\271\376\377B\270\376\377B\270\376\377B\270\376\377" |
"?\267\377\377<\265\376\377<\265\376\377;\264\376\377;\264\376\377;\264\376" |
"\3778\263\376\3777\262\377\3777\262\377\3771\257\376\3771\257\377\3771\257" |
"\377\3771\257\377\3771\257\377\377,\255\377\377,\255\377\377,\255\377\377" |
"*\253\377\377*\253\377\377'\252\376\377'\252\376\377#\250\376\377!\247\376" |
"\377!\247\376\377\37\246\376\377\37\246\376\377\37\246\376\377\31Fb\377\0" |
"\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\4\12\15\377\32e\225\377" |
"\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\3773x\236" |
"\377]\306\377\377a\310\377\377a\310\377\377a\310\377\377a\310\377\377a\310" |
"\377\377e\312\377\377e\312\377\377c\311\377\377c\311\377\377e\312\377\377" |
"e\312\377\377e\312\377\377e\312\377\377e\312\377\377h\314\377\377e\312\377" |
"\377e\312\377\377h\314\377\377h\314\377\377e\312\377\377h\314\377\377h\314" |
"\377\377h\314\377\377h\314\377\377h\314\377\377e\312\377\377e\312\377\377" |
"k\315\377\377e\312\377\377e\312\377\377h\314\377\377e\312\377\377e\312\377" |
"\377h\314\377\377e\312\377\377e\312\377\377e\312\377\377e\312\377\377e\312" |
"\377\377e\312\377\377_\307\377\377e\312\377\377_\307\377\377_\307\377\377" |
"_\307\377\377_\307\377\377_\307\377\377_\307\377\377_\307\377\377]\306\377" |
"\377]\306\377\377]\304\375\377]\304\375\377]\306\377\377W\303\377\377W\303" |
"\377\377W\303\377\377W\303\377\377W\303\377\377V\302\377\377T\301\376\377" |
"T\301\376\377T\301\376\377Q\277\377\377Q\277\377\377T\301\376\377J\274\377" |
"\377J\274\377\377J\274\377\377J\274\377\377J\274\377\377J\274\377\377H\273" |
"\377\377H\273\377\377H\273\377\377D\271\376\377D\271\376\377@\267\377\377" |
"B\270\376\377?\267\377\377?\267\377\377?\267\377\377;\264\376\377;\264\376" |
"\377;\264\376\3775\262\377\3775\262\377\3775\262\377\3772\260\377\3772\260" |
"\377\3771\257\377\3771\257\377\377/\256\377\377/\256\377\377/\256\377\377" |
"+\254\377\377/\256\377\377(\252\376\377'\252\376\377'\252\376\377'\252\376" |
"\377#\250\376\377'\252\376\377!\247\376\377\37\246\376\377\37\246\376\377" |
"\33\244\376\377\30\230\355\377\11\33'\377\0\0\0\377\0\0\0\377\0\0\0\377\6" |
"\16\24\377!\216\323\377\32e\225\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377" |
"\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\377\0" |
"\0\0\377\0\0\0\377\0\0\0\377\24""5H\377]\306\377\377]\306\377\377]\306\377" |
"\377]\306\377\377a\310\377\377a\310\377\377a\310\377\377c\311\377\377_\307" |
"\377\377c\311\377\377c\311\377\377c\311\377\377c\311\377\377e\312\377\377" |
"e\312\377\377e\312\377\377e\312\377\377e\312\377\377e\312\377\377e\312\377" |
"\377e\312\377\377e\312\377\377e\312\377\377h\314\377\377e\312\377\377G\211" |
"\253\377\35Wz\377\10\27\40\3773x\236\377e\312\377\377e\312\377\377e\312\377" |
"\377e\312\377\377e\312\377\377e\312\377\377c\311\377\377c\311\377\377c\311" |
"\377\377c\311\377\377_\307\377\377e\312\377\377_\307\377\377e\312\377\377" |
"_\307\377\377e\312\377\377_\307\377\377_\307\377\377_\307\377\377_\307\377" |
"\377]\306\377\377]\304\375\377]\304\375\377]\304\375\377T\301\376\377W\303" |
"\377\377W\303\377\377W\303\377\377W\303\377\377T\301\376\377V\302\377\377" |
"T\301\376\377T\301\376\377T\301\376\377T\301\376\377J\274\377\377J\274\377" |
"\377Q\277\377\377Q\277\377\377J\274\377\377I\274\377\377I\274\377\377J\274" |
"\377\377I\274\377\377D\271\376\377H\273\377\377D\271\376\377D\271\376\377" |
"@\267\377\377D\271\376\377?\267\377\377?\267\377\377;\264\376\377;\264\376" |
"\377;\264\376\377;\264\376\377;\264\376\3775\262\377\3775\262\377\3775\262" |
"\377\3772\260\377\3772\260\377\3771\257\377\377/\256\377\377/\256\377\377" |
",\255\377\377(\252\376\377+\254\377\377(\252\376\377(\252\376\377'\252\376" |
"\377'\252\376\377!\247\376\377#\250\376\377!\247\376\377\37\246\376\377\37" |
"\246\376\377\33\244\376\377\33\244\376\377\32\243\376\377!\216\323\377\4" |
"\12\15\377\0\0\0\377\10\27\40\377\37\222\335\377\21\237\377\377\25<S\377" |
"\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\6\16" |
"\24\377]\306\377\377]\306\377\377]\306\377\377]\306\377\377]\306\377\377" |
"]\306\377\377a\310\377\377_\307\377\377c\311\377\377c\311\377\377_\307\377" |
"\377_\307\377\377e\312\377\377c\311\377\377e\312\377\377e\312\377\377e\312" |
"\377\377e\312\377\377_\307\377\377e\312\377\377e\312\377\377e\312\377\377" |
"e\312\377\377\\\301\370\377\4\12\15\377\0\0\0\377\0\0\0\377\0\0\0\377\11" |
"\33'\377c\311\377\377c\311\377\377c\311\377\377c\311\377\377c\311\377\377" |
"c\311\377\377c\311\377\377c\311\377\377c\311\377\377_\307\377\377_\307\377" |
"\377e\312\377\377_\307\377\377_\307\377\377_\307\377\377_\307\377\377_\307" |
"\377\377]\306\377\377]\306\377\377]\306\377\377]\304\375\377]\306\377\377" |
"W\303\377\377]\304\375\377W\303\377\377W\303\377\377W\303\377\377W\303\377" |
"\377W\303\377\377T\301\376\377T\301\376\377N\276\377\377N\276\377\377N\276" |
"\377\377T\301\376\377T\301\376\377J\274\377\377Q\277\377\377J\274\377\377" |
"J\274\377\377J\274\377\377I\274\377\377I\274\377\377H\273\377\377D\271\376" |
"\377D\271\376\377D\271\376\377B\270\376\377D\271\376\377@\267\377\377?\267" |
"\377\377<\265\376\377<\265\376\377<\265\376\377;\264\376\3775\262\377\377" |
";\264\376\3775\262\377\3775\262\377\3771\257\377\3772\260\377\3771\257\377" |
"\3771\257\377\377/\256\377\377/\256\377\377*\253\377\377/\256\377\377(\252" |
"\376\377(\252\376\377(\252\376\377'\252\376\377!\247\376\377#\250\376\377" |
"!\247\376\377!\247\376\377\37\246\376\377\37\246\376\377\33\244\376\377\32" |
"\243\376\377\27\242\377\377\27\242\377\377\36k\234\377\24""5H\377\30\230" |
"\355\377\27\242\377\377\21\237\377\377\4\12\15\377\0\0\0\377\0\0\0\377\0" |
"\0\0\377\0\0\0\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377G\211\253\377]\306" |
"\377\377]\306\377\377]\306\377\377]\306\377\377]\306\377\377]\306\377\377" |
"_\307\377\377_\307\377\377_\307\377\377_\307\377\377_\307\377\377c\311\377" |
"\377_\307\377\377_\307\377\377_\307\377\377_\307\377\377_\307\377\377e\312" |
"\377\377_\307\377\377e\312\377\377e\312\377\377e\312\377\377c\311\377\377" |
"\11\33'\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377G\211\253\377c\311\377" |
"\377c\311\377\377c\311\377\377c\311\377\377_\307\377\377_\307\377\377c\311" |
"\377\377_\307\377\377c\311\377\377_\307\377\377_\307\377\377_\307\377\377" |
"]\306\377\377]\306\377\377]\306\377\377]\306\377\377]\306\377\377]\304\375" |
"\377]\304\375\377W\303\377\377W\303\377\377W\303\377\377W\303\377\377W\303" |
"\377\377V\302\377\377W\303\377\377T\301\376\377T\301\376\377T\301\376\377" |
"T\301\376\377T\301\376\377N\276\377\377T\301\376\377J\274\377\377T\301\376" |
"\377J\274\377\377J\274\377\377J\274\377\377J\274\377\377I\274\377\377I\274" |
"\377\377H\273\377\377D\271\376\377D\271\376\377D\271\376\377B\270\376\377" |
"B\270\376\377@\267\377\377<\265\376\377?\267\377\377<\265\376\377<\265\376" |
"\377;\264\376\3775\262\377\377;\264\376\3775\262\377\3775\262\377\3775\262" |
"\377\3772\260\377\3771\257\377\3771\257\377\377/\256\377\377,\255\377\377" |
"*\253\377\377/\256\377\377/\256\377\377(\252\376\377'\252\376\377'\252\376" |
"\377'\252\376\377!\247\376\377#\250\376\377!\247\376\377\37\246\376\377\37" |
"\246\376\377\37\246\376\377\32\243\376\377\32\243\376\377\27\242\377\377" |
"\27\242\377\377\27\242\377\377\27\242\377\377\21\237\377\377\17\236\377\377" |
"!\216\323\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\377\0\0\0" |
"\377\0\0\0\377\0\0\0\377\27[\207\377X\303\377\377]\306\377\377]\306\377\377" |
"]\304\375\377]\306\377\377]\306\377\377]\306\377\377]\306\377\377]\306\377" |
"\377]\306\377\377_\307\377\377_\307\377\377_\307\377\377_\307\377\377_\307" |
"\377\377e\312\377\377_\307\377\377_\307\377\377e\312\377\377_\307\377\377" |
"_\307\377\377_\307\377\377c\311\377\3773x\236\377\0\0\0\377\0\0\0\377\0\0" |
"\0\377\0\0\0\377\31Fb\377c\311\377\377_\307\377\377c\311\377\377_\307\377" |
"\377_\307\377\377_\307\377\377_\307\377\377_\307\377\377]\306\377\377]\306" |
"\377\377]\306\377\377]\306\377\377]\306\377\377]\306\377\377]\304\375\377" |
"]\304\375\377]\304\375\377T\301\376\377W\303\377\377W\303\377\377W\303\377" |
"\377W\303\377\377W\303\377\377W\303\377\377V\302\377\377T\301\376\377T\301" |
"\376\377J\274\377\377T\301\376\377N\276\377\377T\301\376\377N\276\377\377" |
"J\274\377\377Q\277\377\377J\274\377\377J\274\377\377J\274\377\377I\274\377" |
"\377H\273\377\377I\274\377\377D\271\376\377D\271\376\377D\271\376\377D\271" |
"\376\377B\270\376\377B\270\376\377B\270\376\377<\265\376\377<\265\376\377" |
"<\265\376\377<\265\376\377;\264\376\377;\264\376\377;\264\376\3775\262\377" |
"\3775\262\377\3772\260\377\3771\257\377\3772\260\377\3771\257\377\3771\257" |
"\377\377/\256\377\377*\253\377\377*\253\377\377*\253\377\377(\252\376\377" |
"(\252\376\377'\252\376\377'\252\376\377#\250\376\377#\250\376\377!\247\376" |
"\377!\247\376\377\37\246\376\377\33\244\376\377\33\244\376\377\32\243\376" |
"\377\27\242\377\377\27\242\377\377\27\242\377\377\27\242\377\377\27\242\377" |
"\377\21\237\377\377\21\237\377\377\27[\207\377\0\0\0\377\0\0\0\377\0\0\0" |
"\377\0\0\0\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\24.=\377X\303" |
"\377\377X\303\377\377X\303\377\377X\303\377\377]\306\377\377]\304\375\377" |
"]\304\375\377]\306\377\377]\306\377\377]\306\377\377]\306\377\377]\306\377" |
"\377]\306\377\377_\307\377\377]\306\377\377_\307\377\377]\306\377\377]\306" |
"\377\377_\307\377\377_\307\377\377_\307\377\377_\307\377\377]\306\377\377" |
"Z\277\367\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\3\4\6\377\\\301\370" |
"\377_\307\377\377_\307\377\377_\307\377\377]\306\377\377]\306\377\377]\306" |
"\377\377]\306\377\377]\306\377\377]\306\377\377]\304\375\377]\306\377\377" |
"]\304\375\377]\304\375\377W\303\377\377W\303\377\377W\303\377\377W\303\377" |
"\377W\303\377\377W\303\377\377T\301\376\377W\303\377\377W\303\377\377T\301" |
"\376\377T\301\376\377T\301\376\377T\301\376\377T\301\376\377T\301\376\377" |
"T\301\376\377J\274\377\377T\301\376\377J\274\377\377J\274\377\377J\274\377" |
"\377J\274\377\377J\274\377\377H\273\377\377I\274\377\377D\271\376\377D\271" |
"\376\377D\271\376\377B\270\376\377B\270\376\377B\270\376\377@\267\377\377" |
"<\265\376\377@\267\377\377<\265\376\377<\265\376\377;\264\376\3775\262\377" |
"\377:\263\374\3775\262\377\3775\262\377\3775\262\377\3772\260\377\3772\260" |
"\377\3771\257\377\377/\256\377\377/\256\377\377*\253\377\377/\256\377\377" |
"*\253\377\377*\253\377\377(\252\376\377'\252\376\377%\250\376\377\27[\207" |
"\377\37\222\335\377!\247\376\377\37\246\376\377\37\246\376\377\33\244\376" |
"\377\37\246\376\377\33\244\376\377\27\242\377\377\27\242\377\377\27\242\377" |
"\377\27\242\377\377\21\237\377\377\21\237\377\377\21\237\377\377\17\236\377" |
"\377\24.=\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\377" |
"\0\0\0\377\0\0\0\377\0\0\0\377D\266\372\377V\302\377\377X\303\377\377X\303" |
"\377\377V\302\377\377X\303\377\377W\303\377\377]\304\375\377]\306\377\377" |
"]\304\375\377]\304\375\377]\304\375\377]\304\375\377]\306\377\377]\306\377" |
"\377]\306\377\377]\306\377\377]\306\377\377]\306\377\377]\306\377\377_\307" |
"\377\377]\306\377\377]\306\377\377]\306\377\377\25<S\377\0\0\0\377\0\0\0" |
"\377\0\0\0\377\0\0\0\3773x\236\377_\307\377\377]\306\377\377]\306\377\377" |
"]\306\377\377]\306\377\377]\304\375\377]\306\377\377]\304\375\377]\304\375" |
"\377]\306\377\377]\304\375\377W\303\377\377W\303\377\377W\303\377\377W\303" |
"\377\377W\303\377\377W\303\377\377T\301\376\377W\303\377\377W\303\377\377" |
"T\301\376\377T\301\376\377T\301\376\377T\301\376\377J\274\377\377T\301\376" |
"\377T\301\376\377N\276\377\377J\274\377\377T\301\376\377I\274\377\377J\274" |
"\377\377J\274\377\377J\274\377\377H\273\377\377I\274\377\377H\273\377\377" |
"D\271\376\377D\271\376\377D\271\376\377B\270\376\377B\270\376\377B\270\376" |
"\377<\265\376\377<\265\376\377<\265\376\377<\265\376\377<\265\376\377;\264" |
"\376\377;\264\376\377;\264\376\3775\262\377\3775\262\377\3772\260\377\377" |
"2\260\377\3772\260\377\3771\257\377\3771\257\377\377/\256\377\377,\255\377" |
"\377/\256\377\377*\253\377\377(\252\376\377'\252\376\377'\252\376\377\32" |
"e\225\377\10\24\32\377\0\0\0\377\25<S\377!\247\376\377\37\246\376\377\37" |
"\246\376\377\37\246\376\377\32\243\376\377\32\243\376\377\32\243\376\377" |
"\27\242\377\377\27\242\377\377\21\237\377\377\27\242\377\377\21\237\377\377" |
"\21\237\377\377\37\222\335\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0" |
"\0\0\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\35Wz\377V\302" |
"\377\377V\302\377\377V\302\377\377X\303\377\377V\302\377\377W\303\377\377" |
"W\303\377\377W\303\377\377W\303\377\377W\303\377\377]\306\377\377]\304\375" |
"\377]\304\375\377]\306\377\377]\306\377\377]\304\375\377]\306\377\377]\306" |
"\377\377]\306\377\377]\304\375\377]\306\377\377]\306\377\377]\306\377\377" |
">\211\263\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\17$0\377]\306\377\377" |
"]\304\375\377]\304\375\377]\304\375\377]\304\375\377]\306\377\377W\303\377" |
"\377W\303\377\377W\303\377\377W\303\377\377W\303\377\377W\303\377\377W\303" |
"\377\377W\303\377\377V\302\377\377V\302\377\377W\303\377\377W\303\377\377" |
"T\301\376\377T\301\376\377N\276\377\377T\301\376\377N\276\377\377N\276\377" |
"\377T\301\376\377J\274\377\377J\274\377\377T\301\376\377J\274\377\377N\276" |
"\377\377J\274\377\377I\274\377\377I\274\377\377H\273\377\377H\273\377\377" |
"D\271\376\377H\273\377\377D\271\376\377D\271\376\377B\270\376\377B\270\376" |
"\377B\270\376\377B\270\376\377<\265\376\377@\267\377\377<\265\376\377<\265" |
"\376\377<\265\376\377;\264\376\3775\262\377\3775\262\377\3775\262\377\377" |
"5\262\377\3772\260\377\3772\260\377\3771\257\377\3771\257\377\377/\256\377" |
"\377,\255\377\377,\255\377\377(\252\376\377(\252\376\377'\252\376\377\27" |
"[\207\377\6\16\24\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377!\216\323\377" |
"\37\246\376\377\37\246\376\377\32\243\376\377\32\243\376\377\32\243\376\377" |
"\27\242\377\377\27\242\377\377\27\242\377\377\21\237\377\377\21\237\377\377" |
"\21\237\377\377\17\236\377\377\27[\207\377\0\0\0\377\0\0\0\377\0\0\0\377" |
"\0\0\0\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\10" |
"\27\40\377T\301\376\377V\302\377\377V\302\377\377V\302\377\377V\302\377\377" |
"V\302\377\377V\302\377\377W\303\377\377W\303\377\377]\304\375\377V\302\377" |
"\377W\303\377\377W\303\377\377W\303\377\377W\303\377\377V\302\377\377]\306" |
"\377\377]\304\375\377]\306\377\377]\304\375\377]\306\377\377]\304\375\377" |
"]\304\375\377]\304\375\377\10\24\32\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0" |
"\0\377>\211\263\377W\303\377\377W\303\377\377]\304\375\377W\303\377\377W" |
"\303\377\377W\303\377\377W\303\377\377W\303\377\377W\303\377\377W\303\377" |
"\377T\301\376\377W\303\377\377W\303\377\377W\303\377\377V\302\377\377T\301" |
"\376\377T\301\376\377T\301\376\377T\301\376\377N\276\377\377R\300\376\377" |
"R\300\376\377N\276\377\377J\274\377\377T\301\376\377J\274\377\377J\274\377" |
"\377J\274\377\377J\274\377\377J\274\377\377H\273\377\377H\273\377\377H\273" |
"\377\377H\273\377\377D\271\376\377D\271\376\377D\271\376\377B\270\376\377" |
"B\270\376\377B\270\376\377<\265\376\377B\270\376\377<\265\376\377;\264\376" |
"\377;\264\376\377;\264\376\3775\262\377\377;\264\376\3777\262\377\3771\257" |
"\377\3772\260\377\3772\260\377\3772\260\377\3771\257\377\3771\257\377\377" |
"/\256\377\377,\255\377\377,\255\377\377,\255\377\377\37\222\335\377\36Qn" |
"\377\6\16\24\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0" |
"\377\24""5H\377\37\246\376\377\33\244\376\377\32\243\376\377\27\242\377\377" |
"\32\243\376\377\32\243\376\377\27\242\377\377\27\242\377\377\21\237\377\377" |
"\21\237\377\377\17\236\377\377\17\236\377\377\11\33'\377\0\0\0\377\0\0\0" |
"\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\377\0\0\0\377" |
"\0\0\0\377\0\0\0\377>\211\263\377V\302\377\377T\301\376\377T\301\376\377" |
"V\302\377\377V\302\377\377V\302\377\377V\302\377\377V\302\377\377W\303\377" |
"\377W\303\377\377W\303\377\377W\303\377\377]\304\375\377V\302\377\377]\304" |
"\375\377W\303\377\377W\303\377\377W\303\377\377W\303\377\377W\303\377\377" |
"W\303\377\377W\303\377\377V\302\377\377\35Wz\377\0\0\0\377\0\0\0\377\0\0" |
"\0\377\0\0\0\377\24""5H\377W\303\377\377W\303\377\377W\303\377\377W\303\377" |
"\377W\303\377\377W\303\377\377W\303\377\377T\301\376\377W\303\377\377W\303" |
"\377\377W\303\377\377T\301\376\377T\301\376\377T\301\376\377T\301\376\377" |
"T\301\376\377T\301\376\377N\276\377\377N\276\377\377R\300\376\377N\276\377" |
"\377N\276\377\377L\275\377\377J\274\377\377J\274\377\377J\274\377\377J\274" |
"\377\377I\274\377\377I\274\377\377I\274\377\377H\273\377\377H\273\377\377" |
"D\271\376\377D\271\376\377D\271\376\377B\270\376\377B\270\376\377B\270\376" |
"\377@\267\377\377<\265\376\377<\265\376\377<\265\376\377<\265\376\377;\264" |
"\376\377;\264\376\3775\262\377\377;\264\376\3777\262\377\3777\262\377\377" |
"5\262\377\3771\257\377\3772\260\377\3771\257\377\3771\257\377\377/\256\377" |
"\377,\255\377\377,\255\377\3771\210\275\377\25<S\377\0\0\0\377\0\0\0\377" |
"\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\11" |
"\33'\377\30\230\355\377\33\244\376\377\32\243\376\377\32\243\376\377\27\242" |
"\377\377\21\237\377\377\21\237\377\377\21\237\377\377\21\237\377\377\21\237" |
"\377\377\17\236\377\377!\216\323\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0" |
"\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0" |
"\0\0\377\31Fb\377T\301\376\377T\301\376\377T\301\376\377T\301\376\377T\301" |
"\376\377T\301\376\377V\302\377\377V\302\377\377V\302\377\377V\302\377\377" |
"V\302\377\377V\302\377\377T\301\376\377W\303\377\377W\303\377\377W\303\377" |
"\377W\303\377\377W\303\377\377V\302\377\377V\302\377\377W\303\377\377W\303" |
"\377\377V\302\377\377D\266\372\377\3\4\6\377\0\0\0\377\0\0\0\377\0\0\0\377" |
"\0\0\0\377>\211\263\377W\303\377\377V\302\377\377V\302\377\377V\302\377\377" |
"V\302\377\377V\302\377\377W\303\377\377T\301\376\377T\301\376\377T\301\376" |
"\377T\301\376\377T\301\376\377N\276\377\377N\276\377\377N\276\377\377N\276" |
"\377\377N\276\377\377R\300\376\377N\276\377\377N\276\377\377L\275\377\377" |
"L\275\377\377J\274\377\377J\274\377\377J\274\377\377J\274\377\377H\273\377" |
"\377H\273\377\377I\274\377\377D\271\376\377D\271\376\377D\271\376\377D\271" |
"\376\377@\267\377\377D\266\372\377@\267\377\377@\267\377\377<\265\376\377" |
"<\265\376\377<\265\376\377<\265\376\377<\265\376\377<\265\376\377;\264\376" |
"\3775\262\377\3777\262\377\3775\262\377\3775\262\377\3771\257\377\3772\260" |
"\377\377/\256\377\3771\257\377\377/\256\377\377,\255\377\377,\255\377\377" |
"*\253\377\377\17$0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377" |
"\0\0\0\377\0\0\0\377\0\0\0\377\10\24\32\377\32e\225\377\32\243\376\377\33" |
"\244\376\377\32\243\376\377\27\242\377\377\27\242\377\377\32\243\376\377" |
"\27\242\377\377\21\237\377\377\21\237\377\377\17\236\377\377\17\236\377\377" |
"\17\236\377\377\31Fb\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0" |
"\377D\266\372\377T\301\376\377J\274\377\377Q\277\377\377Q\277\377\377T\301" |
"\376\377T\301\376\377T\301\376\377T\301\376\377T\301\376\377T\301\376\377" |
"V\302\377\377V\302\377\377V\302\377\377V\302\377\377V\302\377\377V\302\377" |
"\377V\302\377\377V\302\377\377T\301\376\377V\302\377\377W\303\377\377V\302" |
"\377\377V\302\377\377\36Qn\377\0\0\0\377\0\0\0\377\4\12\15\377\35Wz\377C" |
"\267\373\377V\302\377\377V\302\377\377V\302\377\377T\301\376\377T\301\376" |
"\377T\301\376\377T\301\376\377T\301\376\377N\276\377\377T\301\376\377N\276" |
"\377\377T\301\376\377N\276\377\377T\301\376\377T\301\376\377N\276\377\377" |
"N\276\377\377N\276\377\377L\275\377\377L\275\377\377L\275\377\377L\275\377" |
"\377J\274\377\377I\274\377\377I\274\377\377I\274\377\377H\273\377\377H\273" |
"\377\377D\271\376\377D\271\376\377D\271\376\377D\271\376\377@\267\377\377" |
"D\271\376\377@\267\377\377<\265\376\377@\267\377\377@\267\377\377<\265\376" |
"\377<\265\376\377<\265\376\3778\263\376\3775\262\377\3777\262\377\3777\262" |
"\377\3777\262\377\3775\262\377\3772\260\377\3772\260\377\3771\257\377\377" |
"/\256\377\377/\256\377\377,\255\377\377,\255\377\377*\253\377\377,\255\377" |
"\377\32e\225\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0" |
"\377\11\33'\377\36k\234\377\37\246\376\377\37\246\376\377\33\244\376\377" |
"\32\243\376\377\27\242\377\377\27\242\377\377\27\242\377\377\21\237\377\377" |
"\32\243\376\377\21\237\377\377\21\237\377\377\17\236\377\377\16\235\377\377" |
"\32\225\347\377\4\12\15\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0" |
"\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0" |
"\0\377\6\16\24\377>\211\263\377J\274\377\377T\301\376\377T\301\376\377Q\277" |
"\377\377Q\277\377\377T\301\376\377T\301\376\377T\301\376\377T\301\376\377" |
"T\301\376\377T\301\376\377T\301\376\377T\301\376\377T\301\376\377T\301\376" |
"\377T\301\376\377T\301\376\377T\301\376\377T\301\376\377T\301\376\377T\301" |
"\376\377T\301\376\377D\266\372\377\6\16\24\377\35Wz\377D\266\372\377T\301" |
"\376\377V\302\377\377T\301\376\377T\301\376\377T\301\376\377T\301\376\377" |
"T\301\376\377T\301\376\377T\301\376\377T\301\376\377N\276\377\377T\301\376" |
"\377T\301\376\377N\276\377\377N\276\377\377L\275\377\377N\276\377\377N\276" |
"\377\377L\275\377\377L\275\377\377L\275\377\377I\274\377\377L\275\377\377" |
"I\274\377\377I\274\377\377I\274\377\377I\274\377\377D\271\376\377H\273\377" |
"\377D\271\376\377D\271\376\377D\271\376\377@\267\377\377D\271\376\377@\267" |
"\377\377@\267\377\377<\265\376\377<\265\376\377<\265\376\377<\265\376\377" |
"<\265\376\377<\265\376\3778\263\376\3778\263\376\3778\263\376\3777\262\377" |
"\3777\262\377\3771\257\377\3771\257\377\3771\257\377\3771\257\377\3771\257" |
"\377\377/\256\377\377,\255\377\377,\255\377\377,\255\377\377*\253\377\377" |
"*\253\377\377\30\230\355\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\24." |
"=\377\36k\234\377\37\246\376\377\37\246\376\377\37\246\376\377\33\244\376" |
"\377\32\243\376\377\27\242\377\377\27\242\377\377\27\242\377\377\27\242\377" |
"\377\21\237\377\377\27\242\377\377\21\237\377\377\21\237\377\377\17\236\377" |
"\377\16\235\377\377\35Wz\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0" |
"\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\377\0\0\0\377\0\0" |
"\0\377\0\0\0\377\0\0\0\377\0\0\0\377\17$0\3773x\236\377I\274\377\377Q\277" |
"\377\377J\274\377\377T\301\376\377J\274\377\377T\301\376\377J\274\377\377" |
"T\301\376\377T\301\376\377N\276\377\377T\301\376\377T\301\376\377T\301\376" |
"\377T\301\376\377Q\277\377\377T\301\376\377T\301\376\377N\276\377\377T\301" |
"\376\377T\301\376\377V\302\377\377J\274\377\377T\301\376\377T\301\376\377" |
"T\301\376\377T\301\376\377J\274\377\377T\301\376\377J\274\377\377T\301\376" |
"\377T\301\376\377J\274\377\377N\276\377\377N\276\377\377N\276\377\377N\276" |
"\377\377N\276\377\377N\276\377\377N\276\377\377L\275\377\377L\275\377\377" |
"L\275\377\377L\275\377\377L\275\377\377L\275\377\377L\275\377\377G\272\377" |
"\377G\272\377\377I\274\377\377H\273\377\377D\271\376\377D\271\376\377D\271" |
"\376\377D\271\376\377B\270\376\377B\270\376\377@\267\377\377@\267\377\377" |
"@\267\377\377@\267\377\377@\267\377\377<\265\376\377<\265\376\3778\263\376" |
"\377=\265\376\3778\263\376\3778\263\376\3778\263\376\3777\262\377\3771\257" |
"\376\377&p\234\3771\210\275\3772\260\377\3771\257\377\3771\257\377\377/\256" |
"\377\377,\255\377\377,\255\377\377*\253\377\377,\255\377\377*\253\377\377" |
"'\252\376\377'\252\376\377\24""5H\377\3\4\6\377\31Fb\377!\216\323\377#\250" |
"\376\377\37\246\376\377\37\246\376\377\37\246\376\377\33\244\376\377\33\244" |
"\376\377\27\242\377\377\27\242\377\377\27\242\377\377\27\242\377\377\21\237" |
"\377\377\21\237\377\377\21\237\377\377\17\236\377\377\17\236\377\377\17\236" |
"\377\377\22\231\364\377\4\12\15\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377" |
"\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\377\0" |
"\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\6\16\24\377\36" |
"Qn\377>\211\263\377T\301\376\377T\301\376\377J\274\377\377T\301\376\377N" |
"\276\377\377N\276\377\377N\276\377\377J\274\377\377T\301\376\377J\274\377" |
"\377T\301\376\377Q\277\377\377T\301\376\377J\274\377\377T\301\376\377N\276" |
"\377\377T\301\376\377T\301\376\377Q\277\377\377T\301\376\377J\274\377\377" |
"J\274\377\377T\301\376\377T\301\376\377T\301\376\377J\274\377\377T\301\376" |
"\377J\274\377\377T\301\376\377N\276\377\377N\276\377\377N\276\377\377L\275" |
"\377\377L\275\377\377L\275\377\377L\275\377\377L\275\377\377I\274\377\377" |
"L\275\377\377G\272\377\377L\275\377\377G\272\377\377G\272\377\377G\272\377" |
"\377G\272\377\377D\271\376\377D\271\376\377D\271\376\377D\271\376\377B\270" |
"\376\377B\270\376\377B\270\376\377B\270\376\377@\267\377\377@\267\377\377" |
"<\265\376\377<\265\376\377<\265\376\377<\265\376\377=\265\376\3778\263\376" |
"\3778\263\376\3778\263\376\3771\210\275\377\35Wz\377\17$0\377\0\0\0\377\0" |
"\0\0\377\24""5H\3771\257\377\3771\257\377\377/\256\377\377,\255\377\377," |
"\255\377\377,\255\377\377*\253\377\377*\253\377\377*\253\377\377'\252\376" |
"\377'\252\376\377\37\222\335\377\30\230\355\377#\250\376\377#\250\376\377" |
"\37\246\376\377\37\246\376\377\37\246\376\377\33\244\376\377\33\244\376\377" |
"\32\243\376\377\27\242\377\377\27\242\377\377\27\242\377\377\27\242\377\377" |
"\21\237\377\377\21\237\377\377\21\237\377\377\17\236\377\377\17\236\377\377" |
"\17\236\377\377\27[\207\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0" |
"\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\377" |
"\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0" |
"\0\0\377\0\0\0\377\11\33'\377\35Wz\377D\266\372\377N\276\377\377N\276\377" |
"\377N\276\377\377T\301\376\377N\276\377\377N\276\377\377T\301\376\377T\301" |
"\376\377J\274\377\377N\276\377\377T\301\376\377N\276\377\377T\301\376\377" |
"J\274\377\377T\301\376\377J\274\377\377Q\277\377\377T\301\376\377T\301\376" |
"\377J\274\377\377J\274\377\377T\301\376\377J\274\377\377T\301\376\377J\274" |
"\377\377J\274\377\377L\275\377\377L\275\377\377L\275\377\377L\275\377\377" |
"L\275\377\377L\275\377\377L\275\377\377I\274\377\377I\274\377\377I\274\377" |
"\377G\272\377\377G\272\377\377G\272\377\377G\272\377\377G\272\377\377D\271" |
"\376\377D\271\376\377D\271\376\377D\271\376\377B\270\376\377B\270\376\377" |
"@\267\377\377@\267\377\377<\265\376\377@\267\377\377<\265\376\377<\265\376" |
"\377<\265\376\377=\265\376\377\37\222\335\377&p\234\377\36Qn\377\24.=\377" |
"\3\4\6\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\6\16\24\377" |
"/\256\377\377/\256\377\377,\255\377\377,\255\377\377,\255\377\377*\253\377" |
"\377*\253\377\377'\252\376\377'\252\376\377'\252\376\377#\250\376\377#\250" |
"\376\377#\250\376\377#\250\376\377\37\246\376\377\37\246\376\377\37\246\376" |
"\377\33\244\376\377\33\244\376\377\32\243\376\377\32\243\376\377\27\242\377" |
"\377\32\243\376\377\27\242\377\377\21\237\377\377\21\237\377\377\21\237\377" |
"\377\17\236\377\377\17\236\377\377\17\236\377\377\21\233\371\377\6\16\24" |
"\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\377\0\0\0\377\0\0" |
"\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0" |
"\377\3\4\6\377D\266\372\377J\274\377\377J\274\377\377Q\277\377\377J\274\377" |
"\377Q\277\377\377Q\277\377\377J\274\377\377J\274\377\377T\301\376\377J\274" |
"\377\377Q\277\377\377J\274\377\377T\301\376\377Q\277\377\377J\274\377\377" |
"T\301\376\377T\301\376\377J\274\377\377T\301\376\377Q\277\377\377J\274\377" |
"\377J\274\377\377J\274\377\377J\274\377\377Q\277\377\377J\274\377\377J\274" |
"\377\377J\274\377\377I\274\377\377I\274\377\377J\274\377\377I\274\377\377" |
"H\273\377\377H\273\377\377G\272\377\377I\274\377\377G\272\377\377G\272\377" |
"\377G\272\377\377D\271\376\377G\272\377\377B\270\376\377B\270\376\377B\270" |
"\376\377B\270\376\377B\270\376\377B\270\376\377<\265\376\377<\265\376\377" |
"?\267\377\377<\265\376\377;\264\376\377?\267\377\377;\264\376\377\32e\225" |
"\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377" |
"\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377&\212\311\377*\253\377\377/\256\377" |
"\377(\252\376\377+\254\377\377(\252\376\377'\252\376\377'\252\376\377'\252" |
"\376\377#\250\376\377#\250\376\377#\250\376\377#\250\376\377\37\246\376\377" |
"\37\246\376\377\37\246\376\377\37\246\376\377\32\243\376\377\32\243\376\377" |
"\32\243\376\377\27\242\377\377\27\242\377\377\27\242\377\377\21\237\377\377" |
"\21\237\377\377\21\237\377\377\21\237\377\377\21\237\377\377\17\236\377\377" |
"\17\236\377\377\35Wz\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377" |
"\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377" |
"\0\0\0\377\0\0\0\377\0\0\0\377\24""5H\377I\274\377\377J\274\377\377J\274" |
"\377\377Q\277\377\377J\274\377\377J\274\377\377J\274\377\377J\274\377\377" |
"Q\277\377\377J\274\377\377J\274\377\377J\274\377\377J\274\377\377J\274\377" |
"\377J\274\377\377J\274\377\377J\274\377\377J\274\377\377J\274\377\377J\274" |
"\377\377J\274\377\377J\274\377\377J\274\377\377J\274\377\377I\274\377\377" |
"I\274\377\377J\274\377\377J\274\377\377J\274\377\377I\274\377\377H\273\377" |
"\377H\273\377\377H\273\377\377H\273\377\377H\273\377\377G\272\377\377G\272" |
"\377\377G\272\377\377B\270\376\377D\271\376\377D\271\376\377B\270\376\377" |
"B\270\376\377B\270\376\3778\263\376\377?\267\377\377<\265\376\377<\265\376" |
"\377?\267\377\377<\265\376\377<\265\376\377<\265\376\377;\264\376\377;\264" |
"\376\3775\262\377\377&\212\311\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377" |
"\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\27" |
"[\207\377/\256\377\377(\252\376\377/\256\377\377(\252\376\377'\252\376\377" |
"'\252\376\377'\252\376\377#\250\376\377#\250\376\377#\250\376\377#\250\376" |
"\377\37\246\376\377\37\246\376\377\37\246\376\377\33\244\376\377\32\243\376" |
"\377\32\243\376\377\27\242\377\377\27\242\377\377\27\242\377\377\27\242\377" |
"\377\27\242\377\377\21\237\377\377\21\237\377\377\21\237\377\377\17\236\377" |
"\377\16\235\377\377\17\236\377\377\37\222\335\377\3\4\6\377\0\0\0\377\0\0" |
"\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0" |
"\377\0\0\0\377\4\12\15\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377&p\234" |
"\377I\274\377\377I\274\377\377I\274\377\377I\274\377\377J\274\377\377J\274" |
"\377\377J\274\377\377J\274\377\377J\274\377\377J\274\377\377D\266\372\377" |
"\0\0\0\377\11\33'\377\17$0\377\31Fb\377\36Qn\377&p\234\377&p\234\3773x\236" |
"\377&\212\311\377&\212\311\377&\212\311\377D\266\372\377I\274\377\377I\274" |
"\377\377H\273\377\377H\273\377\377I\274\377\377H\273\377\377H\273\377\377" |
"H\273\377\377D\271\376\377H\273\377\377\37\222\335\377&\212\311\377&p\234" |
"\377&p\234\377\27[\207\377\31Fb\377\31Fb\377\17$0\377\17$0\377\10\27\40\377" |
"\0\0\0\377\35Wz\377<\265\376\377B\270\376\377<\265\376\377<\265\376\377;" |
"\264\376\377;\264\376\377;\264\376\377;\264\376\377;\264\376\377;\264\376" |
"\3771\257\377\377\1\2\2\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0" |
"\377\0\0\0\377\0\0\0\377\10\27\40\377\31Fb\377\36k\234\377(\252\376\377*" |
"\253\377\377(\252\376\377+\254\377\377(\252\376\377(\252\376\377%\250\376" |
"\377%\250\376\377#\250\376\377#\250\376\377\37\246\376\377\37\246\376\377" |
"\37\246\376\377\37\246\376\377\33\244\376\377\33\244\376\377\32\243\376\377" |
"\27\242\377\377\27\242\377\377\27\242\377\377\21\237\377\377\27\242\377\377" |
"\21\237\377\377\21\237\377\377\21\237\377\377\17\236\377\377\16\235\377\377" |
"\16\235\377\377\17\236\377\377\24""5H\377\0\0\0\377\0\0\0\377\0\0\0\377\0" |
"\0\0\377\0\0\0\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0" |
"\0\377\0\0\0\377\27[\207\377\35Wz\377\17$0\377\0\0\0\377:\262\373\377H\273" |
"\377\377H\273\377\377H\273\377\377H\273\377\377H\273\377\377H\273\377\377" |
"H\273\377\377I\274\377\377J\274\377\377J\274\377\377!\216\323\377\0\0\0\377" |
"\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0" |
"\0\0\377\0\0\0\377\0\0\0\377=\265\376\377H\273\377\377H\273\377\377H\273" |
"\377\377I\274\377\377H\273\377\377H\273\377\377D\271\376\377H\273\377\377" |
"D\271\376\377D\271\376\377\31Fb\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377" |
"\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\31Fb\377<\265" |
"\376\377<\265\376\377<\265\376\377<\265\376\377;\264\376\377:\263\374\377" |
";\264\376\3775\262\377\3775\262\377\3775\262\377\3775\262\377\377\17$0\377" |
"\0\0\0\377\1\2\2\377\0\0\0\377\10\27\40\377\25<S\377\36k\234\377\37\222\335" |
"\377/\256\377\377/\256\377\377*\253\377\377/\256\377\377*\253\377\377(\252" |
"\376\377'\252\376\377'\252\376\377'\252\376\377'\252\376\377!\247\376\377" |
"#\250\376\377#\250\376\377\37\246\376\377\37\246\376\377\37\246\376\377\33" |
"\244\376\377\33\244\376\377\32\243\376\377\32\243\376\377\27\242\377\377" |
"\27\242\377\377\32\243\376\377\27\242\377\377\21\237\377\377\21\237\377\377" |
"\21\237\377\377\17\236\377\377\16\235\377\377\16\235\377\377\16\235\377\377" |
"\36k\234\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\4\12\15" |
"\3778\263\376\377D\271\376\377:\262\373\377D\271\376\377H\273\377\377D\271" |
"\376\377H\273\377\377D\271\376\377H\273\377\377H\273\377\377I\274\377\377" |
"I\274\377\377I\274\377\377I\274\377\3771\210\275\377\0\0\0\377\0\0\0\377" |
"\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0" |
"\0\0\377\0\0\0\377D\266\372\377H\273\377\377H\273\377\377D\271\376\377D\271" |
"\376\377D\271\376\377D\271\376\377D\271\376\377D\271\376\377D\271\376\377" |
"D\271\376\377\36Qn\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377" |
"\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\17$0\377<\265\376\377" |
"<\265\376\377<\265\376\377;\264\376\3775\262\377\3775\262\377\3775\262\377" |
"\3777\262\377\3771\257\377\3775\262\377\3772\260\377\377\36k\234\377\27[" |
"\207\3771\210\275\377(\252\376\3771\257\377\377/\256\377\377*\253\377\377" |
"*\253\377\377/\256\377\377*\253\377\377*\253\377\377(\252\376\377(\252\376" |
"\377'\252\376\377'\252\376\377'\252\376\377%\250\376\377!\247\376\377%\250" |
"\376\377#\250\376\377\37\246\376\377\37\246\376\377\37\246\376\377\33\244" |
"\376\377\33\244\376\377\32\243\376\377\27\242\377\377\27\242\377\377\27\242" |
"\377\377\21\237\377\377\21\237\377\377\21\237\377\377\21\237\377\377\17\236" |
"\377\377\17\236\377\377\16\235\377\377\16\235\377\377\17\236\377\377\22\231" |
"\364\377\10\27\40\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377" |
"\0\0\0\377\24.=\377D\271\376\377D\271\376\377D\271\376\377D\271\376\377D" |
"\271\376\377D\271\376\377D\271\376\377D\271\376\377H\273\377\377D\271\376" |
"\377H\273\377\377D\271\376\377D\271\376\377\32e\225\377\0\0\0\377\0\0\0\377" |
"\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0" |
"\0\0\377\0\0\0\377D\266\372\377D\271\376\3773x\236\377\10\27\40\3771\210" |
"\275\377D\271\376\377D\271\376\377B\270\376\377B\270\376\377D\271\376\377" |
"@\267\377\377\36Qn\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377" |
"\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\6\16\24\377<\265\376\377" |
"8\263\376\3775\262\377\377;\264\376\377;\264\376\3777\262\377\3775\262\377" |
"\3777\262\377\3775\262\377\3771\257\377\3772\260\377\3771\257\377\3771\257" |
"\377\3771\257\377\377/\256\377\377/\256\377\377*\253\377\377/\256\377\377" |
"/\256\377\377*\253\377\377*\253\377\377*\253\377\377(\252\376\377'\252\376" |
"\377'\252\376\377'\252\376\377!\247\376\377%\250\376\377!\247\376\377!\247" |
"\376\377\37\246\376\377\37\246\376\377\37\246\376\377\33\244\376\377\33\244" |
"\376\377\32\243\376\377\27\242\377\377\27\242\377\377\32\243\376\377\27\242" |
"\377\377\21\237\377\377\27\242\377\377\21\237\377\377\21\237\377\377\17\236" |
"\377\377\16\235\377\377\16\235\377\377\16\235\377\377\17\236\377\377\31F" |
"b\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377" |
"\0\0\0\377\35Wz\377D\271\376\377B\270\376\377B\270\376\377B\270\376\377D" |
"\271\376\377D\271\376\377D\271\376\377D\271\376\377D\271\376\377D\271\376" |
"\377D\271\376\377D\271\376\3773x\236\377\17$0\377\10\24\32\377\0\0\0\377" |
"\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0" |
"\0\0\377!\216\323\377\24.=\377\0\0\0\377\0\0\0\377\10\24\32\3778\263\376" |
"\377D\271\376\377B\270\376\377@\267\377\377@\267\377\377@\267\377\377\36" |
"Qn\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0" |
"\377\0\0\0\377\17$0\377\17$0\377\31Fb\377:\262\373\3778\263\376\3775\262" |
"\377\3775\262\377\3775\262\377\3775\262\377\3775\262\377\3772\260\377\377" |
"1\257\377\3771\257\377\3771\257\377\3771\257\377\3771\257\377\377/\256\377" |
"\377,\255\377\377/\256\377\377/\256\377\377*\253\377\377/\256\377\377(\252" |
"\376\377(\252\376\377'\252\376\377'\252\376\377'\252\376\377!\247\376\377" |
"!\247\376\377!\247\376\377!\247\376\377!\247\376\377\37\246\376\377\37\246" |
"\376\377\37\246\376\377\33\244\376\377\33\244\376\377\33\244\376\377\27\242" |
"\377\377\27\242\377\377\27\242\377\377\27\242\377\377\21\237\377\377\21\237" |
"\377\377\21\237\377\377\21\237\377\377\17\236\377\377\16\235\377\377\16\235" |
"\377\377\16\235\377\377\16\235\377\377\32e\225\377\0\0\0\377\0\0\0\377\0" |
"\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377" |
"1\210\275\377@\267\377\377B\270\376\377B\270\376\377B\270\376\377B\270\376" |
"\377D\271\376\377B\270\376\377B\270\376\377B\270\376\377B\270\376\377B\270" |
"\376\377D\271\376\377B\270\376\377B\270\376\377B\270\376\3778\263\376\377" |
"&\212\311\3773x\236\377&p\234\377&p\234\377\35Wz\377\31Fb\377\31Fb\377\4" |
"\12\15\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\25<S\377@\267\377\377" |
"B\270\376\377<\265\376\377<\265\376\377@\267\377\3773x\236\377\35Wz\377&" |
"p\234\377&p\234\377&\212\311\377&\212\311\377\32\225\347\377<\265\376\377" |
":\263\374\3775\262\377\3778\263\376\3778\263\376\3777\262\377\3777\262\377" |
"\3775\262\377\3775\262\377\3775\262\377\3772\260\377\3771\257\377\3771\257" |
"\377\3771\257\377\3771\257\377\3771\257\377\377/\256\377\377/\256\377\377" |
",\255\377\377,\255\377\377*\253\377\377*\253\377\377*\253\377\377(\252\376" |
"\377(\252\376\377'\252\376\377'\252\376\377%\250\376\377%\250\376\377!\247" |
"\376\377'\252\376\377!\247\376\377!\247\376\377\37\246\376\377!\247\376\377" |
"\37\246\376\377\33\244\376\377\33\244\376\377\33\244\376\377\27\242\377\377" |
"\27\242\377\377\27\242\377\377\27\242\377\377\21\237\377\377\27\242\377\377" |
"\21\237\377\377\21\237\377\377\17\236\377\377\17\236\377\377\16\235\377\377" |
"\16\235\377\377\16\235\377\377!\216\323\377\4\12\15\377\0\0\0\377\0\0\0\377" |
"\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0" |
"\377\6\16\24\377:\262\373\377@\267\377\377<\265\376\377@\267\377\377<\265" |
"\376\377B\270\376\377@\267\377\377@\267\377\377@\267\377\377@\267\377\377" |
"D\271\376\377B\270\376\377B\270\376\377B\270\376\377B\270\376\377B\270\376" |
"\377B\270\376\377B\270\376\377B\270\376\377B\270\376\377?\267\377\377B\270" |
"\376\377?\267\377\377&p\234\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0" |
"\0\0\377&p\234\377<\265\376\377<\265\376\377<\265\376\377<\265\376\377<\265" |
"\376\377<\265\376\377<\265\376\377;\264\376\377;\264\376\377;\264\376\377" |
";\264\376\3775\262\377\377;\264\376\377;\264\376\3777\262\377\3777\262\377" |
"\3775\262\377\3777\262\377\3777\262\377\3771\257\377\3771\257\377\3771\257" |
"\377\3771\257\377\3771\257\377\3771\257\377\377/\256\377\377/\256\377\377" |
",\255\377\377,\255\377\377,\255\377\377*\253\377\377,\255\377\377*\253\377" |
"\377*\253\377\377*\253\377\377'\252\376\377'\252\376\377'\252\376\377'\252" |
"\376\377!\247\376\377!\247\376\377!\247\376\377!\247\376\377\37\246\376\377" |
"\37\246\376\377\33\244\376\377\33\244\376\377\33\244\376\377\32\243\376\377" |
"\27\242\377\377\27\242\377\377\27\242\377\377\21\237\377\377\21\237\377\377" |
"\32\243\376\377\21\237\377\377\21\237\377\377\21\237\377\377\16\235\377\377" |
"\16\235\377\377\16\235\377\377\16\235\377\377\21\233\371\377\11\33'\377\0" |
"\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\377\0" |
"\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\24.=\377:\262\373\377@\267\377\377" |
"@\267\377\377@\267\377\377<\265\376\377<\265\376\377@\267\377\377@\267\377" |
"\377<\265\376\377@\267\377\377<\265\376\377?\267\377\377<\265\376\377<\265" |
"\376\377B\270\376\377<\265\376\377<\265\376\377<\265\376\377<\265\376\377" |
"<\265\376\377<\265\376\377?\267\377\377?\267\377\377\24""5H\377\0\0\0\377" |
"\0\0\0\377\0\0\0\377\0\0\0\377\6\16\24\3778\263\376\377<\265\376\377<\265" |
"\376\377<\265\376\377<\265\376\377<\265\376\377;\264\376\377;\264\376\377" |
";\264\376\3777\262\377\377;\264\376\3775\262\377\3775\262\377\3775\262\377" |
"\3771\257\377\3777\262\377\3775\262\377\3771\257\377\3771\257\377\3771\257" |
"\377\3771\257\377\3771\257\377\3771\257\377\377/\256\377\377/\256\377\377" |
"*\253\377\377,\255\377\377,\255\377\377,\255\377\377*\253\377\377*\253\377" |
"\377*\253\377\377'\252\376\377'\252\376\377'\252\376\377'\252\376\377#\250" |
"\376\377#\250\376\377!\247\376\377!\247\376\377!\247\376\377!\247\376\377" |
"!\247\376\377\33\244\376\377\37\246\376\377\32\243\376\377\33\244\376\377" |
"\27\242\377\377\27\242\377\377\27\242\377\377\27\242\377\377\27\242\377\377" |
"\27\242\377\377\21\237\377\377\21\237\377\377\21\237\377\377\16\235\377\377" |
"\16\235\377\377\16\235\377\377\16\235\377\377\16\235\377\377\16\235\377\377" |
"\31Fb\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\24""5H\377" |
"8\263\376\377<\265\376\377<\265\376\377<\265\376\377@\267\377\377<\265\376" |
"\377@\267\377\377<\265\376\377<\265\376\377@\267\377\377<\265\376\377?\267" |
"\377\377?\267\377\377<\265\376\377B\270\376\377<\265\376\377<\265\376\377" |
"B\270\376\377?\267\377\377<\265\376\377<\265\376\377<\265\376\377:\263\374" |
"\377\6\16\24\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\24""5H\377<\265" |
"\376\377<\265\376\377;\264\376\377;\264\376\3775\262\377\3775\262\377\377" |
";\264\376\3777\262\377\3777\262\377\3775\262\377\3775\262\377\3775\262\377" |
"\3772\260\377\3777\262\377\3771\257\377\3771\257\377\3771\257\377\3771\257" |
"\377\3771\257\377\3771\257\377\3771\257\377\377/\256\377\377*\253\377\377" |
"/\256\377\377*\253\377\377*\253\377\377,\255\377\377*\253\377\377*\253\377" |
"\377*\253\377\377'\252\376\377'\252\376\377'\252\376\377'\252\376\377#\250" |
"\376\377#\250\376\377#\250\376\377\37\246\376\377!\247\376\377\37\246\376" |
"\377\37\246\376\377\33\244\376\377\33\244\376\377\33\244\376\377\32\243\376" |
"\377\27\242\377\377\27\242\377\377\27\242\377\377\27\242\377\377\27\242\377" |
"\377\21\237\377\377\21\237\377\377\21\237\377\377\21\237\377\377\17\236\377" |
"\377\16\235\377\377\16\235\377\377\17\236\377\377\17\236\377\377\17\236\377" |
"\377\27[\207\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0" |
"\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0" |
"\0\377\0\0\0\377\31Fb\377<\265\376\377<\265\376\377<\265\376\377<\265\376" |
"\377<\265\376\377<\265\376\377<\265\376\377<\265\376\377<\265\376\377<\265" |
"\376\377<\265\376\377<\265\376\377;\264\376\377<\265\376\377<\265\376\377" |
"<\265\376\377<\265\376\377<\265\376\377<\265\376\377;\264\376\377?\267\377" |
"\377;\264\376\377&p\234\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0" |
"\377\36k\234\3775\262\377\377;\264\376\3775\262\377\377;\264\376\3775\262" |
"\377\3775\262\377\3771\257\377\3777\262\377\3775\262\377\3775\262\377\377" |
"2\260\377\3772\260\377\3771\257\377\3771\257\377\3771\257\377\3771\257\377" |
"\3771\257\377\377/\256\377\377/\256\377\377/\256\377\377/\256\377\377*\253" |
"\377\377*\253\377\377/\256\377\377*\253\377\377*\253\377\377*\253\377\377" |
"*\253\377\377'\252\376\377'\252\376\377'\252\376\377#\250\376\377#\250\376" |
"\377#\250\376\377#\250\376\377\37\246\376\377\37\246\376\377\37\246\376\377" |
"\37\246\376\377\37\246\376\377\37\246\376\377\33\244\376\377\32\243\376\377" |
"\32\243\376\377\27\242\377\377\27\242\377\377\27\242\377\377\27\242\377\377" |
"\21\237\377\377\27\242\377\377\21\237\377\377\21\237\377\377\17\236\377\377" |
"\16\235\377\377\16\235\377\377\16\235\377\377\17\236\377\377\17\236\377\377" |
"\32e\225\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377" |
"\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377" |
"\0\0\0\377\0\0\0\377\0\0\0\377\35Wz\377;\264\376\377;\264\376\377;\264\376" |
"\377;\264\376\377<\265\376\3778\263\376\377<\265\376\377=\265\376\377;\264" |
"\376\377;\264\376\377;\264\376\377;\264\376\377;\264\376\377;\264\376\377" |
";\264\376\377<\265\376\377<\265\376\377;\264\376\377;\264\376\377;\264\376" |
"\377;\264\376\377;\264\376\377\25<S\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0" |
"\0\377\3\4\6\377!\216\323\3777\262\377\3775\262\377\3775\262\377\3775\262" |
"\377\3777\262\377\3775\262\377\3775\262\377\3771\257\377\3771\257\377\377" |
"1\257\377\3772\260\377\3771\257\377\3771\257\377\377/\256\377\377/\256\377" |
"\377/\256\377\377,\255\377\377,\255\377\377,\255\377\377/\256\377\377*\253" |
"\377\377/\256\377\377(\252\376\377(\252\376\377(\252\376\377'\252\376\377" |
"'\252\376\377'\252\376\377'\252\376\377#\250\376\377#\250\376\377#\250\376" |
"\377\37\246\376\377#\250\376\377\37\246\376\377\37\246\376\377\37\246\376" |
"\377\33\244\376\377\33\244\376\377\32\243\376\377\32\243\376\377\27\242\377" |
"\377\32\243\376\377\27\242\377\377\27\242\377\377\27\242\377\377\21\237\377" |
"\377\27\242\377\377\21\237\377\377\17\236\377\377\17\236\377\377\16\235\377" |
"\377\16\235\377\377\16\235\377\377\16\235\377\377\16\235\377\377\36k\234" |
"\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\377\0\0\0\377\0" |
"\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\32e\225\3778\263\376\3778\263\376" |
"\3778\263\376\3778\263\376\3778\263\376\3778\263\376\3778\263\376\377;\264" |
"\376\377;\264\376\377;\264\376\3777\262\377\377;\264\376\3775\262\377\377" |
";\264\376\3775\262\377\377;\264\376\3777\262\377\3775\262\377\3777\262\377" |
"\3775\262\377\377;\264\376\377/\256\377\377\10\24\32\377\0\0\0\377\0\0\0" |
"\377\0\0\0\377\0\0\0\377\11\33'\3771\257\377\3771\257\377\3777\262\377\377" |
"1\257\377\3771\257\377\3771\257\377\3771\257\377\3775\262\377\3771\257\377" |
"\3771\257\377\3771\257\377\3771\257\377\377/\256\377\377/\256\377\377,\255" |
"\377\377,\255\377\377,\255\377\377*\253\377\377,\255\377\377(\252\376\377" |
"/\256\377\377(\252\376\377(\252\376\377(\252\376\377(\252\376\377%\250\376" |
"\377'\252\376\377!\247\376\377#\250\376\377#\250\376\377#\250\376\377#\250" |
"\376\377\37\246\376\377\37\246\376\377\37\246\376\377\37\246\376\377\37\246" |
"\376\377\33\244\376\377\33\244\376\377\27\242\377\377\32\243\376\377\27\242" |
"\377\377\32\243\376\377\27\242\377\377\21\237\377\377\21\237\377\377\27\242" |
"\377\377\21\237\377\377\21\237\377\377\17\236\377\377\16\235\377\377\16\235" |
"\377\377\16\235\377\377\17\236\377\377\17\236\377\377&\212\311\377\3\4\6" |
"\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\377\0\0" |
"\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\35Wz\3778\263\376\3777\262" |
"\377\3777\262\377\3777\262\377\3778\263\376\3777\262\377\3775\262\377\377" |
"5\262\377\377;\264\376\3775\262\377\3777\262\377\3777\262\377\3775\262\377" |
"\377;\264\376\3775\262\377\377;\264\376\3777\262\377\3777\262\377\3775\262" |
"\377\3775\262\377\3775\262\377\3771\210\275\377\0\0\0\377\0\0\0\377\0\0\0" |
"\377\0\0\0\377\27[\207\3777\262\377\3771\257\377\3771\257\377\3771\257\377" |
"\3771\257\377\3771\257\377\3771\257\377\3771\257\377\3771\257\377\377/\256" |
"\377\377/\256\377\377/\256\377\377,\255\377\377/\256\377\377,\255\377\377" |
",\255\377\377*\253\377\377,\255\377\377*\253\377\377(\252\376\377(\252\376" |
"\377(\252\376\377(\252\376\377'\252\376\377'\252\376\377'\252\376\377!\247" |
"\376\377!\247\376\377'\252\376\377!\247\376\377!\247\376\377\37\246\376\377" |
"\37\246\376\377\37\246\376\377\37\246\376\377\33\244\376\377\33\244\376\377" |
"\32\243\376\377\27\242\377\377\27\242\377\377\27\242\377\377\32\243\376\377" |
"\21\237\377\377\21\237\377\377\21\237\377\377\21\237\377\377\21\237\377\377" |
"\17\236\377\377\17\236\377\377\16\235\377\377\16\235\377\377\16\235\377\377" |
"\16\235\377\377\16\235\377\377\36k\234\377\3\4\6\377\0\0\0\377\0\0\0\377" |
"\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\377\0\0\0\377\0" |
"\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\31Fb\3771\257\377\3777\262\377\377" |
"1\257\377\3777\262\377\3777\262\377\3775\262\377\3775\262\377\3775\262\377" |
"\3775\262\377\3771\257\377\3777\262\377\3775\262\377\3771\257\377\3777\262" |
"\377\3771\257\377\3777\262\377\3771\257\377\3775\262\377\3772\260\377\377" |
"5\262\377\3772\260\377\377\35Wz\377\0\0\0\377\6\16\24\3771\210\275\3771\257" |
"\377\3771\257\377\3771\257\377\3771\257\377\3771\257\377\3771\257\377\377" |
"1\257\377\3771\257\377\377/\256\377\377/\256\377\377/\256\377\377*\253\377" |
"\377,\255\377\377,\255\377\377*\253\377\377,\255\377\377*\253\377\377*\253" |
"\377\377*\253\377\377'\252\376\377(\252\376\377'\252\376\377'\252\376\377" |
"%\250\376\377'\252\376\377!\247\376\377!\247\376\377!\247\376\377!\247\376" |
"\377!\247\376\377\37\246\376\377\37\246\376\377\37\246\376\377\37\246\376" |
"\377\33\244\376\377\32\243\376\377\33\244\376\377\33\244\376\377\27\242\377" |
"\377\27\242\377\377\27\242\377\377\27\242\377\377\32\243\376\377\21\237\377" |
"\377\27\242\377\377\17\236\377\377\21\237\377\377\21\237\377\377\17\236\377" |
"\377\17\236\377\377\16\235\377\377\16\235\377\377\16\235\377\377\16\235\377" |
"\377\32e\225\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0" |
"\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0" |
"\0\0\377\0\0\0\377\0\0\0\377\25<S\3771\257\376\3777\262\377\3771\257\377" |
"\3777\262\377\3775\262\377\3772\260\377\3775\262\377\3775\262\377\3775\262" |
"\377\3772\260\377\3775\262\377\3771\257\377\3772\260\377\3772\260\377\377" |
"2\260\377\3772\260\377\3772\260\377\3772\260\377\3772\260\377\3772\260\377" |
"\3771\257\377\377\36Qn\377\37\222\335\377/\256\377\3771\257\377\377/\256" |
"\377\3771\257\377\3771\257\377\377/\256\377\377/\256\377\377/\256\377\377" |
"*\253\377\377*\253\377\377/\256\377\377/\256\377\377(\252\376\377,\255\377" |
"\377*\253\377\377,\255\377\377*\253\377\377(\252\376\377'\252\376\377'\252" |
"\376\377'\252\376\377'\252\376\377%\250\376\377'\252\376\377%\250\376\377" |
"!\247\376\377!\247\376\377!\247\376\377!\247\376\377\37\246\376\377\37\246" |
"\376\377\37\246\376\377\37\246\376\377\37\246\376\377\32\243\376\377\33\244" |
"\376\377\33\244\376\377\27\242\377\377\27\242\377\377\27\242\377\377\27\242" |
"\377\377\32\243\376\377\27\242\377\377\21\237\377\377\21\237\377\377\21\237" |
"\377\377\17\236\377\377\17\236\377\377\16\235\377\377\16\235\377\377\16\235" |
"\377\377\17\236\377\377\17\236\377\377\17\236\377\377\27[\207\377\0\0\0\377" |
"\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0" |
"\0\0\377\0\0\0\377\24.=\377/\256\377\3771\257\377\3771\257\377\3772\260\377" |
"\3771\257\377\3771\257\377\3772\260\377\3772\260\377\3771\257\377\3772\260" |
"\377\3771\257\377\3772\260\377\3772\260\377\3772\260\377\3771\257\377\377" |
"1\257\377\3771\257\377\3771\257\377\3771\257\377\3771\257\377\3771\257\377" |
"\3771\257\377\377/\256\377\377/\256\377\377/\256\377\377/\256\377\377/\256" |
"\377\377,\255\377\377/\256\377\377*\253\377\377/\256\377\377*\253\377\377" |
"*\253\377\377*\253\377\377/\256\377\377*\253\377\377*\253\377\377*\253\377" |
"\377'\252\376\377'\252\376\377'\252\376\377'\252\376\377'\252\376\377%\250" |
"\376\377!\247\376\377!\247\376\377!\247\376\377'\252\376\377!\247\376\377" |
"!\247\376\377\37\246\376\377\37\246\376\377\37\246\376\377\37\246\376\377" |
"\32\243\376\377\33\244\376\377\33\244\376\377\27\242\377\377\33\244\376\377" |
"\27\242\377\377\27\242\377\377\27\242\377\377\27\242\377\377\21\237\377\377" |
"\21\237\377\377\21\237\377\377\21\237\377\377\21\237\377\377\17\236\377\377" |
"\16\235\377\377\16\235\377\377\16\235\377\377\16\235\377\377\16\235\377\377" |
"\17\236\377\377\31Fb\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377" |
"\0\0\0\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\6\16\24" |
"\3771\210\275\3771\257\377\3771\257\377\3771\257\377\3771\257\377\3771\257" |
"\377\3771\257\377\3771\257\377\3771\257\377\3771\257\377\3771\257\377\377" |
"1\257\377\3771\257\377\3771\257\377\377/\256\377\3771\257\377\377/\256\377" |
"\377/\256\377\377/\256\377\377/\256\377\377/\256\377\377,\255\377\377*\253" |
"\377\377/\256\377\377/\256\377\377*\253\377\377,\255\377\377*\253\377\377" |
"*\253\377\377*\253\377\377/\256\377\377*\253\377\377(\252\376\377(\252\376" |
"\377'\252\376\377'\252\376\377'\252\376\377'\252\376\377'\252\376\377'\252" |
"\376\377#\250\376\377#\250\376\377!\247\376\377'\252\376\377!\247\376\377" |
"!\247\376\377!\247\376\377!\247\376\377\37\246\376\377\37\246\376\377\37" |
"\246\376\377\33\244\376\377\33\244\376\377\32\243\376\377\32\243\376\377" |
"\27\242\377\377\27\242\377\377\27\242\377\377\27\242\377\377\27\242\377\377" |
"\21\237\377\377\27\242\377\377\21\237\377\377\21\237\377\377\21\237\377\377" |
"\17\236\377\377\17\236\377\377\17\236\377\377\16\235\377\377\16\235\377\377" |
"\16\235\377\377\16\235\377\377\32\225\347\377\17$0\377\0\0\0\377\0\0\0\377" |
"\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\377\0\0\0\377" |
"\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\27[\207\377/\256\377\377" |
"/\256\377\377/\256\377\377/\256\377\3771\257\377\377/\256\377\377/\256\377" |
"\377/\256\377\377/\256\377\377/\256\377\377/\256\377\377/\256\377\377/\256" |
"\377\377,\255\377\377,\255\377\377,\255\377\377,\255\377\377,\255\377\377" |
",\255\377\377,\255\377\377,\255\377\377*\253\377\377*\253\377\377*\253\377" |
"\377,\255\377\377*\253\377\377*\253\377\377*\253\377\377*\253\377\377'\252" |
"\376\377'\252\376\377'\252\376\377'\252\376\377#\250\376\377'\252\376\377" |
"'\252\376\377#\250\376\377#\250\376\377#\250\376\377#\250\376\377!\247\376" |
"\377!\247\376\377!\247\376\377!\247\376\377\37\246\376\377\37\246\376\377" |
"\37\246\376\377\33\244\376\377\33\244\376\377\33\244\376\377\32\243\376\377" |
"\32\243\376\377\32\243\376\377\27\242\377\377\27\242\377\377\27\242\377\377" |
"\27\242\377\377\21\237\377\377\27\242\377\377\21\237\377\377\21\237\377\377" |
"\21\237\377\377\17\236\377\377\17\236\377\377\16\235\377\377\16\235\377\377" |
"\16\235\377\377\16\235\377\377\16\235\377\377\36k\234\377\6\16\24\377\0\0" |
"\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377" |
"\0\0\0\377\24""5H\377\30\230\355\377/\256\377\377,\255\377\377*\253\377\377" |
"/\256\377\377/\256\377\377*\253\377\377,\255\377\377,\255\377\377,\255\377" |
"\377,\255\377\377,\255\377\377,\255\377\377/\256\377\377,\255\377\377,\255" |
"\377\377*\253\377\377,\255\377\377*\253\377\377*\253\377\377/\256\377\377" |
"(\252\376\377*\253\377\377*\253\377\377*\253\377\377'\252\376\377'\252\376" |
"\377'\252\376\377'\252\376\377'\252\376\377'\252\376\377'\252\376\377#\250" |
"\376\377#\250\376\377#\250\376\377#\250\376\377#\250\376\377\37\246\376\377" |
"#\250\376\377\37\246\376\377\37\246\376\377\37\246\376\377\37\246\376\377" |
"\33\244\376\377!\247\376\377\33\244\376\377\33\244\376\377\32\243\376\377" |
"\27\242\377\377\27\242\377\377\27\242\377\377\27\242\377\377\32\243\376\377" |
"\21\237\377\377\32\243\376\377\21\237\377\377\27\242\377\377\21\237\377\377" |
"\21\237\377\377\21\237\377\377\17\236\377\377\16\235\377\377\16\235\377\377" |
"\16\235\377\377\16\235\377\377\16\235\377\377\16\235\377\377\35Wz\377\0\0" |
"\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0" |
"\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0" |
"\0\377\0\0\0\377\0\0\0\377\0\0\0\377\4\12\15\377\32e\225\377,\255\377\377" |
"*\253\377\377*\253\377\377*\253\377\377/\256\377\377*\253\377\377,\255\377" |
"\377,\255\377\377*\253\377\377,\255\377\377*\253\377\377*\253\377\377*\253" |
"\377\377*\253\377\377,\255\377\377*\253\377\377*\253\377\377(\252\376\377" |
"(\252\376\377(\252\376\377(\252\376\377'\252\376\377'\252\376\377'\252\376" |
"\377'\252\376\377'\252\376\377'\252\376\377!\247\376\377#\250\376\377#\250" |
"\376\377#\250\376\377#\250\376\377#\250\376\377#\250\376\377\37\246\376\377" |
"\37\246\376\377\37\246\376\377\37\246\376\377\37\246\376\377\37\246\376\377" |
"\37\246\376\377\33\244\376\377\33\244\376\377\33\244\376\377\32\243\376\377" |
"\32\243\376\377\27\242\377\377\27\242\377\377\27\242\377\377\21\237\377\377" |
"\32\243\376\377\21\237\377\377\21\237\377\377\21\237\377\377\17\236\377\377" |
"\21\237\377\377\17\236\377\377\17\236\377\377\16\235\377\377\16\235\377\377" |
"\16\235\377\377\16\235\377\377\16\235\377\377&\212\311\377\11\33'\377\0\0" |
"\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0" |
"\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\377" |
"\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\17$0\377!\216" |
"\323\377*\253\377\377*\253\377\377*\253\377\377,\255\377\377*\253\377\377" |
",\255\377\377*\253\377\377*\253\377\377*\253\377\377*\253\377\377*\253\377" |
"\377*\253\377\377'\252\376\377'\252\376\377'\252\376\377'\252\376\377'\252" |
"\376\377'\252\376\377'\252\376\377'\252\376\377'\252\376\377'\252\376\377" |
"#\250\376\377!\216\323\377#\250\376\377#\250\376\377#\250\376\377#\250\376" |
"\377#\250\376\377\37\246\376\377#\250\376\377\37\246\376\377\37\246\376\377" |
"\37\246\376\377\37\246\376\377\33\244\376\377\37\246\376\377\32\243\376\377" |
"\33\244\376\377\32\243\376\377\32\243\376\377\32\243\376\377\32\243\376\377" |
"\27\242\377\377\27\242\377\377\27\242\377\377\32\243\376\377\21\237\377\377" |
"\27\242\377\377\21\237\377\377\21\237\377\377\21\237\377\377\17\236\377\377" |
"\17\236\377\377\16\235\377\377\16\235\377\377\16\235\377\377\16\235\377\377" |
"\16\235\377\377\22\231\364\377\31Fb\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0" |
"\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\377\0\0" |
"\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\1\2\2\377\36Qn\377" |
"'\252\376\377(\252\376\377*\253\377\377*\253\377\377'\252\376\377'\252\376" |
"\377'\252\376\377*\253\377\377'\252\376\377'\252\376\377'\252\376\377'\252" |
"\376\377'\252\376\377'\252\376\377'\252\376\377'\252\376\377'\252\376\377" |
"#\250\376\377#\250\376\377#\250\376\377\37\246\376\377\25<S\377\3\4\6\377" |
"&\212\311\377!\247\376\377#\250\376\377#\250\376\377\37\246\376\377\37\246" |
"\376\377\37\246\376\377\37\246\376\377\37\246\376\377\37\246\376\377\33\244" |
"\376\377\32\243\376\377\32\243\376\377\32\243\376\377\32\243\376\377\32\243" |
"\376\377\27\242\377\377\27\242\377\377\27\242\377\377\27\242\377\377\32\243" |
"\376\377\21\237\377\377\21\237\377\377\21\237\377\377\21\237\377\377\21\237" |
"\377\377\21\237\377\377\21\237\377\377\17\236\377\377\17\236\377\377\17\236" |
"\377\377\16\235\377\377\16\235\377\377\16\235\377\377\32e\225\377\6\16\24" |
"\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377" |
"\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0" |
"\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\4\12\15\377\35Wz\377\30\230" |
"\355\377'\252\376\377'\252\376\377'\252\376\377'\252\376\377'\252\376\377" |
"'\252\376\377'\252\376\377'\252\376\377'\252\376\377'\252\376\377#\250\376" |
"\377#\250\376\377#\250\376\377#\250\376\377#\250\376\377#\250\376\377\30" |
"\230\355\377\24.=\377\0\0\0\377\0\0\0\377\6\16\24\377\37\222\335\377\37\246" |
"\376\377\37\246\376\377\37\246\376\377\33\244\376\377\37\246\376\377\37\246" |
"\376\377\37\246\376\377\33\244\376\377\32\243\376\377\32\243\376\377\27\242" |
"\377\377\27\242\377\377\27\242\377\377\27\242\377\377\27\242\377\377\27\242" |
"\377\377\21\237\377\377\27\242\377\377\21\237\377\377\21\237\377\377\21\237" |
"\377\377\21\237\377\377\21\237\377\377\17\236\377\377\17\236\377\377\16\235" |
"\377\377\16\235\377\377\17\236\377\377\17\236\377\377\17\236\377\377\32e" |
"\225\377\11\33'\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0" |
"\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377" |
"\0\0\0\377\0\0\0\377\4\12\15\377\36Qn\377\30\230\355\377'\252\376\377%\250" |
"\376\377!\247\376\377!\247\376\377'\252\376\377#\250\376\377#\250\376\377" |
"#\250\376\377#\250\376\377#\250\376\377#\250\376\377#\250\376\377#\250\376" |
"\377\37\246\376\377\10\24\32\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377" |
"\10\27\40\377\32\225\347\377\37\246\376\377\37\246\376\377\33\244\376\377" |
"\33\244\376\377\32\243\376\377\33\244\376\377\32\243\376\377\27\242\377\377" |
"\32\243\376\377\27\242\377\377\27\242\377\377\27\242\377\377\27\242\377\377" |
"\27\242\377\377\21\237\377\377\27\242\377\377\27\242\377\377\21\237\377\377" |
"\21\237\377\377\21\237\377\377\17\236\377\377\21\237\377\377\16\235\377\377" |
"\16\235\377\377\16\235\377\377\17\236\377\377\16\235\377\377\32e\225\377" |
"\11\33'\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0" |
"\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377" |
"\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\3\4\6\377\31Fb\377&\212" |
"\311\377!\247\376\377#\250\376\377#\250\376\377#\250\376\377#\250\376\377" |
"\37\246\376\377\37\246\376\377!\247\376\377#\250\376\377\37\246\376\377\37" |
"\246\376\377\37\246\376\377\35Wz\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0" |
"\377\0\0\0\377\17$0\377\30\230\355\377\32\243\376\377\33\244\376\377\33\244" |
"\376\377\27\242\377\377\27\242\377\377\32\243\376\377\27\242\377\377\27\242" |
"\377\377\27\242\377\377\27\242\377\377\27\242\377\377\27\242\377\377\21\237" |
"\377\377\27\242\377\377\21\237\377\377\21\237\377\377\21\237\377\377\21\237" |
"\377\377\17\236\377\377\17\236\377\377\16\235\377\377\16\235\377\377\16\235" |
"\377\377\32\225\347\377\27[\207\377\10\27\40\377\0\0\0\377\0\0\0\377\0\0" |
"\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0" |
"\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0" |
"\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\11\33'\377\27" |
"[\207\377\32\225\347\377#\250\376\377\37\246\376\377\37\246\376\377#\250" |
"\376\377\37\246\376\377\37\246\376\377\37\246\376\377\37\246\376\377\37\246" |
"\376\377\37\246\376\377\25<S\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377" |
"\0\0\0\377\17$0\377\21\233\371\377\27\242\377\377\33\244\376\377\27\242\377" |
"\377\27\242\377\377\27\242\377\377\27\242\377\377\27\242\377\377\21\237\377" |
"\377\21\237\377\377\27\242\377\377\21\237\377\377\27\242\377\377\21\237\377" |
"\377\21\237\377\377\21\237\377\377\17\236\377\377\17\236\377\377\17\236\377" |
"\377\16\235\377\377\21\233\371\377\36k\234\377\24""5H\377\0\0\0\377\0\0\0" |
"\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377" |
"\0\0\0\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0" |
"\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\24.=\377\27[\207\377!\216\323" |
"\377\37\246\376\377\37\246\376\377\37\246\376\377\37\246\376\377\33\244\376" |
"\377\37\246\376\377\33\244\376\377\32\243\376\377\24.=\377\0\0\0\377\0\0" |
"\0\377\0\0\0\377\0\0\0\377\0\0\0\377\24""5H\377\21\233\371\377\27\242\377" |
"\377\27\242\377\377\27\242\377\377\27\242\377\377\27\242\377\377\27\242\377" |
"\377\21\237\377\377\27\242\377\377\21\237\377\377\21\237\377\377\21\237\377" |
"\377\21\237\377\377\17\236\377\377\17\236\377\377\17\236\377\377\30\230\355" |
"\377\36k\234\377\31Fb\377\4\12\15\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0" |
"\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377" |
"\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0" |
"\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\6\16" |
"\24\377\25<S\377\32e\225\377\37\222\335\377\32\243\376\377\33\244\376\377" |
"\33\244\376\377\32\243\376\377\16\234\375\377\17$0\377\0\0\0\377\0\0\0\377" |
"\0\0\0\377\0\0\0\377\0\0\0\377\24""5H\377\21\233\371\377\27\242\377\377\21" |
"\237\377\377\21\237\377\377\21\237\377\377\21\237\377\377\21\237\377\377" |
"\17\236\377\377\21\237\377\377\21\237\377\377\17\236\377\377\22\231\364\377" |
"\36k\234\377\35Wz\377\17$0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0" |
"\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0" |
"\0\377\0\0\0\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0" |
"\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0" |
"\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377" |
"\17$0\377\25<S\377\35Wz\377\36k\234\377&\212\311\377\10\27\40\377\0\0\0\377" |
"\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\25<S\377\27\242\377\377\21\237\377" |
"\377\27\242\377\377!\216\323\377&\212\311\377\36k\234\377\32e\225\377\31" |
"Fb\377\24.=\377\10\24\32\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0" |
"\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0" |
"\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0" |
"\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377" |
"\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0" |
"\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\3\4" |
"\6\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0" |
"\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377" |
"\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0" |
"\0\0\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0" |
"\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0" |
"\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377" |
"\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0" |
"\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0" |
"\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0" |
"\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0" |
"\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0" |
"\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0" |
"\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377" |
"\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0" |
"\0\0\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377" |
"\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0" |
"\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0" |
"\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0" |
"\377\0\0\0\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0" |
"\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377" |
"\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
"\0\0\0", |
}; |
/contrib/network/netsurf/libnsfb/test/path.c |
---|
0,0 → 1,132 |
/* libnsfb plotetr test program */ |
#include <stdio.h> |
#include <stdbool.h> |
#include <stdlib.h> |
#include "libnsfb.h" |
#include "libnsfb_plot.h" |
#include "libnsfb_event.h" |
#define UNUSED(x) ((x) = (x)) |
#define PENT(op, xco, yco) path[count].operation = op; \ |
path[count].point.x = (xco); \ |
path[count].point.y = (yco); \ |
count++ |
static int fill_shape(nsfb_plot_pathop_t *path, int xoff, int yoff) |
{ |
int count = 0; |
PENT(NFSB_PLOT_PATHOP_MOVE, xoff, yoff); |
PENT(NFSB_PLOT_PATHOP_LINE, xoff + 100, yoff + 100); |
PENT(NFSB_PLOT_PATHOP_LINE, xoff + 100, yoff ); |
PENT(NFSB_PLOT_PATHOP_LINE, xoff + 200, yoff + 100); |
PENT(NFSB_PLOT_PATHOP_MOVE, xoff + 200, yoff - 200); |
PENT(NFSB_PLOT_PATHOP_MOVE, xoff + 300, yoff + 300); |
PENT(NFSB_PLOT_PATHOP_CUBIC, xoff + 300, yoff ); |
PENT(NFSB_PLOT_PATHOP_LINE, xoff + 400, yoff + 100); |
PENT(NFSB_PLOT_PATHOP_LINE, xoff + 400, yoff ); |
PENT(NFSB_PLOT_PATHOP_MOVE, xoff + 500, yoff + 200); |
PENT(NFSB_PLOT_PATHOP_QUAD, xoff + 500, yoff ); |
PENT(NFSB_PLOT_PATHOP_LINE, xoff + 600, yoff + 150); |
PENT(NFSB_PLOT_PATHOP_LINE, xoff, yoff + 150); |
PENT(NFSB_PLOT_PATHOP_LINE, xoff, yoff); |
return count; |
} |
int main(int argc, char **argv) |
{ |
const char *fename; |
enum nsfb_type_e fetype; |
nsfb_t *nsfb; |
int waitloop = 3; |
nsfb_event_t event; |
nsfb_bbox_t box; |
uint8_t *fbptr; |
int fbstride; |
nsfb_plot_pen_t pen; |
nsfb_plot_pathop_t path[20]; |
if (argc < 2) { |
fename="sdl"; |
} else { |
fename = argv[1]; |
} |
fetype = nsfb_type_from_name(fename); |
if (fetype == NSFB_SURFACE_NONE) { |
fprintf(stderr, "Unable to convert \"%s\" to nsfb surface type\n", fename); |
return 1; |
} |
nsfb = nsfb_new(fetype); |
if (nsfb == NULL) { |
fprintf(stderr, "Unable to allocate \"%s\" nsfb surface\n", fename); |
return 2; |
} |
if (nsfb_init(nsfb) == -1) { |
fprintf(stderr, "Unable to initialise nsfb surface\n"); |
nsfb_free(nsfb); |
return 4; |
} |
/* get the geometry of the whole screen */ |
box.x0 = box.y0 = 0; |
nsfb_get_geometry(nsfb, &box.x1, &box.y1, NULL); |
nsfb_get_buffer(nsfb, &fbptr, &fbstride); |
/* claim the whole screen for update */ |
nsfb_claim(nsfb, &box); |
nsfb_plot_clg(nsfb, 0xffffffff); |
pen.stroke_colour = 0xff0000ff; |
pen.fill_colour = 0xffff0000; |
pen.stroke_type = NFSB_PLOT_OPTYPE_SOLID; |
pen.fill_type = NFSB_PLOT_OPTYPE_NONE; |
nsfb_plot_path(nsfb, fill_shape(path, 100, 50), path, &pen); |
pen.fill_type = NFSB_PLOT_OPTYPE_SOLID; |
nsfb_plot_path(nsfb, fill_shape(path, 100, 200), path, &pen); |
pen.stroke_type = NFSB_PLOT_OPTYPE_NONE; |
nsfb_plot_path(nsfb, fill_shape(path, 100, 350), path, &pen); |
nsfb_update(nsfb, &box); |
/* wait for quit event or timeout */ |
while (waitloop > 0) { |
if (nsfb_event(nsfb, &event, 1000) == false) { |
break; |
} |
if (event.type == NSFB_EVENT_CONTROL) { |
if (event.value.controlcode == NSFB_CONTROL_TIMEOUT) { |
/* timeout */ |
waitloop--; |
} else if (event.value.controlcode == NSFB_CONTROL_QUIT) { |
break; |
} |
} |
} |
nsfb_free(nsfb); |
return 0; |
} |
/* |
* Local variables: |
* c-basic-offset: 4 |
* tab-width: 8 |
* End: |
*/ |
/contrib/network/netsurf/libnsfb/test/plottest.c |
---|
0,0 → 1,316 |
/* libnsfb plotter test program */ |
#include <stdio.h> |
#include <stdbool.h> |
#include <stdlib.h> |
#include <unistd.h> |
#include <sys/types.h> |
#include <sys/stat.h> |
#include <fcntl.h> |
#include "libnsfb.h" |
#include "libnsfb_plot.h" |
#include "libnsfb_event.h" |
#define UNUSED(x) ((x) = (x)) |
const struct { |
unsigned int w; |
unsigned int h; |
unsigned char data[16]; |
} Mglyph1 = { |
8, 16, { |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0xc6, /* 11000110 */ |
0xee, /* 11101110 */ |
0xfe, /* 11111110 */ |
0xfe, /* 11111110 */ |
0xd6, /* 11010110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
} |
}; |
const struct { |
unsigned int w; |
unsigned int h; |
unsigned char data[16 * 8]; |
} Mglyph8 = { |
8, 16, { |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 00000000 */ |
0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x00, /* 00000000 */ |
0xaa, 0xff, 0x00, 0x00, 0x00, 0xff, 0xaa, 0x00, /* 11000110 */ |
0xaa, 0xff, 0xff, 0x00, 0xff, 0xff, 0xaa, 0x00, /* 11101110 */ |
0xaa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xaa, 0x00, /* 11111110 */ |
0xaa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xaa, 0x00, /* 11111110 */ |
0xaa, 0xff, 0x00, 0x00, 0x00, 0xff, 0xaa, 0x00, /* 11010110 */ |
0xaa, 0xff, 0x00, 0x00, 0x00, 0xff, 0xaa, 0x00, /* 11000110 */ |
0xaa, 0xff, 0x00, 0x00, 0x00, 0xff, 0xaa, 0x00, /* 11000110 */ |
0xaa, 0xff, 0x00, 0x00, 0x00, 0xff, 0xaa, 0x00, /* 11000110 */ |
0xaa, 0xff, 0x00, 0x00, 0x00, 0xff, 0xaa, 0x00, /* 11000110 */ |
0xaa, 0xff, 0x00, 0x00, 0x00, 0xff, 0xaa, 0x00, /* 11000110 */ |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 00000000 */ |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 00000000 */ |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 00000000 */ |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 00000000 */ |
} |
}; |
static bool |
dump(nsfb_t *nsfb, const char *filename) |
{ |
int fd; |
if (filename == NULL) |
return false; |
fd = open(filename, O_RDWR | O_CREAT | O_TRUNC, S_IRWXU); |
if (fd < 0) |
return false; |
nsfb_dump(nsfb, fd); |
close(fd); |
return true; |
} |
int main(int argc, char **argv) |
{ |
const char *fename; |
enum nsfb_type_e fetype; |
nsfb_t *nsfb; |
nsfb_event_t event; |
int waitloop = 3; |
nsfb_bbox_t box; |
nsfb_bbox_t box2; |
nsfb_bbox_t box3; |
uint8_t *fbptr; |
int fbstride; |
int p[] = { 300,300, 350,350, 400,300, 450,250, 400,200}; |
int loop; |
nsfb_plot_pen_t pen; |
const char *dumpfile = NULL; |
if (argc < 2) { |
fename="sdl"; |
} else { |
fename = argv[1]; |
if (argc >= 3) { |
dumpfile = argv[2]; |
} |
} |
fetype = nsfb_type_from_name(fename); |
if (fetype == NSFB_SURFACE_NONE) { |
fprintf(stderr, "Unable to convert \"%s\" to nsfb surface type\n", fename); |
return 1; |
} |
nsfb = nsfb_new(fetype); |
if (nsfb == NULL) { |
fprintf(stderr, "Unable to allocate \"%s\" nsfb surface\n", fename); |
return 2; |
} |
if (nsfb_init(nsfb) == -1) { |
fprintf(stderr, "Unable to initialise nsfb surface\n"); |
nsfb_free(nsfb); |
return 4; |
} |
/* get the geometry of the whole screen */ |
box.x0 = box.y0 = 0; |
nsfb_get_geometry(nsfb, &box.x1, &box.y1, NULL); |
nsfb_get_buffer(nsfb, &fbptr, &fbstride); |
/* claim the whole screen for update */ |
nsfb_claim(nsfb, &box); |
/* first test, repeatedly clear the graphics area, should result in the |
* same operation as a single clear to the final colour |
*/ |
for (loop = 0; loop < 256;loop++) { |
nsfb_plot_clg(nsfb, 0xffffff00 | loop); |
} |
/* draw black radial lines from the origin */ |
pen.stroke_colour = 0xff000000; |
for (loop = 0; loop < box.x1; loop += 20) { |
box2 = box; |
box2.x1 = loop; |
nsfb_plot_line(nsfb, &box2, &pen); |
} |
/* draw blue radial lines from the bottom right */ |
pen.stroke_colour = 0xffff0000; |
for (loop = 0; loop < box.x1; loop += 20) { |
box2 = box; |
box2.x0 = loop; |
nsfb_plot_line(nsfb, &box2, &pen); |
} |
/* draw green radial lines from the bottom left */ |
pen.stroke_colour = 0xff00ff00; |
for (loop = 0; loop < box.x1; loop += 20) { |
box2.x0 = box.x0; |
box2.x1 = loop; |
box2.y0 = box.y1; |
box2.y1 = box.y0; |
nsfb_plot_line(nsfb, &box2, &pen); |
} |
/* draw red radial lines from the top right */ |
pen.stroke_colour = 0xff0000ff; |
for (loop = 0; loop < box.x1; loop += 20) { |
box2.x0 = box.x1; |
box2.x1 = loop; |
box2.y0 = box.y0; |
box2.y1 = box.y1; |
nsfb_plot_line(nsfb, &box2, &pen); |
} |
/* draw an unclipped rectangle */ |
box2.x0 = box2.y0 = 100; |
box2.x1 = box2.y1 = 300; |
nsfb_plot_rectangle_fill(nsfb, &box2, 0xff0000ff); |
nsfb_plot_rectangle(nsfb, &box2, 1, 0xff00ff00, false, false); |
nsfb_plot_polygon(nsfb, p, 5, 0xffff0000); |
nsfb_plot_set_clip(nsfb, &box2); |
box3.x0 = box3.y0 = 200; |
box3.x1 = box3.y1 = 400; |
nsfb_plot_rectangle_fill(nsfb, &box3, 0xff00ffff); |
nsfb_plot_rectangle(nsfb, &box3, 1, 0xffffff00, false, false); |
for (loop = 100; loop < 400;loop++) { |
nsfb_plot_point(nsfb, loop, 150, 0xffaa1111); |
nsfb_plot_point(nsfb, loop, 160, 0x99aa1111); |
} |
nsfb_plot_set_clip(nsfb, NULL); |
box3.x0 = box3.y0 = 400; |
box3.x1 = box3.y1 = 600; |
nsfb_plot_ellipse_fill(nsfb, &box3, 0xffff0000); |
nsfb_plot_ellipse(nsfb, &box3, 0xff0000ff); |
box3.x0 = 500; |
box3.x1 = 700; |
box3.y0 = 400; |
box3.y1 = 500; |
nsfb_plot_ellipse_fill(nsfb, &box3, 0xffff0000); |
nsfb_plot_ellipse(nsfb, &box3, 0xff0000ff); |
box3.x0 = 600; |
box3.x1 = 700; |
box3.y0 = 300; |
box3.y1 = 500; |
nsfb_plot_ellipse_fill(nsfb, &box3, 0xff0000ff); |
nsfb_plot_ellipse(nsfb, &box3, 0xffff0000); |
box2.x0 = 400; |
box2.y0 = 400; |
box2.x1 = 500; |
box2.y1 = 500; |
box3.x0 = 600; |
box3.y0 = 200; |
box3.x1 = 700; |
box3.y1 = 300; |
nsfb_plot_copy(nsfb, &box2, nsfb, &box3); |
/* test glyph plotting */ |
for (loop = 100; loop < 200; loop+= Mglyph1.w) { |
box3.x0 = loop; |
box3.y0 = 20; |
box3.x1 = box3.x0 + Mglyph8.w; |
box3.y1 = box3.y0 + Mglyph8.h; |
nsfb_plot_glyph1(nsfb, &box3, Mglyph1.data, Mglyph1.w, 0xff000000); |
} |
/* test glyph plotting */ |
for (loop = 100; loop < 200; loop+= Mglyph8.w) { |
box3.x0 = loop; |
box3.y0 = 50; |
box3.x1 = box3.x0 + Mglyph8.w; |
box3.y1 = box3.y0 + Mglyph8.h; |
nsfb_plot_glyph8(nsfb, &box3, Mglyph8.data, Mglyph8.w, 0xff000000); |
} |
nsfb_update(nsfb, &box); |
/* random rectangles in clipped area*/ |
box2.x0 = 400; |
box2.y0 = 50; |
box2.x1 = 600; |
box2.y1 = 100; |
nsfb_plot_set_clip(nsfb, &box2); |
srand(1234); |
for (loop=0; loop < 10000; loop++) { |
nsfb_claim(nsfb, &box2); |
box3.x0 = rand() / (RAND_MAX / box.x1); |
box3.y0 = rand() / (RAND_MAX / box.y1); |
box3.x1 = rand() / (RAND_MAX / 400); |
box3.y1 = rand() / (RAND_MAX / 400); |
nsfb_plot_rectangle_fill(nsfb, &box3, 0xff000000 | rand()); |
nsfb_update(nsfb, &box2); |
} |
/* wait for quit event or timeout */ |
while (waitloop > 0) { |
if (nsfb_event(nsfb, &event, 1000) == false) { |
break; |
} |
if (event.type == NSFB_EVENT_CONTROL) { |
if (event.value.controlcode == NSFB_CONTROL_TIMEOUT) { |
/* timeout */ |
waitloop--; |
} else if (event.value.controlcode == NSFB_CONTROL_QUIT) { |
break; |
} |
} |
} |
dump(nsfb, dumpfile); |
nsfb_free(nsfb); |
return 0; |
} |
/* |
* Local variables: |
* c-basic-offset: 4 |
* tab-width: 8 |
* End: |
*/ |
/contrib/network/netsurf/libnsfb/test/polygon |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/contrib/network/netsurf/libnsfb/test/polygon.c |
---|
0,0 → 1,120 |
/* libnsfb ploygon plotter test program */ |
#include <stdio.h> |
#include <stdbool.h> |
#include <stdlib.h> |
#include <math.h> |
#include "libnsfb.h" |
#include "libnsfb_plot.h" |
#include "libnsfb_event.h" |
#include "surface.h" |
#define UNUSED(x) ((x) = (x)) |
int main(int argc, char **argv) |
{ |
extern nsfb_surface_rtns_t sdl_rtns; |
_nsfb_register_surface(NSFB_SURFACE_SDL, &sdl_rtns, "sdl"); |
const char *fename; |
enum nsfb_type_e fetype; |
nsfb_t *nsfb; |
nsfb_event_t event; |
int waitloop = 3; |
nsfb_bbox_t box; |
uint8_t *fbptr; |
int fbstride; |
int sides; |
int radius; |
nsfb_point_t *points; |
int loop; |
// nsfb_plot_pen_t pen; |
if (argc < 2) { |
fename="sdl"; |
} else { |
fename = argv[1]; |
} |
fetype = nsfb_type_from_name(fename); |
if (fetype == NSFB_SURFACE_NONE) { |
fprintf(stderr, "Unable to convert \"%s\" to nsfb surface type\n", fename); |
return 1; |
} |
nsfb = nsfb_new(fetype); |
if (nsfb == NULL) { |
fprintf(stderr, "Unable to allocate \"%s\" nsfb surface\n", fename); |
return 2; |
} |
if (nsfb_init(nsfb) == -1) { |
fprintf(stderr, "Unable to initialise nsfb surface\n"); |
nsfb_free(nsfb); |
return 4; |
} |
/* get the geometry of the whole screen */ |
box.x0 = box.y0 = 0; |
nsfb_get_geometry(nsfb, &box.x1, &box.y1, NULL); |
nsfb_get_buffer(nsfb, &fbptr, &fbstride); |
/* claim the whole screen for update */ |
nsfb_claim(nsfb, &box); |
nsfb_plot_clg(nsfb, 0xffffffff); |
radius = (box.x1 / 3); |
for (sides = 13; sides >=3; sides--) { |
points = malloc(sizeof(nsfb_point_t) * sides); |
for (loop = 0; loop < sides;loop++) { |
points[loop].x = (box.x1 / 2) + |
(radius * cos(loop * 2 * M_PI / sides)); |
points[loop].y = (box.y1 / 2) + |
(radius * sin(loop * 2 * M_PI / sides)); |
} |
nsfb_plot_polygon(nsfb, (const int *)points, sides, |
0xff000000 | (0xffffff / (sides * 2))); |
free(points); |
radius -= 25; |
} |
nsfb_update(nsfb, &box); |
/* wait for quit event or timeout */ |
while (waitloop > 0) { |
if (nsfb_event(nsfb, &event, 1000) == false) { |
break; |
} |
if (event.type == NSFB_EVENT_CONTROL) { |
if (event.value.controlcode == NSFB_CONTROL_TIMEOUT) { |
/* timeout */ |
waitloop--; |
} else if (event.value.controlcode == NSFB_CONTROL_QUIT) { |
break; |
} |
} |
} |
nsfb_free(nsfb); |
return 0; |
} |
/* |
* Local variables: |
* c-basic-offset: 4 |
* tab-width: 8 |
* End: |
*/ |
/contrib/network/netsurf/libnsfb/test/polygon.map |
---|
0,0 → 1,1587 |
Archive member included because of file (symbol) |
/home/sourcerer/kos_src/me//lib/libm.a(s_cos.o) |
polygon.o (cos) |
/home/sourcerer/kos_src/me//lib/libm.a(s_sin.o) |
polygon.o (sin) |
/home/sourcerer/kos_src/me//lib/libnsfb.a(cursor.o) |
(--whole-archive) |
/home/sourcerer/kos_src/me//lib/libnsfb.a(dump.o) |
(--whole-archive) |
/home/sourcerer/kos_src/me//lib/libnsfb.a(libnsfb.o) |
(--whole-archive) |
/home/sourcerer/kos_src/me//lib/libnsfb.a(palette.o) |
(--whole-archive) |
/home/sourcerer/kos_src/me//lib/libnsfb.a(16bpp.o) |
(--whole-archive) |
/home/sourcerer/kos_src/me//lib/libnsfb.a(32bpp-xbgr8888.o) |
(--whole-archive) |
/home/sourcerer/kos_src/me//lib/libnsfb.a(32bpp-xrgb8888.o) |
(--whole-archive) |
/home/sourcerer/kos_src/me//lib/libnsfb.a(8bpp.o) |
(--whole-archive) |
/home/sourcerer/kos_src/me//lib/libnsfb.a(api.o) |
(--whole-archive) |
/home/sourcerer/kos_src/me//lib/libnsfb.a(generic.o) |
(--whole-archive) |
/home/sourcerer/kos_src/me//lib/libnsfb.a(util.o) |
(--whole-archive) |
/home/sourcerer/kos_src/me//lib/libnsfb.a(able.o) |
(--whole-archive) |
/home/sourcerer/kos_src/me//lib/libnsfb.a(linux.o) |
(--whole-archive) |
/home/sourcerer/kos_src/me//lib/libnsfb.a(ram.o) |
(--whole-archive) |
/home/sourcerer/kos_src/me//lib/libnsfb.a(sdl.o) |
(--whole-archive) |
/home/sourcerer/kos_src/me//lib/libnsfb.a(surface.o) |
(--whole-archive) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_timer.o) |
/home/sourcerer/kos_src/me//lib/libnsfb.a(sdl.o) (SDL_RemoveTimer) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_systimer.o) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_timer.o) (SDL_GetTicks) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_events.o) |
/home/sourcerer/kos_src/me//lib/libnsfb.a(sdl.o) (SDL_PushEvent) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_keyboard.o) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_events.o) (SDL_CheckKeyRepeat) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_mouse.o) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_events.o) (SDL_MouseInit) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_quit.o) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_events.o) (SDL_QuitInit) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_cursor.o) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_mouse.o) (SDL_MoveCursor) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_pixels.o) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_cursor.o) (SDL_MapRGB) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_RLEaccel.o) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_pixels.o) (SDL_UnRLESurface) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_surface.o) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_cursor.o) (SDL_LockSurface) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_video.o) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_events.o) (current_video) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_menuetvideo.o) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_video.o) (mosvideo_bootstrab) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL.o) |
/home/sourcerer/kos_src/me//lib/libnsfb.a(sdl.o) (SDL_Quit) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_error.o) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL.o) (SDL_ClearError) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_fatal.o) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL.o) (SDL_InstallParachute) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_getenv.o) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL.o) (SDL_getenv) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_kolibri_audio.o) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL.o) (SDL_AudioQuit) |
/home/sourcerer/kos_src/me//lib/libSDL.a(init.o) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_kolibri_audio.o) (InitSound) |
/home/sourcerer/kos_src/me//lib/libSDL.a(setbuf.o) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_kolibri_audio.o) (SetBuffer) |
/home/sourcerer/kos_src/me//lib/libSDL.a(stopbuf.o) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_kolibri_audio.o) (StopBuffer) |
/home/sourcerer/kos_src/me//lib/libSDL.a(sndgetsize.o) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_kolibri_audio.o) (GetBufferSize) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_sysmutex.o) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_timer.o) (SDL_mutexP) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_syssem.o) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_sysmutex.o) (SDL_DestroySemaphore) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_systhread.o) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_events.o) (SDL_ThreadID) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_thread.o) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_events.o) (SDL_WaitThread) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_active.o) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_events.o) (SDL_AppActiveInit) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_resize.o) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_video.o) (SDL_PrivateResize) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_blit.o) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_pixels.o) (SDL_CalculateBlit) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_blit_N.o) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_blit.o) (SDL_CalculateBlitN) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_menuetevents.o) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_menuetvideo.o) (MenuetOS_InitOSKeymap) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_blit_0.o) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_blit.o) (SDL_CalculateBlit0) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_blit_1.o) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_blit.o) (SDL_CalculateBlit1) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_blit_A.o) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_blit_N.o) (SDL_CalculateAlphaBlit) |
/home/sourcerer/kos_src/me//lib/libc.a(dup.o) |
/home/sourcerer/kos_src/me//lib/libnsfb.a(dump.o) (dup) |
/home/sourcerer/kos_src/me//lib/libc.a(fdopen.o) |
/home/sourcerer/kos_src/me//lib/libnsfb.a(dump.o) (fdopen) |
/home/sourcerer/kos_src/me//lib/libc.a(window.o) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_menuetvideo.o) (__menuet__define_window) |
/home/sourcerer/kos_src/me//lib/libc.a(param.o) |
/home/sourcerer/kos_src/me//stub/crt0.o (__menuet__app_param_area) |
/home/sourcerer/kos_src/me//lib/libc.a(keyb.o) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_menuetevents.o) (__menuet__getkey) |
/home/sourcerer/kos_src/me//lib/libc.a(image.o) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_menuetvideo.o) (__menuet__putimage) |
/home/sourcerer/kos_src/me//lib/libc.a(exit.o) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_kolibri_audio.o) (__menuet__sys_exit) |
/home/sourcerer/kos_src/me//lib/libc.a(event.o) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_menuetevents.o) (__menuet__check_for_event) |
/home/sourcerer/kos_src/me//lib/libc.a(delay.o) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_systimer.o) (__menuet__delay100) |
/home/sourcerer/kos_src/me//lib/libc.a(button.o) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_menuetevents.o) (__menuet__get_button_id) |
/home/sourcerer/kos_src/me//lib/libc.a(setmode.o) |
/home/sourcerer/kos_src/me//lib/libc.a(fdopen.o) (__setmode) |
/home/sourcerer/kos_src/me//lib/libc.a(fmode.o) |
/home/sourcerer/kos_src/me//lib/libc.a(fdopen.o) (_fmode) |
/home/sourcerer/kos_src/me//lib/libc.a(crt1.o) |
/home/sourcerer/kos_src/me//stub/crt0.o (__crt1_startup) |
/home/sourcerer/kos_src/me//lib/libc.a(crt0.o) |
/home/sourcerer/kos_src/me//lib/libc.a(crt1.o) (__crt0_setup_arguments) |
/home/sourcerer/kos_src/me//lib/libc.a(brk.o) |
/home/sourcerer/kos_src/me//lib/libc.a(crt1.o) (init_brk) |
/home/sourcerer/kos_src/me//lib/libc.a(strdup.o) |
/home/sourcerer/kos_src/me//lib/libnsfb.a(libnsfb.o) (strdup) |
/home/sourcerer/kos_src/me//lib/libc.a(memset.o) |
/home/sourcerer/kos_src/me//lib/libnsfb.a(palette.o) (memset) |
/home/sourcerer/kos_src/me//lib/libc.a(memmove.o) |
/home/sourcerer/kos_src/me//lib/libnsfb.a(generic.o) (memmove) |
/home/sourcerer/kos_src/me//lib/libc.a(strncpy.o) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_video.o) (strncpy) |
/home/sourcerer/kos_src/me//lib/libc.a(strncmp.o) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_video.o) (strncmp) |
/home/sourcerer/kos_src/me//lib/libc.a(strlen.o) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_video.o) (strlen) |
/home/sourcerer/kos_src/me//lib/libc.a(strcpy.o) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_video.o) (strcpy) |
/home/sourcerer/kos_src/me//lib/libc.a(strcmp.o) |
/home/sourcerer/kos_src/me//lib/libnsfb.a(surface.o) (strcmp) |
/home/sourcerer/kos_src/me//lib/libc.a(memcpy.o) |
/home/sourcerer/kos_src/me//lib/libnsfb.a(generic.o) (memcpy) |
/home/sourcerer/kos_src/me//lib/libc.a(memcmp.o) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_pixels.o) (memcmp) |
/home/sourcerer/kos_src/me//lib/libc.a(malloc.o) |
polygon.o (free) |
/home/sourcerer/kos_src/me//lib/libc.a(exit.o) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_fatal.o) (exit) |
/home/sourcerer/kos_src/me//lib/libc.a(calloc.o) |
/home/sourcerer/kos_src/me//lib/libnsfb.a(cursor.o) (calloc) |
/home/sourcerer/kos_src/me//lib/libc.a(abs.o) |
/home/sourcerer/kos_src/me//lib/libnsfb.a(16bpp.o) (abs) |
/home/sourcerer/kos_src/me//lib/libc.a(vsprintf.o) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_error.o) (vsprintf) |
/home/sourcerer/kos_src/me//lib/libc.a(stderr.o) |
polygon.o (__dj_stderr) |
/home/sourcerer/kos_src/me//lib/libc.a(sprintf.o) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_error.o) (sprintf) |
/home/sourcerer/kos_src/me//lib/libc.a(fprintf.o) |
polygon.o (fprintf) |
/home/sourcerer/kos_src/me//lib/libc.a(fflush.o) |
/home/sourcerer/kos_src/me//lib/libc.a(fprintf.o) (fflush) |
/home/sourcerer/kos_src/me//lib/libc.a(fclose.o) |
/home/sourcerer/kos_src/me//lib/libnsfb.a(dump.o) (fclose) |
/home/sourcerer/kos_src/me//lib/libc.a(doprnt.o) |
/home/sourcerer/kos_src/me//lib/libc.a(vsprintf.o) (_doprnt) |
/home/sourcerer/kos_src/me//lib/libc.a(allocfil.o) |
/home/sourcerer/kos_src/me//lib/libc.a(fdopen.o) (__alloc_file) |
/home/sourcerer/kos_src/me//lib/libc.a(modfl.o) |
/home/sourcerer/kos_src/me//lib/libc.a(doprnt.o) (__modfl) |
/home/sourcerer/kos_src/me//lib/libc.a(lconv.o) |
/home/sourcerer/kos_src/me//lib/libc.a(doprnt.o) (localeconv) |
/home/sourcerer/kos_src/me//lib/libc.a(errno.o) |
/home/sourcerer/kos_src/me//lib/libc.a(brk.o) (errno) |
/home/sourcerer/kos_src/me//lib/libc.a(ct_flags.o) |
/home/sourcerer/kos_src/me//lib/libc.a(doprnt.o) (__dj_ctype_flags) |
/home/sourcerer/kos_src/me//lib/libc.a(debug.o) |
/home/sourcerer/kos_src/me//lib/libSDL.a(SDL_fatal.o) (__libclog_vprintf) |
/home/sourcerer/kos_src/me//lib/libc.a(write.o) |
/home/sourcerer/kos_src/me//lib/libc.a(fflush.o) (write) |
/home/sourcerer/kos_src/me//lib/libc.a(lseek.o) |
/home/sourcerer/kos_src/me//lib/libc.a(fdopen.o) (lseek) |
/home/sourcerer/kos_src/me//lib/libc.a(close.o) |
/home/sourcerer/kos_src/me//lib/libc.a(fclose.o) (close) |
/home/sourcerer/kos_src/me//lib/libc.a(emu_init.o) |
/home/sourcerer/kos_src/me//lib/libc.a(crt1.o) (dosemu_inithandles) |
/home/sourcerer/kos_src/me//lib/libc.a(dosemu.o) |
/home/sourcerer/kos_src/me//lib/libc.a(lseek.o) (dosemu_lseek) |
/home/sourcerer/kos_src/me//lib/libc.a(_main.o) |
/home/sourcerer/kos_src/me//lib/libc.a(crt1.o) (__main) |
/home/sourcerer/kos_src/me//lib/libc.a(strrchr.o) |
/home/sourcerer/kos_src/me//lib/libc.a(emu_init.o) (strrchr) |
/home/sourcerer/kos_src/me//lib/libc.a(memchr.o) |
/home/sourcerer/kos_src/me//lib/libc.a(doprnt.o) (memchr) |
/home/sourcerer/kos_src/me//lib/libc.a(stdiohk.o) |
/home/sourcerer/kos_src/me//lib/libc.a(stderr.o) (__stdio_cleanup_proc) |
/home/sourcerer/kos_src/me//lib/libc.a(remove.o) |
/home/sourcerer/kos_src/me//lib/libc.a(fclose.o) (remove) |
/home/sourcerer/kos_src/me//lib/libc.a(putc.o) |
/home/sourcerer/kos_src/me//lib/libc.a(doprnt.o) (putc) |
/home/sourcerer/kos_src/me//lib/libc.a(fwalk.o) |
/home/sourcerer/kos_src/me//lib/libc.a(stdiohk.o) (_fwalk) |
/home/sourcerer/kos_src/me//lib/libc.a(frlist.o) |
/home/sourcerer/kos_src/me//lib/libc.a(allocfil.o) (__file_rec_list) |
/home/sourcerer/kos_src/me//lib/libc.a(fputc.o) |
/home/sourcerer/kos_src/me//lib/libc.a(putc.o) (fputc) |
/home/sourcerer/kos_src/me//lib/libc.a(flsbuf.o) |
/home/sourcerer/kos_src/me//lib/libc.a(doprnt.o) (_flsbuf) |
/home/sourcerer/kos_src/me//lib/libc.a(hooks.o) |
/home/sourcerer/kos_src/me//lib/libc.a(fputc.o) (__libc_write_termios_hook) |
/home/sourcerer/kos_src/me//lib/libc.a(fixpath.o) |
/home/sourcerer/kos_src/me//lib/libc.a(dosemu.o) (_fixpath) |
/home/sourcerer/kos_src/me//lib/libc.a(systree.o) |
/home/sourcerer/kos_src/me//lib/libc.a(remove.o) (__kolibri__system_tree_access2) |
/home/sourcerer/kos_src/me//lib/libc.a(dosio.o) |
/home/sourcerer/kos_src/me//lib/libc.a(fputc.o) (__file_handle_modes) |
/home/sourcerer/kos_src/me//lib/libc.a(curdir.o) |
/home/sourcerer/kos_src/me//lib/libc.a(fixpath.o) (__libc_combine_path) |
/home/sourcerer/kos_src/me//lib/libc.a(stdout.o) |
/home/sourcerer/kos_src/me//lib/libc.a(frlist.o) (__dj_stdout) |
/home/sourcerer/kos_src/me//lib/libc.a(stdin.o) |
/home/sourcerer/kos_src/me//lib/libc.a(frlist.o) (__dj_stdin) |
Memory Configuration |
Name Origin Length Attributes |
*default* 0x0000000000000000 0xffffffffffffffff |
Linker script and memory map |
.text 0x0000000000000000 0x238f8 |
0x0000000000000000 code = . |
0x0000000000000000 _code = . |
*(.text) |
.text 0x0000000000000000 0x24 /home/sourcerer/kos_src/me//stub/crt0.o |
0x0000000000000000 __menuet__app_header |
0x0000000000000000 start |
0x0000000000000014 __menuet__memsize |
.text 0x0000000000000024 0x0 polygon.o |
.text 0x0000000000000024 0x24 /home/sourcerer/kos_src/me//lib/libm.a(s_cos.o) |
0x0000000000000024 cos |
.text 0x0000000000000048 0x24 /home/sourcerer/kos_src/me//lib/libm.a(s_sin.o) |
0x0000000000000048 sin |
.text 0x000000000000006c 0x2a4 /home/sourcerer/kos_src/me//lib/libnsfb.a(cursor.o) |
0x000000000000006c nsfb_cursor_init |
0x00000000000000b7 nsfb_cursor_set |
0x0000000000000122 nsfb_cursor_loc_set |
0x0000000000000164 nsfb_cursor_loc_get |
0x000000000000018d nsfb_cursor_plot |
0x00000000000002b2 nsfb_cursor_clear |
.text 0x0000000000000310 0xbd /home/sourcerer/kos_src/me//lib/libnsfb.a(dump.o) |
0x0000000000000310 nsfb_dump |
*fill* 0x00000000000003cd 0x3 00 |
.text 0x00000000000003d0 0x1a9 /home/sourcerer/kos_src/me//lib/libnsfb.a(libnsfb.o) |
0x00000000000003d0 nsfb_new |
0x000000000000041e nsfb_init |
0x000000000000042d nsfb_free |
0x0000000000000467 nsfb_event |
0x0000000000000476 nsfb_claim |
0x0000000000000485 nsfb_update |
0x0000000000000494 nsfb_set_geometry |
0x00000000000004d0 nsfb_set_parameters |
0x0000000000000524 nsfb_get_geometry |
0x0000000000000555 nsfb_get_buffer |
*fill* 0x0000000000000579 0x3 00 |
.text 0x000000000000057c 0x1ca /home/sourcerer/kos_src/me//lib/libnsfb.a(palette.o) |
0x000000000000057c nsfb_palette_free |
0x00000000000005af nsfb_palette_new |
0x0000000000000628 nsfb_palette_dither_init |
0x000000000000066b nsfb_palette_dither_fini |
0x000000000000067d nsfb_palette_generate_nsfb_8bpp |
*fill* 0x0000000000000746 0x2 00 |
.text 0x0000000000000748 0x9df /home/sourcerer/kos_src/me//lib/libnsfb.a(16bpp.o) |
*fill* 0x0000000000001127 0x1 00 |
.text 0x0000000000001128 0x894 /home/sourcerer/kos_src/me//lib/libnsfb.a(32bpp-xbgr8888.o) |
.text 0x00000000000019bc 0x96e /home/sourcerer/kos_src/me//lib/libnsfb.a(32bpp-xrgb8888.o) |
*fill* 0x000000000000232a 0x2 00 |
.text 0x000000000000232c 0xcfb /home/sourcerer/kos_src/me//lib/libnsfb.a(8bpp.o) |
*fill* 0x0000000000003027 0x1 00 |
.text 0x0000000000003028 0x1b6 /home/sourcerer/kos_src/me//lib/libnsfb.a(api.o) |
0x0000000000003028 nsfb_plot_set_clip |
0x0000000000003037 nsfb_plot_get_clip |
0x0000000000003046 nsfb_plot_clg |
0x0000000000003054 nsfb_plot_rectangle |
0x0000000000003063 nsfb_plot_rectangle_fill |
0x0000000000003072 nsfb_plot_line |
0x000000000000308c nsfb_plot_lines |
0x000000000000309b nsfb_plot_polylines |
0x00000000000030aa nsfb_plot_polygon |
0x00000000000030b9 nsfb_plot_arc |
0x00000000000030c8 nsfb_plot_point |
0x00000000000030d7 nsfb_plot_ellipse |
0x00000000000030e6 nsfb_plot_ellipse_fill |
0x00000000000030f5 nsfb_plot_copy |
0x0000000000003175 nsfb_plot_bitmap |
0x0000000000003184 nsfb_plot_glyph8 |
0x0000000000003193 nsfb_plot_glyph1 |
0x00000000000031a2 nsfb_plot_readrect |
0x00000000000031b1 nsfb_plot_cubic_bezier |
0x00000000000031c0 nsfb_plot_quadratic_bezier |
0x00000000000031cf nsfb_plot_path |
*fill* 0x00000000000031de 0x2 00 |
.text 0x00000000000031e0 0x10d5 /home/sourcerer/kos_src/me//lib/libnsfb.a(generic.o) |
0x00000000000041ad select_plotters |
*fill* 0x00000000000042b5 0x3 00 |
.text 0x00000000000042b8 0x466 /home/sourcerer/kos_src/me//lib/libnsfb.a(util.o) |
0x00000000000042b8 nsfb_plot_clip |
0x00000000000043e4 nsfb_plot_clip_ctx |
0x00000000000043f6 nsfb_plot_clip_line |
0x0000000000004680 nsfb_plot_clip_line_ctx |
0x0000000000004692 nsfb_plot_add_rect |
0x00000000000046ed nsfb_plot_bbox_intersect |
*fill* 0x000000000000471e 0x2 00 |
.text 0x0000000000004720 0x3b /home/sourcerer/kos_src/me//lib/libnsfb.a(able.o) |
*fill* 0x000000000000475b 0x1 00 |
.text 0x000000000000475c 0x36 /home/sourcerer/kos_src/me//lib/libnsfb.a(linux.o) |
*fill* 0x0000000000004792 0x2 00 |
.text 0x0000000000004794 0x112 /home/sourcerer/kos_src/me//lib/libnsfb.a(ram.o) |
*fill* 0x00000000000048a6 0x2 00 |
.text 0x00000000000048a8 0x579 /home/sourcerer/kos_src/me//lib/libnsfb.a(sdl.o) |
*fill* 0x0000000000004e21 0x3 00 |
.text 0x0000000000004e24 0x169 /home/sourcerer/kos_src/me//lib/libnsfb.a(surface.o) |
0x0000000000004e67 _nsfb_register_surface |
0x0000000000004e9a nsfb_surface_get_rtns |
0x0000000000004f50 nsfb_type_from_name |
*fill* 0x0000000000004f8d 0x3 00 |
.text 0x0000000000004f90 0x3fd /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_timer.o) |
0x0000000000004f9c SDL_RemoveTimer |
0x0000000000005015 SDL_SetTimerThreaded |
0x0000000000005045 SDL_AddTimer |
0x0000000000005112 SDL_SetTimer |
0x00000000000051dc SDL_ThreadedTimerCheck |
0x00000000000052ea SDL_TimerQuit |
0x000000000000533a SDL_TimerInit |
*fill* 0x000000000000538d 0x3 00 |
.text 0x0000000000005390 0x67 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_systimer.o) |
0x0000000000005390 SDL_StartTicks |
0x00000000000053a8 SDL_GetTicks |
0x00000000000053c4 SDL_SYS_TimerInit |
0x00000000000053cb SDL_SYS_TimerQuit |
0x00000000000053d0 SDL_SYS_StartTimer |
0x00000000000053d7 SDL_SYS_StopTimer |
0x00000000000053dc SDL_Delay |
*fill* 0x00000000000053f7 0x1 00 |
.text 0x00000000000053f8 0x682 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_events.o) |
0x00000000000053f8 SDL_EventThreadID |
0x0000000000005402 SDL_GetEventFilter |
0x000000000000540c SDL_PumpEvents |
0x0000000000005439 SDL_PeepEvents |
0x0000000000005659 SDL_PushEvent |
0x000000000000566f SDL_PrivateSysWMEvent |
0x00000000000056cd SDL_WaitEvent |
0x0000000000005717 SDL_PollEvent |
0x0000000000005732 SDL_EventState |
0x00000000000057e6 SDL_SetEventFilter |
0x000000000000580d SDL_Unlock_EventThread |
0x000000000000583c SDL_Lock_EventThread |
0x000000000000591c SDL_StopEventLoop |
0x0000000000005989 SDL_StartEventLoop |
*fill* 0x0000000000005a7a 0x2 00 |
.text 0x0000000000005a7c 0xc2f /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_keyboard.o) |
0x0000000000005a7c SDL_EnableUNICODE |
0x0000000000005a93 SDL_GetKeyState |
0x0000000000005aaa SDL_GetModState |
0x0000000000005ab4 SDL_SetModState |
0x0000000000005ac1 SDL_GetKeyName |
0x0000000000005ae0 SDL_CheckKeyRepeat |
0x0000000000005ae5 SDL_EnableKeyRepeat |
0x0000000000005b31 SDL_KeyboardInit |
0x000000000000648e SDL_PrivateKeyboard |
0x0000000000006659 SDL_ResetKeyboard |
*fill* 0x00000000000066ab 0x1 00 |
.text 0x00000000000066ac 0x3fb /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_mouse.o) |
0x00000000000066ac SDL_MouseInit |
0x00000000000066de SDL_GetMouseState |
0x0000000000006708 SDL_GetRelativeMouseState |
0x000000000000678f SDL_PrivateMouseButton |
0x000000000000691d SDL_PrivateMouseMotion |
*fill* 0x0000000000006aa7 0x1 00 |
.text 0x0000000000006aa8 0x4d /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_quit.o) |
0x0000000000006aa8 SDL_QuitInit |
0x0000000000006aaf SDL_PrivateQuit |
*fill* 0x0000000000006af5 0x3 00 |
.text 0x0000000000006af8 0xfb3 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_cursor.o) |
0x0000000000006af8 SDL_GetCursor |
0x0000000000006b02 SDL_CursorPaletteChanged |
0x0000000000006b11 SDL_MouseRect |
0x0000000000006ba2 SDL_ResetCursor |
0x0000000000006bdb SDL_EraseCursorNoLock |
0x0000000000006d41 SDL_EraseCursor |
0x0000000000006dce SDL_DrawCursorNoLock |
0x0000000000007442 SDL_DrawCursor |
0x00000000000074cf SDL_MoveCursor |
0x000000000000756e SDL_WarpMouse |
0x00000000000075d7 SDL_SetCursor |
0x0000000000007741 SDL_ShowCursor |
0x00000000000077da SDL_FreeCursor |
0x0000000000007860 SDL_CreateCursor |
0x00000000000079d8 SDL_CursorInit |
0x0000000000007a2f SDL_CursorQuit |
*fill* 0x0000000000007aab 0x1 00 |
.text 0x0000000000007aac 0xc8e /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_pixels.o) |
0x0000000000007aac SDL_DitherColors |
0x0000000000007b19 SDL_CalculatePitch |
0x0000000000007b52 SDL_FindColor |
0x0000000000007bca SDL_MapRGB |
0x0000000000007c3c SDL_MapRGBA |
0x0000000000007cca SDL_GetRGBA |
0x0000000000007ddd SDL_GetRGB |
0x0000000000007ea1 SDL_ApplyGamma |
0x0000000000007ef3 SDL_InvalidateMap |
0x0000000000007f2d SDL_FormatChanged |
0x0000000000007f45 SDL_FreeBlitMap |
0x0000000000007f83 SDL_FreeFormat |
0x00000000000080b4 SDL_MapSurface |
0x0000000000008376 SDL_AllocBlitMap |
0x00000000000083e8 SDL_AllocFormat |
0x00000000000086f6 SDL_ReallocFormat |
*fill* 0x000000000000873a 0x2 00 |
.text 0x000000000000873c 0x39e4 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_RLEaccel.o) |
0x000000000000873c SDL_RLEBlit |
0x000000000000a827 SDL_RLEAlphaBlit |
0x000000000000b6a2 SDL_UnRLESurface |
0x000000000000b8a1 SDL_RLESurface |
.text 0x000000000000c120 0xd19 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_surface.o) |
0x000000000000c120 SDL_SetClipRect |
0x000000000000c1db SDL_GetClipRect |
0x000000000000c1f9 SDL_LockSurface |
0x000000000000c250 SDL_FreeSurface |
0x000000000000c31c SDL_UnlockSurface |
0x000000000000c368 SDL_FillRect |
0x000000000000c609 SDL_LowerBlit |
0x000000000000c675 SDL_UpperBlit |
0x000000000000c82c SDL_SetAlpha |
0x000000000000c942 SDL_SetColorKey |
0x000000000000ca0d SDL_CreateRGBSurface |
0x000000000000cbe0 SDL_ConvertSurface |
0x000000000000cddc SDL_CreateRGBSurfaceFrom |
*fill* 0x000000000000ce39 0x3 00 |
.text 0x000000000000ce3c 0x18ea /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_video.o) |
0x000000000000ce3c SDL_GetVideoSurface |
0x000000000000ce53 SDL_GetVideoInfo |
0x000000000000ce67 SDL_ListModes |
0x000000000000ce9b SDL_GL_SwapBuffers |
0x000000000000cebd SDL_GL_UpdateRectsLock |
0x000000000000cec2 SDL_GL_UpdateRects |
0x000000000000cec7 SDL_GL_Lock |
0x000000000000cecc SDL_GL_Unlock |
0x000000000000ced1 SDL_WM_GetCaption |
0x000000000000ceff SDL_WM_GrabInput |
0x000000000000cfb1 SDL_WM_IconifyWindow |
0x000000000000cfd4 SDL_WM_ToggleFullScreen |
0x000000000000d076 SDL_GetWMInfo |
0x000000000000d0a0 SDL_VideoModeOK |
0x000000000000d177 SDL_WM_SetIcon |
0x000000000000d3aa SDL_WM_SetCaption |
0x000000000000d47e SDL_GL_GetAttribute |
0x000000000000d4bb SDL_GL_SetAttribute |
0x000000000000d54f SDL_GL_GetProcAddress |
0x000000000000d592 SDL_GL_LoadLibrary |
0x000000000000d5c7 SDL_VideoQuit |
0x000000000000d723 SDL_UpdateRects |
0x000000000000d8ed SDL_UpdateRect |
0x000000000000daa2 SDL_SetPalette |
0x000000000000dc0e SDL_SetColors |
0x000000000000dc29 SDL_Flip |
0x000000000000dd00 SDL_DisplayFormat |
0x000000000000dd4b SDL_DisplayFormatAlpha |
0x000000000000de23 SDL_SetVideoMode |
0x000000000000e492 SDL_VideoDriverName |
0x000000000000e4c8 SDL_VideoInit |
*fill* 0x000000000000e726 0x2 00 |
.text 0x000000000000e728 0x6bc /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_menuetvideo.o) |
0x000000000000e728 get_skinh |
0x000000000000e754 MenuetOS_SetColors |
0x000000000000e75b MenuetOS_VideoQuit |
0x000000000000e787 MenuetOS_FinalQuit |
0x000000000000e78c MenuetOS_SetCaption |
0x000000000000e7fc KolibriOS_FreeWMCursor |
0x000000000000e812 KolibriOS_CheckMouseMode |
0x000000000000ea27 KolibriOS_ShowWMCursor |
0x000000000000eaab KolibriOS_CreateWMCursor |
0x000000000000ec48 MenuetOS_SDL_RepaintWnd |
0x000000000000ecdc MenuetOS_SetVideoMode |
.text 0x000000000000ede4 0x1a8 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL.o) |
0x000000000000ede4 SDL_WasInit |
0x000000000000edfa SDL_Linked_Version |
0x000000000000ee04 SDL_QuitSubSystem |
0x000000000000ee57 SDL_Quit |
0x000000000000ee70 SDL_InitSubSystem |
0x000000000000ef52 SDL_Init |
.text 0x000000000000ef8c 0x4d4 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_error.o) |
0x000000000000ef8c SDL_ClearError |
0x000000000000ef9b SDL_GetErrorMsgUNICODE |
0x000000000000f229 SDL_GetErrorMsg |
0x000000000000f290 SDL_GetError |
0x000000000000f2a7 SDL_printf |
0x000000000000f303 SDL_SetError |
0x000000000000f413 SDL_Error |
.text 0x000000000000f460 0x28 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_fatal.o) |
0x000000000000f460 SDL_InstallParachute |
0x000000000000f465 SDL_UninstallParachute |
0x000000000000f46a SDL_printf_error |
.text 0x000000000000f488 0x179 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_getenv.o) |
0x000000000000f488 SDL_getenv |
0x000000000000f4fa SDL_putenv |
*fill* 0x000000000000f601 0x3 00 |
.text 0x000000000000f604 0xad6 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_kolibri_audio.o) |
0x000000000000f604 SDL_AudioQuit |
0x000000000000f609 SDL_PauseAudio |
0x000000000000f64b SDL_LockAudio |
0x000000000000f67d SDL_UnlockAudio |
0x000000000000f68c SDL_CloseAudio |
0x000000000000f6e8 SDL_OpenAudio |
0x0000000000010054 SDL_AudioDriverName |
0x0000000000010084 SDL_AudioInit |
*fill* 0x00000000000100da 0x6 00 |
.text 0x00000000000100e0 0xbf /home/sourcerer/kos_src/me//lib/libSDL.a(init.o) |
0x00000000000100e0 InitSound |
0x0000000000010144 CreateBuffer |
0x0000000000010174 DestroyBuffer |
*fill* 0x000000000001019f 0x1 00 |
.text 0x00000000000101a0 0x57 /home/sourcerer/kos_src/me//lib/libSDL.a(setbuf.o) |
0x00000000000101a0 SetBuffer |
0x00000000000101cc PlayBuffer |
*fill* 0x00000000000101f7 0x9 00 |
.text 0x0000000000010200 0x2b /home/sourcerer/kos_src/me//lib/libSDL.a(stopbuf.o) |
0x0000000000010200 StopBuffer |
*fill* 0x000000000001022b 0x5 00 |
.text 0x0000000000010230 0x2e /home/sourcerer/kos_src/me//lib/libSDL.a(sndgetsize.o) |
0x0000000000010230 GetBufferSize |
*fill* 0x000000000001025e 0x2 00 |
.text 0x0000000000010260 0x99 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_sysmutex.o) |
0x0000000000010260 SDL_mutexP |
0x0000000000010267 SDL_mutexV |
0x000000000001026e SDL_DestroyMutex |
0x00000000000102a0 SDL_CreateMutex |
*fill* 0x00000000000102f9 0x3 00 |
.text 0x00000000000102fc 0x74 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_syssem.o) |
0x00000000000102fc SDL_DestroySemaphore |
0x0000000000010301 SDL_SemValue |
0x0000000000010308 SDL_SemPost |
0x000000000001031d SDL_SemWait |
0x0000000000010332 SDL_SemWaitTimeout |
0x0000000000010347 SDL_SemTryWait |
0x000000000001035c SDL_CreateSemaphore |
.text 0x0000000000010370 0x2b /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_systhread.o) |
0x0000000000010370 SDL_SYS_SetupThread |
0x0000000000010375 SDL_ThreadID |
0x000000000001037c SDL_SYS_WaitThread |
0x0000000000010381 SDL_SYS_KillThread |
0x0000000000010386 SDL_SYS_CreateThread |
*fill* 0x000000000001039b 0x1 00 |
.text 0x000000000001039c 0x39a /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_thread.o) |
0x000000000001039c SDL_GetThreadID |
0x0000000000010422 SDL_WaitThread |
0x0000000000010462 SDL_KillThread |
0x000000000001048b SDL_GetErrBuf |
0x00000000000104f6 SDL_RunThread |
0x000000000001053d SDL_ThreadsQuit |
0x0000000000010564 SDL_ThreadsInit |
0x000000000001058f SDL_CreateThread |
*fill* 0x0000000000010736 0x2 00 |
.text 0x0000000000010738 0xbf /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_active.o) |
0x0000000000010738 SDL_AppActiveInit |
0x0000000000010746 SDL_GetAppState |
0x0000000000010750 SDL_PrivateAppActive |
*fill* 0x00000000000107f7 0x1 00 |
.text 0x00000000000107f8 0xb9 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_resize.o) |
0x00000000000107f8 SDL_PrivateResize |
*fill* 0x00000000000108b1 0x3 00 |
.text 0x00000000000108b4 0x524 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_blit.o) |
0x0000000000010a23 SDL_CalculateBlit |
.text 0x0000000000010dd8 0x4fa8 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_blit_N.o) |
0x0000000000015c0c SDL_CalculateBlitN |
.text 0x0000000000015d80 0x2e4 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_menuetevents.o) |
0x0000000000015d80 MenuetOS_InitOSKeymap |
0x0000000000015d98 kol_event_wait_time |
0x0000000000015da9 MenuetOS_PumpEvents |
.text 0x0000000000016064 0xa1f /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_blit_0.o) |
0x000000000001697f SDL_CalculateBlit0 |
*fill* 0x0000000000016a83 0x1 00 |
.text 0x0000000000016a84 0x1f10 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_blit_1.o) |
0x0000000000018939 SDL_CalculateBlit1 |
.text 0x0000000000018994 0x44a5 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_blit_A.o) |
0x000000000001ccd0 SDL_CalculateAlphaBlit |
*fill* 0x000000000001ce39 0x3 00 |
.text 0x000000000001ce3c 0x8 /home/sourcerer/kos_src/me//lib/libc.a(dup.o) |
0x000000000001ce3c dup |
.text 0x000000000001ce44 0x123 /home/sourcerer/kos_src/me//lib/libc.a(fdopen.o) |
0x000000000001ce44 fdopen |
*fill* 0x000000000001cf67 0x1 00 |
.text 0x000000000001cf68 0x43 /home/sourcerer/kos_src/me//lib/libc.a(window.o) |
0x000000000001cf68 __menuet__define_window |
0x000000000001cf9a __menuet__window_redraw |
*fill* 0x000000000001cfab 0x1 00 |
.text 0x000000000001cfac 0x0 /home/sourcerer/kos_src/me//lib/libc.a(param.o) |
.text 0x000000000001cfac 0x17 /home/sourcerer/kos_src/me//lib/libc.a(keyb.o) |
0x000000000001cfac __menuet__getkey |
*fill* 0x000000000001cfc3 0x1 00 |
.text 0x000000000001cfc4 0x2b /home/sourcerer/kos_src/me//lib/libc.a(image.o) |
0x000000000001cfc4 __menuet__putimage |
*fill* 0x000000000001cfef 0x1 00 |
.text 0x000000000001cff0 0xa /home/sourcerer/kos_src/me//lib/libc.a(exit.o) |
0x000000000001cff0 __menuet__sys_exit |
*fill* 0x000000000001cffa 0x2 00 |
.text 0x000000000001cffc 0x29 /home/sourcerer/kos_src/me//lib/libc.a(event.o) |
0x000000000001cffc __menuet__wait_for_event |
0x000000000001d008 __menuet__check_for_event |
0x000000000001d014 __menuet__set_bitfield_for_wanted_events |
*fill* 0x000000000001d025 0x3 00 |
.text 0x000000000001d028 0x24 /home/sourcerer/kos_src/me//lib/libc.a(delay.o) |
0x000000000001d028 __menuet__delay100 |
0x000000000001d039 __menuet(int, double, long,...) |
.text 0x000000000001d04c 0x48 /home/sourcerer/kos_src/me//lib/libc.a(button.o) |
0x000000000001d04c __menuet__make_button |
0x000000000001d07c __menuet__get_button_id |
.text 0x000000000001d094 0x7 /home/sourcerer/kos_src/me//lib/libc.a(setmode.o) |
0x000000000001d094 __setmode |
*fill* 0x000000000001d09b 0x1 00 |
.text 0x000000000001d09c 0x0 /home/sourcerer/kos_src/me//lib/libc.a(fmode.o) |
.text 0x000000000001d09c 0x43 /home/sourcerer/kos_src/me//lib/libc.a(crt1.o) |
0x000000000001d09c __crt1_startup |
*fill* 0x000000000001d0df 0x1 00 |
.text 0x000000000001d0e0 0x148 /home/sourcerer/kos_src/me//lib/libc.a(crt0.o) |
0x000000000001d0e0 _exit |
0x000000000001d16b __crt0_setup_arguments |
.text 0x000000000001d228 0x163 /home/sourcerer/kos_src/me//lib/libc.a(brk.o) |
0x000000000001d228 init_brk |
0x000000000001d27c sbrk |
*fill* 0x000000000001d38b 0x1 00 |
.text 0x000000000001d38c 0x3e /home/sourcerer/kos_src/me//lib/libc.a(strdup.o) |
0x000000000001d38c strdup |
*fill* 0x000000000001d3ca 0x2 00 |
.text 0x000000000001d3cc 0x3d /home/sourcerer/kos_src/me//lib/libc.a(memset.o) |
0x000000000001d3cc memset |
*fill* 0x000000000001d409 0x3 00 |
.text 0x000000000001d40c 0x26 /home/sourcerer/kos_src/me//lib/libc.a(memmove.o) |
0x000000000001d40c memmove |
*fill* 0x000000000001d432 0x2 00 |
.text 0x000000000001d434 0x21 /home/sourcerer/kos_src/me//lib/libc.a(strncpy.o) |
0x000000000001d434 strncpy |
*fill* 0x000000000001d455 0x3 00 |
.text 0x000000000001d458 0x25 /home/sourcerer/kos_src/me//lib/libc.a(strncmp.o) |
0x000000000001d458 strncmp |
*fill* 0x000000000001d47d 0x3 00 |
.text 0x000000000001d480 0x16 /home/sourcerer/kos_src/me//lib/libc.a(strlen.o) |
0x000000000001d480 strlen |
*fill* 0x000000000001d496 0x2 00 |
.text 0x000000000001d498 0x19 /home/sourcerer/kos_src/me//lib/libc.a(strcpy.o) |
0x000000000001d498 strcpy |
*fill* 0x000000000001d4b1 0x3 00 |
.text 0x000000000001d4b4 0x1f /home/sourcerer/kos_src/me//lib/libc.a(strcmp.o) |
0x000000000001d4b4 strcmp |
*fill* 0x000000000001d4d3 0x1 00 |
.text 0x000000000001d4d4 0x2b /home/sourcerer/kos_src/me//lib/libc.a(memcpy.o) |
0x000000000001d4d4 memcpy |
*fill* 0x000000000001d4ff 0x1 00 |
.text 0x000000000001d500 0x35 /home/sourcerer/kos_src/me//lib/libc.a(memcmp.o) |
0x000000000001d500 memcmp |
*fill* 0x000000000001d535 0x3 00 |
.text 0x000000000001d538 0x373 /home/sourcerer/kos_src/me//lib/libc.a(malloc.o) |
0x000000000001d538 free |
0x000000000001d677 malloc |
0x000000000001d849 realloc |
*fill* 0x000000000001d8ab 0x1 00 |
.text 0x000000000001d8ac 0x23 /home/sourcerer/kos_src/me//lib/libc.a(exit.o) |
0x000000000001d8ac exit |
*fill* 0x000000000001d8cf 0x1 00 |
.text 0x000000000001d8d0 0x34 /home/sourcerer/kos_src/me//lib/libc.a(calloc.o) |
0x000000000001d8d0 calloc |
.text 0x000000000001d904 0xd /home/sourcerer/kos_src/me//lib/libc.a(abs.o) |
0x000000000001d904 abs |
*fill* 0x000000000001d911 0x3 00 |
.text 0x000000000001d914 0x31 /home/sourcerer/kos_src/me//lib/libc.a(vsprintf.o) |
0x000000000001d914 vsprintf |
*fill* 0x000000000001d945 0x3 00 |
.text 0x000000000001d948 0x4 /home/sourcerer/kos_src/me//lib/libc.a(stderr.o) |
.text 0x000000000001d94c 0x32 /home/sourcerer/kos_src/me//lib/libc.a(sprintf.o) |
0x000000000001d94c sprintf |
*fill* 0x000000000001d97e 0x2 00 |
.text 0x000000000001d980 0x82 /home/sourcerer/kos_src/me//lib/libc.a(fprintf.o) |
0x000000000001d980 fprintf |
*fill* 0x000000000001da02 0x2 00 |
.text 0x000000000001da04 0xad /home/sourcerer/kos_src/me//lib/libc.a(fflush.o) |
0x000000000001da04 fflush |
*fill* 0x000000000001dab1 0x3 00 |
.text 0x000000000001dab4 0xb4 /home/sourcerer/kos_src/me//lib/libc.a(fclose.o) |
0x000000000001dab4 fclose |
.text 0x000000000001db68 0x1517 /home/sourcerer/kos_src/me//lib/libc.a(doprnt.o) |
0x000000000001dd51 _doprnt |
*fill* 0x000000000001f07f 0x1 00 |
.text 0x000000000001f080 0x9a /home/sourcerer/kos_src/me//lib/libc.a(allocfil.o) |
0x000000000001f084 __alloc_file |
*fill* 0x000000000001f11a 0x2 00 |
.text 0x000000000001f11c 0x2c /home/sourcerer/kos_src/me//lib/libc.a(modfl.o) |
0x000000000001f11c __modfl |
.text 0x000000000001f148 0xa /home/sourcerer/kos_src/me//lib/libc.a(lconv.o) |
0x000000000001f148 localeconv |
*fill* 0x000000000001f152 0x2 00 |
.text 0x000000000001f154 0xa /home/sourcerer/kos_src/me//lib/libc.a(errno.o) |
0x000000000001f154 __isatty |
*fill* 0x000000000001f15e 0x2 00 |
.text 0x000000000001f160 0x0 /home/sourcerer/kos_src/me//lib/libc.a(ct_flags.o) |
.text 0x000000000001f160 0x8b /home/sourcerer/kos_src/me//lib/libc.a(debug.o) |
0x000000000001f160 __libclog_vprintf |
0x000000000001f1c5 __libclog_printf |
*fill* 0x000000000001f1eb 0x1 00 |
.text 0x000000000001f1ec 0xc /home/sourcerer/kos_src/me//lib/libc.a(write.o) |
0x000000000001f1ec write |
.text 0x000000000001f1f8 0xc /home/sourcerer/kos_src/me//lib/libc.a(lseek.o) |
0x000000000001f1f8 lseek |
.text 0x000000000001f204 0xc /home/sourcerer/kos_src/me//lib/libc.a(close.o) |
0x000000000001f204 close |
.text 0x000000000001f210 0x70 /home/sourcerer/kos_src/me//lib/libc.a(emu_init.o) |
0x000000000001f210 dosemu_inithandles |
0x000000000001f255 init_dir_stack |
.text 0x000000000001f280 0x5b3 /home/sourcerer/kos_src/me//lib/libc.a(dosemu.o) |
0x000000000001f280 dosemu_file_exists |
0x000000000001f2cf dosemu_createtrunc |
0x000000000001f31a dosemu_getiostruct |
0x000000000001f33f dosemu_allochandle |
0x000000000001f35f dosemu_freehandle |
0x000000000001f37b dosemu_fileread |
0x000000000001f3d2 dosemu_filewrite |
0x000000000001f434 dosemu_iosize |
0x000000000001f465 dosemu_filesize |
0x000000000001f4b4 dosemu_tell |
0x000000000001f4df dosemu_lseek |
0x000000000001f53d dosemu_read |
0x000000000001f5b6 dosemu_write |
0x000000000001f5eb dosemu_close |
0x000000000001f622 _dosemu_flush |
0x000000000001f627 dosemu_truncate |
0x000000000001f6b1 dosemu_open |
*fill* 0x000000000001f833 0x1 00 |
.text 0x000000000001f834 0x39 /home/sourcerer/kos_src/me//lib/libc.a(_main.o) |
0x000000000001f834 __main |
*fill* 0x000000000001f86d 0x3 00 |
.text 0x000000000001f870 0x24 /home/sourcerer/kos_src/me//lib/libc.a(strrchr.o) |
0x000000000001f870 strrchr |
.text 0x000000000001f894 0x22 /home/sourcerer/kos_src/me//lib/libc.a(memchr.o) |
0x000000000001f894 memchr |
*fill* 0x000000000001f8b6 0x2 00 |
.text 0x000000000001f8b8 0x3f /home/sourcerer/kos_src/me//lib/libc.a(stdiohk.o) |
0x000000000001f8b8 __stdio_cleanup_proc |
*fill* 0x000000000001f8f7 0x1 00 |
.text 0x000000000001f8f8 0x87 /home/sourcerer/kos_src/me//lib/libc.a(remove.o) |
0x000000000001f8f8 remove |
*fill* 0x000000000001f97f 0x1 00 |
.text 0x000000000001f980 0xc /home/sourcerer/kos_src/me//lib/libc.a(putc.o) |
0x000000000001f980 putc |
.text 0x000000000001f98c 0x3f /home/sourcerer/kos_src/me//lib/libc.a(fwalk.o) |
0x000000000001f98c _fwalk |
*fill* 0x000000000001f9cb 0x1 00 |
.text 0x000000000001f9cc 0x0 /home/sourcerer/kos_src/me//lib/libc.a(frlist.o) |
.text 0x000000000001f9cc 0xb7 /home/sourcerer/kos_src/me//lib/libc.a(fputc.o) |
0x000000000001f9cc fputc |
*fill* 0x000000000001fa83 0x1 00 |
.text 0x000000000001fa84 0x148 /home/sourcerer/kos_src/me//lib/libc.a(flsbuf.o) |
0x000000000001fa84 _flsbuf |
.text 0x000000000001fbcc 0x0 /home/sourcerer/kos_src/me//lib/libc.a(hooks.o) |
.text 0x000000000001fbcc 0x66 /home/sourcerer/kos_src/me//lib/libc.a(fixpath.o) |
0x000000000001fbcc fix_slashes |
0x000000000001fc0e _fixpath |
*fill* 0x000000000001fc32 0x2 00 |
.text 0x000000000001fc34 0x22 /home/sourcerer/kos_src/me//lib/libc.a(systree.o) |
0x000000000001fc34 __kolibri__system_tree_access |
0x000000000001fc45 __kolibri__system_tree_access2 |
*fill* 0x000000000001fc56 0x2 00 |
.text 0x000000000001fc58 0x14 /home/sourcerer/kos_src/me//lib/libc.a(dosio.o) |
0x000000000001fc58 __file_handle_set |
.text 0x000000000001fc6c 0xe9 /home/sourcerer/kos_src/me//lib/libc.a(curdir.o) |
0x000000000001fc6c __get_curdir |
0x000000000001fd18 __libc_combine_path |
0x000000000001fd41 __chdir |
*fill* 0x000000000001fd55 0x3 00 |
.text 0x000000000001fd58 0x4 /home/sourcerer/kos_src/me//lib/libc.a(stdout.o) |
.text 0x000000000001fd5c 0x4 /home/sourcerer/kos_src/me//lib/libc.a(stdin.o) |
*(.fixup) |
*(.gnu.warning) |
*(.gnu.linkonce.t*) |
*(.const) |
*(.ro*) |
.rodata.str1.1 |
0x000000000001fd60 0x7a polygon.o |
*fill* 0x000000000001fdda 0x6 00 |
.rodata.cst8 0x000000000001fde0 0x8 polygon.o |
.rodata.str1.1 |
0x000000000001fde8 0x2f /home/sourcerer/kos_src/me//lib/libnsfb.a(dump.o) |
0x31 (size before relaxing) |
*fill* 0x000000000001fe17 0x1 00 |
.rodata 0x000000000001fe18 0x50 /home/sourcerer/kos_src/me//lib/libnsfb.a(16bpp.o) |
0x000000000001fe18 _nsfb_16bpp_plotters |
.rodata 0x000000000001fe68 0x50 /home/sourcerer/kos_src/me//lib/libnsfb.a(32bpp-xbgr8888.o) |
0x000000000001fe68 _nsfb_32bpp_xbgr8888_plotters |
.rodata 0x000000000001feb8 0x50 /home/sourcerer/kos_src/me//lib/libnsfb.a(32bpp-xrgb8888.o) |
0x000000000001feb8 _nsfb_32bpp_xrgb8888_plotters |
.rodata 0x000000000001ff08 0x50 /home/sourcerer/kos_src/me//lib/libnsfb.a(8bpp.o) |
0x000000000001ff08 _nsfb_8bpp_plotters |
.rodata 0x000000000001ff58 0x20 /home/sourcerer/kos_src/me//lib/libnsfb.a(generic.o) |
.rodata.cst4 0x000000000001ff78 0x10 /home/sourcerer/kos_src/me//lib/libnsfb.a(generic.o) |
.rodata.str1.1 |
0x000000000001ff88 0x5 /home/sourcerer/kos_src/me//lib/libnsfb.a(able.o) |
*fill* 0x000000000001ff8d 0x3 00 |
.rodata 0x000000000001ff90 0x24 /home/sourcerer/kos_src/me//lib/libnsfb.a(able.o) |
0x000000000001ff90 able_rtns |
.rodata.str1.1 |
0x000000000001ffb4 0x6 /home/sourcerer/kos_src/me//lib/libnsfb.a(linux.o) |
*fill* 0x000000000001ffba 0x2 00 |
.rodata 0x000000000001ffbc 0x24 /home/sourcerer/kos_src/me//lib/libnsfb.a(linux.o) |
0x000000000001ffbc linux_rtns |
.rodata.str1.1 |
0x000000000001ffe0 0x4 /home/sourcerer/kos_src/me//lib/libnsfb.a(ram.o) |
.rodata 0x000000000001ffe4 0x24 /home/sourcerer/kos_src/me//lib/libnsfb.a(ram.o) |
0x000000000001ffe4 ram_rtns |
.rodata.str1.1 |
0x0000000000020008 0x31 /home/sourcerer/kos_src/me//lib/libnsfb.a(sdl.o) |
0x35 (size before relaxing) |
*fill* 0x0000000000020039 0x3 00 |
.rodata 0x000000000002003c 0x24 /home/sourcerer/kos_src/me//lib/libnsfb.a(sdl.o) |
0x000000000002003c sdl_rtns |
.rodata.str1.1 |
0x0000000000020060 0x9e /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_timer.o) |
.rodata.str1.1 |
0x00000000000200fe 0x1a /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_events.o) |
.rodata.str1.1 |
0x0000000000020118 0x567 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_keyboard.o) |
0x5b3 (size before relaxing) |
*fill* 0x000000000002067f 0x1 00 |
.rodata 0x0000000000020680 0x70 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_keyboard.o) |
.rodata.str1.1 |
0x00000000000206f0 0x2a /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_cursor.o) |
*fill* 0x000000000002071a 0x2 00 |
.rodata 0x000000000002071c 0x10 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_RLEaccel.o) |
.rodata.str1.1 |
0x000000000002072c 0x67 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_surface.o) |
.rodata.str1.1 |
0x0000000000020793 0x19d /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_video.o) |
.rodata 0x0000000000020930 0x38 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_video.o) |
.rodata.str1.1 |
0x0000000000020968 0x20 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_menuetvideo.o) |
.rodata.str1.1 |
0x0000000000020988 0x65 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL.o) |
.rodata.str1.1 |
0x00000000000209ed 0x8e /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_error.o) |
0x91 (size before relaxing) |
.rodata.str1.1 |
0x0000000000020a7b 0x192 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_kolibri_audio.o) |
.rodata.str1.1 |
0x0000000000020c0d 0x27 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_syssem.o) |
.rodata.str1.1 |
0x0000000000020c34 0x2b /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_systhread.o) |
.rodata.str1.1 |
0x0000000000020c5f 0x1f /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_blit.o) |
*fill* 0x0000000000020c7e 0x2 00 |
.rodata 0x0000000000020c80 0x2350 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_blit_N.o) |
.rodata 0x0000000000022fd0 0x600 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_menuetevents.o) |
.rodata 0x00000000000235d0 0x28 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_blit_0.o) |
.rodata 0x00000000000235f8 0x140 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_blit_1.o) |
.rodata 0x0000000000023738 0x1c /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_blit_A.o) |
.rodata.str1.1 |
0x0000000000023754 0x2a /home/sourcerer/kos_src/me//lib/libc.a(doprnt.o) |
*fill* 0x000000000002377e 0x2 00 |
.rodata 0x0000000000023780 0x13c /home/sourcerer/kos_src/me//lib/libc.a(doprnt.o) |
.rodata.cst4 0x00000000000238bc 0x10 /home/sourcerer/kos_src/me//lib/libc.a(doprnt.o) |
0x14 (size before relaxing) |
*fill* 0x00000000000238cc 0x4 00 |
.rodata.cst16 0x00000000000238d0 0x20 /home/sourcerer/kos_src/me//lib/libc.a(doprnt.o) |
.rodata.cst8 0x00000000000238f0 0x8 /home/sourcerer/kos_src/me//lib/libc.a(doprnt.o) |
*(.gnu.linkonce.r*) |
0x00000000000238f8 ecode = . |
0x00000000000238f8 _ecode = . |
.iplt 0x0000000000023900 0x0 |
.iplt 0x0000000000000000 0x0 /home/sourcerer/kos_src/me//stub/crt0.o |
.text.startup 0x00000000000238f8 0x318 |
.text.startup 0x00000000000238f8 0x2a8 polygon.o |
0x00000000000238f8 main |
.text.startup 0x0000000000023ba0 0x1c /home/sourcerer/kos_src/me//lib/libnsfb.a(able.o) |
.text.startup 0x0000000000023bbc 0x1c /home/sourcerer/kos_src/me//lib/libnsfb.a(linux.o) |
.text.startup 0x0000000000023bd8 0x1c /home/sourcerer/kos_src/me//lib/libnsfb.a(ram.o) |
.text.startup 0x0000000000023bf4 0x1c /home/sourcerer/kos_src/me//lib/libnsfb.a(sdl.o) |
.rel.dyn 0x0000000000023c10 0x0 |
.rel.iplt 0x0000000000000000 0x0 /home/sourcerer/kos_src/me//stub/crt0.o |
.rel.text 0x0000000000000000 0x0 /home/sourcerer/kos_src/me//stub/crt0.o |
.rel.text.startup |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//stub/crt0.o |
.rel.rodata 0x0000000000000000 0x0 /home/sourcerer/kos_src/me//stub/crt0.o |
.rel.data 0x0000000000000000 0x0 /home/sourcerer/kos_src/me//stub/crt0.o |
.rdata |
.data 0x0000000000023c10 0x201c |
0x0000000000023c10 djgpp_first_ctor = . |
*(.ctor) |
*(.ctors) |
0x0000000000023c10 djgpp_last_ctor = . |
0x0000000000023c10 djgpp_first_dtor = . |
*(.dtor) |
*(.dtors) |
0x0000000000023c10 djgpp_last_dtor = . |
*(.gcc_exc*) |
0x0000000000023c10 __EH_FRAME_BEGIN__ = . |
*(.eh_fram*) |
.eh_frame 0x0000000000023c10 0x5c polygon.o |
.eh_frame 0x0000000000023c6c 0x120 /home/sourcerer/kos_src/me//lib/libnsfb.a(cursor.o) |
0x138 (size before relaxing) |
.eh_frame 0x0000000000023d8c 0x2c /home/sourcerer/kos_src/me//lib/libnsfb.a(dump.o) |
0x44 (size before relaxing) |
.eh_frame 0x0000000000023db8 0x170 /home/sourcerer/kos_src/me//lib/libnsfb.a(libnsfb.o) |
0x188 (size before relaxing) |
.eh_frame 0x0000000000023f28 0xc4 /home/sourcerer/kos_src/me//lib/libnsfb.a(palette.o) |
0xdc (size before relaxing) |
.eh_frame 0x0000000000023fec 0x1b0 /home/sourcerer/kos_src/me//lib/libnsfb.a(16bpp.o) |
0x1c8 (size before relaxing) |
.eh_frame 0x000000000002419c 0x16c /home/sourcerer/kos_src/me//lib/libnsfb.a(32bpp-xbgr8888.o) |
0x184 (size before relaxing) |
.eh_frame 0x0000000000024308 0x1ac /home/sourcerer/kos_src/me//lib/libnsfb.a(32bpp-xrgb8888.o) |
0x1c4 (size before relaxing) |
.eh_frame 0x00000000000244b4 0x1cc /home/sourcerer/kos_src/me//lib/libnsfb.a(8bpp.o) |
0x1e4 (size before relaxing) |
.eh_frame 0x0000000000024680 0x2bc /home/sourcerer/kos_src/me//lib/libnsfb.a(api.o) |
0x2d4 (size before relaxing) |
.eh_frame 0x000000000002493c 0x3d4 /home/sourcerer/kos_src/me//lib/libnsfb.a(generic.o) |
0x3ec (size before relaxing) |
.eh_frame 0x0000000000024d10 0xec /home/sourcerer/kos_src/me//lib/libnsfb.a(util.o) |
0x104 (size before relaxing) |
.eh_frame 0x0000000000024dfc 0xa0 /home/sourcerer/kos_src/me//lib/libnsfb.a(able.o) |
0xb8 (size before relaxing) |
.eh_frame 0x0000000000024e9c 0x100 /home/sourcerer/kos_src/me//lib/libnsfb.a(linux.o) |
0x118 (size before relaxing) |
.eh_frame 0x0000000000024f9c 0xd8 /home/sourcerer/kos_src/me//lib/libnsfb.a(ram.o) |
0xf0 (size before relaxing) |
.eh_frame 0x0000000000025074 0x1b0 /home/sourcerer/kos_src/me//lib/libnsfb.a(sdl.o) |
0x1c8 (size before relaxing) |
.eh_frame 0x0000000000025224 0x118 /home/sourcerer/kos_src/me//lib/libnsfb.a(surface.o) |
0x130 (size before relaxing) |
0x000000000002533c __EH_FRAME_END__ = . |
0x000000000002533c 0x4 LONG 0x0 |
*(.gnu.linkonce.d*) |
*(.rodata) |
*(.rodata.*) |
*(.data) |
.data 0x0000000000025340 0x0 polygon.o |
.data 0x0000000000025340 0x0 /home/sourcerer/kos_src/me//lib/libm.a(s_cos.o) |
.data 0x0000000000025340 0x0 /home/sourcerer/kos_src/me//lib/libm.a(s_sin.o) |
.data 0x0000000000025340 0x0 /home/sourcerer/kos_src/me//lib/libnsfb.a(cursor.o) |
.data 0x0000000000025340 0x0 /home/sourcerer/kos_src/me//lib/libnsfb.a(dump.o) |
.data 0x0000000000025340 0x0 /home/sourcerer/kos_src/me//lib/libnsfb.a(libnsfb.o) |
.data 0x0000000000025340 0x0 /home/sourcerer/kos_src/me//lib/libnsfb.a(palette.o) |
.data 0x0000000000025340 0x0 /home/sourcerer/kos_src/me//lib/libnsfb.a(16bpp.o) |
.data 0x0000000000025340 0x0 /home/sourcerer/kos_src/me//lib/libnsfb.a(32bpp-xbgr8888.o) |
.data 0x0000000000025340 0x0 /home/sourcerer/kos_src/me//lib/libnsfb.a(32bpp-xrgb8888.o) |
.data 0x0000000000025340 0x0 /home/sourcerer/kos_src/me//lib/libnsfb.a(8bpp.o) |
.data 0x0000000000025340 0x0 /home/sourcerer/kos_src/me//lib/libnsfb.a(api.o) |
.data 0x0000000000025340 0x0 /home/sourcerer/kos_src/me//lib/libnsfb.a(generic.o) |
.data 0x0000000000025340 0x0 /home/sourcerer/kos_src/me//lib/libnsfb.a(util.o) |
.data 0x0000000000025340 0x0 /home/sourcerer/kos_src/me//lib/libnsfb.a(able.o) |
.data 0x0000000000025340 0x0 /home/sourcerer/kos_src/me//lib/libnsfb.a(linux.o) |
.data 0x0000000000025340 0x0 /home/sourcerer/kos_src/me//lib/libnsfb.a(ram.o) |
.data 0x0000000000025340 0x50c /home/sourcerer/kos_src/me//lib/libnsfb.a(sdl.o) |
0x0000000000025340 sdl_nsfb_map |
.data 0x000000000002584c 0x0 /home/sourcerer/kos_src/me//lib/libnsfb.a(surface.o) |
.data 0x000000000002584c 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_timer.o) |
.data 0x000000000002584c 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_systimer.o) |
.data 0x000000000002584c 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_events.o) |
.data 0x000000000002584c 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_keyboard.o) |
.data 0x000000000002584c 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_mouse.o) |
.data 0x000000000002584c 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_quit.o) |
.data 0x000000000002584c 0x44 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_cursor.o) |
.data 0x0000000000025890 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_pixels.o) |
.data 0x0000000000025890 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_RLEaccel.o) |
.data 0x0000000000025890 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_surface.o) |
.data 0x0000000000025890 0x20 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_video.o) |
.data 0x00000000000258b0 0x24 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_menuetvideo.o) |
0x00000000000258b0 def_title |
0x00000000000258c4 mosvideo_bootstrab |
.data 0x00000000000258d4 0x3 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL.o) |
*fill* 0x00000000000258d7 0x1 00 |
.data 0x00000000000258d8 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_error.o) |
.data 0x00000000000258d8 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_fatal.o) |
.data 0x00000000000258d8 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_getenv.o) |
.data 0x00000000000258d8 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_kolibri_audio.o) |
*fill* 0x00000000000258d8 0x8 00 |
.data 0x00000000000258e0 0x17 /home/sourcerer/kos_src/me//lib/libSDL.a(init.o) |
0x00000000000258e0 hSound |
0x00000000000258e4 hrdwSound |
*fill* 0x00000000000258f7 0x1 00 |
.data 0x00000000000258f8 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_sysmutex.o) |
.data 0x00000000000258f8 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_syssem.o) |
.data 0x00000000000258f8 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_systhread.o) |
.data 0x00000000000258f8 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_thread.o) |
.data 0x00000000000258f8 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_active.o) |
.data 0x00000000000258f8 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_resize.o) |
.data 0x00000000000258f8 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_blit.o) |
.data 0x00000000000258f8 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_blit_N.o) |
.data 0x00000000000258f8 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_menuetevents.o) |
.data 0x00000000000258f8 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_blit_0.o) |
.data 0x00000000000258f8 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_blit_1.o) |
.data 0x00000000000258f8 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_blit_A.o) |
.data 0x00000000000258f8 0x0 /home/sourcerer/kos_src/me//lib/libc.a(dup.o) |
.data 0x00000000000258f8 0x0 /home/sourcerer/kos_src/me//lib/libc.a(fdopen.o) |
.data 0x00000000000258f8 0x0 /home/sourcerer/kos_src/me//lib/libc.a(window.o) |
.data 0x00000000000258f8 0x0 /home/sourcerer/kos_src/me//lib/libc.a(param.o) |
.data 0x00000000000258f8 0x0 /home/sourcerer/kos_src/me//lib/libc.a(keyb.o) |
.data 0x00000000000258f8 0x0 /home/sourcerer/kos_src/me//lib/libc.a(image.o) |
.data 0x00000000000258f8 0x0 /home/sourcerer/kos_src/me//lib/libc.a(exit.o) |
.data 0x00000000000258f8 0x0 /home/sourcerer/kos_src/me//lib/libc.a(event.o) |
.data 0x00000000000258f8 0x0 /home/sourcerer/kos_src/me//lib/libc.a(delay.o) |
.data 0x00000000000258f8 0x0 /home/sourcerer/kos_src/me//lib/libc.a(button.o) |
.data 0x00000000000258f8 0x0 /home/sourcerer/kos_src/me//lib/libc.a(setmode.o) |
.data 0x00000000000258f8 0x4 /home/sourcerer/kos_src/me//lib/libc.a(fmode.o) |
0x00000000000258f8 _fmode |
.data 0x00000000000258fc 0x4 /home/sourcerer/kos_src/me//lib/libc.a(crt1.o) |
0x00000000000258fc __bss_count |
.data 0x0000000000025900 0x0 /home/sourcerer/kos_src/me//lib/libc.a(crt0.o) |
.data 0x0000000000025900 0x0 /home/sourcerer/kos_src/me//lib/libc.a(brk.o) |
.data 0x0000000000025900 0x0 /home/sourcerer/kos_src/me//lib/libc.a(strdup.o) |
.data 0x0000000000025900 0x0 /home/sourcerer/kos_src/me//lib/libc.a(memset.o) |
.data 0x0000000000025900 0x0 /home/sourcerer/kos_src/me//lib/libc.a(memmove.o) |
.data 0x0000000000025900 0x0 /home/sourcerer/kos_src/me//lib/libc.a(strncpy.o) |
.data 0x0000000000025900 0x0 /home/sourcerer/kos_src/me//lib/libc.a(strncmp.o) |
.data 0x0000000000025900 0x0 /home/sourcerer/kos_src/me//lib/libc.a(strlen.o) |
.data 0x0000000000025900 0x0 /home/sourcerer/kos_src/me//lib/libc.a(strcpy.o) |
.data 0x0000000000025900 0x0 /home/sourcerer/kos_src/me//lib/libc.a(strcmp.o) |
.data 0x0000000000025900 0x0 /home/sourcerer/kos_src/me//lib/libc.a(memcpy.o) |
.data 0x0000000000025900 0x0 /home/sourcerer/kos_src/me//lib/libc.a(memcmp.o) |
.data 0x0000000000025900 0x0 /home/sourcerer/kos_src/me//lib/libc.a(malloc.o) |
.data 0x0000000000025900 0x0 /home/sourcerer/kos_src/me//lib/libc.a(exit.o) |
.data 0x0000000000025900 0x0 /home/sourcerer/kos_src/me//lib/libc.a(calloc.o) |
.data 0x0000000000025900 0x0 /home/sourcerer/kos_src/me//lib/libc.a(abs.o) |
.data 0x0000000000025900 0x0 /home/sourcerer/kos_src/me//lib/libc.a(vsprintf.o) |
.data 0x0000000000025900 0x24 /home/sourcerer/kos_src/me//lib/libc.a(stderr.o) |
0x0000000000025900 __dj_stderr |
.data 0x0000000000025924 0x0 /home/sourcerer/kos_src/me//lib/libc.a(sprintf.o) |
.data 0x0000000000025924 0x0 /home/sourcerer/kos_src/me//lib/libc.a(fprintf.o) |
.data 0x0000000000025924 0x0 /home/sourcerer/kos_src/me//lib/libc.a(fflush.o) |
.data 0x0000000000025924 0x0 /home/sourcerer/kos_src/me//lib/libc.a(fclose.o) |
.data 0x0000000000025924 0xb /home/sourcerer/kos_src/me//lib/libc.a(doprnt.o) |
*fill* 0x000000000002592f 0x1 00 |
.data 0x0000000000025930 0x0 /home/sourcerer/kos_src/me//lib/libc.a(allocfil.o) |
.data 0x0000000000025930 0x0 /home/sourcerer/kos_src/me//lib/libc.a(modfl.o) |
.data 0x0000000000025930 0x33 /home/sourcerer/kos_src/me//lib/libc.a(lconv.o) |
*fill* 0x0000000000025963 0x1 00 |
.data 0x0000000000025964 0x0 /home/sourcerer/kos_src/me//lib/libc.a(errno.o) |
.data 0x0000000000025964 0x202 /home/sourcerer/kos_src/me//lib/libc.a(ct_flags.o) |
0x0000000000025964 __dj_ctype_flags |
*fill* 0x0000000000025b66 0x2 00 |
.data 0x0000000000025b68 0x0 /home/sourcerer/kos_src/me//lib/libc.a(debug.o) |
.data 0x0000000000025b68 0x0 /home/sourcerer/kos_src/me//lib/libc.a(write.o) |
.data 0x0000000000025b68 0x0 /home/sourcerer/kos_src/me//lib/libc.a(lseek.o) |
.data 0x0000000000025b68 0x0 /home/sourcerer/kos_src/me//lib/libc.a(close.o) |
.data 0x0000000000025b68 0x0 /home/sourcerer/kos_src/me//lib/libc.a(emu_init.o) |
.data 0x0000000000025b68 0x0 /home/sourcerer/kos_src/me//lib/libc.a(dosemu.o) |
.data 0x0000000000025b68 0x4 /home/sourcerer/kos_src/me//lib/libc.a(_main.o) |
.data 0x0000000000025b6c 0x0 /home/sourcerer/kos_src/me//lib/libc.a(strrchr.o) |
.data 0x0000000000025b6c 0x0 /home/sourcerer/kos_src/me//lib/libc.a(memchr.o) |
.data 0x0000000000025b6c 0x4 /home/sourcerer/kos_src/me//lib/libc.a(stdiohk.o) |
0x0000000000025b6c __stdio_cleanup_hook |
.data 0x0000000000025b70 0x0 /home/sourcerer/kos_src/me//lib/libc.a(remove.o) |
.data 0x0000000000025b70 0x0 /home/sourcerer/kos_src/me//lib/libc.a(putc.o) |
.data 0x0000000000025b70 0x0 /home/sourcerer/kos_src/me//lib/libc.a(fwalk.o) |
.data 0x0000000000025b70 0x5c /home/sourcerer/kos_src/me//lib/libc.a(frlist.o) |
0x0000000000025b70 __file_rec_list |
.data 0x0000000000025bcc 0x0 /home/sourcerer/kos_src/me//lib/libc.a(fputc.o) |
.data 0x0000000000025bcc 0x0 /home/sourcerer/kos_src/me//lib/libc.a(flsbuf.o) |
.data 0x0000000000025bcc 0x0 /home/sourcerer/kos_src/me//lib/libc.a(hooks.o) |
.data 0x0000000000025bcc 0x0 /home/sourcerer/kos_src/me//lib/libc.a(fixpath.o) |
.data 0x0000000000025bcc 0x0 /home/sourcerer/kos_src/me//lib/libc.a(systree.o) |
.data 0x0000000000025bcc 0x18 /home/sourcerer/kos_src/me//lib/libc.a(dosio.o) |
0x0000000000025bcc __file_handle_modes |
.data 0x0000000000025be4 0x0 /home/sourcerer/kos_src/me//lib/libc.a(curdir.o) |
.data 0x0000000000025be4 0x24 /home/sourcerer/kos_src/me//lib/libc.a(stdout.o) |
0x0000000000025be4 __dj_stdout |
.data 0x0000000000025c08 0x24 /home/sourcerer/kos_src/me//lib/libc.a(stdin.o) |
0x0000000000025c08 __dj_stdin |
0x0000000000025c2c edata = . |
0x0000000000025c2c _edata = . |
0x0000000000025c2c bss = . |
.igot.plt 0x0000000000025c2c 0x0 |
.igot.plt 0x0000000000000000 0x0 /home/sourcerer/kos_src/me//stub/crt0.o |
.init_array 0x0000000000025c2c 0x10 |
.init_array 0x0000000000025c2c 0x4 /home/sourcerer/kos_src/me//lib/libnsfb.a(able.o) |
.init_array 0x0000000000025c30 0x4 /home/sourcerer/kos_src/me//lib/libnsfb.a(linux.o) |
.init_array 0x0000000000025c34 0x4 /home/sourcerer/kos_src/me//lib/libnsfb.a(ram.o) |
.init_array 0x0000000000025c38 0x4 /home/sourcerer/kos_src/me//lib/libnsfb.a(sdl.o) |
.bss 0x0000000000025c3c 0x20230 |
*(.bss) |
.bss 0x0000000000025c3c 0x10000 /home/sourcerer/kos_src/me//stub/crt0.o |
.bss 0x0000000000035c3c 0x0 polygon.o |
.bss 0x0000000000035c3c 0x0 /home/sourcerer/kos_src/me//lib/libm.a(s_cos.o) |
.bss 0x0000000000035c3c 0x0 /home/sourcerer/kos_src/me//lib/libm.a(s_sin.o) |
.bss 0x0000000000035c3c 0x0 /home/sourcerer/kos_src/me//lib/libnsfb.a(cursor.o) |
.bss 0x0000000000035c3c 0x0 /home/sourcerer/kos_src/me//lib/libnsfb.a(dump.o) |
.bss 0x0000000000035c3c 0x0 /home/sourcerer/kos_src/me//lib/libnsfb.a(libnsfb.o) |
.bss 0x0000000000035c3c 0x0 /home/sourcerer/kos_src/me//lib/libnsfb.a(palette.o) |
.bss 0x0000000000035c3c 0x0 /home/sourcerer/kos_src/me//lib/libnsfb.a(16bpp.o) |
.bss 0x0000000000035c3c 0x0 /home/sourcerer/kos_src/me//lib/libnsfb.a(32bpp-xbgr8888.o) |
.bss 0x0000000000035c3c 0x0 /home/sourcerer/kos_src/me//lib/libnsfb.a(32bpp-xrgb8888.o) |
.bss 0x0000000000035c3c 0x0 /home/sourcerer/kos_src/me//lib/libnsfb.a(8bpp.o) |
.bss 0x0000000000035c3c 0x0 /home/sourcerer/kos_src/me//lib/libnsfb.a(api.o) |
.bss 0x0000000000035c3c 0x0 /home/sourcerer/kos_src/me//lib/libnsfb.a(generic.o) |
.bss 0x0000000000035c3c 0x0 /home/sourcerer/kos_src/me//lib/libnsfb.a(util.o) |
.bss 0x0000000000035c3c 0x0 /home/sourcerer/kos_src/me//lib/libnsfb.a(able.o) |
.bss 0x0000000000035c3c 0x0 /home/sourcerer/kos_src/me//lib/libnsfb.a(linux.o) |
.bss 0x0000000000035c3c 0x0 /home/sourcerer/kos_src/me//lib/libnsfb.a(ram.o) |
.bss 0x0000000000035c3c 0x0 /home/sourcerer/kos_src/me//lib/libnsfb.a(sdl.o) |
.bss 0x0000000000035c3c 0xc4 /home/sourcerer/kos_src/me//lib/libnsfb.a(surface.o) |
.bss 0x0000000000035d00 0x24 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_timer.o) |
0x0000000000035d00 SDL_timer_started |
0x0000000000035d04 SDL_timer_running |
0x0000000000035d08 SDL_alarm_interval |
0x0000000000035d0c SDL_alarm_callback |
.bss 0x0000000000035d24 0x4 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_systimer.o) |
.bss 0x0000000000035d28 0xe4c /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_events.o) |
0x0000000000035d28 SDL_EventOK |
0x0000000000035d2c SDL_ProcessEvents |
.bss 0x0000000000036b74 0x678 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_keyboard.o) |
0x0000000000036b74 SDL_TranslateUNICODE |
0x0000000000036b78 SDL_KeyRepeat |
.bss 0x00000000000371ec 0xa /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_mouse.o) |
*fill* 0x00000000000371f6 0x2 00 |
.bss 0x00000000000371f8 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_quit.o) |
.bss 0x00000000000371f8 0x18 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_cursor.o) |
0x00000000000371f8 SDL_cursorstate |
0x00000000000371fc SDL_cursor |
0x0000000000037200 SDL_cursorlock |
.bss 0x0000000000037210 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_pixels.o) |
.bss 0x0000000000037210 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_RLEaccel.o) |
.bss 0x0000000000037210 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_surface.o) |
.bss 0x0000000000037210 0x4 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_video.o) |
0x0000000000037210 current_video |
.bss 0x0000000000037214 0x10 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_menuetvideo.o) |
.bss 0x0000000000037224 0x8 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL.o) |
.bss 0x000000000003722c 0xb08 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_error.o) |
.bss 0x0000000000037d34 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_fatal.o) |
.bss 0x0000000000037d34 0x4 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_getenv.o) |
.bss 0x0000000000037d38 0x4438 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_kolibri_audio.o) |
0x0000000000037d38 audio_thread_stack |
.bss 0x000000000003c170 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_sysmutex.o) |
.bss 0x000000000003c170 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_syssem.o) |
.bss 0x000000000003c170 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_systhread.o) |
.bss 0x000000000003c170 0x31c /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_thread.o) |
0x000000000003c170 _creating_thread_lock |
.bss 0x000000000003c48c 0x1 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_active.o) |
*fill* 0x000000000003c48d 0x3 00 |
.bss 0x000000000003c490 0x8 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_resize.o) |
.bss 0x000000000003c498 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_blit.o) |
.bss 0x000000000003c498 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_blit_N.o) |
.bss 0x000000000003c498 0xc /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_menuetevents.o) |
.bss 0x000000000003c4a4 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_blit_0.o) |
.bss 0x000000000003c4a4 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_blit_1.o) |
.bss 0x000000000003c4a4 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_blit_A.o) |
.bss 0x000000000003c4a4 0x0 /home/sourcerer/kos_src/me//lib/libc.a(dup.o) |
.bss 0x000000000003c4a4 0x0 /home/sourcerer/kos_src/me//lib/libc.a(fdopen.o) |
.bss 0x000000000003c4a4 0x0 /home/sourcerer/kos_src/me//lib/libc.a(window.o) |
.bss 0x000000000003c4a4 0x800 /home/sourcerer/kos_src/me//lib/libc.a(param.o) |
0x000000000003c4a4 __menuet__app_param_area |
0x000000000003c8a4 __menuet__app_path_area |
.bss 0x000000000003cca4 0x0 /home/sourcerer/kos_src/me//lib/libc.a(keyb.o) |
.bss 0x000000000003cca4 0x0 /home/sourcerer/kos_src/me//lib/libc.a(image.o) |
.bss 0x000000000003cca4 0x0 /home/sourcerer/kos_src/me//lib/libc.a(exit.o) |
.bss 0x000000000003cca4 0x0 /home/sourcerer/kos_src/me//lib/libc.a(event.o) |
.bss 0x000000000003cca4 0x0 /home/sourcerer/kos_src/me//lib/libc.a(delay.o) |
.bss 0x000000000003cca4 0x0 /home/sourcerer/kos_src/me//lib/libc.a(button.o) |
.bss 0x000000000003cca4 0x4 /home/sourcerer/kos_src/me//lib/libc.a(setmode.o) |
0x000000000003cca4 __setmode_stdio_hook |
.bss 0x000000000003cca8 0x0 /home/sourcerer/kos_src/me//lib/libc.a(fmode.o) |
.bss 0x000000000003cca8 0x14 /home/sourcerer/kos_src/me//lib/libc.a(crt1.o) |
0x000000000003cca8 __crt0_argc |
0x000000000003ccac __crt0_argv |
0x000000000003ccb0 __dos_argv0 |
0x000000000003ccb4 _crt0_startup_flags |
0x000000000003ccb8 environ |
.bss 0x000000000003ccbc 0x0 /home/sourcerer/kos_src/me//lib/libc.a(crt0.o) |
.bss 0x000000000003ccbc 0x18 /home/sourcerer/kos_src/me//lib/libc.a(brk.o) |
.bss 0x000000000003ccd4 0x0 /home/sourcerer/kos_src/me//lib/libc.a(strdup.o) |
.bss 0x000000000003ccd4 0x0 /home/sourcerer/kos_src/me//lib/libc.a(memset.o) |
.bss 0x000000000003ccd4 0x0 /home/sourcerer/kos_src/me//lib/libc.a(memmove.o) |
.bss 0x000000000003ccd4 0x0 /home/sourcerer/kos_src/me//lib/libc.a(strncpy.o) |
.bss 0x000000000003ccd4 0x0 /home/sourcerer/kos_src/me//lib/libc.a(strncmp.o) |
.bss 0x000000000003ccd4 0x0 /home/sourcerer/kos_src/me//lib/libc.a(strlen.o) |
.bss 0x000000000003ccd4 0x0 /home/sourcerer/kos_src/me//lib/libc.a(strcpy.o) |
.bss 0x000000000003ccd4 0x0 /home/sourcerer/kos_src/me//lib/libc.a(strcmp.o) |
.bss 0x000000000003ccd4 0x0 /home/sourcerer/kos_src/me//lib/libc.a(memcpy.o) |
.bss 0x000000000003ccd4 0x0 /home/sourcerer/kos_src/me//lib/libc.a(memcmp.o) |
.bss 0x000000000003ccd4 0x80 /home/sourcerer/kos_src/me//lib/libc.a(malloc.o) |
.bss 0x000000000003cd54 0x8 /home/sourcerer/kos_src/me//lib/libc.a(exit.o) |
0x000000000003cd54 __atexit_ptr |
0x000000000003cd58 keypress_at_exit |
.bss 0x000000000003cd5c 0x0 /home/sourcerer/kos_src/me//lib/libc.a(calloc.o) |
.bss 0x000000000003cd5c 0x0 /home/sourcerer/kos_src/me//lib/libc.a(abs.o) |
.bss 0x000000000003cd5c 0x0 /home/sourcerer/kos_src/me//lib/libc.a(vsprintf.o) |
.bss 0x000000000003cd5c 0x0 /home/sourcerer/kos_src/me//lib/libc.a(stderr.o) |
.bss 0x000000000003cd5c 0x0 /home/sourcerer/kos_src/me//lib/libc.a(sprintf.o) |
.bss 0x000000000003cd5c 0x0 /home/sourcerer/kos_src/me//lib/libc.a(fprintf.o) |
.bss 0x000000000003cd5c 0x0 /home/sourcerer/kos_src/me//lib/libc.a(fflush.o) |
.bss 0x000000000003cd5c 0x0 /home/sourcerer/kos_src/me//lib/libc.a(fclose.o) |
.bss 0x000000000003cd5c 0x4 /home/sourcerer/kos_src/me//lib/libc.a(doprnt.o) |
.bss 0x000000000003cd60 0x0 /home/sourcerer/kos_src/me//lib/libc.a(allocfil.o) |
.bss 0x000000000003cd60 0x0 /home/sourcerer/kos_src/me//lib/libc.a(modfl.o) |
.bss 0x000000000003cd60 0x0 /home/sourcerer/kos_src/me//lib/libc.a(lconv.o) |
.bss 0x000000000003cd60 0x4 /home/sourcerer/kos_src/me//lib/libc.a(errno.o) |
0x000000000003cd60 errno |
.bss 0x000000000003cd64 0x0 /home/sourcerer/kos_src/me//lib/libc.a(ct_flags.o) |
.bss 0x000000000003cd64 0x400 /home/sourcerer/kos_src/me//lib/libc.a(debug.o) |
.bss 0x000000000003d164 0x0 /home/sourcerer/kos_src/me//lib/libc.a(write.o) |
.bss 0x000000000003d164 0x0 /home/sourcerer/kos_src/me//lib/libc.a(lseek.o) |
.bss 0x000000000003d164 0x0 /home/sourcerer/kos_src/me//lib/libc.a(close.o) |
.bss 0x000000000003d164 0x8800 /home/sourcerer/kos_src/me//lib/libc.a(emu_init.o) |
0x000000000003d164 _io_handles |
0x0000000000045564 __curdir_buf |
.bss 0x0000000000045964 0x100 /home/sourcerer/kos_src/me//lib/libc.a(dosemu.o) |
.bss 0x0000000000045a64 0x0 /home/sourcerer/kos_src/me//lib/libc.a(_main.o) |
.bss 0x0000000000045a64 0x0 /home/sourcerer/kos_src/me//lib/libc.a(strrchr.o) |
.bss 0x0000000000045a64 0x0 /home/sourcerer/kos_src/me//lib/libc.a(memchr.o) |
.bss 0x0000000000045a64 0x0 /home/sourcerer/kos_src/me//lib/libc.a(stdiohk.o) |
.bss 0x0000000000045a64 0x0 /home/sourcerer/kos_src/me//lib/libc.a(remove.o) |
.bss 0x0000000000045a64 0x0 /home/sourcerer/kos_src/me//lib/libc.a(putc.o) |
.bss 0x0000000000045a64 0x0 /home/sourcerer/kos_src/me//lib/libc.a(fwalk.o) |
.bss 0x0000000000045a64 0x0 /home/sourcerer/kos_src/me//lib/libc.a(frlist.o) |
.bss 0x0000000000045a64 0x0 /home/sourcerer/kos_src/me//lib/libc.a(fputc.o) |
.bss 0x0000000000045a64 0x0 /home/sourcerer/kos_src/me//lib/libc.a(flsbuf.o) |
.bss 0x0000000000045a64 0x8 /home/sourcerer/kos_src/me//lib/libc.a(hooks.o) |
0x0000000000045a64 __libc_read_termios_hook |
0x0000000000045a68 __libc_write_termios_hook |
.bss 0x0000000000045a6c 0x0 /home/sourcerer/kos_src/me//lib/libc.a(fixpath.o) |
.bss 0x0000000000045a6c 0x0 /home/sourcerer/kos_src/me//lib/libc.a(systree.o) |
.bss 0x0000000000045a6c 0x0 /home/sourcerer/kos_src/me//lib/libc.a(dosio.o) |
.bss 0x0000000000045a6c 0x400 /home/sourcerer/kos_src/me//lib/libc.a(curdir.o) |
.bss 0x0000000000045e6c 0x0 /home/sourcerer/kos_src/me//lib/libc.a(stdout.o) |
.bss 0x0000000000045e6c 0x0 /home/sourcerer/kos_src/me//lib/libc.a(stdin.o) |
*(.note.gnu.build-id) |
0x0000000000045e6c end = . |
0x0000000000045e6c _end = . |
LOAD /home/sourcerer/kos_src/me//stub/crt0.o |
LOAD polygon.o |
LOAD /home/sourcerer/kos_src/me//lib/libm.a |
LOAD /home/sourcerer/kos_src/me//lib/libnsfb.a |
LOAD /home/sourcerer/kos_src/me//lib/libSDL.a |
LOAD /home/sourcerer/kos_src/me//lib/libc.a |
OUTPUT(polygon elf32-i386) |
.comment 0x0000000000000000 0x38 |
.comment 0x0000000000000000 0x1c polygon.o |
0x1d (size before relaxing) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libnsfb.a(cursor.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libnsfb.a(dump.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libnsfb.a(libnsfb.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libnsfb.a(palette.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libnsfb.a(16bpp.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libnsfb.a(32bpp-xbgr8888.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libnsfb.a(32bpp-xrgb8888.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libnsfb.a(8bpp.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libnsfb.a(api.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libnsfb.a(generic.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libnsfb.a(util.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libnsfb.a(able.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libnsfb.a(linux.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libnsfb.a(ram.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libnsfb.a(sdl.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libnsfb.a(surface.o) |
.comment 0x000000000000001c 0x1c /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_timer.o) |
0x1d (size before relaxing) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_systimer.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_events.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_keyboard.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_mouse.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_quit.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_cursor.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_pixels.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_RLEaccel.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_surface.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_video.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_menuetvideo.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libSDL.a(SDL.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_error.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_fatal.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_getenv.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_kolibri_audio.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_sysmutex.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_syssem.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_systhread.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_thread.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_active.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_resize.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_blit.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_blit_N.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_menuetevents.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_blit_0.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_blit_1.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_blit_A.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(dup.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(fdopen.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(window.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(param.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(keyb.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(image.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(exit.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(event.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(delay.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(button.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(setmode.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(fmode.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(crt1.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(crt0.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(brk.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(strdup.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(strncpy.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(strncmp.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(strlen.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(strcpy.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(strcmp.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(memcpy.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(memcmp.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(malloc.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(exit.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(calloc.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(abs.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(vsprintf.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(stderr.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(sprintf.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(fprintf.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(fflush.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(fclose.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(doprnt.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(allocfil.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(lconv.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(errno.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(ct_flags.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(debug.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(write.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(lseek.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(close.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(emu_init.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(dosemu.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(_main.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(strrchr.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(memchr.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(stdiohk.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(remove.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(putc.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(fwalk.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(frlist.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(fputc.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(flsbuf.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(hooks.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(fixpath.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(systree.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(dosio.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(curdir.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(stdout.o) |
.comment 0x0000000000000000 0x1d /home/sourcerer/kos_src/me//lib/libc.a(stdin.o) |
.note.GNU-stack |
0x0000000000000000 0x0 |
.note.GNU-stack |
0x0000000000000000 0x0 polygon.o |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libnsfb.a(cursor.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libnsfb.a(dump.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libnsfb.a(libnsfb.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libnsfb.a(palette.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libnsfb.a(16bpp.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libnsfb.a(32bpp-xbgr8888.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libnsfb.a(32bpp-xrgb8888.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libnsfb.a(8bpp.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libnsfb.a(api.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libnsfb.a(generic.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libnsfb.a(util.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libnsfb.a(able.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libnsfb.a(linux.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libnsfb.a(ram.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libnsfb.a(sdl.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libnsfb.a(surface.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_timer.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_systimer.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_events.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_keyboard.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_mouse.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_quit.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_cursor.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_pixels.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_RLEaccel.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_surface.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_video.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_menuetvideo.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_error.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_fatal.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_getenv.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_kolibri_audio.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_sysmutex.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_syssem.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_systhread.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_thread.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_active.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_resize.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_blit.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_blit_N.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_menuetevents.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_blit_0.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_blit_1.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libSDL.a(SDL_blit_A.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(dup.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(fdopen.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(window.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(param.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(keyb.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(image.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(exit.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(event.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(delay.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(button.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(setmode.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(fmode.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(crt1.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(crt0.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(brk.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(strdup.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(strncpy.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(strncmp.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(strlen.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(strcpy.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(strcmp.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(memcpy.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(memcmp.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(malloc.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(exit.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(calloc.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(abs.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(vsprintf.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(stderr.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(sprintf.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(fprintf.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(fflush.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(fclose.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(doprnt.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(allocfil.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(lconv.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(errno.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(ct_flags.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(debug.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(write.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(lseek.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(close.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(emu_init.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(dosemu.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(_main.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(strrchr.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(memchr.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(stdiohk.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(remove.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(putc.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(fwalk.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(frlist.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(fputc.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(flsbuf.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(hooks.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(fixpath.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(systree.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(dosio.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(curdir.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(stdout.o) |
.note.GNU-stack |
0x0000000000000000 0x0 /home/sourcerer/kos_src/me//lib/libc.a(stdin.o) |
/contrib/network/netsurf/libnsfb/test/polystar.c |
---|
0,0 → 1,144 |
/* libnsfb ploygon plotter test program */ |
#ifndef _POSIX_C_SOURCE |
#define _POSIX_C_SOURCE 199506L |
#endif |
#include <stdio.h> |
#include <stdbool.h> |
#include <stdlib.h> |
#include <math.h> |
#include "libnsfb.h" |
#include "libnsfb_plot.h" |
#include "libnsfb_event.h" |
#include <time.h> |
// Sleep milliseconds |
static void sleepMilli(long ms) |
{ |
const struct timespec ts = {ms / 1000, ms % 1000 * 1000000}; |
nanosleep(&ts, NULL); |
} |
#define UNUSED(x) ((x) = (x)) |
int main(int argc, char **argv) |
{ |
const char *fename; |
enum nsfb_type_e fetype; |
nsfb_t *nsfb; |
int waitloop = 3; |
nsfb_event_t event; |
nsfb_bbox_t box; |
uint8_t *fbptr; |
int fbstride; |
int sides; |
int radius; |
nsfb_point_t *points; |
int loop; |
nsfb_plot_pen_t pen; |
double rotate; |
if (argc < 2) { |
fename="sdl"; |
} else { |
fename = argv[1]; |
} |
fetype = nsfb_type_from_name(fename); |
if (fetype == NSFB_SURFACE_NONE) { |
fprintf(stderr, "Unable to convert \"%s\" to nsfb surface type\n", fename); |
return 1; |
} |
nsfb = nsfb_new(fetype); |
if (nsfb == NULL) { |
fprintf(stderr, "Unable to allocate \"%s\" nsfb surface\n", fename); |
return 2; |
} |
if (nsfb_init(nsfb) == -1) { |
fprintf(stderr, "Unable to initialise nsfb surface\n"); |
nsfb_free(nsfb); |
return 4; |
} |
/* get the geometry of the whole screen */ |
box.x0 = box.y0 = 0; |
nsfb_get_geometry(nsfb, &box.x1, &box.y1, NULL); |
nsfb_get_buffer(nsfb, &fbptr, &fbstride); |
pen.stroke_colour = 0xff000000; |
pen.stroke_type = NFSB_PLOT_OPTYPE_SOLID; |
for (rotate =0; rotate < (2 * M_PI); rotate += (M_PI / 8)) { |
/* claim the whole screen for update */ |
nsfb_claim(nsfb, &box); |
nsfb_plot_clg(nsfb, 0xffffffff); |
radius = (box.y1 / 2); |
for (sides = 18; sides >=9; sides-=2) { |
points = malloc(sizeof(nsfb_point_t) * sides); |
for (loop = 0; loop < sides;loop+=2) { |
points[loop].x = (box.x1 / 2) + |
(radius * cos((loop * 2 * M_PI / sides) + rotate)); |
points[loop].y = (box.y1 / 2) + |
(radius * sin((loop * 2 * M_PI / sides) + rotate)); |
points[loop+1].x = (box.x1 / 2) + |
((radius / 3) * cos(((loop+1) * 2 * M_PI / sides) + rotate)); |
points[loop+1].y = (box.y1 / 2) + |
((radius / 3) * sin(((loop+1) * 2 * M_PI / sides) + rotate)); |
} |
nsfb_plot_polygon(nsfb, (const int *)points, sides, |
0xff000000 | (0xffffff / (sides * 2))); |
nsfb_plot_polylines(nsfb, sides, points, &pen); |
free(points); |
radius -= 40; |
} |
nsfb_update(nsfb, &box); |
sleepMilli(100); |
} |
/* wait for quit event or timeout */ |
while (waitloop > 0) { |
if (nsfb_event(nsfb, &event, 1000) == false) { |
break; |
} |
if (event.type == NSFB_EVENT_CONTROL) { |
if (event.value.controlcode == NSFB_CONTROL_TIMEOUT) { |
/* timeout */ |
waitloop--; |
} else if (event.value.controlcode == NSFB_CONTROL_QUIT) { |
break; |
} |
} |
} |
nsfb_free(nsfb); |
return 0; |
} |
/* |
* Local variables: |
* c-basic-offset: 4 |
* tab-width: 8 |
* End: |
*/ |
/contrib/network/netsurf/libnsfb/test/polystar2.c |
---|
0,0 → 1,137 |
/* libnsfb ploygon plotter test program */ |
#ifndef _POSIX_C_SOURCE |
#define _POSIX_C_SOURCE 199506L |
#endif |
#include <stdio.h> |
#include <stdbool.h> |
#include <stdlib.h> |
#include <math.h> |
#include "libnsfb.h" |
#include "libnsfb_plot.h" |
#include "libnsfb_event.h" |
#include <time.h> |
// Sleep milliseconds |
static void sleepMilli(long ms) |
{ |
const struct timespec ts = {ms / 1000, ms % 1000 * 1000000}; |
nanosleep(&ts, NULL); |
} |
#define UNUSED(x) ((x) = (x)) |
int main(int argc, char **argv) |
{ |
const char *fename; |
enum nsfb_type_e fetype; |
nsfb_t *nsfb; |
int waitloop = 3; |
nsfb_event_t event; |
nsfb_bbox_t box; |
uint8_t *fbptr; |
int fbstride; |
int sides; |
int radius; |
nsfb_point_t *points; |
int loop; |
int counter; |
int colour; |
if (argc < 2) { |
fename="sdl"; |
} else { |
fename = argv[1]; |
} |
fetype = nsfb_type_from_name(fename); |
if (fetype == NSFB_SURFACE_NONE) { |
fprintf(stderr, "Unable to convert \"%s\" to nsfb surface type\n", fename); |
return 1; |
} |
nsfb = nsfb_new(fetype); |
if (nsfb == NULL) { |
fprintf(stderr, "Unable to allocate \"%s\" nsfb surface\n", fename); |
return 2; |
} |
if (nsfb_init(nsfb) == -1) { |
fprintf(stderr, "Unable to initialise nsfb surface\n"); |
nsfb_free(nsfb); |
return 4; |
} |
/* get the geometry of the whole screen */ |
box.x0 = box.y0 = 0; |
nsfb_get_geometry(nsfb, &box.x1, &box.y1, NULL); |
nsfb_get_buffer(nsfb, &fbptr, &fbstride); |
radius = (box.x1 / 3); |
sides = 5; |
counter = 0; |
for (counter = 0; counter < 20; counter++) { |
/* claim the whole screen for update */ |
nsfb_claim(nsfb, &box); |
nsfb_plot_clg(nsfb, 0xffffffff); |
points = malloc(sizeof(nsfb_point_t) * sides); |
for (loop = 0; loop < sides;loop++) { |
points[(2 * loop) % sides].x = (box.x1 / 2) + |
(radius * cos(loop * 2 * M_PI / sides)); |
points[(2 * loop) % sides].y = (box.y1 / 2) + |
(radius * sin(loop * 2 * M_PI / sides)); |
} |
if (counter % 3 == 0) |
colour = 0xffff0000; |
else if (counter % 3 == 1) |
colour = 0xff00ff00; |
else |
colour = 0xff0000ff; |
nsfb_plot_polygon(nsfb, (const int *)points, sides, colour); |
free(points); |
sides += 2; |
nsfb_update(nsfb, &box); |
sleepMilli(400); |
} |
/* wait for quit event or timeout */ |
while (waitloop > 0) { |
if (nsfb_event(nsfb, &event, 1000) == false) { |
break; |
} |
if (event.type == NSFB_EVENT_CONTROL) { |
if (event.value.controlcode == NSFB_CONTROL_TIMEOUT) { |
/* timeout */ |
waitloop--; |
} else if (event.value.controlcode == NSFB_CONTROL_QUIT) { |
break; |
} |
} |
} |
nsfb_free(nsfb); |
return 0; |
} |
/* |
* Local variables: |
* c-basic-offset: 4 |
* tab-width: 8 |
* End: |
*/ |
/contrib/network/netsurf/libnsfb/test/runtest.sh |
---|
0,0 → 1,15 |
#!/bin/sh |
TEST_PATH=$1 |
TEST_FRONTEND=linux |
${TEST_PATH}/test_frontend ${TEST_FRONTEND} |
${TEST_PATH}/test_plottest ${TEST_FRONTEND} |
${TEST_PATH}/test_bitmap ${TEST_FRONTEND} |
${TEST_PATH}/test_bezier ${TEST_FRONTEND} |
${TEST_PATH}/test_path ${TEST_FRONTEND} |
${TEST_PATH}/test_polygon ${TEST_FRONTEND} |
${TEST_PATH}/test_polystar ${TEST_FRONTEND} |
${TEST_PATH}/test_polystar2 ${TEST_FRONTEND} |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/contrib/network/netsurf/libnsfb/test/svgtiny.c |
---|
0,0 → 1,247 |
/* |
* This file is part of Libsvgtiny |
* Licensed under the MIT License, |
* http://opensource.org/licenses/mit-license.php |
* Copyright 2008 James Bursa <james@semichrome.net> |
*/ |
#include <stdio.h> |
#include <sys/types.h> |
#include <sys/stat.h> |
#include <unistd.h> |
#include <stdbool.h> |
#include <stdlib.h> |
#include <svgtiny.h> |
#include "libnsfb.h" |
#include "libnsfb_plot.h" |
#include "libnsfb_event.h" |
nsfb_t *nsfb; |
nsfb_bbox_t screen_box; |
uint8_t *fbptr; |
int fbstride; |
nsfb_event_t event; |
static int setup_fb(void) |
{ |
nsfb = nsfb_init(NSFB_FRONTEND_SDL); |
if (nsfb == NULL) { |
fprintf(stderr, "Unable to initialise nsfb with SDL frontend\n"); |
return 1; |
} |
if (nsfb_init_frontend(nsfb) == -1) { |
fprintf(stderr, "Unable to initialise nsfb frontend\n"); |
return 2; |
} |
/* get the geometry of the whole screen */ |
screen_box.x0 = screen_box.y0 = 0; |
nsfb_get_geometry(nsfb, &screen_box.x1, &screen_box.y1, NULL); |
nsfb_get_framebuffer(nsfb, &fbptr, &fbstride); |
/* claim the whole screen for update */ |
nsfb_claim(nsfb, &screen_box); |
nsfb_plot_clg(nsfb, 0xffffffff); |
return 0; |
} |
int main(int argc, char *argv[]) |
{ |
FILE *fd; |
float scale = 1.0; |
struct stat sb; |
char *buffer; |
size_t size; |
size_t n; |
struct svgtiny_diagram *diagram; |
svgtiny_code code; |
if (argc != 2 && argc != 3) { |
fprintf(stderr, "Usage: %s FILE [SCALE]\n", argv[0]); |
return 1; |
} |
/* load file into memory buffer */ |
fd = fopen(argv[1], "rb"); |
if (!fd) { |
perror(argv[1]); |
return 1; |
} |
if (stat(argv[1], &sb)) { |
perror(argv[1]); |
return 1; |
} |
size = sb.st_size; |
buffer = malloc(size); |
if (!buffer) { |
fprintf(stderr, "Unable to allocate %lld bytes\n", |
(long long) size); |
return 1; |
} |
n = fread(buffer, 1, size, fd); |
if (n != size) { |
perror(argv[1]); |
return 1; |
} |
fclose(fd); |
/* read scale argument */ |
if (argc == 3) { |
scale = atof(argv[2]); |
if (scale == 0) |
scale = 1.0; |
} |
/* create svgtiny object */ |
diagram = svgtiny_create(); |
if (!diagram) { |
fprintf(stderr, "svgtiny_create failed\n"); |
return 1; |
} |
/* parse */ |
code = svgtiny_parse(diagram, buffer, size, argv[1], 1000, 1000); |
if (code != svgtiny_OK) { |
fprintf(stderr, "svgtiny_parse failed: "); |
switch (code) { |
case svgtiny_OUT_OF_MEMORY: |
fprintf(stderr, "svgtiny_OUT_OF_MEMORY"); |
break; |
case svgtiny_LIBXML_ERROR: |
fprintf(stderr, "svgtiny_LIBXML_ERROR"); |
break; |
case svgtiny_NOT_SVG: |
fprintf(stderr, "svgtiny_NOT_SVG"); |
break; |
case svgtiny_SVG_ERROR: |
fprintf(stderr, "svgtiny_SVG_ERROR: line %i: %s", |
diagram->error_line, |
diagram->error_message); |
break; |
default: |
fprintf(stderr, "unknown svgtiny_code %i", code); |
break; |
} |
fprintf(stderr, "\n"); |
} |
free(buffer); |
if (setup_fb() != 0) |
return 1; |
for (unsigned int i = 0; i != diagram->shape_count; i++) { |
nsfb_plot_pen_t pen; |
pen.stroke_colour = svgtiny_RED(diagram->shape[i].stroke) | |
svgtiny_GREEN(diagram->shape[i].stroke) << 8| |
svgtiny_BLUE(diagram->shape[i].stroke) << 16; |
pen.fill_colour = svgtiny_RED(diagram->shape[i].fill) | |
svgtiny_GREEN(diagram->shape[i].fill) << 8| |
svgtiny_BLUE(diagram->shape[i].fill) << 16; |
if (diagram->shape[i].fill == svgtiny_TRANSPARENT) |
pen.fill_type = NFSB_PLOT_OPTYPE_NONE; |
else |
pen.fill_type = NFSB_PLOT_OPTYPE_SOLID; |
if (diagram->shape[i].stroke == svgtiny_TRANSPARENT) |
pen.stroke_type = NFSB_PLOT_OPTYPE_NONE; |
else |
pen.stroke_type = NFSB_PLOT_OPTYPE_SOLID; |
pen.stroke_width = scale * diagram->shape[i].stroke_width; |
if (diagram->shape[i].path) { |
nsfb_plot_pathop_t *fb_path; |
int fb_path_c; |
unsigned int j; |
fb_path = malloc(diagram->shape[i].path_length * 3 * sizeof(nsfb_plot_pathop_t)); |
fb_path_c = 0; |
for (j = 0; |
j != diagram->shape[i].path_length; ) { |
switch ((int) diagram->shape[i].path[j]) { |
case svgtiny_PATH_MOVE: |
fb_path[fb_path_c].operation = NFSB_PLOT_PATHOP_MOVE; |
fb_path[fb_path_c].point.x = scale * diagram->shape[i].path[j + 1]; |
fb_path[fb_path_c].point.y = scale * diagram->shape[i].path[j + 2]; |
fb_path_c++; |
j += 3; |
break; |
case svgtiny_PATH_CLOSE: |
fb_path[fb_path_c].operation = NFSB_PLOT_PATHOP_LINE; |
fb_path[fb_path_c].point.x = fb_path[0].point.x; |
fb_path[fb_path_c].point.y = fb_path[0].point.y; |
fb_path_c++; |
j += 1; |
break; |
case svgtiny_PATH_LINE: |
fb_path[fb_path_c].operation = NFSB_PLOT_PATHOP_LINE; |
fb_path[fb_path_c].point.x = scale * diagram->shape[i].path[j + 1]; |
fb_path[fb_path_c].point.y = scale * diagram->shape[i].path[j + 2]; |
fb_path_c++; |
j += 3; |
break; |
case svgtiny_PATH_BEZIER: |
fb_path[fb_path_c].operation = NFSB_PLOT_PATHOP_MOVE; |
fb_path[fb_path_c].point.x = scale * diagram->shape[i].path[j + 1]; |
fb_path[fb_path_c].point.y = scale * diagram->shape[i].path[j + 2]; |
fb_path_c++; |
fb_path[fb_path_c].operation = NFSB_PLOT_PATHOP_MOVE; |
fb_path[fb_path_c].point.x = scale * diagram->shape[i].path[j + 3]; |
fb_path[fb_path_c].point.y = scale * diagram->shape[i].path[j + 4]; |
fb_path_c++; |
fb_path[fb_path_c].operation = NFSB_PLOT_PATHOP_CUBIC; |
fb_path[fb_path_c].point.x = scale * diagram->shape[i].path[j + 5]; |
fb_path[fb_path_c].point.y = scale * diagram->shape[i].path[j + 6]; |
fb_path_c++; |
j += 7; |
break; |
default: |
printf("error "); |
j += 1; |
} |
} |
nsfb_plot_path(nsfb, fb_path_c, fb_path, &pen); |
} else if (diagram->shape[i].text) { |
/* printf("text %g %g '%s' ", |
scale * diagram->shape[i].text_x, |
scale * diagram->shape[i].text_y, |
diagram->shape[i].text);*/ |
} |
} |
svgtiny_free(diagram); |
nsfb_update(nsfb, &screen_box); |
while (event.type != NSFB_EVENT_CONTROL) |
nsfb_event(nsfb, &event, -1); |
return 0; |
} |
/* |
cc -g -std=c99 -D_BSD_SOURCE -I/home/vince/netsurf/libnsfb/include/ -I/home/vince/netsurf/libnsfb/src -I/usr/local/include -I/usr/include/libxml2 -Wall -Wextra -Wundef -Wpointer-arith -Wcast-align -Wwrite-strings -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations -Wnested-externs -Werror -pedantic -Wno-overlength-strings -DNDEBUG -O2 -DBUILD_TARGET_Linux -DBUILD_HOST_Linux -o build-Linux-Linux-release-lib-static/test_svgtiny.o -c test/svgtiny.c |
cc -o build-Linux-Linux-release-lib-static/test_svgtiny build-Linux-Linux-release-lib-static/test_svgtiny.o -Wl,--whole-archive -lnsfb -Wl,--no-whole-archive -lSDL -Lbuild-Linux-Linux-release-lib-static/ -lnsfb -lsvgtiny -lxml2 |
*/ |
/contrib/network/netsurf/libnsfb/test/text-speed.c |
---|
0,0 → 1,112 |
/* libnsfb plotter test program */ |
#include <stdio.h> |
#include <stdbool.h> |
#include <stdlib.h> |
#include <unistd.h> |
#include <sys/types.h> |
#include <sys/stat.h> |
#include <fcntl.h> |
#include "libnsfb.h" |
#include "libnsfb_plot.h" |
#include "libnsfb_event.h" |
#define UNUSED(x) ((x) = (x)) |
const struct { |
unsigned int w; |
unsigned int h; |
unsigned char data[16]; |
} Mglyph1 = { |
8, 16, |
{ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0xc6, /* 11000110 */ |
0xee, /* 11101110 */ |
0xfe, /* 11111110 */ |
0xfe, /* 11111110 */ |
0xd6, /* 11010110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
} |
}; |
int main(int argc, char **argv) |
{ |
const char *fename; |
enum nsfb_type_e fetype; |
nsfb_t *nsfb; |
nsfb_bbox_t box; |
nsfb_bbox_t box3; |
uint8_t *fbptr; |
int fbstride; |
int i; |
unsigned int x, y; |
if (argc < 2) { |
fename="sdl"; |
} else { |
fename = argv[1]; |
} |
fetype = nsfb_type_from_name(fename); |
if (fetype == NSFB_SURFACE_NONE) { |
printf("Unable to convert \"%s\" to nsfb surface type\n", |
fename); |
return EXIT_FAILURE; |
} |
nsfb = nsfb_new(fetype); |
if (nsfb == NULL) { |
printf("Unable to allocate \"%s\" nsfb surface\n", fename); |
return EXIT_FAILURE; |
} |
if (nsfb_init(nsfb) == -1) { |
printf("Unable to initialise nsfb surface\n"); |
nsfb_free(nsfb); |
return EXIT_FAILURE; |
} |
/* get the geometry of the whole screen */ |
box.x0 = box.y0 = 0; |
nsfb_get_geometry(nsfb, &box.x1, &box.y1, NULL); |
nsfb_get_buffer(nsfb, &fbptr, &fbstride); |
nsfb_claim(nsfb, &box); |
/* Clear to white */ |
nsfb_plot_clg(nsfb, 0xffffffff); |
nsfb_update(nsfb, &box); |
/* test glyph plotting */ |
for (i = 0; i < 1000; i++) { |
for (y = 0; y < box.y1 - Mglyph1.h; y += Mglyph1.h) { |
for (x = 0; x < box.x1 - Mglyph1.w; x += Mglyph1.w) { |
box3.x0 = x; |
box3.y0 = y; |
box3.x1 = box3.x0 + Mglyph1.w; |
box3.y1 = box3.y0 + Mglyph1.h; |
nsfb_plot_glyph1(nsfb, &box3, Mglyph1.data, |
Mglyph1.w, 0xff000000); |
} |
} |
nsfb_update(nsfb, &box); |
} |
nsfb_update(nsfb, &box); |
nsfb_free(nsfb); |
return 0; |
} |
/contrib/network/netsurf/libnsfb/usage |
---|
0,0 → 1,40 |
Framebuffer abstraction library |
------------------------------- |
This library provides a generic abstraction to a linear section of |
memory which coresponds to a visible array of pixel elements on a |
display device. The memory starts at a base location and is logically |
split into rows, the length of each row in memory is refered to as the |
stride length. |
The display device may use differing numbers of bits to represent each |
pixel, this represented by the bpp value and may be one of 1, 4, 8, |
16, 24 or 32. The library assumes packed pixels and does not support |
colour depths which do not correspond to the bpp. The 1bpp mode is a |
fixed black and white pallette, the 4 and 8 bpp modes use a 16 and 256 |
entry pallette respectively and the 16, and 24 bpp modes are direct |
indexed RGB modes in 565 and 888 format. The 32bpp mode is RGB in 888 |
format with the top byte unused. |
The library may be coupled to several display devices. The available |
devices are controlled by compile time configuration. |
Usage |
----- |
The library is initialised by calling nsfb_init() with the frontend |
type as a parameter. The nsfb_t pointer returned is used in all calls |
to the library. The geometry and physical settings may be altered |
using the nsfb_set_geometry() and nsfb_set_physical() functions. The |
frontend *must* then be initialised. The nsfb_set_geometry() and |
nsfb_set_physical() functions may be called at any time, however they |
are likely to fail once the frontend has been initialised. |
The nsfb_finalise() function should be called to shut the library down |
when finished. |
When directly acessing the framebuffer memory the nsfb_claim() and |
nsfb_release() calls should be used. These allow the frontends to |
syncronise access and only update the altered regions of the drawing |
area. Note the area claimed and released may not neccisarily be the |
same. |