[PATCH 4/4] wmtetris: Add wmtetris version 0.1 to repository.

Doug Torrance <[email protected]>
Newsgroups gmane.compw.window-managers.windowmaker.devel
Message-ID <[email protected]>
From:
http://www.cs.mun.ca/~gstarkes/wmaker/dockapps/files/wmtetris-0.1.tar.gz
---
 wmtetris/README                     |  22 ++
 wmtetris/wmgeneral/wmgeneral.c      | 366 ++++++++++++++++++
 wmtetris/wmgeneral/wmgeneral.h      |  50 +++
 wmtetris/wmtetris/Makefile          |  16 +
 wmtetris/wmtetris/wmmon.c           | 739 ++++++++++++++++++++++++++++++++++++
 wmtetris/wmtetris/wmtetris-mask.xbm |  46 +++
 wmtetris/wmtetris/wmtetris.c        | 302 +++++++++++++++
 wmtetris/wmtetris/wmtetris.h        |  40 ++
 wmtetris/wmtetris/wmtetris.xpm      | 532 ++++++++++++++++++++++++++
 9 files changed, 2113 insertions(+)
 create mode 100644 wmtetris/README
 create mode 100644 wmtetris/wmgeneral/wmgeneral.c
 create mode 100644 wmtetris/wmgeneral/wmgeneral.h
 create mode 100644 wmtetris/wmtetris/Makefile
 create mode 100644 wmtetris/wmtetris/wmmon.c
 create mode 100644 wmtetris/wmtetris/wmtetris-mask.xbm
 create mode 100644 wmtetris/wmtetris/wmtetris.c
 create mode 100644 wmtetris/wmtetris/wmtetris.h
 create mode 100644 wmtetris/wmtetris/wmtetris.xpm

diff --git a/wmtetris/README b/wmtetris/README
new file mode 100644
index 0000000..96923b7
--- /dev/null
+++ b/wmtetris/README
@@ -0,0 +1,22 @@
+Here it is, just what you always wanted -- tetris for the dock.
+
+To install, type make or something.
+
+I started with the wmapm code and made just enough changes to make it
+play tetris and not show your laptop's battery status. So if you want
+actual documentation, refer to the files that come with wmapm.
+
+This is commercial software. If you decide to keep it after your 21 day
+evaluation period, you are required by law to send me the registration
+fee of $899 U.S. Failure to promptly transfer these funds may result in
+criminal prosecution for violation of U.S. copyright law and Bill Gates
+will shake is finger at you and condemn you as a thief of "intellectual
+property".
+
+WMTETRIS IS PROVIDED "AS IS", AND COMES WITH NO WARRANTY WHATSOEVER,
+INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTEES OF NOT MAKING YOU
+FEEL LIKE A JERK FOR DOWNLOADING CRAPPY SOFTWARE, AND OF NOT CAUSING A
+CULT FOLLOWING TO DEVELOP ;-). 
+
+Comments, questions, and psychiatric referrals to [email protected].
+
diff --git a/wmtetris/wmgeneral/wmgeneral.c b/wmtetris/wmgeneral/wmgeneral.c
new file mode 100644
index 0000000..a4f13c1
--- /dev/null
+++ b/wmtetris/wmgeneral/wmgeneral.c
@@ -0,0 +1,366 @@
+/*
+	Best viewed with vim5, using ts=4
+
+	wmgeneral was taken from wmppp.
+
+	It has a lot of routines which most of the wm* programs use.
+
+	------------------------------------------------------------
+
+	Author: Martijn Pieterse ([email protected])
+
+	---
+	CHANGES:
+	---
+	02/05/1998 (Martijn Pieterse, [email protected])
+		* changed the read_rc_file to parse_rcfile, as suggester by Marcelo E. Magallon
+		* debugged the parse_rc file.
+	30/04/1998 (Martijn Pieterse, [email protected])
+		* Ripped similar code from all the wm* programs,
+		  and put them in a single file.
+
+*/
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <unistd.h>
+#include <ctype.h>
+#include <stdarg.h>
+
+#include <X11/Xlib.h>
+#include <X11/xpm.h>
+#include <X11/extensions/shape.h>
+
+#include "wmgeneral.h"
+
+  /*****************/
+ /* X11 Variables */
+/*****************/
+
+Window		Root;
+int			screen;
+int			x_fd;
+int			d_depth;
+XSizeHints	mysizehints;
+XWMHints	mywmhints;
+Pixel		back_pix, fore_pix;
+char		*Geometry = "";
+Window		iconwin, win;
+GC			NormalGC;
+XpmIcon		wmgen;
+Pixmap		pixmask;
+
+  /*****************/
+ /* Mouse Regions */
+/*****************/
+
+typedef struct {
+	int		enable;
+	int		top;
+	int		bottom;
+	int		left;
+	int		right;
+} MOUSE_REGION;
+
+#define MAX_MOUSE_REGION (8)
+MOUSE_REGION	mouse_region[MAX_MOUSE_REGION];
+
+  /***********************/
+ /* Function Prototypes */
+/***********************/
+
+static void GetXPM(XpmIcon *, char **);
+static Pixel GetColor(char *);
+void RedrawWindow(void);
+void AddMouseRegion(int, int, int, int, int);
+int CheckMouseRegion(int, int);
+
+/*******************************************************************************\
+|* read_rc_file																   *|
+\*******************************************************************************/
+
+void parse_rcfile(const char *filename, rckeys *keys) {
+
+	char	*p;
+	char	temp[128];
+	char	*tokens = " :\t\n";
+	FILE	*fp;
+	int		i,key;
+
+	fp = fopen(filename, "r");
+	if (fp) {
+		while (fgets(temp, 128, fp)) {
+			key = 0;
+			while (key >= 0 && keys[key].label) {
+				if ((p = strstr(temp, keys[key].label))) {
+					p += strlen(keys[key].label);
+					p += strspn(p, tokens);
+					if ((i = strcspn(p, "#\n"))) p[i] = 0;
+					free(*keys[key].var);
+					*keys[key].var = strdup(p);
+					key = -1;
+				} else key++;
+			}
+		}
+		fclose(fp);
+	}
+}
+
+
+/*******************************************************************************\
+|* GetXPM																	   *|
+\*******************************************************************************/
+
+static void GetXPM(XpmIcon *wmgen, char *pixmap_bytes[]) {
+
+	XWindowAttributes	attributes;
+	int					err;
+
+	/* For the colormap */
+	XGetWindowAttributes(display, Root, &attributes);
+
+	wmgen->attributes.valuemask |= (XpmReturnPixels | XpmReturnExtensions);
+
+	err = XpmCreatePixmapFromData(display, Root, pixmap_bytes, &(wmgen->pixmap),
+					&(wmgen->mask), &(wmgen->attributes));
+	
+	if (err != XpmSuccess) {
+		fprintf(stderr, "Not enough free colorcells.\n");
+		exit(1);
+	}
+}
+
+/*******************************************************************************\
+|* GetColor																	   *|
+\*******************************************************************************/
+
+static Pixel GetColor(char *name) {
+
+	XColor				color;
+	XWindowAttributes	attributes;
+
+	XGetWindowAttributes(display, Root, &attributes);
+
+	color.pixel = 0;
+	if (!XParseColor(display, attributes.colormap, name, &color)) {
+		fprintf(stderr, "wm.app: can't parse %s.\n", name);
+	} else if (!XAllocColor(display, attributes.colormap, &color)) {
+		fprintf(stderr, "wm.app: can't allocate %s.\n", name);
+	}
+	return color.pixel;
+}
+
+/*******************************************************************************\
+|* flush_expose																   *|
+\*******************************************************************************/
+
+static int flush_expose(Window w) {
+
+	XEvent 		dummy;
+	int			i=0;
+
+	while (XCheckTypedWindowEvent(display, w, Expose, &dummy))
+		i++;
+
+	return i;
+}
+
+/*******************************************************************************\
+|* RedrawWindow																   *|
+\*******************************************************************************/
+
+void RedrawWindow(void) {
+	
+	flush_expose(iconwin);
+	XCopyArea(display, wmgen.pixmap, iconwin, NormalGC, 
+				0,0, wmgen.attributes.width, wmgen.attributes.height, 0,0);
+	flush_expose(win);
+	XCopyArea(display, wmgen.pixmap, win, NormalGC,
+				0,0, wmgen.attributes.width, wmgen.attributes.height, 0,0);
+}
+
+/*******************************************************************************\
+|* RedrawWindowXY															   *|
+\*******************************************************************************/
+
+void RedrawWindowXY(int x, int y) {
+	
+	flush_expose(iconwin);
+	XCopyArea(display, wmgen.pixmap, iconwin, NormalGC, 
+				x,y, wmgen.attributes.width, wmgen.attributes.height, 0,0);
+	flush_expose(win);
+	XCopyArea(display, wmgen.pixmap, win, NormalGC,
+				x,y, wmgen.attributes.width, wmgen.attributes.height, 0,0);
+}
+
+/*******************************************************************************\
+|* AddMouseRegion															   *|
+\*******************************************************************************/
+
+void AddMouseRegion(int index, int left, int top, int right, int bottom) {
+
+	if (index < MAX_MOUSE_REGION) {
+		mouse_region[index].enable = 1;
+		mouse_region[index].top = top;
+		mouse_region[index].left = left;
+		mouse_region[index].bottom = bottom;
+		mouse_region[index].right = right;
+	}
+}
+
+/*******************************************************************************\
+|* CheckMouseRegion															   *|
+\*******************************************************************************/
+
+int CheckMouseRegion(int x, int y) {
+
+	int		i;
+	int		found;
+
+	found = 0;
+
+	for (i=0; i<MAX_MOUSE_REGION && !found; i++) {
+		if (mouse_region[i].enable &&
+			x <= mouse_region[i].right &&
+			x >= mouse_region[i].left &&
+			y <= mouse_region[i].bottom &&
+			y >= mouse_region[i].top)
+			found = 1;
+	}
+	if (!found) return -1;
+	return (i-1);
+}
+
+/*******************************************************************************\
+|* copyXPMArea																   *|
+\*******************************************************************************/
+
+void copyXPMArea(int x, int y, int sx, int sy, int dx, int dy) {
+
+	XCopyArea(display, wmgen.pixmap, wmgen.pixmap, NormalGC, x, y, sx, sy, dx, dy);
+
+}
+
+/*******************************************************************************\
+|* copyXBMArea																   *|
+\*******************************************************************************/
+
+void copyXBMArea(int x, int y, int sx, int sy, int dx, int dy) {
+
+	XCopyArea(display, wmgen.mask, wmgen.pixmap, NormalGC, x, y, sx, sy, dx, dy);
+}
+
+
+/*******************************************************************************\
+|* setMaskXY																   *|
+\*******************************************************************************/
+
+void setMaskXY(int x, int y) {
+
+	 XShapeCombineMask(display, win, ShapeBounding, x, y, pixmask, ShapeSet);
+	 XShapeCombineMask(display, iconwin, ShapeBounding, x, y, pixmask, ShapeSet);
+}
+
+/*******************************************************************************\
+|* openXwindow																   *|
+\*******************************************************************************/
+void openXwindow(int argc, char *argv[], char *pixmap_bytes[], char *pixmask_bits, int pixmask_width, int pixmask_height) {
+
+	unsigned int	borderwidth = 1;
+	XClassHint		classHint;
+	char			*display_name = NULL;
+	char			*wname = argv[0];
+	XTextProperty	name;
+
+	XGCValues		gcv;
+	unsigned long	gcm;
+
+
+	int				dummy=0;
+	int				i;
+
+	for (i=1; argv[i]; i++) {
+		if (!strcmp(argv[i], "-display")) 
+			display_name = argv[i+1];
+	}
+
+	if (!(display = XOpenDisplay(display_name))) {
+		fprintf(stderr, "%s: can't open display %s\n", 
+						wname, XDisplayName(display_name));
+		exit(1);
+	}
+	screen  = DefaultScreen(display);
+	Root    = RootWindow(display, screen);
+	d_depth = DefaultDepth(display, screen);
+	x_fd    = XConnectionNumber(display);
+
+	/* Convert XPM to XImage */
+	GetXPM(&wmgen, pixmap_bytes);
+
+	/* Create a window to hold the stuff */
+	mysizehints.flags = USSize | USPosition;
+	mysizehints.x = 0;
+	mysizehints.y = 0;
+
+	back_pix = GetColor("white");
+	fore_pix = GetColor("black");
+
+	XWMGeometry(display, screen, Geometry, NULL, borderwidth, &mysizehints,
+				&mysizehints.x, &mysizehints.y,&mysizehints.width,&mysizehints.height, &dummy);
+
+	mysizehints.width = 64;
+	mysizehints.height = 64;
+		
+	win = XCreateSimpleWindow(display, Root, mysizehints.x, mysizehints.y,
+				mysizehints.width, mysizehints.height, borderwidth, fore_pix, back_pix);
+	
+	iconwin = XCreateSimpleWindow(display, win, mysizehints.x, mysizehints.y,
+				mysizehints.width, mysizehints.height, borderwidth, fore_pix, back_pix);
+
+	/* Activate hints */
+	XSetWMNormalHints(display, win, &mysizehints);
+	classHint.res_name = wname;
+	classHint.res_class = wname;
+	XSetClassHint(display, win, &classHint);
+
+	XSelectInput(display, win, ButtonPressMask | ExposureMask | ButtonReleaseMask | PointerMotionMask | StructureNotifyMask);
+	XSelectInput(display, iconwin, ButtonPressMask | ExposureMask | ButtonReleaseMask | PointerMotionMask | StructureNotifyMask);
+
+	if (XStringListToTextProperty(&wname, 1, &name) == 0) {
+		fprintf(stderr, "%s: can't allocate window name\n", wname);
+		exit(1);
+	}
+
+	XSetWMName(display, win, &name);
+
+	/* Create GC for drawing */
+	
+	gcm = GCForeground | GCBackground | GCGraphicsExposures;
+	gcv.foreground = fore_pix;
+	gcv.background = back_pix;
+	gcv.graphics_exposures = 0;
+	NormalGC = XCreateGC(display, Root, gcm, &gcv);
+
+	/* ONLYSHAPE ON */
+
+	pixmask = XCreateBitmapFromData(display, win, pixmask_bits, pixmask_width, pixmask_height);
+
+	XShapeCombineMask(display, win, ShapeBounding, 0, 0, pixmask, ShapeSet);
+	XShapeCombineMask(display, iconwin, ShapeBounding, 0, 0, pixmask, ShapeSet);
+
+	/* ONLYSHAPE OFF */
+
+	mywmhints.initial_state = WithdrawnState;
+	mywmhints.icon_window = iconwin;
+	mywmhints.icon_x = mysizehints.x;
+	mywmhints.icon_y = mysizehints.y;
+	mywmhints.window_group = win;
+	mywmhints.flags = StateHint | IconWindowHint | IconPositionHint | WindowGroupHint;
+
+	XSetWMHints(display, win, &mywmhints);
+
+	XSetCommand(display, win, argv, argc);
+	XMapWindow(display, win);
+
+}
diff --git a/wmtetris/wmgeneral/wmgeneral.h b/wmtetris/wmgeneral/wmgeneral.h
new file mode 100644
index 0000000..55b37dd
--- /dev/null
+++ b/wmtetris/wmgeneral/wmgeneral.h
@@ -0,0 +1,50 @@
+#ifndef WMGENERAL_H_INCLUDED
+#define WMGENERAL_H_INCLUDED
+
+  /***********/
+ /* Defines */
+/***********/
+
+#define MAX_MOUSE_REGION (8)
+
+  /************/
+ /* Typedefs */
+/************/
+
+typedef struct _rckeys rckeys;
+
+struct _rckeys {
+	const char	*label;
+	char		**var;
+};
+
+typedef struct {
+	Pixmap			pixmap;
+	Pixmap			mask;
+	XpmAttributes	attributes;
+} XpmIcon;
+
+  /*******************/
+ /* Global variable */
+/*******************/
+
+Display		*display;
+
+  /***********************/
+ /* Function Prototypes */
+/***********************/
+
+void AddMouseRegion(int index, int left, int top, int right, int bottom);
+int CheckMouseRegion(int x, int y);
+
+void openXwindow(int argc, char *argv[], char **, char *, int, int);
+void RedrawWindow(void);
+void RedrawWindowXY(int x, int y);
+
+void copyXPMArea(int, int, int, int, int, int);
+void copyXBMArea(int, int, int, int, int, int);
+void setMaskXY(int, int);
+
+void parse_rcfile(const char *, rckeys *);
+
+#endif
diff --git a/wmtetris/wmtetris/Makefile b/wmtetris/wmtetris/Makefile
new file mode 100644
index 0000000..0594796
--- /dev/null
+++ b/wmtetris/wmtetris/Makefile
@@ -0,0 +1,16 @@
+LIBDIR = -L/usr/X11R6/lib
+LIBS   = -lXpm -lXext
+OBJS   =  wmtetris.o \
+	  ../wmgeneral/wmgeneral.o \
+
+wmtetris: $(OBJS)
+	cc -O -o wmtetris $^ $(LIBDIR) $(LIBS)
+
+%.o:	%.c
+	cc -O -c -o $@ $<
+
+clean:
+	for i in $(OBJS) ; do \
+		rm -f $$i;\
+	done
+	rm -f wmtetris
diff --git a/wmtetris/wmtetris/wmmon.c b/wmtetris/wmtetris/wmmon.c
new file mode 100644
index 0000000..da5242f
--- /dev/null
+++ b/wmtetris/wmtetris/wmmon.c
@@ -0,0 +1,739 @@
+/*
+	Code based on wmppp/wmifs
+
+	[Orig WMPPP comments]
+
+	This code was mainly put together by looking at the
+	following programs:
+
+	asclock
+		A neat piece of equip, used to display the date
+		and time on the screen.
+		Comes with every AfterStep installation.
+
+		Source used:
+			How do I create a not so solid window?
+			How do I open a window?
+			How do I use pixmaps?
+	
+	------------------------------------------------------------
+
+	Authors: Martijn Pieterse ([email protected])
+		 Antoine Nulle ([email protected])
+
+	This program is distributed under the GPL license.
+	(as were asclock and pppstats)
+
+	----
+	Changes:
+	----
+
+	18/05/1998 (Antoine Nulle, [email protected])
+		* MEM/SWAP/UPTIME only updated when visible
+		* Using global file descriptors to reduce file
+		  system overhead, both updates are based on a diff 
+		  supplied by Dave Harden ([email protected]) 
+	15/05/1998 (Antoine Nulle, [email protected])
+		* Fixed memory overflow in the MEM gaugebar
+		* MEM gauge displays now real used mem
+		  (buffered + cached mem removed)
+	14/05/1998 (Antoine Nulle, [email protected])
+		* Added -i & -s kludge for selecting startupmode,
+		  tijno, don't hate me for this :)
+	12/05/1998 (Antoine Nulle, [email protected])
+		* Finetuned master-xpm, tijno don't worry, no 
+		  reprogramming needed this time ;-)
+	07/05/1998 (Martijn Pieterse, [email protected])
+		* Added disk i/o
+	03/05/1998 (Antoine Nulle, [email protected])
+		* Added new master-xpm which contains the gfx
+		  for the upcoming SysInfo part :P
+	02/05/1998 (Martijn Pieterse, [email protected])
+		* Removed a lot of code, that was put in wmgeneral
+	23/04/1998 (Martijn Pieterse, [email protected])
+		* Added zombie destroying code (aka wait :) )
+	18/04/1998 (Martijn Pieterse, [email protected])
+		* Added CPU-on-screen.
+		* Added -display command line
+	15/04/1998 (Martijn Pieterse, [email protected])
+		* Fixed a bug in the stats routine
+		  (Top 3 bright pixels were not shown when 100% loaded)
+		* Changed xpm to a no-title one.
+		  This included the reprogramming of all positions.
+		  warpstah, i hate you! ;)
+	05/04/1998 (Martijn Pieterse, [email protected])
+		* First Working Version
+*/
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <time.h>
+#include <string.h>
+#include <fcntl.h>
+#include <unistd.h>
+
+#include <sys/wait.h>
+#include <sys/param.h>
+#include <sys/types.h>
+
+#include <X11/Xlib.h>
+#include <X11/xpm.h>
+#include <X11/extensions/shape.h>
+
+#include "../wmgeneral/wmgeneral.h"
+#include "../wmgeneral/misc.h"
+
+#include "wmmon-master.xpm"
+#include "wmmon-mask.xbm"
+
+  /***********/
+ /* Defines */
+/***********/
+
+#define LEFT_ACTION (NULL)
+#define RIGHT_ACTION (NULL)
+#define MIDDLE_ACTION (NULL)
+
+#define WMMON_VERSION "1.0.b2"
+
+  /********************/
+ /* Global Variables */
+/********************/
+
+char	*ProgName;
+int	stat_current = 0; /* now global */
+FILE	*fp_meminfo;
+FILE	*fp_stat;
+FILE	*fp_loadavg;
+
+/* functions */
+void usage(void);
+void printversion(void);
+void DrawStats(int *, int, int, int, int);
+void DrawStats_io(int *, int, int, int, int);
+
+void wmmon_routine(int, char **);
+
+void main(int argc, char *argv[]) {
+
+	int		i;
+	
+
+	/* Parse Command Line */
+
+	ProgName = argv[0];
+	if (strlen(ProgName) >= 5)
+		ProgName += (strlen(ProgName) - 5);
+	
+	for (i=1; i<argc; i++) {
+		char *arg = argv[i];
+
+		if (*arg=='-') {
+			switch (arg[1]) {
+			case 'd' :
+				if (strcmp(arg+1, "display")) {
+					usage();
+					exit(1);
+				}
+				break;
+			case 'v' :
+				printversion();
+				exit(0);
+				break;
+			case 'i' :
+				stat_current = 1;
+				break;
+			case 's' :
+				stat_current = 2;
+				break;
+			default:
+				usage();
+				exit(0);
+				break;
+			}
+		}
+	}
+
+	wmmon_routine(argc, argv);
+}
+
+/*******************************************************************************\
+|* wmmon_routine															   *|
+\*******************************************************************************/
+
+typedef struct {
+
+	char	name[5];			/* "cpu0..cpuz", eventually.. :) */
+	int		his[55];
+	int		hisaddcnt;
+	long	rt_stat;
+	long	statlast;
+	long	rt_idle;
+	long	idlelast;
+	
+} stat_dev;
+
+#define MAX_STAT_DEVICES (4)
+stat_dev	stat_device[MAX_STAT_DEVICES];
+
+char		*left_action;
+char		*right_action;
+char		*middle_action;
+
+
+int checksysdevs(void);
+void get_statistics(char *, long *, long *, long *);
+void DrawActive(char *);
+
+void update_stat_cpu(stat_dev *);
+void update_stat_io(stat_dev *);
+void update_stat_mem(stat_dev *st, stat_dev *st2);
+void update_stat_swp(stat_dev *);
+
+void wmmon_routine(int argc, char **argv) {
+
+	rckeys		wmmon_keys[] = {
+		{ "left", &left_action },
+		{ "right", &right_action },
+		{ "middle", &middle_action },
+		{ NULL, NULL }
+	};
+
+	unsigned long		i,j;
+	long		k;
+	XEvent		Event;
+	int			but_stat = -1;
+
+	int			stat_online;
+
+	long		starttime;
+	long		curtime;
+	long		nexttime;
+
+	long		istat;
+	long		idle;
+
+	FILE		*fp;
+	char		temp[128];
+	char		*p;
+
+	int			xpm_X = 0, xpm_Y = 0;
+
+	long		online_time = 0;
+	long		ref_time = 0;
+	long		cnt_time;
+
+
+	fp = fopen("/proc/uptime", "r");
+	fp_meminfo = fopen("/proc/meminfo", "r");
+	fp_loadavg = fopen("/proc/loadavg", "r");
+	fp_stat = fopen("/proc/stat", "r");
+
+	if (fp) {
+		fscanf(fp, "%ld", &online_time);
+		ref_time = time(0);
+		fclose(fp);
+	}
+
+	for (i=0; i<MAX_STAT_DEVICES; i++) {
+		for (j=0; j<55; j++) {
+			stat_device[i].his[j] = 0;
+		}
+		stat_device[i].hisaddcnt = 0;
+	}
+
+	if (LEFT_ACTION) left_action = strdup(LEFT_ACTION);
+	if (RIGHT_ACTION) right_action = strdup(RIGHT_ACTION);
+	if (MIDDLE_ACTION) middle_action = strdup(MIDDLE_ACTION);
+
+	strcpy(temp, "/etc/wmmonrc");
+	parse_rcfile(temp, wmmon_keys);
+
+	p = getenv("HOME");
+	strcpy(temp, p);
+	strcat(temp, "/.wmmonrc");
+	parse_rcfile(temp, wmmon_keys);
+	
+	strcpy(temp, "/etc/wmmonrc.fixed");
+	parse_rcfile(temp, wmmon_keys);
+
+	stat_online = checksysdevs();
+
+
+	openXwindow(argc, argv, wmmon_master_xpm, wmmon_mask_bits, wmmon_mask_width, wmmon_mask_height);
+
+	/* add mouse region */
+	AddMouseRegion(0, 12, 13, 58, 57);
+	AddMouseRegion(1, 5, 5, 24, 14);
+
+	starttime = time(0);
+	nexttime = starttime + 10;
+
+	for (i=0; i<stat_online; i++) {
+		get_statistics(stat_device[i].name, &k, &istat, &idle);
+		stat_device[i].statlast = istat;
+		stat_device[i].idlelast = idle;
+	}
+	if (stat_current == 0) DrawStats(stat_device[stat_current].his, 54, 40, 5, 58);
+	if (stat_current == 1) {
+		DrawStats_io(stat_device[stat_current].his, 54, 40, 5, 58);
+	}
+	if (stat_current == 2) {
+		xpm_X = 64;
+		setMaskXY(-64, 0);
+	} else {
+		xpm_X = 0;
+		setMaskXY(0, 0);
+	}
+	DrawActive(stat_device[stat_current].name);
+
+	while (1) {
+		curtime = time(0);
+
+		waitpid(0, NULL, WNOHANG);
+
+
+		update_stat_cpu(&stat_device[0]);
+		update_stat_io(&stat_device[1]);
+
+		if(stat_current == 2) {
+			update_stat_mem(&stat_device[2], &stat_device[3]);
+//			update_stat_swp(&stat_device[3]);
+		}
+
+		if (stat_current < 2) {
+			i = stat_current;
+		
+			/* Load ding is 45 pixels hoog */
+			copyXPMArea(0, 64, 32, 12, 28, 4);
+
+			j = (stat_device[i].rt_stat + stat_device[i].rt_idle);
+			if (j != 0) {
+				j = (stat_device[i].rt_stat * 100) / j;
+			}
+			j = j * 0.32;
+			if (j > 32) j = 32;
+			copyXPMArea(32, 64, j, 12, 28, 4);
+		} else {
+			/* Nu zal ie wel 3 zijn. */
+
+			copyXPMArea(0, 64, 32, 12, 28+64, 4);
+			copyXPMArea(0, 64, 32, 12, 28+64, 18);
+
+			j = stat_device[2].rt_idle;
+			if (j != 0) {
+				j = (stat_device[2].rt_stat * 100) / j;
+			}
+			j = j * 0.32;
+			if (j > 32) j = 32;
+			copyXPMArea(32, 64, j, 12, 28+64, 4);
+			/*---------------------           ------------------*/
+			j = stat_device[3].rt_idle;
+			if (j != 0) {
+				j = (stat_device[3].rt_stat * 100) / j;
+			}
+			j = j * 0.32;
+			if (j > 32) j = 32;
+			copyXPMArea(32, 64, j, 12, 28+64, 18);
+
+			/*----------- online tijd neerzetten! ----------*/
+			
+			cnt_time = time(0) - ref_time + online_time;
+
+			/* cnt_time = uptime in seconden */
+			/*
+				secs = 108,47
+				mins = 89,47
+				uren = 70,47
+				digits = 40,78, 6breed, 9hoog
+			*/
+			i = cnt_time % 60;
+			cnt_time /= 60;
+			copyXPMArea(40 + (i % 10)*7, 78, 6, 9, 115, 47);
+			copyXPMArea(40 + (i / 10)*7, 78, 6, 9, 108, 47);
+
+			i = cnt_time % 60;
+			cnt_time /= 60;
+			copyXPMArea(40 + (i % 10)*7, 78, 6, 9, 96, 47);
+			copyXPMArea(40 + (i / 10)*7, 78, 6, 9, 89, 47);
+
+			i = cnt_time % 24;
+			cnt_time /= 24;
+			copyXPMArea(40 + (i % 10)*7, 78, 6, 9, 77, 47);
+			copyXPMArea(40 + (i / 10)*7, 78, 6, 9, 70, 47);
+
+			/* De rest is dagen!  5x7*/
+			
+			i = cnt_time;
+			copyXPMArea(66 + (i % 10)*6, 66, 5, 7, 88, 35);
+			i /= 10;
+			copyXPMArea(66 + (i % 10)*6, 66, 5, 7, 82, 35);
+			i /= 10;
+			copyXPMArea(66 + (i % 10)*6, 66, 5, 7, 76, 35);
+			i /= 10;
+			copyXPMArea(66 + (i % 10)*6, 66, 5, 7, 70, 35);
+		}
+
+		if (curtime >= nexttime) {
+			nexttime+=10;
+
+			for (i=0; i<stat_online; i++) {
+				if (stat_device[i].his[54])
+					stat_device[i].his[54] /= stat_device[i].hisaddcnt;
+
+				for (j=1; j<55; j++) {
+					stat_device[i].his[j-1] = stat_device[i].his[j];
+				}
+
+				if (i == stat_current) {
+					if (i == 0) DrawStats(stat_device[i].his, 54, 40, 5, 58);
+					if (i == 1) DrawStats_io(stat_device[i].his, 54, 40, 5, 58);
+				}
+				stat_device[i].his[54] = 0;
+				stat_device[i].hisaddcnt = 0;
+				
+			}
+		}
+		RedrawWindowXY(xpm_X, xpm_Y);
+	
+		while (XPending(display)) {
+			XNextEvent(display, &Event);
+			switch (Event.type) {
+			case Expose:
+				RedrawWindowXY(xpm_X, xpm_Y);
+				break;
+			case DestroyNotify:
+				XCloseDisplay(display);
+				exit(0);
+				break;
+			case ButtonPress:
+				but_stat = CheckMouseRegion(Event.xbutton.x, Event.xbutton.y);
+				break;
+			case ButtonRelease:
+				i = CheckMouseRegion(Event.xbutton.x, Event.xbutton.y);
+				if (but_stat == i && but_stat >= 0) {
+					switch (but_stat) {
+					case 0:
+						switch (Event.xbutton.button) {
+						case 1:
+							if (left_action)
+								execCommand(left_action);
+							break;
+						case 2:
+							if (middle_action)
+								execCommand(middle_action);
+							break;
+						case 3:
+							if (right_action)
+								execCommand(right_action);
+							break;
+						}
+					case 1:
+						stat_current++;
+						printf("current stat is :%d\n", stat_current);
+						if (stat_current == stat_online)
+							stat_current = 0;
+
+						DrawActive(stat_device[stat_current].name);
+						if (stat_current == 0) DrawStats(stat_device[stat_current].his, 54, 40, 5, 58);
+						if (stat_current == 1) {
+							DrawStats_io(stat_device[stat_current].his, 54, 40, 5, 58);
+						}
+						if (stat_current == 2) {
+							xpm_X = 64;
+							setMaskXY(-64, 0);
+						} else {
+							xpm_X = 0;
+							setMaskXY(0, 0);
+						}
+						RedrawWindowXY(xpm_X, xpm_Y);
+						break;
+					}
+				}
+				break;
+			}
+		}
+
+		usleep( stat_current == 0 ? 100000L : 200000L);
+	}
+}
+
+void update_stat_cpu(stat_dev *st) {
+
+	long	k, istat, idle;
+
+	get_statistics(st->name, &k, &istat, &idle);
+
+	st->rt_idle = idle - st->idlelast;
+	st->idlelast = idle;
+
+	st->rt_stat = istat - st->statlast;
+	st->statlast = istat;
+
+	st->his[54] += k;
+	st->hisaddcnt += 1;
+}
+
+void update_stat_io(stat_dev *st) {
+
+	long			j, k, istat, idle;
+	static long		maxdiskio = 0;
+
+	get_statistics(st->name, &k, &istat, &idle);
+
+	st->rt_idle = idle - st->idlelast;
+	st->idlelast = idle;
+
+	st->rt_stat = istat - st->statlast;
+	st->statlast = istat;
+
+	j = st->rt_stat;
+	if (maxdiskio < j) {
+		maxdiskio = j;
+	}
+	st->rt_idle = maxdiskio - j;
+
+	st->his[54] += st->rt_stat;
+	st->hisaddcnt += 1;
+}
+
+void update_stat_mem(stat_dev *st, stat_dev *st2) {
+
+	char	temp[128];
+	unsigned long free, shared, buffers, cached;
+
+	freopen("/proc/meminfo", "r", fp_meminfo);
+	while (fgets(temp, 128, fp_meminfo)) {
+		if (strstr(temp, "Mem:")) {
+			sscanf(temp, "Mem: %ld %ld %ld %ld %ld %ld",
+			       &st->rt_idle, &st->rt_stat,
+			       &free, &shared, &buffers, &cached);
+			st->rt_idle >>= 10;
+			st->rt_stat -= buffers+cached;
+			st->rt_stat >>= 10;
+//			break;
+		}
+		if (strstr(temp, "Swap:")) {
+			sscanf(temp, "Swap: %ld %ld", &st2->rt_idle, &st2->rt_stat);
+			st2->rt_idle >>= 10;
+			st2->rt_stat >>= 10;
+			break;
+		}
+	}
+}
+
+void update_stat_swp(stat_dev *st) {
+
+	char	temp[128];
+
+	fseek(fp_meminfo, 0, SEEK_SET);
+	while (fgets(temp, 128, fp_meminfo)) {
+		if (strstr(temp, "Swap:")) {
+			sscanf(temp, "Swap: %ld %ld", &st->rt_idle, &st->rt_stat);
+			st->rt_idle >>= 10;
+			st->rt_stat >>= 10;
+			break;
+		}
+	}
+
+}
+
+/*******************************************************************************\
+|* get_statistics															   *|
+\*******************************************************************************/
+
+void get_statistics(char *devname, long *is, long *ds, long *idle) {
+
+	int	i;
+	char	temp[128];
+	char	*p;
+	char	*tokens = " \t\n";
+	float	f;
+	long	maxdiskio=0;
+
+	*is = 0;
+	*ds = 0;
+	*idle = 0;
+
+	if (!strncmp(devname, "cpu", 3)) {
+		fseek(fp_stat, 0, SEEK_SET);
+		while (fgets(temp, 128, fp_stat)) {
+			if (strstr(temp, "cpu")) {
+				p = strtok(temp, tokens);
+				/* 1..3, 4 == idle, we don't want idle! */
+				for (i=0; i<3; i++) {
+					p = strtok(NULL, tokens);
+					*ds += atol(p);
+				}
+				p = strtok(NULL, tokens);
+				*idle = atol(p);
+			}
+		}
+		fp_loadavg = freopen("/proc/loadavg", "r", fp_loadavg);
+		fscanf(fp_loadavg, "%f", &f);
+		*is = (long) (100 * f);
+	}
+
+	if (!strncmp(devname, "i/o", 3)) {
+
+		fseek(fp_stat, 0, SEEK_SET);
+		while (fgets(temp, 128, fp_stat)) {
+			if (strstr(temp, "disk_rio") || strstr(temp, "disk_wio")) {
+				p = strtok(temp, tokens);
+				/* 1..4 */
+				for (i=0; i<4; i++) {
+					p = strtok(NULL, tokens);
+					*ds += atol(p);
+				}
+			}
+		}
+		if (*ds > maxdiskio) maxdiskio = *ds;
+	}
+}
+
+/*******************************************************************************\
+|* checksysdevs																   *|
+\*******************************************************************************/
+
+int checksysdevs(void) {
+
+	strcpy(stat_device[0].name, "cpu0");
+	strcpy(stat_device[1].name, "i/o");
+	strcpy(stat_device[2].name, "sys");
+
+	return 3;
+}
+
+
+/*******************************************************************************\
+|* void DrawActive(char *)													   *|
+\*******************************************************************************/
+
+void DrawActive(char *name) {
+
+	/* Alles op X,77
+	   CPU: 0
+	   I/O: 21
+
+	   20 Breed, 10 hoog
+	   Destinatie: 5,5
+	*/
+
+	if (name[0] == 'c') {
+		copyXPMArea(0, 77, 19, 10, 5, 5);
+	} else if (name[0] == 'i') {
+		copyXPMArea(19, 77, 19, 10, 5, 5);
+	}
+
+}
+
+/*******************************************************************************\
+|* DrawStats                                                                   *|
+\*******************************************************************************/
+
+void DrawStats(int *his, int num, int size, int x_left, int y_bottom) {
+
+	int     pixels_per_byte;
+	int     j,k;
+	int     *p;
+	int		d;
+
+	pixels_per_byte = 100;
+	p = his;
+	for (j=0; j<num; j++) {
+		if (p[0] > pixels_per_byte)
+			pixels_per_byte += 100;
+		p += 1;
+	}
+
+	p = his;
+
+	for (k=0; k<num; k++) {
+		d = (1.0 * p[0] / pixels_per_byte) * size;
+
+		for (j=0; j<size; j++) {
+		
+			if (j < d - 3)
+				copyXPMArea(2, 88, 1, 1, k+x_left, y_bottom-j);
+			else if (j < d)
+				copyXPMArea(2, 89, 1, 1, k+x_left, y_bottom-j);
+			else
+				copyXPMArea(2, 90, 1, 1, k+x_left, y_bottom-j);
+		}
+		p += 1;
+	}
+
+	/* Nu horizontaal op 100/200/300 etc lijntje trekken! */
+	for (j = pixels_per_byte-100; j > 0; j-=100) {
+		for (k=0; k<num; k++) {
+			d = (40.0 / pixels_per_byte) * j;
+
+			copyXPMArea(2, 91, 1, 1, k+x_left, y_bottom-d);
+		}
+	}
+}
+
+/*******************************************************************************\
+|* DrawStats_io                                                                *|
+\*******************************************************************************/
+
+void DrawStats_io(int *his, int num, int size, int x_left, int y_bottom) {
+
+	float	pixels_per_byte;
+	int     j,k;
+	int     *p;
+	int		d;
+
+	static int	global_io_scale = 1;
+
+	p = his;
+	for (j=0; j<num; j++) {
+		if (p[j] > global_io_scale) global_io_scale = p[j];
+	}
+
+	pixels_per_byte = 1.0 * global_io_scale / size;
+	if (pixels_per_byte == 0) pixels_per_byte = 1;
+
+	for (k=0; k<num; k++) {
+		d = (1.0 * p[0] / pixels_per_byte);
+
+		for (j=0; j<size; j++) {
+		
+			if (j < d - 3)
+				copyXPMArea(2, 88, 1, 1, k+x_left, y_bottom-j);
+			else if (j < d)
+				copyXPMArea(2, 89, 1, 1, k+x_left, y_bottom-j);
+			else
+				copyXPMArea(2, 90, 1, 1, k+x_left, y_bottom-j);
+		}
+		p += 1;
+	}
+}
+
+
+/*******************************************************************************\
+|* usage																	   *|
+\*******************************************************************************/
+
+void usage(void) {
+
+	fprintf(stderr, "\nwmmon - programming: tijno, (de)bugging & design warp, webhosting: bobby\n\n");
+	fprintf(stderr, "usage:\n");
+	fprintf(stderr, "\t-display <display name>\n");
+	fprintf(stderr, "\t-h\tthis screen\n");
+	fprintf(stderr, "\t-v\tprint the version number\n");
+	fprintf(stderr, "\t-i\tstartup in DiskIO mode\n");
+	fprintf(stderr, "\t-s\tstartup in SysInfo mode\n");
+	fprintf(stderr, "\n");
+}
+
+/*******************************************************************************\
+|* printversion																   *|
+\*******************************************************************************/
+
+void printversion(void) {
+
+	if (!strcmp(ProgName, "wmmon")) {
+		fprintf(stderr, "%s\n", WMMON_VERSION);
+	}
+}
diff --git a/wmtetris/wmtetris/wmtetris-mask.xbm b/wmtetris/wmtetris/wmtetris-mask.xbm
new file mode 100644
index 0000000..43678dc
--- /dev/null
+++ b/wmtetris/wmtetris/wmtetris-mask.xbm
@@ -0,0 +1,46 @@
+#define wmtetris_mask_width 64
+#define wmtetris_mask_height 64
+static unsigned char wmtetris_mask_bits[] = {
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0x0f, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f,
+   0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0xf0, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0x0f, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f,
+   0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0xf0, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0x0f, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f,
+   0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0xf0, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0x0f, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f,
+   0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0xf0, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0x0f, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f,
+   0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0xf0, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0x0f, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f,
+   0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0xf0, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0x0f, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f,
+   0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0xf0, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0x0f, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f,
+   0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0xf0, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0x0f, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f,
+   0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0xf0, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0x0f, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f,
+   0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0xf0, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0x0f, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f,
+   0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0xf0, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0x0f, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f,
+   0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0xf0, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0x0f, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f,
+   0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0xf0, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0x0f, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f,
+   0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0xf0, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0x0f, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f,
+   0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0xf0, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0x0f, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f,
+   0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0xf0, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0x0f, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f,
+   0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0xf0, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0x0f, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f,
+   0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0xf0, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0x0f, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
diff --git a/wmtetris/wmtetris/wmtetris.c b/wmtetris/wmtetris/wmtetris.c
new file mode 100644
index 0000000..fc8fff5
--- /dev/null
+++ b/wmtetris/wmtetris/wmtetris.c
@@ -0,0 +1,302 @@
+#include <stdio.h>
+#include <unistd.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include <X11/Xlib.h>
+#include <X11/xpm.h>
+
+#include "../wmgeneral/wmgeneral.h"
+
+#include "wmtetris.xpm"
+#include "wmtetris-mask.xbm"
+
+#define TEMPORAL_RESOLUTION 10000
+#define INITIAL_DELAY 250000
+#define FAST_MODE_DELAY 30000
+#define DELAY_INCREMENT 20000
+
+#define BLOCK_SIZE 3
+#define BOARD_POS_X 4
+#define BOARD_POS_Y 6
+#define BOARD_WIDTH 13
+#define BOARD_HEIGHT 18
+#define NEXT_POS_X 46
+#define NEXT_POS_Y 7
+
+#define BUTTONC 6
+#define BUTTON_NONE 0
+#define BUTTON_ROTATE_LEFT 1
+#define BUTTON_ROTATE_RIGHT 2
+#define BUTTON_MOVE_LEFT 3
+#define BUTTON_MOVE_RIGHT 4
+#define BUTTON_MOVE_DOWN 5
+
+static int buttons[6][4] = {
+	{ 0,  0, 64, 64},
+	{43, 31, 51, 40},
+	{52, 31, 60, 40},
+	{43, 41, 51, 50},
+	{52, 41, 60, 50},
+	{43, 51, 60, 60}
+};
+
+static int initial_figures[7][4][2] = {
+	{ {0, 1}, {1, 1}, {2, 1}, {3, 1} },
+	{ {0, 1}, {1, 1}, {2, 1}, {2, 2} },
+	{ {0, 2}, {1, 2}, {2, 2}, {2, 1} },
+	{ {0, 2}, {1, 1}, {1, 2}, {2, 2} },
+	{ {0, 2}, {1, 2}, {1, 1}, {2, 1} },
+	{ {0, 1}, {1, 1}, {1, 2}, {2, 2} },
+	{ {1, 1}, {2, 1}, {1, 2}, {2, 2} }
+};
+
+unsigned char board[BOARD_WIDTH][BOARD_HEIGHT];
+int score=0;
+
+int which_button(int x, int y);
+int rotate_figure(int direction, int figure[4][2], int fig_x, int fig_y);
+void draw_figure(int figure[4][2], int type, int x, int y);
+void draw_next_figure(int figure[4][2], int type);
+void general_draw_figure(int base_x, int base_y, int figure[4][2],
+						 int type, int x, int y);
+void full_refresh();
+int check_figure_position(int fig_x, int fig_y, int figure[4][2]);
+
+int main(int argc, char *argv[]) {
+	int i, x, y, step, input, fast_mode, progress,
+		fig_x, fig_y, new_figure=1, figure_type, next_figure_type;
+	int figure[4][2] = { {0, 0}, {0, 0}, {0, 0}, {0, 0} },
+		next_figure[4][2] = { {0, 0}, {0, 0}, {0, 0}, {0, 0} };
+	unsigned long delay = INITIAL_DELAY, start_time;
+	XEvent event;
+
+	srand(time());
+
+	for (y = 0; y < BOARD_HEIGHT; y++)
+		for (x = 0; x < BOARD_WIDTH; x++)
+			board[x][y] = 0;
+
+	openXwindow(argc, argv, wmtetris_xpm, wmtetris_mask_bits,
+				wmtetris_mask_width, wmtetris_mask_height);
+	copyXPMArea(64, 0, 64, 64, 0, 0);
+	RedrawWindow();
+
+	fast_mode=0;
+	figure_type = random() % 7;
+	for (i = 0; i < 4; i++) {
+		figure[i][0] = initial_figures[figure_type][i][0];
+		figure[i][1] = initial_figures[figure_type][i][1];
+	}
+	next_figure_type = random() % 7;
+	for (i = 0; i < 4; i++) {
+		next_figure[i][0] = initial_figures[next_figure_type][i][0];
+		next_figure[i][1] = initial_figures[next_figure_type][i][1];
+	}
+	draw_next_figure(next_figure, next_figure_type);
+	fig_x = BOARD_WIDTH / 2 - 1;
+	fig_y = 0;
+	draw_figure(figure, figure_type, fig_x, fig_y);
+	RedrawWindow();
+
+	while (1) {
+		if (check_figure_position(fig_x, fig_y + 1, figure)) {
+			new_figure = 0;
+			draw_figure(figure, -1, fig_x, fig_y);
+			fig_y++;
+		} else {
+			new_figure = 1;
+			for (i = 0; i < 4; i++) {
+				board [fig_x + figure[i][0]] [fig_y + figure[i][1]] = figure_type + 1;
+			}
+
+			progress=0;
+			for (y = 0; y < BOARD_HEIGHT; y++) {
+				for (x = 0; x < BOARD_WIDTH; x++)
+					if (!board[x][y])
+						break;
+				if (x == BOARD_WIDTH) {
+					for (i = y; i > 0; i--)
+						for (x = 0; x < BOARD_WIDTH; x++)
+							board[x][i] = board[x][i-1];
+					progress++;
+				}
+			}
+			score += progress*progress;
+
+			full_refresh();
+
+			i = score;
+			for (x = 3; x >= 0; x--) {
+				copyXPMArea(4 * (i % 10), 100, 3, 5, 44 + 4*x, 24);
+				i /= 10;
+			}
+
+			figure_type = next_figure_type;
+			next_figure_type = random() % 7;
+			for (i = 0; i < 4; i++) {
+				figure[i][0] = next_figure[i][0];
+				figure[i][1] = next_figure[i][1];
+				next_figure[i][0] = initial_figures[next_figure_type][i][0];
+				next_figure[i][1] = initial_figures[next_figure_type][i][1];
+			}
+			draw_next_figure(next_figure, next_figure_type);
+			fig_x = BOARD_WIDTH / 2 - 1;
+			fig_y = 0;
+		}
+		draw_figure(figure, figure_type, fig_x, fig_y);
+		RedrawWindow();
+
+		if (new_figure) {
+			if (!check_figure_position(fig_x, fig_y, figure)) {
+				copyXPMArea(64, 64, 23, 15, 12, 24);
+				RedrawWindow();
+				while (1) {
+					XNextEvent(display, &event);
+					if (event.type == ButtonPress)
+						break;
+					if (event.type == Expose)
+						RedrawWindow();
+				}
+				exit(0);
+			}
+		}
+
+		for (step = 0; step < (fast_mode ? FAST_MODE_DELAY / TEMPORAL_RESOLUTION : INITIAL_DELAY / TEMPORAL_RESOLUTION); step++) {
+			while (XPending(display)) {
+				input = 0;
+
+				XNextEvent(display, &event);
+				switch (event.type) {
+				case ButtonRelease:
+					fast_mode = 0;
+					break;
+				case ButtonPress:
+					if (!(input =
+						  which_button(event.xbutton.x, event.xbutton.y))) {
+/*
+						switch (event.xbutton.button) {
+						case 1:
+							input = BUTTON_MOVE_LEFT;
+							break;
+						case 3:
+							input = BUTTON_MOVE_RIGHT;
+							break;
+						case 2:
+							input = BUTTON_ROTATE_RIGHT;
+							break;
+						}
+*/
+					}
+				}
+				if (input) {
+					draw_figure(figure, -1, fig_x, fig_y);
+					switch (input) {
+					case BUTTON_ROTATE_LEFT:
+						rotate_figure(0, figure, fig_x, fig_y);
+						break;
+					case BUTTON_ROTATE_RIGHT:
+						rotate_figure(1, figure, fig_x, fig_y);
+						break;
+					case BUTTON_MOVE_LEFT:
+						if (check_figure_position(fig_x - 1, fig_y, figure))
+							fig_x--;
+						break;
+					case BUTTON_MOVE_RIGHT:
+						if (check_figure_position(fig_x + 1, fig_y, figure))
+							fig_x++;
+						break;
+					case BUTTON_MOVE_DOWN:
+						fast_mode = 1;
+						break;
+					}
+					draw_figure(figure, figure_type, fig_x, fig_y);
+					RedrawWindow();
+				}
+			}
+			usleep(TEMPORAL_RESOLUTION);
+		}
+	}
+}
+
+int which_button(int x, int y) {
+	int i;
+	
+	for (i = BUTTONC - 1; i >= 0; i--) {
+		if ((buttons[i][0] <= x && x < buttons[i][2]) &&
+			(buttons[i][1] <= y && y < buttons[i][3]))
+		 break;
+	}
+	return i;
+}
+
+int rotate_figure(int direction, int figure[4][2], int fig_x, int fig_y) {
+	int i, temp[4][2];
+
+	for (i = 0; i < 4; i++) {
+		temp[i][0] = direction ? 3 - figure[i][1] :     figure[i][1];
+		temp[i][1] = direction ?     figure[i][0] : 3 - figure[i][0];
+	}
+	if (check_figure_position(fig_x, fig_y, temp)) {
+		for (i = 0; i < 4; i++) {
+			figure[i][0] = temp[i][0];
+			figure[i][1] = temp[i][1];
+		}
+		return 1;
+	} else {
+		return 0;
+	}
+}
+
+void draw_figure(int figure[4][2], int type, int x, int y) {
+	general_draw_figure(BOARD_POS_X, BOARD_POS_Y, figure, type, x, y);
+}
+
+void draw_next_figure(int figure[4][2], int type) {
+	copyXPMArea(64 + NEXT_POS_X, NEXT_POS_Y, BLOCK_SIZE * 4, BLOCK_SIZE * 4,
+				NEXT_POS_X, NEXT_POS_Y);
+	general_draw_figure(NEXT_POS_X, NEXT_POS_Y, figure, type, 0, 0);
+}
+
+void general_draw_figure(int base_x, int base_y, int figure[4][2],
+						 int type, int x, int y)
+{
+	int i, block_x, block_y;
+
+	for (i = 0; i < 4; i++) {
+		block_x = base_x + BLOCK_SIZE * (x + figure[i][0]);
+		block_y = base_y + BLOCK_SIZE * (y + figure[i][1]);
+		if (type == -1)
+			copyXPMArea(64 + block_x, block_y, BLOCK_SIZE, BLOCK_SIZE, block_x, block_y);
+		else
+			copyXPMArea(0, 64 + BLOCK_SIZE * type, BLOCK_SIZE, BLOCK_SIZE, block_x, block_y);
+	}
+}
+
+void full_refresh() {
+	int x, y;
+
+	for (y = 0; y < BOARD_HEIGHT; y++)
+		for (x = 0; x < BOARD_WIDTH; x++)
+			if (board[x][y])
+				copyXPMArea(0, 64 + BLOCK_SIZE * (board[x][y] - 1), BLOCK_SIZE, BLOCK_SIZE,
+							BOARD_POS_X + BLOCK_SIZE * x, BOARD_POS_Y + BLOCK_SIZE * y);
+			else
+				copyXPMArea(64 + BOARD_POS_X + BLOCK_SIZE * x, BOARD_POS_Y + BLOCK_SIZE * y, 
+							BLOCK_SIZE, BLOCK_SIZE, 
+							BOARD_POS_X + BLOCK_SIZE * x, BOARD_POS_Y + BLOCK_SIZE * y);
+}
+
+int check_figure_position(int fig_x, int fig_y, int figure[4][2]) {
+	int i, x, y;
+
+	for (i = 0; i < 4; i++) {
+		x = fig_x + figure[i][0];
+		y = fig_y + figure[i][1];
+		if ((x < 0) || (x >= BOARD_WIDTH) || (y < 0) || (y >= BOARD_HEIGHT))
+			return 0;
+		if (board[x][y])
+			return 0;
+	}
+	return 1;
+}
diff --git a/wmtetris/wmtetris/wmtetris.h b/wmtetris/wmtetris/wmtetris.h
new file mode 100644
index 0000000..16d612a
--- /dev/null
+++ b/wmtetris/wmtetris/wmtetris.h
@@ -0,0 +1,40 @@
+/*  wmapm.h -- Header file for WMAPM
+ *
+ *  wmapm-1.2 (C) 1998 Chris D. Faulhaber <[email protected]>
+ *
+ * This program 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; either version 2, or (at your option)
+ * any later version.
+ *
+ * This program 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 (see the file COPYING); if not, write to the
+ * Free Software Foundation, Inc.,
+ * 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA
+ ***********************************************************************/
+
+#define DELAY 250000          /* Delay between refreshes (in microseconds) */
+
+#define WMAPM_VERSION "1.2"
+
+typedef struct apm_info {
+   const char driver_version[10];
+   int        apm_version_major;
+   int        apm_version_minor;
+   int        apm_flags;
+   int        ac_line_status;
+   int        battery_status;
+   int        battery_flags;
+   int        battery_percentage;
+   int        battery_time;
+   int        using_minutes;
+} apm_info;
+
+#ifndef APM_32_BIT_SUPPORT
+#define APM_32_BIT_SUPPORT      0x0002
+#endif
diff --git a/wmtetris/wmtetris/wmtetris.xpm b/wmtetris/wmtetris/wmtetris.xpm
new file mode 100644
index 0000000..52a491b
--- /dev/null
+++ b/wmtetris/wmtetris/wmtetris.xpm
@@ -0,0 +1,532 @@
+/* XPM */
+static char * wmtetris_xpm[] = {
+"128 120 409 2",
+"  	c None",
+". 	c #000000",
+"+ 	c #0000FF",
+"@ 	c #010000",
+"# 	c #020000",
+"$ 	c #030000",
+"% 	c #040000",
+"& 	c #4D4D4D",
+"* 	c #494949",
+"= 	c #454545",
+"- 	c #424242",
+"; 	c #3F3F3F",
+"> 	c #3D3D3D",
+", 	c #3C3C3C",
+"' 	c #3A3A3A",
+") 	c #717571",
+"! 	c #9E9A9E",
+"~ 	c #181818",
+"{ 	c #BEBEBE",
+"] 	c #CFCFCF",
+"^ 	c #8E8A8E",
+"/ 	c #616561",
+"( 	c #CFCBCF",
+"_ 	c #A6A2A6",
+": 	c #DFDFDF",
+"< 	c #EFEBEF",
+"[ 	c #E7E7E7",
+"} 	c #BEBABE",
+"| 	c #DFDBDF",
+"1 	c #969296",
+"2 	c #C7C7C7",
+"3 	c #E7E3E7",
+"4 	c #AEAEAE",
+"5 	c #696969",
+"6 	c #B6AEAE",
+"7 	c #717171",
+"8 	c #B6B2B6",
+"9 	c #383430",
+"0 	c #050000",
+"a 	c #414141",
+"b 	c #3E3E3E",
+"c 	c #383838",
+"d 	c #363636",
+"e 	c #343434",
+"f 	c #5F635F",
+"g 	c #848484",
+"h 	c #060A06",
+"i 	c #5F5F5F",
+"j 	c #A4A4A4",
+"k 	c #B4B4B4",
+"l 	c #B4B0B4",
+"m 	c #C5BDBD",
+"n 	c #161A16",
+"o 	c #9C989C",
+"p 	c #47433F",
+"q 	c #161616",
+"r 	c #949494",
+"s 	c #474747",
+"t 	c #16120E",
+"u 	c #949094",
+"v 	c #4F4F4F",
+"w 	c #948C8C",
+"x 	c #57534F",
+"y 	c #8C8C8C",
+"z 	c #575757",
+"A 	c #160E0E",
+"B 	c #8C888C",
+"C 	c #5F5B57",
+"D 	c #060000",
+"E 	c #2E2A26",
+"F 	c #070000",
+"G 	c #393939",
+"H 	c #353535",
+"I 	c #333333",
+"J 	c #313131",
+"K 	c #2F2F2F",
+"L 	c #4D514D",
+"M 	c #8A868A",
+"N 	c #8A8A8A",
+"O 	c #7A7A7A",
+"P 	c #928E92",
+"Q 	c #929292",
+"R 	c #8A8282",
+"S 	c #2D312D",
+"T 	c #0C0C0C",
+"U 	c #827E82",
+"V 	c #0C0804",
+"W 	c #AAA6AA",
+"X 	c #A2A2A2",
+"Y 	c #040404",
+"Z 	c #45413D",
+"` 	c #0C0404",
+" .	c #827A7A",
+"..	c #726E72",
+"+.	c #7A7272",
+"@.	c #4D4945",
+"#.	c #241C1C",
+"$.	c #928A8A",
+"%.	c #140804",
+"&.	c #080000",
+"*.	c #2E2E2E",
+"=.	c #2B2B2B",
+"-.	c #292929",
+";.	c #3B3F3B",
+">.	c #808080",
+",.	c #787878",
+"'.	c #787478",
+").	c #1A1A1A",
+"!.	c #686868",
+"~.	c #231E1A",
+"{.	c #686468",
+"].	c #232323",
+"^.	c #2B2323",
+"/.	c #685F5B",
+"(.	c #332F2B",
+"_.	c #5B5753",
+":.	c #2B2723",
+"<.	c #5B5B5B",
+"[.	c #3B3733",
+"}.	c #120A0A",
+"|.	c #433F3B",
+"1.	c #0A0000",
+"2.	c #2D2D2D",
+"3.	c #272727",
+"4.	c #252525",
+"5.	c #242424",
+"6.	c #292D29",
+"7.	c #5E5551",
+"8.	c #191410",
+"9.	c #494D49",
+"0.	c #5E5A5E",
+"a.	c #5E5E5E",
+"b.	c #100C08",
+"c.	c #515151",
+"d.	c #191010",
+"e.	c #514D49",
+"f.	c #666266",
+"g.	c #211D19",
+"h.	c #292521",
+"i.	c #080400",
+"j.	c #413D39",
+"k.	c #312D29",
+"l.	c #0C0000",
+"m.	c #212121",
+"n.	c #1F1F1F",
+"o.	c #090000",
+"p.	c #0B0000",
+"q.	c #0D0000",
+"r.	c #1E1E1E",
+"s.	c #191919",
+"t.	c #0E0000",
+"u.	c #0F0000",
+"v.	c #141414",
+"w.	c #100000",
+"x.	c #0E0E0E",
+"y.	c #110000",
+"z.	c #120000",
+"A.	c #130000",
+"B.	c #140000",
+"C.	c #150000",
+"D.	c #160000",
+"E.	c #170000",
+"F.	c #180000",
+"G.	c #190000",
+"H.	c #1A0000",
+"I.	c #1B0000",
+"J.	c #1C0000",
+"K.	c #1D0000",
+"L.	c #1E0000",
+"M.	c #4E4E4E",
+"N.	c #4A4A4A",
+"O.	c #444444",
+"P.	c #404040",
+"Q.	c #1F0000",
+"R.	c #200000",
+"S.	c #210000",
+"T.	c #220000",
+"U.	c #230000",
+"V.	c #008F00",
+"W.	c #00E100",
+"X.	c #240000",
+"Y.	c #250000",
+"Z.	c #260000",
+"`.	c #270000",
+" +	c #280000",
+".+	c #290000",
+"++	c #2A0000",
+"@+	c #2B0000",
+"#+	c #2C0000",
+"$+	c #2D0000",
+"%+	c #2E0000",
+"&+	c #D7D3D7",
+"*+	c #9E9E9E",
+"=+	c #2F0000",
+"-+	c #515551",
+";+	c #300000",
+">+	c #310000",
+",+	c #303430",
+"'+	c #000400",
+")+	c #320000",
+"!+	c #282C28",
+"~+	c #080C08",
+"{+	c #969696",
+"]+	c #330000",
+"^+	c #340000",
+"/+	c #350000",
+"(+	c #360000",
+"_+	c #370000",
+":+	c #380000",
+"<+	c #390000",
+"[+	c #3A0000",
+"}+	c #3B0000",
+"|+	c #3C0000",
+"1+	c #3D0000",
+"2+	c #3E0000",
+"3+	c #3F0000",
+"4+	c #400000",
+"5+	c #410000",
+"6+	c #420000",
+"7+	c #616161",
+"8+	c #430000",
+"9+	c #440000",
+"0+	c #450000",
+"a+	c #460000",
+"b+	c #470000",
+"c+	c #480000",
+"d+	c #490000",
+"e+	c #4A0000",
+"f+	c #4B0000",
+"g+	c #4C0000",
+"h+	c #4D0000",
+"i+	c #4E0000",
+"j+	c #4F0000",
+"k+	c #500000",
+"l+	c #510000",
+"m+	c #6B6B6B",
+"n+	c #0D0D0D",
+"o+	c #520000",
+"p+	c #530000",
+"q+	c #540000",
+"r+	c #505050",
+"s+	c #550000",
+"t+	c #560000",
+"u+	c #131313",
+"v+	c #570000",
+"w+	c #580000",
+"x+	c #590000",
+"y+	c #00C700",
+"z+	c #00B200",
+"A+	c #009A00",
+"B+	c #FFFFFF",
+"C+	c #F8F8F8",
+"D+	c #F2F2F2",
+"E+	c #EFEFEF",
+"F+	c #EDEDED",
+"G+	c #ECECEC",
+"H+	c #EAEAEA",
+"I+	c #E9E9E9",
+"J+	c #008600",
+"K+	c #FEFEFE",
+"L+	c #FBFBFB",
+"M+	c #F9F9F9",
+"N+	c #F5F5F5",
+"O+	c #F3F3F3",
+"P+	c #EBEBEB",
+"Q+	c #E8E8E8",
+"R+	c #E4E4E4",
+"S+	c #E2E2E2",
+"T+	c #006D00",
+"U+	c #F4F4F4",
+"V+	c #E6E6E6",
+"W+	c #E5E5E5",
+"X+	c #E0E0E0",
+"Y+	c #DEDEDE",
+"Z+	c #DDDDDD",
+"`+	c #DBDBDB",
+" @	c #D8D8D8",
+".@	c #D7D7D7",
+"+@	c #00C7C7",
+"@@	c #00B2B6",
+"#@	c #009A9E",
+"$@	c #E3E3E3",
+"%@	c #D9D9D9",
+"&@	c #D6D6D6",
+"*@	c #D5D5D5",
+"=@	c #D3D3D3",
+"-@	c #D1D1D1",
+";@	c #D0D0D0",
+">@	c #CDCDCD",
+",@	c #CBCBCB",
+"'@	c #CACACA",
+")@	c #C8C8C8",
+"!@	c #008686",
+"~@	c #DCDCDC",
+"{@	c #D4D4D4",
+"]@	c #CECECE",
+"^@	c #C9C9C9",
+"/@	c #C6C6C6",
+"(@	c #C5C5C5",
+"_@	c #C1C1C1",
+":@	c #C0C0C0",
+"<@	c #006D69",
+"[@	c #0000C0",
+"}@	c #D2D2D2",
+"|@	c #CCCCCC",
+"1@	c #C4C4C4",
+"2@	c #C3C3C3",
+"3@	c #BFBFBF",
+"4@	c #BBBBBB",
+"5@	c #B9B9B9",
+"6@	c #B6B6B6",
+"7@	c #B5B5B5",
+"8@	c #0000C7",
+"9@	c #0000B6",
+"0@	c #00009E",
+"a@	c #C2C2C2",
+"b@	c #BDBDBD",
+"c@	c #BCBCBC",
+"d@	c #B7B7B7",
+"e@	c #B2B2B2",
+"f@	c #AFAFAF",
+"g@	c #ABABAB",
+"h@	c #A9A9A9",
+"i@	c #A8A8A8",
+"j@	c #A6A6A6",
+"k@	c #A5A5A5",
+"l@	c #000086",
+"m@	c #000069",
+"n@	c #ADADAD",
+"o@	c #A7A7A7",
+"p@	c #A0A0A0",
+"q@	c #9D9D9D",
+"r@	c #9C9C9C",
+"s@	c #9A9A9A",
+"t@	c #999999",
+"u@	c #979797",
+"v@	c #919191",
+"w@	c #8F8F8F",
+"x@	c #C700C7",
+"y@	c #B600B6",
+"z@	c #9E009E",
+"A@	c #A3A3A3",
+"B@	c #9B9B9B",
+"C@	c #959595",
+"D@	c #909090",
+"E@	c #898989",
+"F@	c #878787",
+"G@	c #828282",
+"H@	c #860086",
+"I@	c #989898",
+"J@	c #939393",
+"K@	c #8E8E8E",
+"L@	c #8B8B8B",
+"M@	c #858585",
+"N@	c #7D7D7D",
+"O@	c #7C7C7C",
+"P@	c #797979",
+"Q@	c #777777",
+"R@	c #690069",
+"S@	c #888888",
+"T@	c #838383",
+"U@	c #7E7E7E",
+"V@	c #7B7B7B",
+"W@	c #767676",
+"X@	c #727272",
+"Y@	c #707070",
+"Z@	c #6F6F6F",
+"`@	c #6D6D6D",
+" #	c #C70000",
+".#	c #B60000",
+"+#	c #9E0000",
+"@#	c #868686",
+"##	c #282828",
+"$#	c #818181",
+"%#	c #747474",
+"&#	c #737373",
+"*#	c #6E6E6E",
+"=#	c #666666",
+"-#	c #656565",
+";#	c #636363",
+">#	c #860000",
+",#	c #757575",
+"'#	c #6C6C6C",
+")#	c #646464",
+"!#	c #5A5A5A",
+"~#	c #585858",
+"{#	c #565656",
+"]#	c #690000",
+"^#	c #BAB8BA",
+"/#	c #6A6A6A",
+"(#	c #676767",
+"_#	c #595959",
+":#	c #545454",
+"<#	c #535353",
+"[#	c #4B4B4B",
+"}#	c #C7C700",
+"|#	c #B6B200",
+"1#	c #9E9A00",
+"2#	c #868600",
+"3#	c #696D00",
+"4#	c #797D79",
+"5#	c #696D69",
+"6#	c #414541",
+"7#	c #202020",
+"8#	c #383C38",
+"9#	c #202420",
+"0#	c #595D59",
+"a#	c #101410",
+"b#	c #CF0000",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + . . . . . . . . . . . . . . . . @ @ @ @ @ @ @ # # # # # # $ $ $ $ $ $ $ % % % & * = - ; > , ' ' ' , > ; - = * & + + + + ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + . ) ! ~ ) { ] ^ / ( _ : < [ } ( < [ | 1 | < [ { 2 < 3 4 5 | < [ 6 7 ( 3 8 9 0 * = a b ' c d e e e d c ' b a = * + + + + ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + @ f g h i j k k l m ; n o p q r s . . . t u v t w x t y z A B C A B i D ; E F = a > G H I J K K K J I H G > a = + + + + ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + $ L M N O P Q O R Q S T U H V R W X L . Y O Z `  .X X ..` % +.@.. #.$.X +.%.&.- b G e J *.=.-.-.-.=.*.J e G b - + + + + ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + % ;.>.,.>.'.,.).# !.~.# {.].# {.^.. . . . /.(.# /._.{.:.. . <.[.. ^.}.. _.|.1.; ' H J 2.-.3.4.5.4.3.-.2.J H ' ; + + + + ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + D 6.7.8.9.0.a.b.. c.d.. e.8.. e.f.f.f.b.. * g.. * h.i.e.j.f.0.a.e.k.a.f.c.&.l.> c I *.-.4.m.n.n.n.m.4.-.*.I c > + + + + ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + F &.&.&.&.&.&.&.o.o.o.o.o.o.1.1.1.1.1.1.1.p.p.p.p.p.p.p.l.l.l.l.l.l.q.q.q.q.q., d J =.3.m.r.).s.).r.m.3.=.J d , + + + + ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + o.o.o.o.1.1.1.1.1.1.1.p.p.p.p.p.p.l.l.l.l.l.l.l.q.q.q.q.q.q.t.t.t.t.t.t.t.u.u.' e K -.4.n.).q v.q ).n.4.-.K e ' + + + + ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + p.p.p.p.p.p.p.l.l.l.l.l.l.l.q.q.q.q.q.q.t.t.t.t.t.t.t.u.u.u.u.u.u.u.w.w.w.w.w.' e K -.5.n.s.v.x.v.s.n.5.-.K e ' + + + + ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + l.l.l.q.q.q.q.q.q.q.t.t.t.t.t.t.t.u.u.u.u.u.u.w.w.w.w.w.w.w.y.y.y.y.y.y.y.z.z.' e K -.4.n.).q v.q ).n.4.-.K e ' + + + + ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + t.t.t.t.t.t.u.u.u.u.u.u.u.w.w.w.w.w.w.w.y.y.y.y.y.y.z.z.z.z.z.z.z.A.A.A.A.A.A., d J =.3.m.r.).s.).r.m.3.=.J d , + + + + ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + u.u.u.w.w.w.w.w.w.y.y.y.y.y.y.y.z.z.z.z.z.z.z.A.A.A.A.A.A.B.B.B.B.B.B.B.C.C.C.> c I *.-.4.m.n.n.n.m.4.-.*.I c > + + + + ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + y.y.y.y.y.y.z.z.z.z.z.z.A.A.A.A.A.A.A.B.B.B.B.B.B.B.C.C.C.C.C.C.D.D.D.D.D.D.D.; ' H J 2.-.3.4.5.4.3.-.2.J H ' ; + + + + ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + z.z.A.A.A.A.A.A.A.B.B.B.B.B.B.C.C.C.C.C.C.C.D.D.D.D.D.D.D.E.E.E.E.E.E.F.F.F.F.- b G e J *.=.-.-.-.=.*.J e G b - + + + + ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + B.B.B.B.B.C.C.C.C.C.C.C.D.D.D.D.D.D.E.E.E.E.E.E.E.F.F.F.F.F.F.G.G.G.G.G.G.G.H.= a > G H I J K K K J I H G > a = + + + + ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + C.D.D.D.D.D.D.D.E.E.E.E.E.E.E.F.F.F.F.F.F.G.G.G.G.G.G.G.H.H.H.H.H.H.H.I.I.I.I.* = a b ' c d e e e d c ' b a = * + + + + ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + E.E.E.E.F.F.F.F.F.F.F.G.G.G.G.G.G.G.H.H.H.H.H.H.I.I.I.I.I.I.I.J.J.J.J.J.J.J.K.& * = - ; > , ' ' ' , > ; - = * & + + + + ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + G.G.G.G.G.G.G.H.H.H.H.H.H.H.I.I.I.I.I.I.J.J.J.J.J.J.J.K.K.K.K.K.K.K.L.L.L.L.L.c.M.N.s O.- a P.; P.a - O.s N.M.c.+ + + + ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + H.H.H.H.I.I.I.I.I.I.J.J.J.J.J.J.J.K.K.K.K.K.K.K.L.L.L.L.L.L.Q.Q.Q.Q.Q.Q.Q.R.R.. . . . . . . . . . . . . . . . . + + + + ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + J.J.J.J.J.J.J.K.K.K.K.K.K.L.L.L.L.L.L.L.Q.Q.Q.Q.Q.Q.Q.R.R.R.R.R.R.S.S.S.S.S.S.. . . . . . . . . . . . . . . . . + + + + ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + K.K.K.L.L.L.L.L.L.L.Q.Q.Q.Q.Q.Q.R.R.R.R.R.R.R.S.S.S.S.S.S.S.T.T.T.T.T.T.U.U.U.. V.W.V.. V.W.V.. V.W.V.. V.W.V.. + + + + ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + Q.Q.Q.Q.Q.Q.R.R.R.R.R.R.S.S.S.S.S.S.S.T.T.T.T.T.T.T.U.U.U.U.U.U.U.X.X.X.X.X.X.. W.. W.. W.. W.. W.. W.. W.. W.. + + + + ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + R.R.S.S.S.S.S.S.S.T.T.T.T.T.T.T.U.U.U.U.U.U.X.X.X.X.X.X.X.Y.Y.Y.Y.Y.Y.Y.Z.Z.Z.. W.. W.. W.. W.. W.. W.. W.. W.. + + + + ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + T.T.T.T.T.U.U.U.U.U.U.U.X.X.X.X.X.X.X.Y.Y.Y.Y.Y.Y.Z.Z.Z.Z.Z.Z.Z.`.`.`.`.`.`.`.. W.. W.. W.. W.. W.. W.. W.. W.. + + + + ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + U.U.X.X.X.X.X.X.Y.Y.Y.Y.Y.Y.Y.Z.Z.Z.Z.Z.Z.`.`.`.`.`.`.`. + + + + + + +.+.+.+.+. V.W.V.. V.W.V.. V.W.V.. V.W.V.. + + + + ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + Y.Y.Y.Y.Y.Z.Z.Z.Z.Z.Z.`.`.`.`.`.`.`. + + + + + + +.+.+.+.+.+.+++++++++++++++@+. . . . . . . . . . . . . . . . . + + + + ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + Z.`.`.`.`.`.`.`. + + + + + +.+.+.+.+.+.+.+++++++++++++++@+@+@+@+@+@+#+#+#+#+#+. . . . . . . . . . . . . . . . . + + + + ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + +  + + + +.+.+.+.+.+.+.+++++++++++++@+@+@+@+@+@+@+#+#+#+#+#+#+$+$+$+$+$+$+$+%+%+&+&+&+&+&+&+&+*+. &+&+&+&+&+&+&+*++ + + + ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + ++++++++++++++@+@+@+@+@+@+@+#+#+#+#+#+#+$+$+$+$+$+$+$+%+%+%+%+%+%+%+=+=+=+=+=+&+*+*+*+*+*+*+-+. &+*+*+*+*+*+*+-++ + + + ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + @+@+@+#+#+#+#+#+#+#+$+$+$+$+$+$+$+%+%+%+%+%+%+=+=+=+=+=+=+=+;+;+;+;+;+;+;+>+>+&+1 ,+'+'+,+1 -+. &+1 ,+'+'+,+1 -++ + + + ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + $+$+$+$+$+$+%+%+%+%+%+%+%+=+=+=+=+=+=+=+;+;+;+;+;+;+>+>+>+>+>+>+>+)+)+)+)+)+)+&+!+~+{+{+~+!+-+. &+!+~+{+{+~+!+-++ + + + ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + %+%+%+=+=+=+=+=+=+;+;+;+;+;+;+;+>+>+>+>+>+>+)+)+)+)+)+)+)+]+]+]+]+]+]+]+^+^+^+&+. 7 *+9.*+. -+. &+. *+9.*+7 . -++ + + + ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + ;+;+;+;+;+;+>+>+>+>+>+>+)+)+)+)+)+)+)+]+]+]+]+]+]+]+^+^+^+^+^+^+/+/+/+/+/+/+/+&+!+. 7 . 9.*+-+. &+*+9.. 7 . !+-++ + + + ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + >+>+)+)+)+)+)+)+]+]+]+]+]+]+]+^+^+^+^+^+^+^+/+/+/+/+/+/+/+(+(+(+(+(+(+_+_+_+_+&+1 !+. . . 9.-+. &+9.. . . !+1 -++ + + + ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + ]+]+]+]+]+^+^+^+^+^+^+/+/+/+/+/+/+/+(+(+(+(+(+(+(+_+_+_+_+_+_+:+:+:+:+:+:+:+<+&+*+*+*+*+*+*+-+. &+*+*+*+*+*+*+-++ + + + ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + ^+/+/+/+/+/+/+/+(+(+(+(+(+(+(+_+_+_+_+_+_+:+:+:+:+:+:+:+<+<+<+<+<+<+<+[+[+[+[+*+-+-+-+-+-+-+-+. *+-+-+-+-+-+-+-++ + + + ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + (+(+(+(+_+_+_+_+_+_+_+:+:+:+:+:+:+<+<+<+<+<+<+<+[+[+[+[+[+[+[+}+}+}+}+}+}+}+|+. . . . . . . . . . . . . . . . . + + + + ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + :+:+:+:+:+:+:+<+<+<+<+<+<+<+[+[+[+[+[+[+}+}+}+}+}+}+}+|+|+|+|+|+|+|+1+1+1+1+1+&+&+&+&+&+&+&+*+. &+&+&+&+&+&+&+*++ + + + ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + <+<+<+<+[+[+[+[+[+[+}+}+}+}+}+}+}+|+|+|+|+|+|+|+1+1+1+1+1+1+2+2+2+2+2+2+2+3+3+&+*+*+*+*+*+*+-+. &+*+*+*+*+*+*+-++ + + + ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + }+}+}+}+}+}+}+|+|+|+|+|+|+1+1+1+1+1+1+1+2+2+2+2+2+2+3+3+3+3+3+3+3+4+4+4+4+4+4+&+*+*+*+) * *+-+. &+*+* ) *+*+*+-++ + + + ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + |+|+|+1+1+1+1+1+1+1+2+2+2+2+2+2+3+3+3+3+3+3+3+4+4+4+4+4+4+5+5+5+5+5+5+5+6+6+6+&+*+7+c . . *+-+. &+*+. . c 7+*+-++ + + + ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + 2+2+2+2+2+2+3+3+3+3+3+3+3+4+4+4+4+4+4+5+5+5+5+5+5+5+6+6+6+6+6+6+6+8+8+8+8+8+8+&+c ~+'+. . *+-+. &+*+. . '+~+c -++ + + + ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + 3+3+4+4+4+4+4+4+4+5+5+5+5+5+5+6+6+6+6+6+6+6+8+8+8+8+8+8+8+9+9+9+9+9+9+9+0+0+0+&+*+7+c . . *+-+. &+*+. . c 7+*+-++ + + + ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + 5+5+5+5+5+6+6+6+6+6+6+6+8+8+8+8+8+8+8+9+9+9+9+9+9+0+0+0+0+0+0+0+a+a+a+a+a+a+b+&+*+*+*+) * *+-+. &+*+* ) *+*+*+-++ + + + ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + 6+6+8+8+8+8+8+8+9+9+9+9+9+9+9+0+0+0+0+0+0+0+a+a+a+a+a+a+b+b+b+b+b+b+b+c+c+c+c+&+*+*+*+*+*+*+-+. &+*+*+*+*+*+*+-++ + + + ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + 9+9+9+9+9+0+0+0+0+0+0+a+a+a+a+a+a+a+b+b+b+b+b+b+b+c+c+c+c+c+c+d+d+d+d+d+d+d+e+*+-+-+-+-+-+-+-+. *+-+-+-+-+-+-+-++ + + + ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + 0+a+a+a+a+a+a+a+b+b+b+b+b+b+c+c+c+c+c+c+c+d+d+d+d+d+d+d+e+e+e+e+e+e+f+f+f+f+f+. . . . . . . . . . . . . . . . . + + + + ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + b+b+b+b+c+c+c+c+c+c+c+d+d+d+d+d+d+e+e+e+e+e+e+e+f+f+f+f+f+f+f+g+g+g+g+g+g+h+h+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+*++ + + + ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + d+d+d+d+d+d+d+e+e+e+e+e+e+f+f+f+f+f+f+f+g+g+g+g+g+g+g+h+h+h+h+h+h+i+i+i+i+i+i+&+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+-++ + + + ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + e+e+e+f+f+f+f+f+f+f+g+g+g+g+g+g+g+h+h+h+h+h+h+i+i+i+i+i+i+i+j+j+j+j+j+j+j+k+k+&+*+* . . . . . . . . . . . * *+-++ + + + ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + g+g+g+g+g+g+h+h+h+h+h+h+h+i+i+i+i+i+i+i+j+j+j+j+j+j+k+k+k+k+k+k+k+l+l+l+l+l+l+&+*+*+m+n+. . . . . . . n+m+*+*+9.+ + + + ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + h+h+i+i+i+i+i+i+i+j+j+j+j+j+j+j+k+k+k+k+k+k+k+l+l+l+l+l+l+o+o+o+o+o+o+o+p+p+p+&+*+*+*+y *.. . . . . *.y *+*+*+-++ + + + ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + j+j+j+j+j+j+k+k+k+k+k+k+l+l+l+l+l+l+l+o+o+o+o+o+o+o+p+p+p+p+p+p+q+q+q+q+q+q+q+&+*+*+*+*+*+r+. . . r+*+*+*+*+*+-++ + + + ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + k+k+l+l+l+l+l+l+l+o+o+o+o+o+o+p+p+p+p+p+p+p+q+q+q+q+q+q+q+s+s+s+s+s+s+t+t+t+t+&+*+*+*+*+*+*+7 u+7 *+*+*+*+*+*+-++ + + + ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + o+o+o+o+o+p+p+p+p+p+p+p+q+q+q+q+q+q+s+s+s+s+s+s+s+t+t+t+t+t+t+v+v+v+v+v+v+v+w+&+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+-++ + + + ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + p+q+q+q+q+q+q+q+s+s+s+s+s+s+s+t+t+t+t+t+t+v+v+v+v+v+v+v+w+w+w+w+w+w+w+x+x+x+x+*+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-++ + + + ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ",
+"y+z+A++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . B+B+B+. . . . B+. . . C+. . . D+. E+F+G+H+I+                          B+B+B+        B+      B+      B+  B+B+B+B+B+. . . + + + ",
+"z+A+J++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + B+K+. L+M+. . N+O+D+. . F+P+. Q+[ . R+S+. . .                         B+B+  B+B+    B+B+B+    B+B+  B+B+  B+B+      . . . + + + ",
+"A+J+T++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + U+O+. . . . P+I+. V+W+. S+X+Y+Z+`+.  @.@. . .                         B+B+        B+B+  B+B+  B+B+B+B+B+  B+B+      . . . + + + ",
+"+@@@#@+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + I+[ V+R+$@. : Y+. `+%@. &@*@=@-@;@. >@,@'@)@.                         B+B+B+B+B+  B+B+  B+B+  B+B+B+B+B+  B+B+B+B+  . . . + + + ",
+"@@#@!@+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +                               + + + + + + Z+~@. %@.@. {@=@-@] ]@. ,@^@)@/@(@. _@:@. . .                         B+B+  B+B+  B+B+B+B+B+  B+B+B+B+B+  B+B+      . . . + + + ",
+"#@!@<@+ + + + + + + + + + + + + + + + + + + + + + [@+ + + + + + + + + + + + + + + + +                               + + + + + + }@;@. >@|@. ^@2 . 1@2@. 3@{ . 4@5@. 6@7@. . .                         B+B+  B+B+  B+B+  B+B+  B+B+  B+B+  B+B+      . . . + + + ",
+"8@9@0@+ + + + + + + + + *+*+*+*+*+*+*+*+*+*+*+*+*+. . . . . . . . . . . . . . . . . .                               + + + + + + . (@1@a@:@. b@c@. 5@d@. k e@. f@4 . g@h@i@j@k@                          B+B+B+B+  B+B+  B+B+  B+B+  B+B+  B+B+B+B+B+. . . + + + ",
+"9@0@l@+ + + + + + + + + *+*+*+*+*+*+*+*+*+*+*+*+. . . . . . . . . . . . . . . . . . .                               + + + + + + . . . . . . . . . . . . . . . . . . . . . . .                                                                       . . . + + + ",
+"0@l@m@+ + + + + + + + + *+*+*+*+*+*+*+*+*+*+*+. . . . . . . . . . . . . . . . . . . .                               + + . . . . . 4 n@g@. . o@k@. X p@. q@r@s@t@u@. r Q v@w@.                           B+B+B+    B+B+  B+B+  B+B+B+B+B+  B+B+B+B+  . . . + + + ",
+"x@y@z@+ + + + + + + + + *+*+*+*+*+*+        . . . . . . . . .       . . . . . . . . .                               + + . . . . k@A@. p@*+. B@s@. u@C@. Q D@. . . . E@F@. g G@                        B+B+  B+B+  B+B+  B+B+  B+B+        B+B+  B+B+. . . + + + ",
+"y@z@H@+ + + + + + + + + *+*+*+*+*+*+        . . . . . . . . . .     . . . . . . . . .                               + + . . . . t@I@. r J@. D@K@. L@N . F@M@. . . . N@O@. P@Q@                        B+B+  B+B+  B+B+  B+B+  B+B+        B+B+  B+B+. . . + + + ",
+"z@H@R@+ + + + + + + + + *+*+*+*+*+*+      . . . . . . . . . . . .   . . . . . . . . . + + + + + + + + + + + + + + + + + . . . . K@y . E@S@. g T@. >.U@. V@O ,.W@. . X@Y@Z@`@.                         B+B+  B+B+  B+B+  B+B+  B+B+B+B+    B+B+B+B+  . . . + + + ",
+" #.#+#+ + + + + + + + + *+*+*+*+*+*+    @###. . . . . . . . . . . . . . . . . . . . . + + + + + + + + + + + + + + + + + . . . . G@$#. U@O@. P@Q@. %#&#. Y@*#. . . . =#-#;#. .                         B+B+  B+B+  B+B+  B+B+  B+B+        B+B+B+    . . . + + + ",
+".#+#>#+ + + + + + + + + *+*+*+*+*+*+  *+*+*+* . . . . . . . . . . . . . . . . . . . . + + + + + + + + + + + + + + + + + . . . . Q@,#. X@7 . . '#m+5 . . )#;#. . . . <.!#~#{#.                         B+B+  B+B+    B+B+B+    B+B+        B+B+B+B+  . . . + + + ",
+"+#>#]#+ + + + + + + ^#^#*+*+*+*+*+*+  *+*+*+*+m+n+. . . . . . . . . . . . . . . . . . + + + + + + + + + + + + + + + + + . . . . . /#5 (#. . . . i . . . _#z {#:#<#. r+M.. [#*                           B+B+B+        B+      B+B+B+B+B+  B+B+  B+B+. . . + + + ",
+"}#|#1#+ + + + + + + + + *+*+*+*+*+*+*+*+*+*+*+*+y *.. . . . . . .   . . . . . . + + + + + + + + + + + + + + + + + + + + + + + + . . . . . . . . . . . . . . . . . . . . . . .                                                                       + + + + + + ",
+"|#1#2#+ + + + + + + + + *+*+*+*+*+*+*+*+*+*+*+*+*+*+r+. . . . . .   . . . . . . &+&+&+&+&+&+&+*+&+&+&+&+&+&+&+*+                                                + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ",
+"1#2#3#+ + + + + + + + + *+*+*+*+*+*+*+*+*+*+*+*+*+*+*+7 u+. . .     . . . . . . &+*+*+*+*+*+*+-+&+*+*+*+*+*+*+-+                                                + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ",
+"_ 1 4#+ + + + + + + + + *+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+Q H .       . . . . . . &+1 ,+'+'+,+1 -+&+1 ,+'+'+,+1 -+                                                . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + + + + + + + + + + + + ",
+"1 4#5#+ + + + + + + + + *+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+{#      . . . . . . &+!+~+{+{+~+!+-+&+!+~+{+{+~+!+-+                                                . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + + + + + + + + + + + + ",
+"4#5#_#+ + + + + + + + + *+*+*+*+*+*+  *+*+*+*+*+*+*+*+*+*+q@        . . . . . . &+. 7 *+9.*+. -+&+. *+9.*+7 . -+                                                . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + + + + + + + + + + + + ",
+"+ + + + + + + + + + + + *+*+*+*+*+*+      *+*+*+*+*+*+*+q@          . . . . . . &+!+. 7 . 9.*+-+&+*+9.. 7 . !+-+                                                . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + + + + + + + + + + + + ",
+"+ + + + + + + + + + + + *+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+I . . . . . . . . . . . &+1 !+. . . 9.-+&+9.. . . !+1 -+                                                . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + + + + + + + + + + + + ",
+"+ + + + + + + + + + + + *+*+*+*+*+*+*+*+*+*+*+*+*+*+*+:#. . . . . . . . . . . . &+*+*+*+*+*+*+-+&+*+*+*+*+*+*+-+                                                . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + + + + + + + + + + + + ",
+"+ + + + + + + + + + + + + + + + + + + + + + + + + *+W@. . . . . . . . . . . . . *+-+-+-+-+-+-+-+*+-+-+-+-+-+-+-+                                                . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + + + + + + + + + + + + ",
+"+ + + + + + + + + + + + + + + + + + + + + + + + + + . . . . . . . . . . . . . . &+&+&+&+&+&+&+*+&+&+&+&+&+&+&+*+                                                . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + + + + + + + + + + + + ",
+"+ + + + + + + + + + + + + + + + + + + + + + + + + + . . . . . . . . . . . . . . &+*+*+*+*+*+*+-+&+*+*+*+*+*+*+-+                                                . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + + + + + + + + + + + + ",
+"+ + + + + + + + + + + + + + + + + + + + + + + + + *+*+*+*+*+*+*+*+*+*+*+. . . . &+*+*+*+) * *+-+&+*+* ) *+*+*+-+                                                . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + + + + + + + + + + + + ",
+"+ + + + + + + + + + + + + + + + + + + + + + + + + *+*+*+*+*+*+*+*+*+*+*+. . . . &+*+7+c . . *+-+&+*+. . c 7+*+-+                                                . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + + + + + + + + + + + + ",
+"+ + + + + + + + + + + + + + + + + + + + + + + + + *+*+*+*+*+*+*+*+*+*+*+. . . . &+c ~+'+. . *+-+&+*+. . '+~+c -+                                                . . . . . 5 6#7#. . . . . . . 7#6#5   . . . . . . . . . . . . . . + + + + + + + + + + + + + + + ",
+"                                                                                &+*+7+c . . *+-+&+*+. . c 7+*+-+                                                . . . . . *+@#_#!+. . . . . !+_#@#*+  . . . . . . . . . . . . . . + + + + + + + + + + + + + + + ",
+"                                                                                &+*+*+*+) * *+-+&+*+* ) *+*+*+-+                                                . . . . . *+*+*+4#8#. . . 8#4#*+*+*+  . . . . . . . . . . . . . . + + + + + + + + + + + + + + + ",
+"                                                                                &+*+*+*+*+*+*+-+&+*+*+*+*+*+*+-+                                                . . . . . *+*+*+*+*+5 . 5 *+*+*+*+*+  . . . . . . . . . . . . . . + + + + + + + + + + + + + + + ",
+"                                                                                *+-+-+-+-+-+-+-+*+-+-+-+-+-+-+-+                                                . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + + + + + + + + + + + + ",
+"                                                                                &+&+&+&+&+&+&+&+&+&+&+&+&+&+&+*+                                                . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + + + + + + + + + + + + ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . &+*+*+*+*+*+*+*+*+*+*+*+*+*+*+-+                                                . . . . . . . _#9#. . . . 9#_#. . . . . . . . . . . . . . . . . . + + + + + + + + + + + + + + + ",
+"V.W.V.. . W.. . W.W.V.. W.W.V.. W.. W.. W.W.W.. V.W.W.. W.W.W.. V.W.V.. V.W.V.. &+*+*+*+*+*+*+*+*+*+*+*+*+*+*+-+                                                . . . . . . . {+0#a#. . a#0#{+. . . . . . . . . . . . . . . . . . + + + + + + + + + + + + + + + ",
+"W.. W.. W.W.. . . . W.. . . W.. W.. W.. W.. . . W.. . . . . W.. W.. W.. W.. W.. &+5 6#7#. . . . . . . . 7#6#5 9.                                                . . . . . . . *+! 0#'+'+0#! *+. . . . . . . . . . . . . . . . . . + + + + + + + + + + + + + + + ",
+"W.. W.. . W.. . V.W.V.. W.W.V.. V.W.W.. W.W.V.. W.W.V.. . . W.. V.W.V.. V.W.W.. &+*+@#_#!+. . . . . . !+_#@#*+-+                                                . . . . . . . *+*+*+9.9.*+*+*+. . . . . . . . . . . . . . . . . . + + + + + + + + + + + + + + + ",
+"W.. W.. . W.. . W.. . . . . W.. . . W.. . . W.. W.. W.. . . W.. W.. W.. . . W.. &+*+*+*+4#8#. . . . 8#4#*+*+*+-+                                                . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + + + + + + + + + + + + ",
+"V.W.V.. . W.. . W.W.W.. W.W.V.. . . W.. W.W.V.. V.W.V.. . . W.. V.W.V.. W.W.V.. &+*+*+*+*+*+5 . . 5 *+*+*+*+*+-+                                                . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + + + + + + + + + + + + ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . &+*+*+*+*+*+*+*+*+*+*+*+*+*+*+-+                                                . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + + + + + + + + + + + + ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . *+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+                                                . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + + + + + + + + + + + + ",
+"b#b#b#. . b#. . b#b#b#. b#b#b#. b#. b#. b#b#b#. b#b#b#. b#b#b#. b#b#b#. b#b#b#. . . . . . . . . . . . . . . . .                                                 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + + + + + + + + + + + + ",
+"b#. b#. b#b#. . . . b#. . . b#. b#. b#. b#. . . b#. . . . . b#. b#. b#. b#. b#.                                                                                                                                                                         + + + + ",
+"b#. b#. . b#. . b#b#b#. b#b#b#. b#b#b#. b#b#b#. b#b#b#. . . b#. b#b#b#. b#b#b#.                           B+      B+  B+      B+  B+B+B+B+B+  B+B+B+B+B+  B+B+B+B+B+  B+B+B+B+    B+B+B+B+B+    B+B+B+                                                  + + + + ",
+"b#. b#. . b#. . b#. . . . . b#. . . b#. . . b#. b#. b#. . . b#. b#. b#. . . b#.                           B+      B+  B+  B+  B+      B+      B+              B+      B+      B+      B+      B+                                                        + + + + ",
+"b#b#b#. . b#. . b#b#b#. b#b#b#. . . b#. b#b#b#. b#b#b#. . . b#. b#b#b#. b#b#b#.                           B+  B+  B+  B+  B+  B+      B+      B+B+B+B+        B+      B+B+B+B+        B+        B+B+B+                                                  + + + + ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .                           B+  B+  B+  B+      B+      B+      B+              B+      B+  B+          B+              B+                                                + + + + ",
+"                                                                                                          B+      B+  B+      B+      B+      B+B+B+B+B+      B+      B+      B+  B+B+B+B+B+    B+B+B+                                                  + + + + ",
+"+ + + + + + + + +                                                                                                                                                                                                                                       + + + + ",
+"+ + + + + + + + +                                                                                                                                                                                                                                       + + + + ",
+"+ + + + + + + + +                                                                                                                                                                                                                                       + + + + ",
+"+ + + + + + + + +                                                                                                                                                                                                                                       + + + + ",
+"+ + + + + + + + +                                                                                                                                                                                                                                       + + + + ",
+"+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + "};
-- 
2.7.4


-- 
To unsubscribe, send mail to [email protected].
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.