There are many new tests and examples that we wrote internally at VMware,

but couldn't release immediately since they depended on virtual GPU features
which were not yet publicly released in any products.  This checkin moves those
features from our internal repository to the open source repository. Future   
development on these tests and examples will take place directly in the open
source repository.

The primary feature added by this patch is 'Screen Object', a new dynamic
display management extension supported by Workstation 7.0 and Fusion 3.0.
See the README for a quick explanation.
This commit is contained in:
Micah Dowty 2009-10-21 20:20:49 +00:00
parent aab0cde61f
commit 68478eab4b
122 changed files with 10279 additions and 73 deletions

View file

@ -35,6 +35,46 @@ Workstation, Player, or Fusion. Some of the examples will work on
older versions, but Workstation 6.5.x or Fusion 2.0.x is strongly
recommended.
Screen Object
-------------
Any of the examples that begin with "screen-" make use of a new virtual
hardware feature called "Screen Object". This feature first appears in
Workstation 7.0 and Fusion 3.0, and it is enabled by default only for
Windows 7, Windows Server 2008, Windows Vista, and Mac OS guests. To
use Screen Object, you can pick one of those guest OS types or you can
add a configuration option to your VM's VMX file or to your per-user
VMware config file:
svga.enableScreenObject = TRUE
We plan to enable Screen Object by default in a future virtual machine
hardware version. Screen Object is enabled conditionally for the above
guest OS types on hardware version 7 (the current hardware version
for Workstation 6.5 and 7.0, Fusion 2.x and 3.0) in order to provide
better support to the WDDM and Mac OS video drivers on VMware's desktop
products. Screen Object is never available on hardware version 6 and
earlier.
Screen Object allows several new capabilities including more efficient
management of framebuffer memory, dynamic creation and destruction of
virtual monitors, and it is leading up to the deprecation of BAR1
memory in favor of guest system memory.
To see the new Screen Object capabilities in action, try the
screen-multimon test. Note that not all Screen Object features are
fully supported on all host OSes. Currently, only Fusion 3.0 supports
the following features:
- Rendering and reading back from non-rooted screens.
- Preserving contents of screens which overlap in the
virtual coordinate space.
- Hardware-accelerated scaling for the new SVGA3D-to-screen blit.
These are relatively minor edge cases, though. If you design a
multi-monitor driver using Screen Object, it should run correctly on
all hosts that support Screen Object.
Contents
--------

Binary file not shown.

BIN
bin/backdoor-tclo.img Executable file

Binary file not shown.

9
bin/backdoor-tclo.vmx Executable file
View file

@ -0,0 +1,9 @@
config.version = 8
virtualHW.version = 7
memsize = 4
displayname = backdoor-tclo
guestOS = other
mks.enable3d = TRUE
floppy0.startConnected = TRUE
floppy0.fileType = file
floppy0.fileName = backdoor-tclo.img

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
bin/noscreen-cursor.img Executable file

Binary file not shown.

9
bin/noscreen-cursor.vmx Normal file
View file

@ -0,0 +1,9 @@
config.version = 8
virtualHW.version = 7
memsize = 4
displayname = noscreen-cursor
guestOS = other
mks.enable3d = TRUE
floppy0.startConnected = TRUE
floppy0.fileType = file
floppy0.fileName = noscreen-cursor.img

BIN
bin/null.img Executable file

Binary file not shown.

9
bin/null.vmx Normal file
View file

@ -0,0 +1,9 @@
config.version = 8
virtualHW.version = 7
memsize = 4
displayname = null
guestOS = other
mks.enable3d = TRUE
floppy0.startConnected = TRUE
floppy0.fileType = file
floppy0.fileName = null.img

Binary file not shown.

Binary file not shown.

BIN
bin/resolution-set.img Executable file

Binary file not shown.

9
bin/resolution-set.vmx Executable file
View file

@ -0,0 +1,9 @@
config.version = 8
virtualHW.version = 7
memsize = 4
displayname = resolution-set
guestOS = other
mks.enable3d = TRUE
floppy0.startConnected = TRUE
floppy0.fileType = file
floppy0.fileName = resolution-set.img

BIN
bin/screen-annotation.img Executable file

Binary file not shown.

View file

@ -0,0 +1,9 @@
config.version = 8
virtualHW.version = 7
memsize = 16
displayname = screen-annotation
guestOS = other
mks.enable3d = TRUE
floppy0.startConnected = TRUE
floppy0.fileType = file
floppy0.fileName = screen-annotation.img

BIN
bin/screen-cursor.img Executable file

Binary file not shown.

9
bin/screen-cursor.vmx Normal file
View file

@ -0,0 +1,9 @@
config.version = 8
virtualHW.version = 7
memsize = 16
displayname = screen-cursor
guestOS = other
mks.enable3d = TRUE
floppy0.startConnected = TRUE
floppy0.fileType = file
floppy0.fileName = screen-cursor.img

BIN
bin/screen-dma-coalesce.img Executable file

Binary file not shown.

View file

@ -0,0 +1,9 @@
config.version = 8
virtualHW.version = 7
memsize = 16
displayname = screen-dma-coalesce
guestOS = other
mks.enable3d = TRUE
floppy0.startConnected = TRUE
floppy0.fileType = file
floppy0.fileName = screen-dma-coalesce.img

BIN
bin/screen-gmr-discontig.img Executable file

Binary file not shown.

View file

@ -0,0 +1,9 @@
config.version = 8
virtualHW.version = 7
memsize = 32
displayname = screen-gmr-discontig
guestOS = other
mks.enable3d = TRUE
floppy0.startConnected = TRUE
floppy0.fileType = file
floppy0.fileName = screen-gmr-discontig.img

BIN
bin/screen-gmr-remap.img Executable file

Binary file not shown.

9
bin/screen-gmr-remap.vmx Normal file
View file

@ -0,0 +1,9 @@
config.version = 8
virtualHW.version = 7
memsize = 32
displayname = screen-gmr-remap
guestOS = other
mks.enable3d = TRUE
floppy0.startConnected = TRUE
floppy0.fileType = file
floppy0.fileName = screen-gmr-remap.img

BIN
bin/screen-multimon.img Executable file

Binary file not shown.

9
bin/screen-multimon.vmx Normal file
View file

@ -0,0 +1,9 @@
config.version = 8
virtualHW.version = 7
memsize = 16
displayname = screen-multimon
guestOS = other
mks.enable3d = TRUE
floppy0.startConnected = TRUE
floppy0.fileType = file
floppy0.fileName = screen-multimon.img

BIN
bin/screen-present-clip.img Executable file

Binary file not shown.

View file

@ -0,0 +1,9 @@
config.version = 8
virtualHW.version = 7
memsize = 16
displayname = screen-present-clip
guestOS = other
mks.enable3d = TRUE
floppy0.startConnected = TRUE
floppy0.fileType = file
floppy0.fileName = screen-present-clip.img

BIN
bin/screen-render-test.img Executable file

Binary file not shown.

View file

@ -0,0 +1,9 @@
config.version = 8
virtualHW.version = 7
memsize = 16
displayname = screen-render-test
guestOS = other
mks.enable3d = TRUE
floppy0.startConnected = TRUE
floppy0.fileType = file
floppy0.fileName = screen-render-test.img

BIN
bin/screen-simple.img Executable file

Binary file not shown.

9
bin/screen-simple.vmx Normal file
View file

@ -0,0 +1,9 @@
config.version = 8
virtualHW.version = 7
memsize = 16
displayname = screen-simple
guestOS = other
mks.enable3d = TRUE
floppy0.startConnected = TRUE
floppy0.fileType = file
floppy0.fileName = screen-simple.img

BIN
bin/screen-text.img Executable file

Binary file not shown.

9
bin/screen-text.vmx Normal file
View file

@ -0,0 +1,9 @@
config.version = 8
virtualHW.version = 7
memsize = 16
displayname = screen-text
guestOS = other
mks.enable3d = TRUE
floppy0.startConnected = TRUE
floppy0.fileType = file
floppy0.fileName = screen-text.img

Binary file not shown.

Binary file not shown.

BIN
bin/tiny-2d-updates.img Executable file

Binary file not shown.

9
bin/tiny-2d-updates.vmx Normal file
View file

@ -0,0 +1,9 @@
config.version = 8
virtualHW.version = 7
memsize = 4
displayname = tiny-2d-updates
guestOS = other
mks.enable3d = TRUE
floppy0.startConnected = TRUE
floppy0.fileType = file
floppy0.fileName = tiny-2d-updates.img

Binary file not shown.

Binary file not shown.

View file

@ -0,0 +1,6 @@
TARGET = noscreen-cursor.img
APP_SOURCES = main.c
LIB_DIR = ../../lib
include $(LIB_DIR)/Makefile.rules

View file

@ -0,0 +1,96 @@
0xff, 0xff, 0xf0, 0x0f, 0xff, 0xff, 0x00, 0x00,
0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00,
0xff, 0xfc, 0x00, 0x00, 0x3f, 0xff, 0x00, 0x00,
0xff, 0xf0, 0x00, 0x00, 0x0f, 0xff, 0x00, 0x00,
0xff, 0xc0, 0x00, 0x00, 0x03, 0xff, 0x00, 0x00,
0xff, 0x80, 0x00, 0x00, 0x01, 0xff, 0x00, 0x00,
0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
0xfe, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x00,
0xfc, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00,
0xf8, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00,
0xf0, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00,
0xf0, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00,
0xe0, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00,
0xe0, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00,
0xc0, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00,
0xc0, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00,
0x80, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
0x80, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
0x80, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
0x80, 0x00, 0x00, 0x00, 0x00, 0x01, 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, 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, 0x00, 0x00,
0x80, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
0x80, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
0x80, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
0x80, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
0xc0, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00,
0xc0, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00,
0xe0, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00,
0xe0, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00,
0xf0, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00,
0xf0, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00,
0xf8, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00,
0xfc, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00,
0xfe, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x00,
0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
0xff, 0x80, 0x00, 0x00, 0x01, 0xff, 0x00, 0x00,
0xff, 0xc0, 0x00, 0x00, 0x03, 0xff, 0x00, 0x00,
0xff, 0xf0, 0x00, 0x00, 0x0f, 0xff, 0x00, 0x00,
0xff, 0xfc, 0x00, 0x00, 0x3f, 0xff, 0x00, 0x00,
0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00,
0xff, 0xff, 0xf0, 0x0f, 0xff, 0xff, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x03, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x0f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x1f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x7f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
0x01, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
0x03, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
0x03, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
0x07, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
0x0f, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
0x0f, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
0x1f, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
0x1f, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
0x3f, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
0x3f, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
0x3f, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
0x3f, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
0x7f, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
0x7f, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
0x7f, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
0x7f, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xff, 0xff, 0xfe, 0x00, 0x00,
0x00, 0x00, 0x00, 0xff, 0xff, 0xfe, 0x00, 0x00,
0x00, 0x00, 0x00, 0xff, 0xff, 0xfe, 0x00, 0x00,
0x00, 0x00, 0x00, 0xff, 0xff, 0xfe, 0x00, 0x00,
0x00, 0x00, 0x00, 0xff, 0xff, 0xfc, 0x00, 0x00,
0x00, 0x00, 0x00, 0xff, 0xff, 0xfc, 0x00, 0x00,
0x00, 0x00, 0x00, 0xff, 0xff, 0xfc, 0x00, 0x00,
0x00, 0x00, 0x00, 0xff, 0xff, 0xfc, 0x00, 0x00,
0x00, 0x00, 0x00, 0xff, 0xff, 0xf8, 0x00, 0x00,
0x00, 0x00, 0x00, 0xff, 0xff, 0xf8, 0x00, 0x00,
0x00, 0x00, 0x00, 0xff, 0xff, 0xf0, 0x00, 0x00,
0x00, 0x00, 0x00, 0xff, 0xff, 0xf0, 0x00, 0x00,
0x00, 0x00, 0x00, 0xff, 0xff, 0xe0, 0x00, 0x00,
0x00, 0x00, 0x00, 0xff, 0xff, 0xc0, 0x00, 0x00,
0x00, 0x00, 0x00, 0xff, 0xff, 0xc0, 0x00, 0x00,
0x00, 0x00, 0x00, 0xff, 0xff, 0x80, 0x00, 0x00,
0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xff, 0xfe, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xff, 0xf8, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xff, 0xf0, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xff, 0xc0, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

View file

@ -0,0 +1,96 @@
0xff, 0xff, 0xf0, 0x0f, 0xff, 0xff, 0x00, 0x00,
0xff, 0xff, 0x0f, 0x00, 0xff, 0xff, 0x00, 0x00,
0xff, 0xfc, 0xff, 0x00, 0x3f, 0xff, 0x00, 0x00,
0xff, 0xf3, 0xff, 0x00, 0x0f, 0xff, 0x00, 0x00,
0xff, 0xcf, 0xff, 0x00, 0x03, 0xff, 0x00, 0x00,
0xff, 0x9f, 0xff, 0x00, 0x01, 0xff, 0x00, 0x00,
0xff, 0x7f, 0xff, 0x00, 0x00, 0xff, 0x00, 0x00,
0xfe, 0xff, 0xff, 0x00, 0x00, 0x7f, 0x00, 0x00,
0xfd, 0xff, 0xff, 0x00, 0x00, 0x3f, 0x00, 0x00,
0xfb, 0xff, 0xff, 0x00, 0x00, 0x1f, 0x00, 0x00,
0xf3, 0xff, 0xff, 0x00, 0x00, 0x0f, 0x00, 0x00,
0xf7, 0xff, 0xff, 0x00, 0x00, 0x0f, 0x00, 0x00,
0xef, 0xff, 0xff, 0x00, 0x00, 0x07, 0x00, 0x00,
0xef, 0xff, 0xff, 0x00, 0x00, 0x07, 0x00, 0x00,
0xdf, 0xff, 0xff, 0x00, 0x00, 0x03, 0x00, 0x00,
0xdf, 0xff, 0xff, 0x00, 0x00, 0x03, 0x00, 0x00,
0xbf, 0xff, 0xff, 0x00, 0x00, 0x01, 0x00, 0x00,
0xbf, 0xff, 0xff, 0x00, 0x00, 0x01, 0x00, 0x00,
0xbf, 0xff, 0xff, 0x00, 0x00, 0x01, 0x00, 0x00,
0xbf, 0xff, 0xff, 0x00, 0x00, 0x01, 0x00, 0x00,
0x7f, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
0x7f, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
0x7f, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
0x7f, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xff, 0xff, 0xfe, 0x00, 0x00,
0x00, 0x00, 0x00, 0xff, 0xff, 0xfe, 0x00, 0x00,
0x00, 0x00, 0x00, 0xff, 0xff, 0xfe, 0x00, 0x00,
0x00, 0x00, 0x00, 0xff, 0xff, 0xfe, 0x00, 0x00,
0x80, 0x00, 0x00, 0xff, 0xff, 0xfd, 0x00, 0x00,
0x80, 0x00, 0x00, 0xff, 0xff, 0xfd, 0x00, 0x00,
0x80, 0x00, 0x00, 0xff, 0xff, 0xfd, 0x00, 0x00,
0x80, 0x00, 0x00, 0xff, 0xff, 0xfd, 0x00, 0x00,
0xc0, 0x00, 0x00, 0xff, 0xff, 0xfb, 0x00, 0x00,
0xc0, 0x00, 0x00, 0xff, 0xff, 0xfb, 0x00, 0x00,
0xe0, 0x00, 0x00, 0xff, 0xff, 0xf7, 0x00, 0x00,
0xe0, 0x00, 0x00, 0xff, 0xff, 0xf7, 0x00, 0x00,
0xf0, 0x00, 0x00, 0xff, 0xff, 0xef, 0x00, 0x00,
0xf0, 0x00, 0x00, 0xff, 0xff, 0xcf, 0x00, 0x00,
0xf8, 0x00, 0x00, 0xff, 0xff, 0xdf, 0x00, 0x00,
0xfc, 0x00, 0x00, 0xff, 0xff, 0xbf, 0x00, 0x00,
0xfe, 0x00, 0x00, 0xff, 0xff, 0x7f, 0x00, 0x00,
0xff, 0x00, 0x00, 0xff, 0xfe, 0xff, 0x00, 0x00,
0xff, 0x80, 0x00, 0xff, 0xf9, 0xff, 0x00, 0x00,
0xff, 0xc0, 0x00, 0xff, 0xf3, 0xff, 0x00, 0x00,
0xff, 0xf0, 0x00, 0xff, 0xcf, 0xff, 0x00, 0x00,
0xff, 0xfc, 0x00, 0xff, 0x3f, 0xff, 0x00, 0x00,
0xff, 0xff, 0x00, 0xf0, 0xff, 0xff, 0x00, 0x00,
0xff, 0xff, 0xf0, 0x0f, 0xff, 0xff, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x03, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x0f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x1f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x7f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
0x01, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
0x03, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
0x03, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
0x07, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
0x0f, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
0x0f, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
0x1f, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
0x1f, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
0x3f, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
0x3f, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
0x3f, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
0x3f, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
0x7f, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
0x7f, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
0x7f, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
0x7f, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xff, 0xff, 0xfe, 0x00, 0x00,
0x00, 0x00, 0x00, 0xff, 0xff, 0xfe, 0x00, 0x00,
0x00, 0x00, 0x00, 0xff, 0xff, 0xfe, 0x00, 0x00,
0x00, 0x00, 0x00, 0xff, 0xff, 0xfe, 0x00, 0x00,
0x00, 0x00, 0x00, 0xff, 0xff, 0xfc, 0x00, 0x00,
0x00, 0x00, 0x00, 0xff, 0xff, 0xfc, 0x00, 0x00,
0x00, 0x00, 0x00, 0xff, 0xff, 0xfc, 0x00, 0x00,
0x00, 0x00, 0x00, 0xff, 0xff, 0xfc, 0x00, 0x00,
0x00, 0x00, 0x00, 0xff, 0xff, 0xf8, 0x00, 0x00,
0x00, 0x00, 0x00, 0xff, 0xff, 0xf8, 0x00, 0x00,
0x00, 0x00, 0x00, 0xff, 0xff, 0xf0, 0x00, 0x00,
0x00, 0x00, 0x00, 0xff, 0xff, 0xf0, 0x00, 0x00,
0x00, 0x00, 0x00, 0xff, 0xff, 0xe0, 0x00, 0x00,
0x00, 0x00, 0x00, 0xff, 0xff, 0xc0, 0x00, 0x00,
0x00, 0x00, 0x00, 0xff, 0xff, 0xc0, 0x00, 0x00,
0x00, 0x00, 0x00, 0xff, 0xff, 0x80, 0x00, 0x00,
0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xff, 0xfe, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xff, 0xf8, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xff, 0xf0, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xff, 0xc0, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

View file

@ -0,0 +1,196 @@
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x87, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x01, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x7f, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x07, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00,
0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x01, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00,
0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x7f, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00,
0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00,
0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x07, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00,
0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00,
0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xff, 0xf0, 0x00, 0x00, 0x00,
0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xff, 0xf0, 0x00, 0x00, 0x00,
0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xff, 0xf0, 0x00, 0x00, 0x00,
0xff, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xf0, 0x00, 0x00, 0x00,
0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xf0, 0x00, 0x00, 0x00,
0xff, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xf0, 0x00, 0x00, 0x00,
0xff, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xf0, 0x00, 0x00, 0x00,
0xff, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xf0, 0x00, 0x00, 0x00,
0xff, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xf0, 0x00, 0x00, 0x00,
0xff, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xf0, 0x00, 0x00, 0x00,
0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xf0, 0x00, 0x00, 0x00,
0xff, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xf0, 0x00, 0x00, 0x00,
0xff, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xf0, 0x00, 0x00, 0x00,
0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xf0, 0x00, 0x00, 0x00,
0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00,
0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00,
0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00,
0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00,
0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00,
0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00,
0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00,
0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00,
0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00,
0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00,
0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00,
0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00,
0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00,
0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00,
0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00,
0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00,
0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00,
0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00,
0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00,
0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00,
0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00,
0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x80, 0x30, 0x00, 0x00, 0x00,
0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x80, 0x30, 0x00, 0x00, 0x00,
0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xc0, 0x10, 0x00, 0x00, 0x00,
0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xc0, 0x10, 0x00, 0x00, 0x00,
0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xc0, 0x10, 0x00, 0x00, 0x00,
0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xc0, 0x10, 0x00, 0x00, 0x00,
0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xc0, 0x10, 0x00, 0x00, 0x00,
0x81, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x01, 0xe0, 0x10, 0x00, 0x00, 0x00,
0x83, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xc0, 0x01, 0xf8, 0x10, 0x00, 0x00, 0x00,
0x83, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xc0, 0x01, 0xf8, 0x10, 0x00, 0x00, 0x00,
0x83, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xe0, 0x01, 0xf8, 0x10, 0x00, 0x00, 0x00,
0x83, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xe0, 0x07, 0xf8, 0x10, 0x00, 0x00, 0x00,
0x03, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xe0, 0x0f, 0xf8, 0x10, 0x00, 0x00, 0x00,
0x03, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xe0, 0x0f, 0xf8, 0x10, 0x00, 0x00, 0x00,
0x03, 0xfe, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x0f, 0xfc, 0x10, 0x00, 0x00, 0x00,
0x03, 0xfe, 0x07, 0x80, 0x00, 0x00, 0x00, 0x60, 0x00, 0xfc, 0x0f, 0xfc, 0x10, 0x00, 0x00, 0x00,
0x03, 0xfe, 0x07, 0xe0, 0x00, 0x00, 0x00, 0xe0, 0x00, 0xfc, 0x0f, 0xfc, 0x10, 0x00, 0x00, 0x00,
0x03, 0xfe, 0x07, 0xf8, 0x00, 0x00, 0x00, 0xe0, 0x00, 0xfc, 0x0f, 0xfc, 0x00, 0x00, 0x00, 0x00,
0x03, 0xfe, 0x0f, 0xfe, 0x00, 0x00, 0x00, 0xf0, 0x01, 0xfc, 0x0f, 0xfc, 0x00, 0x00, 0x00, 0x00,
0x03, 0xfe, 0x0f, 0xff, 0x80, 0x00, 0x00, 0xf0, 0x07, 0xfc, 0x0f, 0xfc, 0x00, 0x00, 0x00, 0x00,
0x03, 0xff, 0x1f, 0xff, 0xe0, 0x00, 0x00, 0xf0, 0x07, 0xfc, 0x0f, 0xfc, 0x00, 0x00, 0x00, 0x00,
0x03, 0xff, 0xff, 0xff, 0xf8, 0x07, 0x00, 0xf0, 0x07, 0xfc, 0x0f, 0xfc, 0x00, 0x00, 0x00, 0x00,
0x03, 0xff, 0xff, 0xff, 0xfe, 0x1f, 0x00, 0x78, 0x07, 0xfe, 0x0f, 0xfc, 0x00, 0x00, 0x00, 0x00,
0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x7e, 0x07, 0xfe, 0x0f, 0xfc, 0x00, 0x00, 0x00, 0x00,
0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x7e, 0x07, 0xfe, 0x0f, 0xfc, 0x00, 0x00, 0x00, 0x00,
0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x7e, 0x07, 0xfe, 0x0f, 0xfc, 0x00, 0x00, 0x00, 0x00,
0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01, 0xfe, 0x07, 0xfe, 0x0f, 0xfc, 0x00, 0x00, 0x00, 0x00,
0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03, 0xfe, 0x07, 0xfe, 0x07, 0xfc, 0x00, 0x00, 0x00, 0x00,
0x9f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03, 0xfe, 0x07, 0xfe, 0x07, 0xfc, 0x00, 0x00, 0x00, 0x00,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03, 0xfe, 0x07, 0xfe, 0x07, 0xfc, 0x00, 0x00, 0x00, 0x00,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03, 0xff, 0x07, 0xfe, 0x07, 0xff, 0x30, 0x00, 0x00, 0x00,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03, 0xff, 0x07, 0xfe, 0x07, 0xff, 0xf0, 0x00, 0x00, 0x00,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03, 0xff, 0x07, 0xfe, 0x07, 0xff, 0xf0, 0x00, 0x00, 0x00,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03, 0xff, 0x07, 0xfe, 0x07, 0xff, 0xf0, 0x00, 0x00, 0x00,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03, 0xff, 0x07, 0xfe, 0x07, 0xff, 0xf0, 0x00, 0x00, 0x00,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03, 0xff, 0x03, 0xfe, 0x07, 0xff, 0xf0, 0x00, 0x00, 0x00,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03, 0xff, 0x03, 0xfe, 0x07, 0xff, 0xf0, 0x00, 0x00, 0x00,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03, 0xff, 0x03, 0xff, 0x0f, 0xff, 0xf0, 0x00, 0x00, 0x00,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03, 0xff, 0x03, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x83, 0xff, 0x03, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x83, 0xff, 0x03, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x83, 0xff, 0x03, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x83, 0xff, 0x03, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x83, 0xff, 0x03, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x81, 0xff, 0x03, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x81, 0xff, 0xcf, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x81, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x81, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x81, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x81, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x81, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x81, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 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, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x38, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0xf8, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe3, 0xf8, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0xfc, 0x00, 0x00, 0x00, 0x00,
0x00, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x3f, 0xfc, 0x00, 0x00, 0x00, 0x00,
0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0xff, 0xfc, 0x00, 0x00, 0x00, 0x00,
0x00, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe3, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x00,
0x00, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x00,
0x01, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x3f, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x00,
0x01, 0xc7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x00,
0x01, 0xf1, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe3, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
0x03, 0xfc, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0xff, 0xff, 0xfc, 0x00, 0x00, 0x00, 0x00,
0x03, 0xff, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x3f, 0xff, 0xff, 0xf1, 0x00, 0x00, 0x00, 0x00,
0x03, 0xff, 0xc7, 0xff, 0xff, 0xff, 0xff, 0xf8, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00,
0x07, 0xff, 0xf1, 0xff, 0xff, 0xff, 0xff, 0xe3, 0xff, 0xff, 0xff, 0x1c, 0x00, 0x00, 0x00, 0x00,
0x07, 0xff, 0xfc, 0x7f, 0xff, 0xff, 0xff, 0x8f, 0xff, 0xff, 0xfc, 0x7e, 0x00, 0x00, 0x00, 0x00,
0x07, 0xff, 0xff, 0x1f, 0xff, 0x0f, 0xfe, 0x3f, 0xff, 0xff, 0xf0, 0x7f, 0x00, 0x00, 0x00, 0x00,
0x07, 0xff, 0xff, 0xc7, 0xfc, 0x43, 0xf8, 0xff, 0xff, 0xff, 0xc4, 0x3f, 0x00, 0x00, 0x00, 0x00,
0x0f, 0xff, 0xff, 0xf1, 0xfb, 0xfb, 0xe3, 0xff, 0xff, 0xff, 0x18, 0x1f, 0x80, 0x00, 0x00, 0x00,
0x0f, 0xff, 0xff, 0xfc, 0x79, 0xf3, 0x8f, 0xff, 0xff, 0xfc, 0x03, 0x0f, 0x80, 0x00, 0x00, 0x00,
0x07, 0xff, 0xff, 0xff, 0x1c, 0x06, 0x3f, 0xff, 0xff, 0xf1, 0xcf, 0x8f, 0x80, 0x00, 0x00, 0x00,
0x09, 0xff, 0xff, 0xff, 0xc7, 0xf8, 0xff, 0xff, 0xff, 0xc7, 0xe7, 0x8f, 0x80, 0x00, 0x00, 0x00,
0x04, 0x7f, 0xff, 0xff, 0xf1, 0xe3, 0xff, 0xff, 0xff, 0x1f, 0xf3, 0x8f, 0x80, 0x00, 0x00, 0x00,
0x01, 0x1f, 0xff, 0xff, 0xfc, 0x0f, 0xff, 0xff, 0xfc, 0x3f, 0xfb, 0x8f, 0x80, 0x00, 0x00, 0x00,
0x04, 0x67, 0xff, 0xff, 0xff, 0x3f, 0xff, 0xff, 0xf0, 0x1f, 0xfb, 0x0f, 0x80, 0x00, 0x00, 0x00,
0x07, 0x11, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xc6, 0x4f, 0xf8, 0x0f, 0x80, 0x00, 0x00, 0x00,
0x07, 0xc4, 0x7f, 0xff, 0xff, 0x7f, 0xff, 0xff, 0x08, 0x0f, 0xf8, 0x0f, 0x80, 0x00, 0x00, 0x00,
0x27, 0xf1, 0x9f, 0xff, 0xff, 0x7f, 0xff, 0xfc, 0x43, 0xc7, 0xf8, 0x0f, 0x80, 0x00, 0x00, 0x00,
0x23, 0xfc, 0x47, 0xff, 0xff, 0x7f, 0xff, 0xf1, 0xf3, 0xc7, 0xf8, 0x07, 0x80, 0x00, 0x00, 0x00,
0x23, 0xff, 0x19, 0xff, 0xff, 0x7f, 0xff, 0xc7, 0xfb, 0xc7, 0xf8, 0x07, 0x80, 0x00, 0x00, 0x00,
0x2b, 0xff, 0xc4, 0x7f, 0xff, 0x7f, 0xff, 0x1f, 0xf9, 0xc7, 0xf8, 0x07, 0x80, 0x00, 0x00, 0x00,
0x28, 0xff, 0xf1, 0x1f, 0xff, 0x7f, 0xfc, 0x1f, 0xfd, 0xc7, 0xf8, 0x04, 0xc0, 0x00, 0x00, 0x00,
0x28, 0x3f, 0xfc, 0x47, 0xff, 0x7f, 0xf1, 0x4f, 0xfd, 0x07, 0xf8, 0x00, 0xc0, 0x00, 0x00, 0x00,
0x28, 0x0f, 0xff, 0x11, 0xff, 0x7f, 0xc6, 0x07, 0xfc, 0x07, 0xfc, 0x00, 0xc0, 0x00, 0x00, 0x00,
0x28, 0x03, 0xff, 0xc6, 0x7f, 0x7f, 0x01, 0xc7, 0xfc, 0x07, 0xfc, 0x00, 0xc0, 0x00, 0x00, 0x00,
0x28, 0x00, 0xff, 0xf1, 0x1f, 0x7c, 0x73, 0xe3, 0xfc, 0x07, 0xf8, 0x00, 0xc0, 0x00, 0x00, 0x00,
0x08, 0x00, 0x3f, 0xfc, 0x47, 0x71, 0xf9, 0xe3, 0xfc, 0x07, 0xf0, 0x02, 0xc0, 0x00, 0x00, 0x00,
0x08, 0x00, 0x0f, 0xff, 0x11, 0x41, 0xfd, 0xeb, 0xfc, 0x03, 0xc0, 0x00, 0xc0, 0x00, 0x00, 0x00,
0x08, 0x00, 0x03, 0xff, 0xc4, 0x14, 0xfc, 0xe3, 0xfc, 0x03, 0xc0, 0x00, 0xc0, 0x00, 0x00, 0x00,
0x18, 0x00, 0xb0, 0xff, 0xf1, 0x20, 0x7e, 0xc3, 0xfc, 0x00, 0x40, 0x00, 0xc0, 0x00, 0x00, 0x00,
0x18, 0x00, 0xb0, 0x3f, 0xfc, 0x1c, 0x3e, 0x03, 0xfc, 0x00, 0x60, 0x00, 0xc0, 0x00, 0x00, 0x00,
0x58, 0x00, 0xa0, 0x0f, 0xff, 0x3e, 0x3e, 0x03, 0xfc, 0x00, 0x60, 0x00, 0xc0, 0x00, 0x00, 0x00,
0x18, 0x00, 0xa0, 0x03, 0xff, 0x7e, 0x3e, 0x03, 0xfc, 0x00, 0x60, 0x00, 0xc0, 0x00, 0x00, 0x00,
0x18, 0x00, 0xa0, 0x00, 0xff, 0x7e, 0x3e, 0x03, 0xfc, 0x00, 0x60, 0x00, 0x40, 0x00, 0x00, 0x00,
0x58, 0x00, 0xa0, 0x00, 0x3f, 0x7e, 0x3e, 0x03, 0xf0, 0x00, 0x60, 0x00, 0x40, 0x00, 0x00, 0x00,
0x58, 0x00, 0x00, 0x00, 0x0f, 0x7c, 0x3e, 0x01, 0xe0, 0x00, 0x60, 0x00, 0x40, 0x00, 0x00, 0x00,
0x58, 0x00, 0x00, 0x00, 0x03, 0x70, 0x3e, 0x01, 0x20, 0x00, 0x60, 0x01, 0x60, 0x00, 0x00, 0x00,
0x58, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x30, 0x00, 0x60, 0x01, 0x60, 0x00, 0x00, 0x00,
0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x30, 0x00, 0x60, 0x00, 0x60, 0x00, 0x00, 0x00,
0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x30, 0x00, 0x20, 0x01, 0x60, 0x00, 0x00, 0x00,
0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x30, 0x00, 0x20, 0x00, 0x60, 0x00, 0x00, 0x00,
0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x30, 0x00, 0x20, 0x00, 0x60, 0x00, 0x00, 0x00,
0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x30, 0x00, 0x20, 0x00, 0x60, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0x00, 0x30, 0x00, 0x20, 0x00, 0x60, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0x00, 0x30, 0x00, 0x20, 0x00, 0x60, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x00, 0x30, 0x00, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x00, 0x30, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x00, 0x10, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x10, 0x00, 0xb0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x10, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x10, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x10, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x58, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x58, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x58, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x58, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2c, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

View file

@ -0,0 +1,744 @@
/*
* This is a modified version of the screen-cursor test, which does
* not use Screen Object or GMRs. It will run on older versions of the
* virtual SVGA device.
*
* This test doesn't draw anything on the screen, but it still
* supports the same set of cursors.
*
* XXX: Use screen-cursor whenever possible. This test is harder to use
* and doesn't test as many things.
*/
#include "svga.h"
#include "intr.h"
#include "screendraw.h"
#include "keyboard.h"
#include "vmbackdoor.h"
#include "timer.h"
#include "math.h"
/*
* Global data
*/
int currentTest = -1;
#define FRAME_RATE 60
/*
* Test Cases
*/
void
testAlphaArrow(void)
{
static const SVGAFifoCmdDefineAlphaCursor cursor = {
.id = 0,
.hotspotX = 1,
.hotspotY = 1,
.width = 36,
.height = 51,
};
static const uint32 data[] = {
# include "rgba_arrow.h"
};
void *fifoData;
/*
* Switch to 8-bit mode. Alpha cursors should work even if the
* legacy framebuffer is in a low color depth.
*/
SVGA_WriteReg(SVGA_REG_BITS_PER_PIXEL, 8);
SVGA_BeginDefineAlphaCursor(&cursor, &fifoData);
memcpy(fifoData, data, sizeof data);
SVGA_FIFOCommitAll();
}
void
testGradient(int size)
{
const SVGAFifoCmdDefineAlphaCursor cursor = {
.id = 0,
.hotspotX = size / 2,
.hotspotY = size / 2,
.width = size,
.height = size,
};
uint32 *data;
int x, y;
SVGA_WriteReg(SVGA_REG_BITS_PER_PIXEL, 8);
SVGA_BeginDefineAlphaCursor(&cursor, (void**) &data);
for (y = 0; y < cursor.height; y++) {
for (x = 0; x < cursor.width; x++) {
uint8 alpha = y * 255 / cursor.height;
/* Solid white, with pre-multiplied alpha: L = 255 * alpha / 255 */
uint8 luma = alpha;
*(data++) = (alpha << 24) | (luma << 16) | (luma << 8) | luma;
}
}
SVGA_FIFOCommitAll();
}
void
testGradient64(void)
{
testGradient(64);
}
void
testGradient180(void)
{
testGradient(180);
}
void
testGradient256(void)
{
testGradient(256);
}
void
testMonochrome(void)
{
static const SVGAFifoCmdDefineCursor cursor = {
.id = 0,
.hotspotX = 24,
.hotspotY = 24,
.width = 48,
.height = 48,
.andMaskDepth = 1,
.xorMaskDepth = 1,
};
static const uint8 data[] = {
# include "beachball_mono.h"
};
void *andData, *xorData;
/*
* Switch to 32bpp mode, just because we can. Monochrome cursors
* work in any framebuffer depth.
*/
SVGA_WriteReg(SVGA_REG_BITS_PER_PIXEL, 32);
SVGA_BeginDefineCursor(&cursor, &andData, &xorData);
memcpy(andData, data, sizeof data);
SVGA_FIFOCommitAll();
}
void
testMonochromeXOR(void)
{
static const SVGAFifoCmdDefineCursor cursor = {
.id = 0,
.hotspotX = 24,
.hotspotY = 24,
.width = 48,
.height = 48,
.andMaskDepth = 1,
.xorMaskDepth = 1,
};
static const uint8 data[] = {
# include "beachball_mono_xor.h"
};
void *andData, *xorData;
SVGA_WriteReg(SVGA_REG_BITS_PER_PIXEL, 32);
SVGA_BeginDefineCursor(&cursor, &andData, &xorData);
memcpy(andData, data, sizeof data);
SVGA_FIFOCommitAll();
}
void
testMonochromeLarge(void)
{
static const SVGAFifoCmdDefineCursor cursor = {
.id = 0,
.hotspotX = 50,
.hotspotY = 50,
.width = 100,
.height = 98,
.andMaskDepth = 1,
.xorMaskDepth = 1,
};
static const uint8 data[] = {
# include "chip_mono.h"
};
void *andData, *xorData;
/*
* Switch to 32bpp mode, just because we can. Monochrome cursors
* work in any framebuffer depth.
*/
SVGA_WriteReg(SVGA_REG_BITS_PER_PIXEL, 32);
SVGA_BeginDefineCursor(&cursor, &andData, &xorData);
memcpy(andData, data, sizeof data);
SVGA_FIFOCommitAll();
}
void
testANDXOR32(void)
{
static const SVGAFifoCmdDefineCursor cursor = {
.id = 0,
.hotspotX = 16,
.hotspotY = 16,
.width = 32,
.height = 32,
.andMaskDepth = 32,
.xorMaskDepth = 32
};
uint32 *andData, *xorData;
int x, y;
SVGA_WriteReg(SVGA_REG_BITS_PER_PIXEL, 32);
SVGA_BeginDefineCursor(&cursor, (void**) &andData, (void**) &xorData);
for (y = 0; y < cursor.height; y++) {
for (x = 0; x < cursor.width; x++) {
*(andData++) = 0x808080;
*(xorData++) = y * 127 / cursor.height;
}
}
SVGA_FIFOCommitAll();
}
static const uint32 yellowCrabData[] = {
# include "yellow_crab_rgba.h"
};
void
buildCrabANDMask(uint8 *andData)
{
const uint32 *rgba = yellowCrabData;
const int width = 48;
const int height = 50;
uint32 andPitch = ((width + 31) / 32) * 4;
uint8 *andLine;
int x, y;
for (y = 0; y < height; y++) {
andLine = andData;
andData += andPitch;
memset(andLine, 0, andPitch);
for (x = 0; x < width; x++) {
uint32 color = *(rgba++);
*andLine <<= 1;
if ((color & 0xFF000000) == 0) {
/*
* Transparent pixel
*/
*andLine |= 1;
}
if ((x & 7) == 7) {
andLine++;
}
}
}
}
void
testCrabAlpha(void)
{
static const SVGAFifoCmdDefineAlphaCursor cursor = {
.id = 0,
.hotspotX = 24,
.hotspotY = 25,
.width = 48,
.height = 50,
};
void *fifoData;
SVGA_WriteReg(SVGA_REG_BITS_PER_PIXEL, 32);
SVGA_BeginDefineAlphaCursor(&cursor, &fifoData);
memcpy(fifoData, yellowCrabData, sizeof yellowCrabData);
SVGA_FIFOCommitAll();
}
void
testCrabANDXOR32(void)
{
static const SVGAFifoCmdDefineCursor cursor = {
.id = 0,
.hotspotX = 24,
.hotspotY = 25,
.width = 48,
.height = 50,
.andMaskDepth = 1,
.xorMaskDepth = 32
};
uint8 *andData;
uint32 *xorData;
SVGA_WriteReg(SVGA_REG_BITS_PER_PIXEL, 32);
SVGA_BeginDefineCursor(&cursor, (void**) &andData, (void**) &xorData);
buildCrabANDMask(andData);
memcpy(xorData, yellowCrabData, sizeof yellowCrabData);
SVGA_FIFOCommitAll();
}
void
testCrabANDXOR16(void)
{
static const SVGAFifoCmdDefineCursor cursor = {
.id = 0,
.hotspotX = 24,
.hotspotY = 25,
.width = 48,
.height = 50,
.andMaskDepth = 1,
.xorMaskDepth = 16
};
const uint32 *rgba = yellowCrabData;
uint8 *andData;
uint16 *xorData;
int x, y;
SVGA_WriteReg(SVGA_REG_BITS_PER_PIXEL, 16);
if (SVGA_ReadReg(SVGA_REG_DEPTH) != 16) {
Console_Panic("Expected SVGA_REG_DEPTH == 16 for 16bpp mode");
}
SVGA_BeginDefineCursor(&cursor, (void**) &andData, (void**) &xorData);
buildCrabANDMask(andData);
for (y = 0; y < cursor.height; y++) {
for (x = 0; x < cursor.width; x++) {
uint32 color = *(rgba++);
/*
* Convert to RGB 5-6-5
*/
uint8 r = (color >> 19) & 0x1F;
uint8 g = (color >> 10) & 0x3F;
uint8 b = (color >> 3) & 0x1F;
*(xorData++) = (r << 11) | (g << 5) | b;
}
}
SVGA_FIFOCommitAll();
}
void
testCrabANDXOR8(void)
{
static const SVGAFifoCmdDefineCursor cursor = {
.id = 0,
.hotspotX = 24,
.hotspotY = 25,
.width = 48,
.height = 50,
.andMaskDepth = 1,
.xorMaskDepth = 8
};
static const uint8 crabPixels[] = {
# include "yellow_crab_256_pixels.h"
};
static const uint8 crabColormap[] = {
# include "yellow_crab_256_colormap.h"
};
uint8 *andData, *xorData;
int i;
SVGA_WriteReg(SVGA_REG_BITS_PER_PIXEL, 8);
if (SVGA_ReadReg(SVGA_REG_PSEUDOCOLOR) != TRUE) {
Console_Panic("Expected SVGA_REG_PSUEDOCOLOR == TRUE for 8bpp mode");
}
/*
* Load the crab's colormap into the SVGA palette registers.
*/
for (i = 0; i < arraysize(crabColormap); i++) {
SVGA_WriteReg(SVGA_PALETTE_BASE + i, crabColormap[i]);
}
SVGA_BeginDefineCursor(&cursor, (void**) &andData, (void**) &xorData);
buildCrabANDMask(andData);
memcpy(xorData, crabPixels, sizeof crabPixels);
SVGA_FIFOCommitAll();
}
void
createPaletteCursor(void)
{
/*
* Set up a cursor which shows every color in the palette. It has
* a 1-pixel border of color 255, but every other color forms a
* 16x16 grid in which each square is a different color. Each grid
* square is 3x3 pixels.
*
* We also take this opportunity to use an 8-bit AND mask, but it's
* fully opaque (all zeroes).
*
* This does mean that to function correctly, this cursor needs
* color 0 to be black. The SVGA device doesn't specify whether
* AND/XOR masks are applied before or after pseudocolor emulation,
* so we need to be okay with either.
*/
static const SVGAFifoCmdDefineCursor cursor = {
.id = 0,
.hotspotX = 24,
.hotspotY = 24,
.width = 49,
.height = 49,
.andMaskDepth = 8,
.xorMaskDepth = 8
};
uint8 *andData, *xorData;
uint8 *line;
int x, y;
uint32 pitch = roundup(cursor.width, sizeof(uint32)) * sizeof(uint32);
SVGA_WriteReg(SVGA_REG_BITS_PER_PIXEL, 8);
if (SVGA_ReadReg(SVGA_REG_PSEUDOCOLOR) != TRUE) {
Console_Panic("Expected SVGA_REG_PSUEDOCOLOR == TRUE for 8bpp mode");
}
SVGA_BeginDefineCursor(&cursor, (void**) &andData, (void**) &xorData);
memset(andData, 0, pitch * cursor.height);
for (y = 0; y < cursor.height; y++) {
line = xorData;
xorData += pitch;
for (x = 0; x < cursor.width; x++) {
uint8 color;
if (y == 0 || x == 0 || y == cursor.height - 1 || x == cursor.width - 1) {
/* Border color */
color = 0xFF;
} else {
int row = (y - 1) / 3;
int column = (x - 1) / 3;
color = row * 16 + column;
}
*(line++) = color;
}
}
SVGA_FIFOCommitAll();
}
void
animatePalette(void)
{
/*
* Animate the palette. This is stolen from the vbe-palette test...
*/
static int tick = 0;
int i;
/*
* Let the phase of each color channel slowly drift around.
*/
const float rPhase = tick * 0.001;
const float gPhase = tick * 0.002;
const float bPhase = tick * 0.003;
/*
* Animate every color except 0 (used for the AND mask) and 255
* (for the border).
*/
for (i = 1; i < 255; i++) {
const int x = (i & 0x0F) - 3;
const int y = (i >> 4) - 3;
const float t = (x*x + y*y) * 0.05 + tick * 0.02;
const uint8 r = sinf(t + rPhase) * 0x7f + 0x80;
const uint8 g = sinf(t + gPhase) * 0x7f + 0x80;
const uint8 b = sinf(t + bPhase) * 0x7f + 0x80;
SVGA_WriteReg(SVGA_PALETTE_BASE + i * 3 + 0, r);
SVGA_WriteReg(SVGA_PALETTE_BASE + i * 3 + 1, g);
SVGA_WriteReg(SVGA_PALETTE_BASE + i * 3 + 2, b);
}
tick++;
}
void
blit32(const uint32 *src, int srcX, int srcY, int srcWidth,
uint32 *dest, int destX, int destY, int destWidth,
int copyWidth, int copyHeight)
{
src += srcX + srcY * srcWidth;
dest += destX + destY * destWidth;
while (copyHeight--) {
memcpy32(dest, src, copyWidth);
src += srcWidth;
dest += destWidth;
}
}
void
testCursorAnim(void)
{
/*
* Animate a cursor image of a moon orbiting a planet. The cursor
* hotspot is always centered on the planet, but we dynamically
* size the cursor according to the bounding box around the planet
* and moon, and we dynamically adjust the hotspot to keep it
* centered on the moon.
*/
const int moonWidth = 10;
const int planetWidth = 20;
static int tick = 0;
float angle = tick * 0.03;
tick++;
const int orbitRadius = 40;
int orbitX = cosf(angle) * orbitRadius;
int orbitY = sinf(angle) * orbitRadius;
int width, height, planetX, planetY, moonX, moonY;
if (orbitX >= 0) {
width = planetWidth + orbitX;
planetX = planetWidth/2;
moonX = planetX + orbitX;
} else {
width = planetWidth - orbitX;
moonX = planetWidth/2;
planetX = moonX - orbitX;
}
if (orbitY >= 0) {
height = planetWidth + orbitY;
planetY = planetWidth/2;
moonY = planetY + orbitY;
} else {
height = planetWidth - orbitY;
moonY = planetWidth/2;
planetY = moonY - orbitY;
}
const SVGAFifoCmdDefineAlphaCursor cursor = {
.id = 0,
.hotspotX = planetX,
.hotspotY = planetY,
.width = width,
.height = height,
};
uint32 *image;
static const uint32 planet[] = {
# include "planet_rgba.h"
};
static const uint32 moon[] = {
# include "moon_rgba.h"
};
SVGA_WriteReg(SVGA_REG_BITS_PER_PIXEL, 8);
SVGA_BeginDefineAlphaCursor(&cursor, (void**) &image);
memset32(image, 0, width * height);
blit32(planet, 0, 0, planetWidth,
image, planetX - planetWidth/2, planetY - planetWidth/2, width,
planetWidth, planetWidth);
blit32(moon, 0, 0, moonWidth,
image, moonX - moonWidth/2, moonY - moonWidth/2, width,
moonWidth, moonWidth);
SVGA_FIFOCommitAll();
}
/*
* gTestCases --
*
* Master array of cursor test cases. Each one has a title and a
* function pointer. The function is run once when a test mode is
* selected.
*/
struct {
void (*fn)(void);
const char *title;
void (*animateFn)(void);
} gTestCases[] = {
{ testAlphaArrow, "Translucent arrow cursor (36x51)" },
{ testGradient64, "Gradient from transparent white to opaque white (64x64)" },
{ testGradient180, "Gradient from transparent white to opaque white (180x180)" },
{ testGradient256, "Gradient from transparent white to opaque white (256x256)" },
{ testMonochrome, "Monochrome beachball cursor (48x48)" },
{ testMonochromeXOR, "Monochrome beachball cursor with XOR pixels (48x48)" },
{ testMonochromeLarge, "Monochrome chip cursor (100x96)" },
{ testANDXOR32, "AND masks off 7 LSBs, XOR draws blue gradient (32x32)" },
{ testCrabAlpha, "Yellow crab, alpha blended (48x50)" },
{ testCrabANDXOR32, "Yellow crab, 1-bit AND, 32-bit XOR (48x50)" },
{ testCrabANDXOR16, "Yellow crab, 1-bit AND, 16-bit XOR (48x50)" },
{ testCrabANDXOR8, "Yellow crab, 1-bit AND, 8-bit XOR (48x50)" },
{ createPaletteCursor, "Palette animation, 8-bit AND/XOR (49x49)", animatePalette },
{ testCursorAnim, "Animated cursor (variable size and hotspot)", testCursorAnim }
};
/*
* selectTest --
*
* Switch to a new current test case. Hilight the new test, un-hilight
* the old one, and call the new test's function.
*/
void
selectTest(int newTest)
{
if (newTest < 0) {
newTest += arraysize(gTestCases);
} else if (newTest >= arraysize(gTestCases)) {
newTest -= arraysize(gTestCases);
}
if (currentTest != newTest) {
currentTest = newTest;
gTestCases[newTest].fn();
}
}
/*
* main --
*
* Initialization and main loop. This reads a global array of test
* cases, and presents a menu which cycles through them. The main
* loop services keyboard and mouse input.
*/
int
main(void)
{
const int screenWidth = 640;
const int screenHeight = 480;
Intr_Init();
Intr_SetFaultHandlers(SVGA_DefaultFaultHandler);
Timer_InitPIT(PIT_HZ / FRAME_RATE);
Intr_SetMask(PIT_IRQ, TRUE);
SVGA_Init();
Keyboard_Init();
VMBackdoor_MouseInit(TRUE);
SVGA_SetMode(screenWidth, screenHeight, 32);
selectTest(0);
while (1) {
int prevTest = currentTest - 1;
int nextTest = currentTest + 1;
static VMMousePacket mouseState;
const int kbdMouseSpeed = 100;
Bool needCursorUpdate = FALSE;
while (Keyboard_IsKeyPressed(KEY_UP)) {
selectTest(prevTest);
}
while (Keyboard_IsKeyPressed(KEY_DOWN)) {
selectTest(nextTest);
}
while (VMBackdoor_MouseGetPacket(&mouseState)) {
needCursorUpdate = TRUE;
}
if (Keyboard_IsKeyPressed('w')) {
mouseState.y -= kbdMouseSpeed;
needCursorUpdate = TRUE;
}
if (Keyboard_IsKeyPressed('s')) {
mouseState.y += kbdMouseSpeed;
needCursorUpdate = TRUE;
}
if (Keyboard_IsKeyPressed('a')) {
mouseState.x -= kbdMouseSpeed;
needCursorUpdate = TRUE;
}
if (Keyboard_IsKeyPressed('d')) {
mouseState.x += kbdMouseSpeed;
needCursorUpdate = TRUE;
}
if (needCursorUpdate) {
/*
* Fixed-point to pixels.
*/
SVGASignedPoint pixelLocation = {
mouseState.x * screenWidth / 65535,
mouseState.y * screenHeight / 65535
};
SVGA_MoveCursor(TRUE, pixelLocation.x, pixelLocation.y, SVGA_ID_INVALID);
}
/*
* Some tests are animated...
*/
if (gTestCases[currentTest].animateFn) {
gTestCases[currentTest].animateFn();
}
/*
* Wait for the next frame.
*/
Intr_Halt();
}
return 0;
}

View file

@ -0,0 +1,17 @@
0x00000000, 0x00000000, 0x3e020202, 0xc9161515, 0xdc1f1f1f, 0xdc1f1e1e,
0xc9131212, 0x3e020202, 0x00000000, 0x00000000, 0x00000000, 0x880f0e0e,
0xe6484646, 0xf5d1c9c9, 0xf5d6cfcf, 0xf5cbc5c5, 0xf5b6b1b1, 0xe63b3a3a,
0x880c0b0b, 0x00000000, 0x3e020202, 0xe6484545, 0xf5e5dcdc, 0xf5e9e0e0,
0xf5e0d9d9, 0xf5d4cdcd, 0xf5c7c2c2, 0xf5bab5b5, 0xe6383737, 0x3e010101,
0xc9161515, 0xf5cfc7c7, 0xf5e7dede, 0xf5f2e8e8, 0xf5e5dddd, 0xf5d8d1d1,
0xf5cac4c4, 0xf5bdb8b8, 0xf5a7a3a3, 0xc9111111, 0xdc1f1f1f, 0xf5d3cdcd,
0xf5ded7d7, 0xf5e4dcdc, 0xf5dfd8d8, 0xf5d6cfcf, 0xf5c9c4c4, 0xf5bcb8b8,
0xf5afabab, 0xdc191919, 0xdc1e1e1e, 0xf5c9c4c4, 0xf5d2cbcb, 0xf5d7d0d0,
0xf5d5cece, 0xf5cec8c8, 0xf5c4bfbf, 0xf5b9b5b5, 0xf5acaaaa, 0xdc191919,
0xc9121212, 0xf5b4b1b1, 0xf5c5c0c0, 0xf5c9c4c4, 0xf5c8c3c3, 0xf5c4bfbf,
0xf5bcb8b8, 0xf5b2afaf, 0xf59f9d9d, 0xc9101010, 0x3e020202, 0xe63b3939,
0xf5b8b4b4, 0xf5bbb7b7, 0xf5bbb7b7, 0xf5b8b4b4, 0xf5b2afaf, 0xf5aba8a8,
0xe6353434, 0x3e010101, 0x00000000, 0x880b0b0b, 0xe6383737, 0xf5a5a2a2,
0xf5aeabab, 0xf5aba9a9, 0xf59f9d9d, 0xe6353434, 0x880b0b0b, 0x00000000,
0x00000000, 0x00000000, 0x3e010101, 0xc9111010, 0xdc191919, 0xdc191919,
0xc9101010, 0x3e010101, 0x00000000, 0x00000000,

View file

@ -0,0 +1,67 @@
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x04000000,
0x49010101, 0x900d0d10, 0xc4141419, 0xd71e1e25, 0xd71c1c25, 0xc4121218,
0x910a0a0f, 0x49000001, 0x04000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x2d000000, 0xd3161618, 0xf0696876, 0xf79c9ab2, 0xf5b2afd0, 0xf5acabcf,
0xf5a4a4cc, 0xf5999ac6, 0xf77a7ba5, 0xf04a4c6b, 0xd20e0e15, 0x2d000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x02000000, 0x8a0c0c0e, 0xe5343338, 0xf6bbb6c9, 0xf5cac5db, 0xf5c5c1d9,
0xf5bfbbd6, 0xf5b6b3d3, 0xf5acabcf, 0xf5a3a2cb, 0xf59898c7, 0xf58d8fc3,
0xf6767aaf, 0xe51f2030, 0x8a07070b, 0x02000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x8a0c0c0e, 0xf1716e79, 0xf5d3cddd, 0xf5d7d1df,
0xf5d6d0de, 0xf5d1cbdc, 0xf5c8c4da, 0xf5bfbbd6, 0xf5b4b2d2, 0xf5aaa9ce,
0xf59e9ec9, 0xf59394c5, 0xf5878ac1, 0xf57b7fbc, 0xf13e4166, 0x8a06070b,
0x00000000, 0x00000000, 0x00000000, 0x2d000000, 0xe5343338, 0xf5d2ccdd,
0xf5dcd5e1, 0xf5e2dbe3, 0xf5e2dbe3, 0xf5dbd4e0, 0xf5d1cbdc, 0xf5c6c2d9,
0xf5bbb7d5, 0xf5afadd0, 0xf5a3a3cb, 0xf59798c7, 0xf58c8ec3, 0xf57f83be,
0xf57479b9, 0xe51a1c2e, 0x2d000000, 0x00000000, 0x04000000, 0xd3161518,
0xf6b8b4c8, 0xf5d5cede, 0xf5e0d9e3, 0xf5ebe2e7, 0xf5ede4e8, 0xf5e2dbe3,
0xf5d7d0df, 0xf5cac5db, 0xf5bfbbd6, 0xf5b2b0d1, 0xf5a7a6cd, 0xf59a9bc8,
0xf58f91c4, 0xf58285bf, 0xf5777aba, 0xf66267a7, 0xd20a0b14, 0x04000000,
0x49010101, 0xf0686576, 0xf5c6c2d9, 0xf5d2ccdd, 0xf5ded7e2, 0xf5e9e0e6,
0xf5ede4e8, 0xf5e3dce4, 0xf5d8d2df, 0xf5ccc7dc, 0xf5c1bdd7, 0xf5b4b1d2,
0xf5a9a7cd, 0xf59c9cc8, 0xf59192c4, 0xf58487c0, 0xf5797cbb, 0xf56c72b6,
0xf0353962, 0x49000001, 0x910d0d0f, 0xf79997b1, 0xf5c2bed7, 0xf5ccc7dc,
0xf5d7d0df, 0xf5ded8e2, 0xf5e1dae3, 0xf5ddd6e1, 0xf5d5cede, 0xf5cac5db,
0xf5c0bcd6, 0xf5b4b1d2, 0xf5a9a7cd, 0xf59c9cc8, 0xf59192c4, 0xf58587c0,
0xf5797cbb, 0xf56d72b6, 0xf7515796, 0x9106070d, 0xc4141419, 0xf5aeadce,
0xf5bbb8d5, 0xf5c4c0d8, 0xf5cdc7dc, 0xf5d3cddd, 0xf5d6cfde, 0xf5d4cede,
0xf5cdc8dc, 0xf5c5c1d9, 0xf5bcb8d5, 0xf5b1aed1, 0xf5a6a5cc, 0xf59b9bc8,
0xf59091c4, 0xf58487c0, 0xf5797cbb, 0xf56c72b6, 0xf56066b0, 0xc40a0b15,
0xd71d1d25, 0xf5a9a8cd, 0xf5b2b0d1, 0xf5bbb8d5, 0xf5c3bfd8, 0xf5c7c3da,
0xf5cac4db, 0xf5c8c4da, 0xf5c4c1d9, 0xf5bebad6, 0xf5b6b3d3, 0xf5acabcf,
0xf5a2a2cb, 0xf59798c7, 0xf58d8fc3, 0xf58185bf, 0xf5777aba, 0xf56b71b6,
0xf56066b1, 0xd7101020, 0xd71b1b25, 0xf5a0a0ca, 0xf5a9a8cd, 0xf5b0aed1,
0xf5b7b4d3, 0xf5bcb8d5, 0xf5bebad6, 0xf5bebad6, 0xf5bbb7d4, 0xf5b5b2d2,
0xf5aeacd0, 0xf5a6a5cc, 0xf59d9dc9, 0xf59394c5, 0xf5898bc2, 0xf57e82bd,
0xf57479b9, 0xf5686eb5, 0xf55e64b0, 0xd70f1020, 0xc4111118, 0xf59596c4,
0xf59f9fc9, 0xf5a6a5cc, 0xf5ababcf, 0xf5afadd0, 0xf5b2afd1, 0xf5b2afd1,
0xf5afadd0, 0xf5abaacf, 0xf5a6a5cc, 0xf59e9ec9, 0xf59697c6, 0xf58e90c4,
0xf58487c0, 0xf57a7ebc, 0xf57075b8, 0xf5656bb3, 0xf55961ae, 0xc4090a15,
0x910a0a0e, 0xf77778a3, 0xf59495c5, 0xf59b9bc8, 0xf5a0a0ca, 0xf5a4a3cb,
0xf5a6a5cc, 0xf5a6a5cc, 0xf5a5a4cc, 0xf5a1a1ca, 0xf59c9cc8, 0xf59697c6,
0xf58f91c4, 0xf58789c1, 0xf57e81bd, 0xf5757aba, 0xf56b71b6, 0xf56167b2,
0xf7485093, 0x9105060d, 0x49000001, 0xf0484a6a, 0xf58a8cc2, 0xf59091c4,
0xf59495c5, 0xf59898c7, 0xf59a9ac7, 0xf59a9bc8, 0xf5999ac7, 0xf59697c6,
0xf59393c5, 0xf58d8fc3, 0xf58789c1, 0xf57f82be, 0xf5777bbb, 0xf56e74b7,
0xf5656bb3, 0xf55c63b0, 0xf02e3160, 0x49000000, 0x04000000, 0xd30e0e16,
0xf67477ad, 0xf58487c0, 0xf5898bc2, 0xf58c8ec3, 0xf58e90c4, 0xf58f91c4,
0xf58e90c4, 0xf58c8ec3, 0xf5888bc1, 0xf58386bf, 0xf57d81bd, 0xf5777bbb,
0xf57075b8, 0xf5676db4, 0xf55f66b1, 0xf64f56a0, 0xd2090913, 0x04000000,
0x00000000, 0x2d000000, 0xe51d1f30, 0xf5797cbb, 0xf57c80bd, 0xf58083be,
0xf58285bf, 0xf58286bf, 0xf58285bf, 0xf58083be, 0xf57d81bd, 0xf57a7dbb,
0xf57479b9, 0xf56e74b7, 0xf5676db4, 0xf56066b1, 0xf55860ae, 0xe514172c,
0x2d000000, 0x00000000, 0x00000000, 0x00000000, 0x8a06070b, 0xf13c3f65,
0xf57176b8, 0xf57479b9, 0xf5767aba, 0xf5777bba, 0xf5777aba, 0xf5757aba,
0xf57378b9, 0xf56f74b7, 0xf56a70b5, 0xf5646bb3, 0xf55f65b1, 0xf55860ae,
0xf12c315f, 0x8a04050a, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x02000000, 0x8a06060b, 0xe51a1b2e, 0xf66065a6, 0xf56a70b5, 0xf56b71b6,
0xf56b71b6, 0xf5696fb5, 0xf5676db4, 0xf5646ab3, 0xf56067b1, 0xf55b62af,
0xf64e56a0, 0xe514172c, 0x8a04050a, 0x02000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x2d000000, 0xd30a0b14,
0xf0343862, 0xf7505695, 0xf55e65af, 0xf55e65b1, 0xf55c63b0, 0xf55860ae,
0xf7484f92, 0xf02d315f, 0xd2090913, 0x2d000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x04000000, 0x49000001, 0x9006070d, 0xc4090b15, 0xd70f1020,
0xd70f1020, 0xc4090a15, 0x9105060d, 0x49000000, 0x04000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000,

View file

@ -0,0 +1,307 @@
0x6e000000, 0x10000000, 0x01000000, 0x01000000, 0x01000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x90000001, 0x57000001, 0x13000000, 0x04000000, 0x04000000, 0x03000000,
0x01000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x6a010103, 0x4a030306, 0x69000001, 0x09000000, 0x08000000, 0x07000000,
0x04000000, 0x02000000, 0x01000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x62020204, 0x2106060c, 0x4b06060c, 0x70010103, 0x1e000000, 0x0d000000,
0x08000000, 0x05000000, 0x02000000, 0x01000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x64020205, 0x2f080910, 0x2c090a12, 0x6207070e, 0x6b020205, 0x22000000,
0x0d000000, 0x09000000, 0x05000000, 0x02000000, 0x01000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x5d020205, 0x380a0a13, 0x330c0c17, 0x410c0d18, 0x6c090a12, 0x76020205,
0x13000000, 0x0d000000, 0x09000000, 0x04000000, 0x02000000, 0x01000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x55030407, 0x440c0d18, 0x390e0e1b, 0x440f101e, 0x4a10101f, 0x6f0d0d1a,
0x78030307, 0x24000000, 0x0f000000, 0x09000000, 0x05000000, 0x02000000,
0x01000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x4d040408, 0x4d0d0e1a, 0x3f10111f, 0x49111221, 0x4f121323, 0x53131325,
0x7d0d0e1a, 0x72040409, 0x24000000, 0x0f000000, 0x0a000000, 0x05000000,
0x02000000, 0x01000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x42040408, 0x590f0f1c, 0x44121324, 0x4e131425, 0x55141528, 0x59151629,
0x60151629, 0x820f101e, 0x7705050a, 0x16000000, 0x10000000, 0x0a000000,
0x05000000, 0x02000000, 0x01000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x30020205, 0x720f0f1d, 0x4b151528, 0x5516172b, 0x5c17182c, 0x6018182e,
0x64181930, 0x67191a31, 0x8016162a, 0x7706070d, 0x26000001, 0x12000000,
0x0a000000, 0x05000000, 0x02000000, 0x01000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x2a020205, 0x77101020, 0x5117182d, 0x5b18192f, 0x62191a30, 0x671a1b32,
0x6b1b1c34, 0x6e1c1c35, 0x701c1d36, 0x8a15162a, 0x7708080f, 0x2a000001,
0x11000000, 0x0b000000, 0x06000000, 0x03000000, 0x01000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x29020205, 0x77121223, 0x56191a30, 0x611a1b32, 0x681b1c34, 0x6d1c1d36,
0x711d1e38, 0x751e1f3a, 0x781f203b, 0x7c1e203b, 0x9218192f, 0x7b080810,
0x1e000000, 0x12000000, 0x0b000000, 0x06000000, 0x03000000, 0x01000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x27020205, 0x78131325, 0x5e1c1d36, 0x691c1e38, 0x701d1e39, 0x751e1f3a,
0x7a1f203c, 0x7d20213e, 0x80212240, 0x83222342, 0x85222443, 0x9b1d1e39,
0x8d080810, 0x30000001, 0x15000000, 0x0c000000, 0x06000000, 0x03000000,
0x01000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x24020204, 0x78121224, 0x661e1f3a, 0x6f1f203c, 0x771f213d, 0x7c20223e,
0x81212241, 0x84222342, 0x87232544, 0x8a242546, 0x8c252647, 0x8e252648,
0xa41c1d37, 0x8a090a13, 0x32000102, 0x14000000, 0x0d000000, 0x07000000,
0x03000000, 0x01000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x21000001, 0x7a0f0f1e, 0x6e1f203c, 0x75212240, 0x7d222341, 0x83222343,
0x88232545, 0x8b252646, 0x8e252648, 0x9126274a, 0x9427284c, 0x9628294d,
0x99282a4d, 0xab1e1f3a, 0x92090912, 0x23000000, 0x16000000, 0x0d000000,
0x06000000, 0x03000000, 0x01000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x1f000000, 0x7e0e0f1c, 0x7721223f, 0x7c232445, 0x84242546, 0x8b252647,
0x90262749, 0x9327284b, 0x9628294d, 0x99282a4f, 0x9c2a2b50, 0x9f2b2c52,
0xa12b2d54, 0xa22c2d55, 0xb3242546, 0x960a0a14, 0x36010102, 0x1a000000,
0x0e000000, 0x08000000, 0x04000000, 0x01000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x1a000001, 0x7b0f101e, 0x7f222443, 0x82262749, 0x8b26284a, 0x9227294c,
0x97282a4e, 0x9a292a4f, 0x9d2a2b51, 0xa02b2d53, 0xa32c2e55, 0xa52c2e56,
0xa82e2f58, 0xaa2e305a, 0xab2e305b, 0xb8222443, 0x910b0b17, 0x37010102,
0x18000000, 0x0f000000, 0x08000000, 0x03000000, 0x01000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x15000102, 0x780f0f1d, 0x88242545, 0x8828294d, 0x91282a4f, 0x98292a4f,
0x9e2a2c52, 0xa12b2d53, 0xa32c2e55, 0xa62d2e57, 0xaa2e3059, 0xac2f305b,
0xaf30325c, 0xb131325e, 0xb2313360, 0xb431335e, 0xbd252749, 0x960c0c18,
0x28000000, 0x19000000, 0x0f000000, 0x07000000, 0x03000000, 0x01000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x0e000001, 0x740d0e1a, 0x91242647, 0x8f2a2c52, 0x982b2d53, 0xa02c2d55,
0xa62d2e57, 0xa92e2f58, 0xac2f305a, 0xaf30315c, 0xb130325d, 0xb4313360,
0xb6323461, 0xb9333563, 0xba333564, 0xbb343765, 0xbc353767, 0xc62d2f58,
0x9b0b0c17, 0x3a010103, 0x1d000000, 0x10000000, 0x08000000, 0x04000000,
0x01000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x06000000, 0x6c0a0a14, 0x99252748, 0x942c2e55, 0x9e2d2f57, 0xa52d2f59,
0xac2f315b, 0xaf30325c, 0xb230325e, 0xb5323360, 0xb7323462, 0xb9333563,
0xbc353665, 0xbe353766, 0xc0363868, 0xc237396a, 0xc3383a6b, 0xc3383a6d,
0xca2a2b52, 0x93111122, 0x3a020204, 0x1b000000, 0x10000000, 0x08000000,
0x03000000, 0x01000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x02000000, 0x660a0a13, 0x9e27284c, 0x9a2f305a, 0xa32f315c, 0xab30325d,
0xb231335f, 0xb5323361, 0xb8333562, 0xba343564, 0xbd353666, 0xbf353868,
0xc2363969, 0xc438396b, 0xc6383b6d, 0xc8393b6e, 0xc93a3b6f, 0xca3b3c72,
0xcb3a3d71, 0xcb2f315c, 0x99101121, 0x31010102, 0x1b000000, 0x10000000,
0x07000000, 0x03000000, 0x01000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x02000000, 0x62090a13, 0xa2292a50, 0xa031325f, 0xa9323360, 0xb1323461,
0xb8333664, 0xbc353665, 0xbf353767, 0xc1363869, 0xc337396a, 0xc6383a6c,
0xc8393a6e, 0xca393c6f, 0xcc3b3c71, 0xcf3c3e74, 0xd03c3e74, 0xd23d3f76,
0xd23e4078, 0xd23e4179, 0xd9353867, 0xaa101120, 0x44020205, 0x20000000,
0x11000000, 0x09000000, 0x05000000, 0x01000000, 0x01000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x02000000, 0x5f080810, 0xa6292a4f, 0xa5333563, 0xae333564, 0xb7353766,
0xbe363868, 0xc237396a, 0xc438396b, 0xc7383b6e, 0xc9393b6f, 0xcb3a3c70,
0xcd3b3d72, 0xd03c3e74, 0xd23d3f75, 0xd43e4077, 0xd53f4179, 0xd740417b,
0xd940437d, 0xd941447d, 0xd941447e, 0xdb333562, 0xa8131425, 0x47020305,
0x1e000000, 0x12000000, 0x0a000000, 0x04000000, 0x01000000, 0x01000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x02000000, 0x5806070d, 0xa9282a4e, 0xab353767, 0xb3363868, 0xbc37386a,
0xc3383a6c, 0xc7383b6e, 0xc93a3b6f, 0xcc3b3c71, 0xce3b3d72, 0xd03c3e74,
0xd23d3f76, 0xd43e4077, 0xd63f4179, 0xd840427b, 0xda40437d, 0xdc42447f,
0xde434581, 0xdf434582, 0xe0444784, 0xe0444682, 0xe1353767, 0xb1121223,
0x36010102, 0x1f000000, 0x13000000, 0x09000000, 0x04000000, 0x01000000,
0x01000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x02000000, 0x44020305, 0xa8252749, 0xb1383a6c, 0xba383b6e, 0xc2393c6f,
0xc93b3c71, 0xcd3b3d72, 0xd03c3e74, 0xd23d3f76, 0xd43e4077, 0xd63e4179,
0xd840427b, 0xda40437d, 0xdc41447e, 0xde434480, 0xdf434582, 0xe1444683,
0xe3454785, 0xe5464887, 0xe6474989, 0xe7484a8b, 0xe7484b8c, 0xea3d4077,
0xb4131324, 0x4a020205, 0x25000000, 0x14000000, 0x0b000000, 0x05000000,
0x01000000, 0x01000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x01000000, 0x3e020204, 0xab242647, 0xb73a3c70, 0xbf3b3c71, 0xc73c3d73,
0xce3c3f75, 0xd23d4076, 0xd53e4178, 0xd740417b, 0xd940427c, 0xdb41437e,
0xdd424480, 0xde434580, 0xe0434682, 0xe2454684, 0xe4454886, 0xe6474988,
0xe8474a8a, 0xe9484a8b, 0xea494c8c, 0xec4a4c8f, 0xec4a4d90, 0xec4b4d91,
0xeb393b6f, 0xb115162a, 0x4c020205, 0x22000000, 0x15000000, 0x0b000000,
0x04000000, 0x01000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x01000000, 0x37030306, 0xad252648, 0xbc3c3e74, 0xc43d3f76, 0xcb3e3f76,
0xd33f4179, 0xd63f427a, 0xd940437c, 0xdb41437e, 0xde434480, 0xe0434682,
0xe1444683, 0xe3454785, 0xe5464887, 0xe6474988, 0xe8474a8a, 0xea484b8c,
0xec4a4c8e, 0xed4a4d90, 0xee4b4e90, 0xf04c4f92, 0xf14c4f94, 0xf24e5096,
0xf24c4f94, 0xef3b3d73, 0xb7141427, 0x3b010102, 0x23000000, 0x15000000,
0x09000000, 0x04000000, 0x01000000, 0x00000000, 0x00000000, 0x00000000,
0x01000000, 0x2c030307, 0xb31f203e, 0xc23f4178, 0xca40427b, 0xd140437c,
0xd941447e, 0xdc42457f, 0xde434480, 0xe2434581, 0xe43f427b, 0xe640417b,
0xe8424580, 0xe9444683, 0xea454886, 0xeb464989, 0xed484b8b, 0xef494b8e,
0xf04b4d90, 0xf14b4e91, 0xf24c4f94, 0xf44d5095, 0xf54e5197, 0xf650529a,
0xf851549d, 0xf851549d, 0xfb444683, 0xb8151629, 0x4e030305, 0x28000000,
0x15000000, 0x0b000000, 0x05000000, 0x01000000, 0x00000000, 0x00000000,
0x00000000, 0x20030306, 0xb41c1e38, 0xc841437d, 0xcf41447f, 0xd6434480,
0xdd434682, 0xe0444783, 0xe3454885, 0xe4363869, 0xce1d1d37, 0xca1a1c34,
0xd7222443, 0xd7252649, 0xd7282a4e, 0xe32c2d55, 0xe42c2e56, 0xe42e305a,
0xe930325d, 0xeb2f315d, 0xeb30315e, 0xf0323462, 0xf43a3c6f, 0xf53d3f76,
0xf7424480, 0xfb424581, 0xfb444784, 0xf6323460, 0xb40f101e, 0x4e020204,
0x23000000, 0x14000000, 0x0a000000, 0x03000000, 0x01000000, 0x00000000,
0x00000000, 0x0d010102, 0xb117182e, 0xcd434581, 0xd4444683, 0xdb444785,
0xe1464887, 0xe5464988, 0xe7464988, 0xda1d1e3a, 0x8c020205, 0x85010103,
0x8a030307, 0x89030408, 0x89040408, 0x8f05050a, 0x9005050a, 0x9105060b,
0x9405060b, 0x9605050b, 0x9805050b, 0xa3080811, 0xac0d0e1a, 0xad0e0e1b,
0xb1101120, 0xb9111221, 0xb6111223, 0xb0111121, 0xa407080f, 0x65020205,
0x32000000, 0x1f000000, 0x10000000, 0x06000000, 0x02000000, 0x00000000,
0x00000000, 0x04000000, 0xae15162a, 0xd3454786, 0xd9464987, 0xe0474989,
0xe6484a8a, 0xea494c8d, 0xef3b3d74, 0xb107070e, 0x7c000000, 0x79000000,
0x74000000, 0x6f000000, 0x6b000000, 0x69000000, 0x6a000000, 0x6c000000,
0x6e000000, 0x70000000, 0x72000000, 0x73000000, 0x75000000, 0x77000000,
0x79000000, 0x79000000, 0x78000000, 0x71000000, 0x66000000, 0x56000000,
0x3d000000, 0x29000000, 0x18000000, 0x0a000000, 0x04000000, 0x01000000,
0x00000000, 0x04000000, 0xaa15162a, 0xd9474a8a, 0xde484a8b, 0xe4494c8d,
0xea4a4d8f, 0xee494c8e, 0xef28294d, 0x8a020203, 0x7c000000, 0x76000000,
0x6a000000, 0x60000000, 0x58000000, 0x54000000, 0x54000000, 0x55000000,
0x57000000, 0x59000000, 0x5a000000, 0x5c000000, 0x5e000000, 0x60000000,
0x62000000, 0x64000000, 0x65000000, 0x62000000, 0x5c000000, 0x50000000,
0x3d000000, 0x2a000000, 0x1a000000, 0x0b000000, 0x04000000, 0x01000000,
0x00000000, 0x03000000, 0x9c111222, 0xdf484a8b, 0xe34a4d90, 0xe94b4e92,
0xee4c4f93, 0xf341447f, 0xcf16162b, 0x80000000, 0x7a000000, 0x6f000000,
0x5d000000, 0x4d000000, 0x42000000, 0x3b000000, 0x39000000, 0x3a000000,
0x3c000000, 0x3d000000, 0x3e000000, 0x40000000, 0x41000000, 0x43000000,
0x46000000, 0x48000000, 0x49000000, 0x48000000, 0x46000000, 0x3f000000,
0x32000000, 0x24000000, 0x17000000, 0x0a000000, 0x04000000, 0x01000000,
0x00000000, 0x03000000, 0x8a0e0e1c, 0xe7484b8b, 0xea4e5095, 0xee4e5197,
0xf34e5196, 0xf0303260, 0xa106070e, 0x80000000, 0x76000000, 0x65000000,
0x4b000000, 0x36000000, 0x28000000, 0x1f000000, 0x1d000000, 0x1d000000,
0x1e000000, 0x1f000000, 0x1f000000, 0x20000000, 0x21000000, 0x23000000,
0x25000000, 0x26000000, 0x27000000, 0x28000000, 0x27000000, 0x25000000,
0x1e000000, 0x16000000, 0x0e000000, 0x07000000, 0x03000000, 0x01000000,
0x00000000, 0x02000000, 0x6e06070d, 0xed474a8a, 0xee4f5299, 0xf250539a,
0xf6494c8d, 0xd61d1f39, 0x90010103, 0x7f000000, 0x71000000, 0x5b000000,
0x3d000000, 0x28000000, 0x19000000, 0x10000000, 0x0d000000, 0x0d000000,
0x0d000000, 0x0e000000, 0x0e000000, 0x0f000000, 0x0f000000, 0x10000000,
0x11000000, 0x12000000, 0x13000000, 0x14000000, 0x13000000, 0x12000000,
0x0f000000, 0x0c000000, 0x08000000, 0x04000000, 0x02000000, 0x00000000,
0x00000000, 0x02000000, 0x60040408, 0xf2464987, 0xf351539c, 0xf752559e,
0xf53f417a, 0xb60c0c17, 0x85000000, 0x7c000000, 0x6a000000, 0x51000000,
0x32000000, 0x1c000000, 0x0f000000, 0x07000000, 0x05000000, 0x04000000,
0x04000000, 0x04000000, 0x05000000, 0x05000000, 0x05000000, 0x06000000,
0x06000000, 0x07000000, 0x07000000, 0x07000000, 0x07000000, 0x07000000,
0x06000000, 0x05000000, 0x03000000, 0x01000000, 0x01000000, 0x00000000,
0x00000000, 0x02000000, 0x5607070e, 0xf8464787, 0xf95356a2, 0xfc5456a3,
0xe3222342, 0x8f020205, 0x82000000, 0x76000000, 0x60000000, 0x44000000,
0x25000000, 0x13000000, 0x08000000, 0x02000000, 0x01000000, 0x01000000,
0x00000000, 0x00000000, 0x01000000, 0x01000000, 0x01000000, 0x01000000,
0x01000000, 0x01000000, 0x01000000, 0x02000000, 0x02000000, 0x02000000,
0x01000000, 0x01000000, 0x01000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x02000000, 0x4907070e, 0xfd42447f, 0xfe5659a6, 0xff4c4f92,
0xbb0c0c18, 0x7c000000, 0x7f000000, 0x6f000000, 0x56000000, 0x3a000000,
0x1d000000, 0x0d000000, 0x05000000, 0x01000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x01000000, 0x3807070e, 0xff3e4077, 0xff575aa6, 0xfd333564,
0x82030307, 0x7a000000, 0x7a000000, 0x67000000, 0x4b000000, 0x2f000000,
0x16000000, 0x09000000, 0x03000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x01000000, 0x10010103, 0xff333562, 0xff4d5094, 0xc7191a31,
0x66000000, 0x74000000, 0x72000000, 0x59000000, 0x3e000000, 0x24000000,
0x0f000000, 0x06000000, 0x02000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x01000000, 0x05000000, 0xfb30315c, 0xf83b3d72, 0x860b0b16,
0x62000000, 0x6e000000, 0x68000000, 0x4e000000, 0x33000000, 0x1b000000,
0x0a000000, 0x03000000, 0x01000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x01000000, 0x05000000, 0xf5292b51, 0xce252749, 0x5b020205,
0x5c000000, 0x65000000, 0x5c000000, 0x41000000, 0x28000000, 0x14000000,
0x07000000, 0x02000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x01000000, 0x05000000, 0xdc191a32, 0x8a0c0c18, 0x3b000000,
0x52000000, 0x57000000, 0x4d000000, 0x33000000, 0x1d000000, 0x0d000000,
0x04000000, 0x01000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x01000000, 0x04000000, 0xb00d0e1a, 0x4d040408, 0x33000000,
0x48000000, 0x4a000000, 0x3f000000, 0x27000000, 0x15000000, 0x09000000,
0x02000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x03000000, 0x5707070e, 0x20000001, 0x2c000000,
0x3c000000, 0x3c000000, 0x31000000, 0x1d000000, 0x0e000000, 0x06000000,
0x01000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x03000000, 0x09000000, 0x14000000, 0x21000000,
0x2c000000, 0x2b000000, 0x22000000, 0x13000000, 0x09000000, 0x03000000,
0x01000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x02000000, 0x07000000, 0x0f000000, 0x18000000,
0x1f000000, 0x1e000000, 0x17000000, 0x0c000000, 0x05000000, 0x02000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x01000000, 0x05000000, 0x0a000000, 0x0f000000,
0x14000000, 0x13000000, 0x0e000000, 0x07000000, 0x02000000, 0x01000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x01000000, 0x02000000, 0x05000000, 0x08000000,
0x09000000, 0x08000000, 0x06000000, 0x03000000, 0x01000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x01000000, 0x02000000, 0x03000000,
0x04000000, 0x04000000, 0x02000000, 0x01000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x01000000,
0x01000000, 0x01000000, 0x01000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,

View file

@ -0,0 +1,96 @@
0x00, 0x00, 0x00, 0xf0, 0xf0, 0xf0, 0x7c, 0xf9,
0x01, 0xc8, 0x24, 0x28, 0x25, 0x3b, 0xe5, 0x0e,
0x10, 0x06, 0x10, 0x11, 0x08, 0x10, 0x11, 0x0c,
0x10, 0x12, 0x06, 0x10, 0x12, 0x09, 0x12, 0x14,
0x11, 0x15, 0x16, 0x14, 0x18, 0x1a, 0x11, 0x19,
0x1a, 0x18, 0x1b, 0x1c, 0x17, 0x1c, 0x1e, 0x1b,
0x1d, 0x1f, 0x0f, 0x1d, 0x1f, 0x1b, 0x23, 0x24,
0x1c, 0x26, 0x27, 0x19, 0x26, 0x28, 0x25, 0x29,
0x2b, 0x28, 0x2c, 0x2c, 0x19, 0x2a, 0x2c, 0x1f,
0x2d, 0x2d, 0x17, 0x30, 0x30, 0x2a, 0x33, 0x32,
0x17, 0x30, 0x32, 0x24, 0x32, 0x31, 0x2a, 0x30,
0x32, 0x2f, 0x32, 0x34, 0x31, 0x36, 0x37, 0x25,
0x38, 0x38, 0x21, 0x36, 0x38, 0x35, 0x3a, 0x3a,
0x17, 0x39, 0x3c, 0x30, 0x40, 0x3e, 0x32, 0x3f,
0x3e, 0x37, 0x40, 0x41, 0x19, 0x3e, 0x40, 0x2e,
0x44, 0x43, 0x2a, 0x44, 0x44, 0x3d, 0x44, 0x46,
0x43, 0x48, 0x48, 0x30, 0x48, 0x4a, 0x2a, 0x48,
0x49, 0x36, 0x4b, 0x4b, 0x43, 0x4c, 0x4d, 0x3b,
0x4c, 0x4c, 0x48, 0x4d, 0x50, 0x42, 0x52, 0x54,
0x30, 0x54, 0x53, 0x3b, 0x53, 0x54, 0x41, 0x55,
0x54, 0x3c, 0x57, 0x57, 0x2b, 0x59, 0x59, 0x40,
0x5d, 0x5a, 0x3d, 0x5c, 0x5f, 0x22, 0x59, 0x5b,
0x58, 0x5c, 0x5b, 0x54, 0x5c, 0x5e, 0x3a, 0x61,
0x5f, 0x29, 0x62, 0x5f, 0x41, 0x62, 0x62, 0x36,
0x62, 0x61, 0x49, 0x61, 0x63, 0x4f, 0x63, 0x65,
0x40, 0x67, 0x68, 0x28, 0x67, 0x68, 0x3d, 0x66,
0x67, 0x65, 0x68, 0x6a, 0x45, 0x6a, 0x69, 0x50,
0x6c, 0x6c, 0x41, 0x6a, 0x6a, 0x5c, 0x69, 0x6d,
0x4d, 0x6f, 0x6d, 0x3d, 0x70, 0x6d, 0x4f, 0x71,
0x72, 0x33, 0x71, 0x72, 0x3b, 0x71, 0x72, 0x4d,
0x73, 0x73, 0x48, 0x75, 0x73, 0x43, 0x76, 0x79,
0x41, 0x77, 0x76, 0x5c, 0x7a, 0x78, 0x48, 0x79,
0x78, 0x4d, 0x7c, 0x7c, 0x38, 0x7f, 0x7c, 0x45,
0x7d, 0x7c, 0x5a, 0x7d, 0x7f, 0x40, 0x80, 0x82,
0x28, 0x7b, 0x7c, 0x7a, 0x82, 0x80, 0x4f, 0x81,
0x81, 0x55, 0x80, 0x80, 0x72, 0x81, 0x84, 0x4b,
0x86, 0x87, 0x38, 0x86, 0x87, 0x48, 0x85, 0x84,
0x6a, 0x89, 0x87, 0x55, 0x88, 0x87, 0x5b, 0x89,
0x8a, 0x4b, 0x8d, 0x8d, 0x47, 0x90, 0x91, 0x3e,
0x91, 0x92, 0x46, 0x92, 0x92, 0x4c, 0x93, 0x94,
0x54, 0x93, 0x93, 0x60, 0x92, 0x94, 0x5b, 0x97,
0x98, 0x3e, 0x98, 0x9a, 0x46, 0x9b, 0x99, 0x4d,
0x98, 0x9c, 0x4e, 0x99, 0x9b, 0x61, 0x9b, 0x9c,
0x5c, 0x9b, 0x9b, 0x71, 0x9f, 0x9e, 0x58, 0xa3,
0xa3, 0x41, 0xa1, 0xa4, 0x50, 0xa3, 0xa4, 0x63,
0xa5, 0xa6, 0x4b, 0xa2, 0xa6, 0x71, 0xaa, 0xad,
0x3b, 0xa8, 0xa9, 0x70, 0xae, 0xac, 0x43, 0xa8,
0xa7, 0x8c, 0xae, 0xac, 0x65, 0xaf, 0xb1, 0x37,
0xac, 0xac, 0x80, 0xae, 0xae, 0x6d, 0xae, 0xb2,
0x47, 0xac, 0xb0, 0x61, 0xb2, 0xb1, 0x4e, 0xaf,
0xb1, 0x5c, 0xb5, 0xb6, 0x5a, 0xae, 0xb0, 0xad,
0xb5, 0xb9, 0x46, 0xb8, 0xb7, 0x54, 0xba, 0xbb,
0x39, 0xb9, 0xba, 0x4f, 0xb4, 0xb9, 0x70, 0xb8,
0xba, 0x64, 0xb8, 0xba, 0x6b, 0xc0, 0xbd, 0x54,
0xbc, 0xc0, 0x54, 0xc0, 0xc1, 0x47, 0xbe, 0xbf,
0x62, 0xc0, 0xc2, 0x6b, 0xbe, 0xbf, 0x96, 0xc5,
0xc4, 0x60, 0xc1, 0xc4, 0x76, 0xc3, 0xc3, 0x80,
0xc7, 0xc9, 0x56, 0xc7, 0xca, 0x5e, 0xcc, 0xcc,
0x41, 0xcc, 0xcc, 0x4d, 0xc9, 0xca, 0x74, 0xcd,
0xd1, 0x3d, 0xcf, 0xcf, 0x4d, 0xcf, 0xd2, 0x34,
0xcb, 0xcd, 0x7e, 0xd0, 0xd1, 0x57, 0xcf, 0xd1,
0x5d, 0xd3, 0xd7, 0x43, 0xd1, 0xd4, 0x67, 0xd2,
0xd7, 0x4b, 0xd5, 0xd8, 0x3b, 0xd6, 0xd7, 0x55,
0xd9, 0xd7, 0x4d, 0xd7, 0xd5, 0x70, 0xd6, 0xd6,
0x78, 0xd7, 0xd8, 0x65, 0xd5, 0xd6, 0x7f, 0xd9,
0xdc, 0x3f, 0xd8, 0xdc, 0x48, 0xd6, 0xd9, 0x6c,
0xd4, 0xd9, 0x72, 0xd8, 0xd5, 0x9f, 0xda, 0xdb,
0x60, 0xd8, 0xd7, 0x94, 0xdc, 0xdc, 0x61, 0xda,
0xdf, 0x5b, 0xd8, 0xdb, 0x89, 0xdd, 0xe0, 0x4c,
0xe0, 0xe1, 0x3b, 0xe1, 0xdf, 0x5d, 0xdd, 0xe1,
0x56, 0xe0, 0xe2, 0x46, 0xdc, 0xdd, 0x85, 0xd8,
0xdc, 0xa4, 0xde, 0xe0, 0x6b, 0xdf, 0xde, 0x7f,
0xdd, 0xe0, 0x72, 0xe3, 0xe1, 0x57, 0xe4, 0xe5,
0x3f, 0xe2, 0xe2, 0x66, 0xdf, 0xde, 0x97, 0xe4,
0xe6, 0x4a, 0xe4, 0xe7, 0x53, 0xe4, 0xe5, 0x71,
0xe7, 0xe6, 0x63, 0xe6, 0xe6, 0x6a, 0xea, 0xea,
0x3b, 0xe3, 0xe8, 0x64, 0xe5, 0xe9, 0x5d, 0xe2,
0xe5, 0x92, 0xeb, 0xeb, 0x47, 0xe5, 0xe8, 0x7a,
0xe4, 0xe8, 0x81, 0xeb, 0xec, 0x50, 0xe9, 0xe7,
0x88, 0xe7, 0xe7, 0x8f, 0xe9, 0xec, 0x58, 0xea,
0xe8, 0x82, 0xed, 0xeb, 0x68, 0xeb, 0xef, 0x63,
0xed, 0xed, 0x71, 0xf0, 0xf0, 0x4b, 0xee, 0xf0,
0x54, 0xf2, 0xf1, 0x43, 0xee, 0xee, 0x79, 0xee,
0xf1, 0x5d, 0xeb, 0xf1, 0x6c, 0xf5, 0xf3, 0x3b,
0xec, 0xef, 0x80, 0xef, 0xf5, 0x46, 0xf1, 0xf6,
0x3c, 0xf5, 0xf4, 0x47, 0xed, 0xf0, 0x88, 0xf0,
0xef, 0x8f, 0xee, 0xef, 0x97, 0xf5, 0xf5, 0x51,
0xf3, 0xf2, 0x76, 0xf1, 0xf5, 0x68, 0xf4, 0xf6,
0x5a, 0xf5, 0xf7, 0x63, 0xf7, 0xf5, 0x71, 0xf4,
0xf7, 0x6b, 0xf2, 0xf7, 0x71, 0xf7, 0xf6, 0x7a,
0xf5, 0xf6, 0x80, 0xf3, 0xf7, 0x8f, 0xf5, 0xf4,
0xaf, 0xf6, 0xf8, 0x89, 0xf9, 0xf7, 0x97, 0xf9,
0xf9, 0x9f, 0xff, 0xff, 0xff, 0xf7, 0xf7, 0xf7,
0xf8, 0xf8, 0xf8, 0xf9, 0xf9, 0xf9, 0xfa, 0xfa,
0xfa, 0xfb, 0xfb, 0xfb, 0xfc, 0xfc, 0xfc, 0xfd,
0xfd, 0xfd, 0xfe, 0xfe, 0xfe, 0xff, 0xff, 0xff,

View file

@ -0,0 +1,300 @@
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41,
0x31, 0x41, 0x2e, 0x29, 0x21, 0x0d, 0x0f, 0x0f,
0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x1d, 0x2a, 0x47, 0x4c, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x2c, 0x38, 0x68,
0x9b, 0xc6, 0xea, 0xea, 0xee, 0xc7, 0x83, 0x55,
0x2d, 0x15, 0x0f, 0x0f, 0x0a, 0x00, 0x00, 0x00,
0x00, 0x00, 0x2e, 0x81, 0x71, 0x4f, 0x07, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x3c, 0x67, 0xce, 0xe1,
0xe1, 0xe3, 0xe1, 0xe3, 0xe7, 0xe7, 0xe7, 0xea,
0xed, 0xd8, 0x8d, 0x5d, 0x25, 0x15, 0x0f, 0x00,
0x00, 0x34, 0x5d, 0xf3, 0xf3, 0x64, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x44, 0xad, 0xe2, 0xe2, 0xe2,
0xe2, 0xe2, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe3,
0xe7, 0xe7, 0xea, 0xe9, 0xd8, 0x97, 0x49, 0x14,
0x1c, 0x2b, 0x8e, 0xf3, 0x9c, 0x54, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x79, 0x93, 0x4c, 0x00, 0x00,
0x00, 0x00, 0x4b, 0xae, 0xe1, 0xe2, 0xe2, 0xdf,
0xdf, 0xe3, 0xe7, 0xe7, 0xe3, 0xe1, 0xe2, 0xe2,
0xe1, 0xe3, 0xd9, 0xce, 0xd1, 0xc6, 0xcb, 0xb3,
0x62, 0x17, 0x54, 0xd0, 0x7e, 0x06, 0x00, 0x38,
0x83, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x6b, 0x7e, 0xee, 0x76, 0x33, 0x05,
0x22, 0x09, 0x98, 0xe7, 0xe1, 0xe3, 0xe1, 0xe1,
0xe7, 0xea, 0xed, 0xeb, 0xea, 0xe3, 0xe1, 0xe1,
0xe1, 0xe2, 0xdb, 0xdb, 0xce, 0xd1, 0xc5, 0xb7,
0xc1, 0xbe, 0x65, 0x20, 0x54, 0x00, 0x42, 0xaf,
0xe8, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x50, 0x38, 0x85, 0xed, 0xc3, 0x95,
0x67, 0x08, 0xea, 0xe7, 0xe7, 0xeb, 0xed, 0xed,
0xed, 0xed, 0xee, 0xef, 0xed, 0xeb, 0xea, 0xea,
0xe7, 0xe1, 0xe1, 0xe1, 0xe3, 0xdb, 0xce, 0xc5,
0xad, 0xa6, 0xb9, 0x89, 0x00, 0x06, 0x92, 0xd8,
0xbe, 0x5f, 0x3b, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x05, 0x48, 0x85, 0xd6,
0x1a, 0x9d, 0xe7, 0xe7, 0xeb, 0xf3, 0xf1, 0xf0,
0xef, 0xef, 0xf0, 0xf3, 0xed, 0xe7, 0xe7, 0xea,
0xea, 0xe7, 0xe7, 0xe1, 0xe2, 0xe1, 0xdb, 0xce,
0xad, 0x9f, 0x9f, 0x9a, 0x9a, 0x43, 0x59, 0x86,
0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x6e, 0x86, 0x59,
0x5a, 0xe1, 0xea, 0xeb, 0xef, 0xf4, 0xf4, 0xef,
0xed, 0xee, 0xee, 0xf0, 0xee, 0xe7, 0xe7, 0xe3,
0xe7, 0xe7, 0xe7, 0xea, 0xe7, 0xe1, 0xe3, 0xd9,
0xc2, 0xad, 0x9f, 0x9f, 0xae, 0xc6, 0x36, 0x00,
0x00, 0x00, 0x07, 0x1e, 0x00, 0x00, 0x00, 0x00,
0x00, 0x4f, 0x36, 0x00, 0x00, 0x22, 0x7c, 0x18,
0xd1, 0xea, 0xed, 0xef, 0xf1, 0xf5, 0xf0, 0xed,
0xea, 0xeb, 0xeb, 0xeb, 0xea, 0xe7, 0xe7, 0xe7,
0xe7, 0xea, 0xeb, 0xeb, 0xeb, 0xeb, 0xea, 0xd9,
0xce, 0xc2, 0xa6, 0x9f, 0x9d, 0xb7, 0xc6, 0x00,
0x0c, 0x64, 0x7b, 0x41, 0x00, 0x00, 0x00, 0x00,
0x00, 0x5c, 0x89, 0x76, 0x78, 0x84, 0x8f, 0x26,
0xeb, 0xee, 0xed, 0xef, 0xf1, 0xf3, 0xed, 0xe7,
0xe7, 0xea, 0xeb, 0xeb, 0xea, 0xe7, 0xe7, 0xe7,
0xea, 0xeb, 0xeb, 0xa2, 0xeb, 0x8f, 0xee, 0xeb,
0xdb, 0xca, 0xb8, 0x9f, 0x9a, 0xa8, 0xd1, 0x82,
0x16, 0xe5, 0xd3, 0x47, 0x00, 0x00, 0x00, 0x00,
0x00, 0x5c, 0xeb, 0xeb, 0xeb, 0xeb, 0x6e, 0x60,
0xeb, 0xed, 0xed, 0xec, 0xf0, 0xee, 0xea, 0xce,
0xe7, 0xe7, 0xea, 0xea, 0xea, 0xe7, 0xe7, 0xe7,
0xea, 0xeb, 0xeb, 0x99, 0x84, 0x76, 0xed, 0xed,
0xe7, 0xe1, 0xce, 0xad, 0x9a, 0x9a, 0xb7, 0xdd,
0x00, 0xa9, 0xb0, 0x71, 0x05, 0x05, 0x00, 0x00,
0x00, 0x40, 0x54, 0x44, 0x46, 0x48, 0x10, 0x88,
0xea, 0xeb, 0xeb, 0xed, 0xed, 0xeb, 0x88, 0x4e,
0x82, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7,
0xea, 0xeb, 0xeb, 0xd7, 0x37, 0x8f, 0xeb, 0xec,
0xea, 0xe3, 0xdb, 0xc5, 0xa3, 0x9a, 0x9d, 0xc5,
0x39, 0x67, 0x78, 0x4b, 0x00, 0x00, 0x00, 0x00,
0x00, 0x2f, 0x69, 0x6e, 0x70, 0x6f, 0x00, 0x98,
0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xd4, 0x38, 0x7c,
0x3c, 0x82, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7,
0xea, 0xeb, 0xeb, 0x90, 0x37, 0x61, 0xc8, 0xc9,
0xeb, 0xe7, 0xe1, 0xda, 0xc2, 0x9d, 0x9d, 0xad,
0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x48, 0x6b, 0x71, 0x00, 0xdc,
0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0x84, 0x2d, 0xa3,
0x91, 0x24, 0x88, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7,
0xea, 0xeb, 0xeb, 0x61, 0x69, 0x78, 0x66, 0xc3,
0xdd, 0xe3, 0xe3, 0xe7, 0xce, 0xae, 0x9d, 0xa3,
0x7f, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x1b, 0x3e, 0x46, 0x6a, 0xa4, 0x05, 0xeb,
0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0x50, 0x2d, 0xe3,
0xe3, 0x75, 0x24, 0xb7, 0xe3, 0xe7, 0xe7, 0xe7,
0xea, 0xeb, 0xcb, 0x48, 0x8f, 0xdd, 0x66, 0x69,
0xd7, 0xe3, 0xdb, 0xd9, 0xd1, 0xbb, 0xa5, 0xa3,
0xa5, 0x06, 0xdc, 0xf0, 0x9c, 0x28, 0x00, 0x00,
0x00, 0x72, 0xbe, 0xa4, 0x99, 0xd6, 0x05, 0xe7,
0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0x42, 0x44, 0xe3,
0xe3, 0xdb, 0x59, 0x52, 0xe3, 0xe7, 0xe7, 0xe7,
0xea, 0xeb, 0x90, 0x57, 0xd7, 0xeb, 0xb9, 0x6f,
0x6f, 0xce, 0xd9, 0xda, 0xd4, 0xb7, 0xa8, 0xae,
0xc5, 0x00, 0xe0, 0xe0, 0x7e, 0x00, 0x00, 0x00,
0x00, 0x6c, 0xec, 0xed, 0xed, 0xee, 0x05, 0xea,
0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0x35, 0x6d, 0xe3,
0xe3, 0xe1, 0xce, 0x4b, 0x91, 0xe7, 0xe7, 0xea,
0xea, 0xeb, 0x8f, 0x86, 0xeb, 0xeb, 0xeb, 0xeb,
0xb9, 0xd1, 0xd9, 0xd1, 0xc8, 0xae, 0xa5, 0xae,
0xc5, 0x00, 0x8e, 0xb0, 0x63, 0x00, 0x00, 0x00,
0x00, 0x55, 0x8d, 0x65, 0x48, 0x3c, 0x00, 0x98,
0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0x44, 0xce, 0xe3,
0xe3, 0xe3, 0xe3, 0xce, 0xce, 0xe7, 0xea, 0xea,
0xea, 0xeb, 0xc8, 0xcc, 0xeb, 0xeb, 0xeb, 0xeb,
0xea, 0xe7, 0xe7, 0xd4, 0xc7, 0xa8, 0x9e, 0xa3,
0xb7, 0x08, 0x09, 0x1f, 0x07, 0x00, 0x00, 0x00,
0x00, 0x12, 0x0e, 0x00, 0x00, 0x00, 0x00, 0xbe,
0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xd4, 0xe7, 0xe3,
0xe3, 0xe3, 0xe7, 0xe3, 0xe3, 0xea, 0xea, 0xea,
0xea, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb,
0xea, 0xea, 0xea, 0xd7, 0xd0, 0xa1, 0x9e, 0xa7,
0xba, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x3b, 0x00, 0xeb,
0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xea, 0xe7, 0xe7,
0xe3, 0xe3, 0xe7, 0xe7, 0xe3, 0xea, 0xea, 0xea,
0xea, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb,
0xea, 0xea, 0xeb, 0xde, 0xd3, 0xab, 0xa1, 0xb2,
0xcf, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x05, 0x00, 0x00, 0x07, 0x53, 0x95, 0x10, 0xbb,
0xe3, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xe7, 0xe7,
0xe3, 0xe3, 0xe7, 0xe7, 0xe3, 0xea, 0xea, 0xea,
0xea, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb,
0xeb, 0xeb, 0xeb, 0xec, 0xd3, 0xaf, 0xa2, 0xb4,
0xd5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x05, 0x5e, 0x6b, 0x86, 0xc8, 0xeb, 0x4d, 0x7f,
0xe1, 0xe7, 0xeb, 0xeb, 0xeb, 0xeb, 0xe7, 0xe7,
0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xea, 0xea, 0xea,
0xc1, 0x84, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb,
0xeb, 0xeb, 0xeb, 0xe8, 0xd3, 0xa9, 0xa4, 0xc0,
0xe6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x12, 0x8e, 0xee, 0xed, 0xed, 0xe9, 0x75, 0x5a,
0xe1, 0xea, 0xed, 0xed, 0xed, 0xeb, 0xe7, 0xe7,
0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xea, 0xea, 0xea,
0x76, 0x69, 0xed, 0xed, 0xeb, 0xeb, 0xeb, 0xed,
0xeb, 0xeb, 0xeb, 0xe8, 0xd3, 0xac, 0xaa, 0xd0,
0xb1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x3e, 0xc9, 0xe9, 0xd7, 0xd7, 0x98, 0x08,
0xe3, 0xeb, 0xed, 0xed, 0xed, 0xed, 0xea, 0xea,
0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xea, 0xea, 0xea,
0x4b, 0x57, 0xed, 0xed, 0xeb, 0xeb, 0xeb, 0xed,
0xeb, 0xeb, 0xed, 0xdc, 0xcd, 0xaa, 0xa4, 0xd0,
0x7d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x42, 0x65, 0x57, 0x46, 0x3f, 0x00,
0xba, 0xed, 0xed, 0xeb, 0xeb, 0xed, 0xeb, 0xea,
0xe7, 0xea, 0xe7, 0xe7, 0x9b, 0x59, 0xda, 0xd4,
0x25, 0x70, 0xed, 0xed, 0xed, 0xeb, 0xeb, 0xed,
0xed, 0xed, 0xeb, 0xd7, 0xbe, 0x98, 0x52, 0x44,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00,
0x59, 0xed, 0xe7, 0xe3, 0xe7, 0xea, 0xeb, 0xeb,
0xea, 0xea, 0xe7, 0xe7, 0xe7, 0x48, 0x59, 0x84,
0x1d, 0xcc, 0xed, 0xed, 0xed, 0xed, 0xe9, 0xee,
0xee, 0xdd, 0xda, 0xd4, 0xae, 0x9d, 0x7a, 0x1b,
0x00, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xa1, 0xe3, 0xe3, 0xe7, 0xe7, 0xeb, 0xee,
0xeb, 0xeb, 0xea, 0xe7, 0xe7, 0xcc, 0x2d, 0x2d,
0x66, 0xeb, 0xed, 0xed, 0xe9, 0xd7, 0xcc, 0xe8,
0xe8, 0xd4, 0xd1, 0xc6, 0xae, 0xa6, 0xa6, 0x4d,
0x2f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x10, 0xd9, 0xbb, 0xb7, 0xd9, 0xed, 0xef,
0xec, 0xed, 0xeb, 0xea, 0xea, 0xea, 0x8b, 0x27,
0xea, 0xeb, 0xed, 0xee, 0xde, 0xc8, 0xb9, 0xd8,
0xdc, 0xcc, 0xc6, 0xba, 0xa5, 0xad, 0xca, 0x9d,
0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x3d, 0x3f, 0x91, 0xc5, 0xd8, 0xdc,
0xf0, 0xef, 0xee, 0xeb, 0xea, 0xeb, 0xea, 0xa1,
0xeb, 0xed, 0xee, 0xec, 0xd6, 0xc3, 0xc3, 0xdc,
0xe0, 0xc7, 0xc1, 0xa7, 0x4e, 0x4d, 0x9a, 0xca,
0xad, 0x2c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x3c, 0x66, 0xd9, 0xa5, 0x99, 0xc0,
0xc9, 0xdc, 0xf0, 0xec, 0xeb, 0xeb, 0xeb, 0xeb,
0xeb, 0xed, 0xee, 0xd8, 0xc3, 0xbe, 0xc3, 0xcf,
0xcf, 0xd0, 0xcf, 0xcf, 0x10, 0x00, 0x52, 0xc5,
0xe1, 0xa6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x13, 0xc6, 0xc5, 0x51, 0xa4, 0xab,
0xab, 0xb2, 0xc7, 0xe0, 0xe8, 0xe9, 0xeb, 0xeb,
0xeb, 0xee, 0xe8, 0xc7, 0xc0, 0xc0, 0xcf, 0xd0,
0xd0, 0xd0, 0xac, 0x13, 0x00, 0x00, 0x0c, 0x88,
0xdb, 0xdb, 0x56, 0x33, 0x41, 0x30, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x33, 0x76, 0xe9, 0x52, 0x3e, 0xc0, 0xc7,
0xaf, 0xa4, 0xab, 0xc0, 0xd5, 0xdc, 0xde, 0xed,
0xee, 0xe8, 0xdc, 0xd0, 0xbf, 0xd2, 0xd5, 0xe4,
0xe4, 0x77, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13,
0x88, 0xd9, 0xba, 0x54, 0xd5, 0x80, 0x05, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x51, 0x99, 0xee, 0x8d, 0x00, 0x00, 0x00, 0x86,
0xbe, 0xa4, 0xa4, 0xb0, 0xbf, 0xd0, 0xdc, 0xe8,
0xef, 0xf0, 0xe4, 0xd2, 0xd2, 0xe6, 0xe6, 0xbc,
0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x51, 0xa1, 0xdd, 0xa1, 0xbe, 0xe0, 0x5e, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x59,
0x84, 0xeb, 0xd6, 0x33, 0x1e, 0x00, 0x00, 0x00,
0x4e, 0x92, 0xaf, 0xa9, 0xaa, 0xd2, 0xe4, 0xf3,
0xf3, 0xe4, 0xe5, 0xd2, 0xd3, 0x81, 0x38, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1b,
0x77, 0x89, 0xda, 0xd7, 0xd6, 0xd8, 0x73, 0x00,
0x00, 0x00, 0x00, 0x00, 0x4a, 0x7b, 0x5c, 0x35,
0x6e, 0xe7, 0x59, 0x2f, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x2c, 0x7e, 0xcd, 0xe5, 0xf1, 0xf1,
0xf1, 0xd2, 0x96, 0x6c, 0x0c, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58,
0xf4, 0x8e, 0xba, 0xcb, 0xd6, 0xc9, 0x81, 0x00,
0x00, 0x00, 0x00, 0x00, 0x96, 0xf3, 0xd8, 0x75,
0xdb, 0x9a, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x0c, 0x55, 0x71, 0x55,
0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa0,
0xf3, 0xe4, 0xa7, 0xab, 0xc3, 0xc7, 0xa0, 0x00,
0x00, 0x00, 0x00, 0x00, 0xaa, 0xf3, 0xd6, 0xc5,
0xe2, 0x8a, 0x56, 0x06, 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, 0x2f, 0xf1,
0xf3, 0xe0, 0xa1, 0x95, 0xb0, 0xd0, 0xbc, 0x00,
0x00, 0x00, 0x00, 0x00, 0xf0, 0xf0, 0xe9, 0xe7,
0xe2, 0xbb, 0xb7, 0x33, 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, 0x5d, 0xf3,
0xf3, 0xe0, 0x78, 0x76, 0x9c, 0xbf, 0xb6, 0x00,
0x00, 0x00, 0x00, 0x38, 0xf0, 0xe8, 0xcb, 0xcc,
0xdb, 0xe3, 0xea, 0x65, 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, 0x5d, 0xf3,
0xf3, 0x72, 0x5f, 0x6f, 0x93, 0xbf, 0xb6, 0x00,
0x00, 0x00, 0x0c, 0x50, 0xf0, 0xdc, 0xb2, 0xaf,
0xbb, 0xd9, 0xeb, 0xa2, 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, 0x5d, 0xf3,
0xac, 0x37, 0x7e, 0x4b, 0x8e, 0xbc, 0xa0, 0x05,
0x00, 0x00, 0x0c, 0x4f, 0xf0, 0xdc, 0xbe, 0x9c,
0xa5, 0xd4, 0xed, 0xb2, 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, 0x4a, 0xf1,
0x4a, 0x72, 0x81, 0x32, 0x8c, 0xbc, 0x97, 0x05,
0x00, 0x00, 0x07, 0x71, 0xcf, 0xef, 0x95, 0x81,
0x98, 0xb5, 0xe9, 0xab, 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, 0x1b, 0x7b,
0x0e, 0xb3, 0x64, 0x3f, 0x8e, 0xbc, 0x73, 0x00,
0x00, 0x00, 0x00, 0x6c, 0x7e, 0xf0, 0x93, 0x40,
0x95, 0xa1, 0xd8, 0x92, 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, 0x05, 0x00,
0x30, 0x2f, 0x23, 0x5c, 0x96, 0x79, 0x00, 0x00,
0x00, 0x00, 0x00, 0x4c, 0x4c, 0xe5, 0xb6, 0x00,
0x61, 0x95, 0xbe, 0x74, 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, 0x3a,
0x00, 0x00, 0x49, 0x80, 0x94, 0x0e, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x58, 0x7b, 0xc4, 0x19,
0x23, 0x6a, 0xaa, 0x5d, 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, 0x3a, 0x5b, 0x87, 0x45, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x07, 0x80, 0xf2, 0x0e,
0x00, 0x00, 0xa0, 0x2f, 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, 0x11, 0x5b, 0x3a, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0xbd, 0x00,
0x00, 0x00, 0x0c, 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, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x00,
0x00, 0x00, 0x00, 0x05, 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, 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, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

View file

@ -0,0 +1,401 @@
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x05050504, 0x3e393935, 0xab626252, 0xd44b4b3e, 0xff5f5f4c,
0xff4c4c43, 0xff43433b, 0xff373734, 0xc01a1a1a, 0x921e1e1e, 0x5e1d1d1d,
0x24141414, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x5f323232, 0xb343433f,
0xbf68684e, 0xb26e6e50, 0x2f222219, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x1c18180b, 0x9d545430, 0xfd59593b, 0xff8e8f41, 0xffcbcc4f, 0xffe6e75a,
0xfff2f45a, 0xfff3f55e, 0xfff3f46f, 0xffe4e574, 0xffaeaf60, 0xff777850,
0xfe4a4a38, 0xe12a2a29, 0xa11e1e1e, 0x711f1f1f, 0x22111111, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xde50504a, 0xffb0b16f,
0xff9a9b64, 0xff757551, 0xfe3d3d38, 0x0a080807, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x2e14140c,
0xec5b5b3b, 0xff92923e, 0xffeaec45, 0xfff3f549, 0xfff3f548, 0xfff3f54c,
0xfff3f54a, 0xfff3f54b, 0xfff4f550, 0xfff4f655, 0xfff4f653, 0xfff4f65b,
0xfff5f669, 0xffebed72, 0xffb7b864, 0xff818254, 0xfd3f3f35, 0xcf2b2b2b,
0x631e1e1e, 0x0e0a0a0a, 0x00000000, 0x6f54543f, 0xff808056, 0xfff7f889,
0xfff5f68b, 0xf1868759, 0x361b1b13, 0x0e0d0d0a, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x2a25251e, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x4e33331b, 0xf065653b,
0xffdcdd45, 0xfff3f542, 0xfff3f541, 0xfff3f542, 0xfff3f541, 0xfff3f544,
0xfff3f545, 0xfff3f545, 0xfff3f546, 0xfff3f547, 0xfff3f549, 0xfff3f54c,
0xfff4f653, 0xfff4f552, 0xfff3f459, 0xfff1f366, 0xffeeef77, 0xffc6c782,
0xff69695b, 0xe9292929, 0x922f2f2a, 0xa2474732, 0xffb8b86d, 0xfff7f888,
0xffc9c973, 0xed787849, 0x00000000, 0x2c1b1b10, 0xcf33332a, 0x3910100c,
0x01000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x2a28291b, 0xe5a5a56f, 0xfdc4c571, 0xe66a6a4a,
0x5b383820, 0x0a090906, 0x01000000, 0x2a1c1c0f, 0xef707040, 0xffddde4b,
0xfff3f546, 0xfff3f542, 0xfff3f543, 0xfff3f441, 0xfff3f443, 0xfff3f54c,
0xfff3f54f, 0xfff3f550, 0xfff3f54d, 0xfff3f547, 0xfff3f543, 0xfff3f542,
0xfff3f547, 0xfff3f44c, 0xfff0f24d, 0xffeced4d, 0xffe9eb54, 0xffe8e958,
0xffe7e967, 0xffd7d896, 0xff84846a, 0xff2d2d1f, 0xff777746, 0xffe9ea82,
0xffa8a863, 0x883f3f24, 0x2e19190f, 0xeb5d5d41, 0xffafb061, 0xea51513d,
0x0d070704, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0xbc959562, 0xffaaaa61, 0xfff4f572, 0xffa5a556,
0xfd54543d, 0xc23e3e2d, 0x6e4f4f22, 0xca3c3c25, 0xffc2c351, 0xfff4f550,
0xfff3f549, 0xfff3f54b, 0xfff3f549, 0xfff3f548, 0xfff3f54f, 0xfff3f55b,
0xfff4f66a, 0xfff4f668, 0xfff4f558, 0xfff3f54d, 0xfff3f547, 0xfff3f545,
0xfff3f545, 0xfff3f544, 0xfff0f246, 0xffeef049, 0xffecee4a, 0xffeaeb4e,
0xffe6e74f, 0xffe2e34f, 0xffe1e25d, 0xffdedf70, 0xff89894e, 0xff3a3a24,
0xff7a7a47, 0x301d1d0d, 0xe5666641, 0xffd5d66d, 0xfff1f378, 0xff9b9b57,
0x992f2f27, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x03020202, 0xb473734b, 0xe85a5a3e, 0xffb0b05a, 0xfff4f56c,
0xffe0e167, 0xffc1c25e, 0xff909041, 0xff40401b, 0xfff2f457, 0xfff4f553,
0xfff3f552, 0xfff4f560, 0xfff4f66b, 0xfff4f56e, 0xfff4f569, 0xfff4f66b,
0xfff5f778, 0xfff6f77f, 0xfff5f76e, 0xfff5f662, 0xfff4f660, 0xfff4f65d,
0xfff4f654, 0xfff3f54a, 0xfff2f445, 0xfff2f447, 0xfff1f349, 0xffeff14a,
0xffeaec4c, 0xffe2e44a, 0xffd9db44, 0xffd6d73f, 0xffdedf5f, 0xffb7b853,
0xff232316, 0xe3404026, 0xffc1c165, 0xffeaec74, 0xffe0e170, 0xf383834f,
0xf05c5c54, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x03020202, 0x100d0d08, 0x170f0f08, 0xa23e3e2b, 0xff6e6e46,
0xffabac58, 0xffebec69, 0xff323219, 0xffd2d345, 0xfff4f652, 0xfff4f656,
0xfff4f561, 0xfff6f787, 0xfff6f792, 0xfff6f786, 0xfff5f678, 0xfff5f77b,
0xfff6f887, 0xfff7f88d, 0xfff5f770, 0xfff4f557, 0xfff3f552, 0xfff5f660,
0xfff5f65f, 0xfff4f657, 0xfff4f553, 0xfff3f545, 0xfff3f542, 0xfff2f446,
0xfff0f24b, 0xffe8ea4b, 0xffdcde45, 0xffd3d439, 0xffd2d33b, 0xffcecf45,
0xffcccd48, 0xff68692e, 0xff7c7d41, 0xffb8b95f, 0xe3696940, 0x3e1f1f13,
0x251f1f17, 0x21161616, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x07060604, 0x09080805, 0x3e323218, 0xdd9b9b49,
0xffb8b85a, 0xff7f7f3f, 0xff858631, 0xfff3f54a, 0xfff4f65b, 0xfff4f665,
0xfff6f77f, 0xfff8f99c, 0xfff7f896, 0xfff5f77e, 0xfff5f66d, 0xfff5f771,
0xfff5f775, 0xfff7f884, 0xfff6f773, 0xfff4f657, 0xfff4f550, 0xfff3f54b,
0xfff4f551, 0xfff4f656, 0xfff4f653, 0xfff4f65a, 0xfff4f654, 0xfff3f546,
0xfff2f34a, 0xffedef4c, 0xffe4e646, 0xffd9da3e, 0xffd1d338, 0xffd0d139,
0xffdbdd4d, 0xffe6e757, 0xff575727, 0xd5393925, 0x1a0f0f07, 0x49171712,
0xdb424236, 0xe54e4e4b, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x261a1a17, 0xb86f6f48, 0x8757572c, 0x37212110, 0x271b1b0c, 0x684a4a1d,
0xfdb0b049, 0xff2b2b17, 0xffeced56, 0xfff4f65f, 0xfff5f66a, 0xfff5f77a,
0xfff7f895, 0xfff8f99d, 0xfff6f887, 0xfff4f669, 0xfff4f55d, 0xfff5f661,
0xfff5f768, 0xfff5f664, 0xfff4f65d, 0xfff4f656, 0xfff4f656, 0xfff4f656,
0xfff4f658, 0xfff5f65f, 0xfff5f762, 0xfff5f662, 0xfff5f662, 0xfff5f763,
0xfff3f55e, 0xffeff14f, 0xffeaeb47, 0xffe3e441, 0xffd7d83a, 0xffccce37,
0xffcfd03f, 0xffe1e353, 0xffe2e453, 0xf92b2b15, 0xd842422e, 0xff87875d,
0xffa6a66f, 0xcb63634f, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x02010100, 0xff81814e, 0xffb8b856, 0xffa4a44f, 0xffa6a64f, 0xffafaf51,
0xffb8b953, 0xff43431d, 0xfff5f666, 0xfff5f771, 0xfff5f66a, 0xfff5f77a,
0xfff7f892, 0xfff6f88e, 0xfff4f66d, 0xfff3f557, 0xfff4f553, 0xfff4f65a,
0xfff5f664, 0xfff5f661, 0xfff4f659, 0xfff4f656, 0xfff4f656, 0xfff4f657,
0xfff4f65a, 0xfff5f663, 0xfff5f765, 0xffcccd5d, 0xfff4f566, 0xffbfbf58,
0xfff6f772, 0xfff3f560, 0xffeff147, 0xffeaeb43, 0xffdfe13e, 0xffcfd138,
0xffc8c93e, 0xffd5d64f, 0xffeaeb50, 0xffb1b247, 0xff48482b, 0xffeff093,
0xffe9ea91, 0xff696951, 0x1b111111, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0xff7e7e4b, 0xfff5f766, 0xfff5f662, 0xfff5f662, 0xfff5f663,
0xff979844, 0xff818234, 0xfff5f662, 0xfff5f76d, 0xfff5f66a, 0xfff5f676,
0xfff6f782, 0xfff5f673, 0xfff2f457, 0xffe9ea4c, 0xfff2f44f, 0xfff4f658,
0xfff5f660, 0xfff5f65e, 0xfff4f659, 0xfff4f656, 0xfff4f656, 0xfff4f657,
0xfff4f65a, 0xfff5f662, 0xfff5f766, 0xffc7c85b, 0xffb3b355, 0xffa3a350,
0xfff5f76b, 0xfff6f76f, 0xfff3f552, 0xffeff143, 0xffe8ea45, 0xffdadc3e,
0xffcbcc42, 0xffcacc44, 0xffdedf4d, 0xffeff15c, 0xff35351f, 0xffd4d574,
0xffd9da74, 0xff979861, 0x913b3b3a, 0x00000000, 0x00000000, 0x00000000,
0x01000000, 0xff606045, 0xff7b7b48, 0xff696a42, 0xff686842, 0xff6b6b43,
0xff454525, 0xffb6b74a, 0xfff4f65d, 0xfff4f664, 0xfff4f666, 0xfff5f66a,
0xfff5f66e, 0xfff4f661, 0xffb8b847, 0xff74743d, 0xffb0b146, 0xfff4f654,
0xfff4f658, 0xfff4f658, 0xfff4f656, 0xfff4f656, 0xfff4f656, 0xfff4f657,
0xfff4f659, 0xfff5f662, 0xfff5f766, 0xffedee65, 0xff59593f, 0xffbcbd56,
0xfff4f668, 0xfff6f776, 0xfff4f65c, 0xfff3f54c, 0xffeff147, 0xffe7e94c,
0xffd6d742, 0xffc9ca41, 0xffd1d344, 0xffe4e64d, 0xff5e5e24, 0xff919140,
0xffa0a145, 0xc36b6b3a, 0x552a2a20, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x96545441, 0xa28f904b, 0xa29a9b48, 0xa29c9c4e, 0xb29a9b52,
0xf8363625, 0xffc7c95b, 0xfff5f662, 0xfff4f663, 0xfff4f663, 0xfff4f663,
0xfff5f668, 0xffeaec5c, 0xff59593b, 0xffabac43, 0xff5d5d3b, 0xffb0b146,
0xfff4f653, 0xfff4f654, 0xfff4f552, 0xfff4f655, 0xfff4f657, 0xfff4f657,
0xfff4f659, 0xfff5f662, 0xfff5f766, 0xffbfc059, 0xff57573e, 0xff888849,
0xffe5e561, 0xffe7e871, 0xfff5f663, 0xfff4f551, 0xfff3f54a, 0xffeff054,
0xffe2e344, 0xffd0d142, 0xffcccd3e, 0xffdadb44, 0xff676726, 0xc12e2e18,
0x51343416, 0x04030301, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x01000000, 0x29222213, 0x9a6c6c44, 0xdb8f8f5f, 0xd89b9b64,
0xe6272717, 0xffecee77, 0xfff5f663, 0xfff5f663, 0xfff4f663, 0xfff5f663,
0xfff5f768, 0xffb0b050, 0xff494939, 0xffd7d848, 0xffc0c146, 0xff3c3c31,
0xffb6b747, 0xfff4f551, 0xfff4f54f, 0xfff4f654, 0xfff4f657, 0xfff4f657,
0xfff4f659, 0xfff5f661, 0xfff5f766, 0xff86874a, 0xff93934c, 0xffa8a851,
0xff8f8f4d, 0xffdfe06a, 0xfff1f362, 0xfff3f54e, 0xfff3f54c, 0xfff3f456,
0xffe9eb49, 0xffd9da45, 0xffcfd042, 0xffd7d844, 0xffb3b43e, 0xed151512,
0xdb3c3c30, 0xdb38382c, 0xdb313127, 0xd52c2c25, 0x00000000, 0x00000000,
0x40262619, 0xcd4e4e3a, 0xf95d5d42, 0xff6d6d47, 0xff919150, 0xffd2d366,
0xff404020, 0xfff5f662, 0xfff5f664, 0xfff5f665, 0xfff5f665, 0xfff5f665,
0xfff5f767, 0xff707043, 0xff4b4b39, 0xfff1f34b, 0xfff3f54b, 0xffa1a241,
0xff3d3d31, 0xffdedf4c, 0xfff3f54d, 0xfff4f655, 0xfff4f657, 0xfff4f657,
0xfff4f659, 0xfff5f661, 0xffe3e561, 0xff6c6c44, 0xffbebe57, 0xfff1f263,
0xff8b8b4a, 0xff939350, 0xffeaec5f, 0xfff3f44c, 0xfff1f24b, 0xfff1f254,
0xffecee53, 0xffe0e24b, 0xffd5d74b, 0xffd8d94c, 0xffd8d94d, 0xff3b3c22,
0xfff0f180, 0xfff2f382, 0xffcaca75, 0x8f4e4e34, 0x02010101, 0x00000000,
0x1e17170d, 0xff9b9c5b, 0xffdedf6c, 0xffd1d164, 0xffc7c861, 0xffeeef6d,
0xff40401f, 0xfff4f658, 0xfff5f666, 0xfff5f666, 0xfff5f665, 0xfff5f666,
0xfff5f767, 0xff616140, 0xff67673c, 0xfff3f54b, 0xfff3f54b, 0xfff1f24a,
0xff7d7e3e, 0xff76763d, 0xfff2f44d, 0xfff4f656, 0xfff4f658, 0xfff4f658,
0xfff4f659, 0xfff5f661, 0xffbebf58, 0xff7c7c48, 0xffeaec61, 0xfff5f664,
0xffe1e25f, 0xff98984f, 0xff95954a, 0xffebec4c, 0xffeef04a, 0xffedee52,
0xffe9eb5d, 0xffdfe14d, 0xffd9da52, 0xffdbdd4e, 0xffe4e64f, 0xff1a1a15,
0xffebec80, 0xffeced82, 0xffabac68, 0x431c1c14, 0x00000000, 0x00000000,
0x04030302, 0xff939359, 0xfff6f775, 0xfff5f66f, 0xfff4f56e, 0xfff4f570,
0xff3e3f1f, 0xfff4f559, 0xfff5f668, 0xfff5f668, 0xfff5f667, 0xfff5f766,
0xfff5f768, 0xff54543d, 0xff979842, 0xfff3f54c, 0xfff3f54b, 0xfff3f54a,
0xffebed4d, 0xff6c6d3d, 0xffbebf46, 0xfff4f657, 0xfff4f658, 0xfff4f659,
0xfff4f65a, 0xfff5f661, 0xffbebe58, 0xffb2b255, 0xfff5f764, 0xfff5f664,
0xfff5f664, 0xfff5f765, 0xffdcdd59, 0xffebed50, 0xffeef04d, 0xffeaec53,
0xffe6e765, 0xffd9da4c, 0xffd4d651, 0xffdadb49, 0xffe2e44d, 0xff363614,
0xffb6b767, 0xffdadb76, 0xff878757, 0x612a2a21, 0x00000000, 0x00000000,
0x00000000, 0xeb76764f, 0xffbabb64, 0xff8c8c4d, 0xff6b6b3f, 0xff5e5e3c,
0xff10100c, 0xffc9ca5c, 0xfff5f769, 0xfff5f768, 0xfff5f767, 0xfff5f767,
0xfff5f768, 0xff6a6a42, 0xffeaec4e, 0xfff3f54d, 0xfff3f54b, 0xfff3f54b,
0xfff4f54e, 0xffebed4d, 0xffe9eb4b, 0xfff4f658, 0xfff4f659, 0xfff4f659,
0xfff4f65a, 0xfff5f661, 0xffe4e562, 0xffe8ea64, 0xfff5f765, 0xfff5f664,
0xfff5f664, 0xfff5f767, 0xfff5f65e, 0xfff4f656, 0xfff1f352, 0xffedee5a,
0xffe5e672, 0xffd4d550, 0xffcfd050, 0xffd6d84a, 0xffdfe14d, 0xff3d3d18,
0x9c42422b, 0xaf4c4c32, 0xab3f3f32, 0x73383837, 0x00000000, 0x00000000,
0x00000000, 0x8b434335, 0xaf42423d, 0x712a2a2a, 0x411c1c1a, 0x3113130f,
0xff1e1e1d, 0xffdfe16e, 0xfff5f769, 0xfff5f768, 0xfff5f767, 0xfff5f767,
0xfff5f768, 0xffedee5e, 0xfff4f550, 0xfff3f54e, 0xfff3f54b, 0xfff3f54c,
0xfff4f54f, 0xfff3f54e, 0xfff3f54d, 0xfff4f659, 0xfff4f65a, 0xfff4f65a,
0xfff4f65b, 0xfff5f662, 0xfff5f767, 0xfff5f768, 0xfff5f765, 0xfff5f764,
0xfff5f765, 0xfff5f767, 0xfff5f65f, 0xfff4f65c, 0xfff4f55a, 0xffeef063,
0xffe4e581, 0xffd3d458, 0xffcecf52, 0xffd7d857, 0xffe1e357, 0xff3d3d1a,
0x2316160d, 0x03020202, 0x03020202, 0x01000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x05030303, 0x765b5b51,
0xff2f2f25, 0xfff5f665, 0xfff5f763, 0xfff5f768, 0xfff5f768, 0xfff5f768,
0xfff5f768, 0xfff5f660, 0xfff4f551, 0xfff4f54f, 0xfff3f54c, 0xfff3f54c,
0xfff4f54f, 0xfff4f54f, 0xfff3f54e, 0xfff4f659, 0xfff4f65a, 0xfff4f65a,
0xfff4f65b, 0xfff5f662, 0xfff5f768, 0xfff5f768, 0xfff5f765, 0xfff5f764,
0xfff5f665, 0xfff5f767, 0xfff5f660, 0xfff5f660, 0xfff4f661, 0xffeff16d,
0xffe5e68c, 0xffd4d562, 0xffcfd056, 0xffd9db5e, 0xffe7e879, 0xff3b3b21,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x06030303, 0x48313130, 0x783f3f38, 0xe476765c, 0xffc3c35f,
0xff454622, 0xffe1e248, 0xfff3f54c, 0xfff5f763, 0xfff5f768, 0xfff5f768,
0xfff5f768, 0xfff5f661, 0xfff4f552, 0xfff4f551, 0xfff3f54d, 0xfff3f54e,
0xfff4f54f, 0xfff4f54f, 0xfff3f54e, 0xfff4f65a, 0xfff4f65a, 0xfff4f65a,
0xfff4f65c, 0xfff5f763, 0xfff5f769, 0xfff5f769, 0xfff5f766, 0xfff5f765,
0xfff5f765, 0xfff5f767, 0xfff5f661, 0xfff5f661, 0xfff5f664, 0xfff1f273,
0xffe7e890, 0xffd5d66b, 0xffd1d25e, 0xffddde66, 0xffebec8a, 0xff24241c,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x6c3e3e3e, 0xf17f7f72, 0xff959560, 0xffb5b65b, 0xffe6e765, 0xfff5f768,
0xff6f7034, 0xffadae39, 0xfff3f548, 0xfff4f658, 0xfff5f769, 0xfff5f769,
0xfff5f769, 0xfff5f663, 0xfff4f655, 0xfff4f653, 0xfff3f54f, 0xfff4f550,
0xfff4f550, 0xfff4f54f, 0xfff4f54f, 0xfff4f65c, 0xfff4f65b, 0xfff4f65b,
0xffddde57, 0xffb2b354, 0xfff5f769, 0xfff5f769, 0xfff5f767, 0xfff5f766,
0xfff5f766, 0xfff5f769, 0xfff5f663, 0xfff5f663, 0xfff5f667, 0xfff1f376,
0xffe7e78f, 0xffd5d674, 0xffd1d268, 0xffe1e273, 0xfff0f19e, 0xfa242422,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x90464639, 0xffb8b868, 0xfff6f773, 0xfff5f76c, 0xfff4f568, 0xfff1f366,
0xffa6a749, 0xff7d7e29, 0xfff3f548, 0xfff4f659, 0xfff5f76a, 0xfff5f76a,
0xfff5f76b, 0xfff5f767, 0xfff4f658, 0xfff4f656, 0xfff4f551, 0xfff4f652,
0xfff4f551, 0xfff4f550, 0xfff4f550, 0xfff4f65d, 0xfff4f65c, 0xfff4f65c,
0xff9fa04b, 0xff91914d, 0xfff5f76a, 0xfff5f76a, 0xfff5f768, 0xfff5f767,
0xfff5f766, 0xfff5f76a, 0xfff5f765, 0xfff5f765, 0xfff5f769, 0xfff1f279,
0xffe5e690, 0xffd4d57e, 0xffd3d578, 0xffe4e684, 0xffd6d6a3, 0xbf090909,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x05040402, 0xec616142, 0xffe4e56c, 0xfff3f46b, 0xffeff167, 0xffeef065,
0xffcacb58, 0xff43431b, 0xfff3f54b, 0xfff5f765, 0xfff5f76a, 0xfff5f76a,
0xfff5f76c, 0xfff5f76c, 0xfff4f65d, 0xfff4f65a, 0xfff4f654, 0xfff4f656,
0xfff4f652, 0xfff4f550, 0xfff3f450, 0xfff4f65d, 0xfff4f65c, 0xfff4f65d,
0xff6e6f41, 0xff7c7c47, 0xfff5f76b, 0xfff5f76b, 0xfff5f769, 0xfff5f768,
0xfff5f767, 0xfff5f76b, 0xfff5f769, 0xfff5f769, 0xfff5f66d, 0xfff0f17b,
0xffe3e491, 0xffd3d477, 0xffd2d46c, 0xffe6e780, 0xffa7a78c, 0x9c191919,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x602c2c1c, 0xff626241, 0xff8c8c4f, 0xff7c7c48, 0xff676843,
0xa8636335, 0xff383820, 0xffe2e35c, 0xfff5f76c, 0xfff5f76a, 0xfff5f764,
0xfff5f766, 0xfff6f770, 0xfff5f663, 0xfff5f660, 0xfff4f658, 0xfff4f65a,
0xfff4f654, 0xfff4f551, 0xffcccc4b, 0xff818145, 0xffeff15b, 0xffeaec5a,
0xff3d3d36, 0xff999a4f, 0xfff5f76c, 0xfff5f76d, 0xfff5f76a, 0xfff5f769,
0xfff5f768, 0xfff6f76d, 0xfff5f76d, 0xfff4f56a, 0xfff2f464, 0xffeced65,
0xffdedf6a, 0xffcbcc5b, 0xff77773f, 0xff6a6a41, 0xff383825, 0x65262623,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x01000000, 0x973b3b28, 0x64373720, 0x43262615, 0x06040402,
0x0b0a0a07, 0x98373722, 0xff7f7f40, 0xfff6f76d, 0xfff4f657, 0xfff4f54e,
0xfff4f551, 0xfff5f660, 0xfff5f769, 0xfff5f767, 0xfff4f65e, 0xfff5f660,
0xfff4f657, 0xfff4f653, 0xfff2f453, 0xff6e6e42, 0xff808143, 0xffadae4e,
0xff323231, 0xffe7e862, 0xfff6f76d, 0xfff6f76d, 0xfff5f66b, 0xfff3f568,
0xfff2f467, 0xfff4f670, 0xfff4f671, 0xfff0f162, 0xffeeef55, 0xffe8ea58,
0xffdbdc4f, 0xffd2d342, 0xffacad40, 0xff4d4d39, 0xf4333329, 0x7e48482f,
0x04030303, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x05040404, 0x09080806,
0x02010101, 0x110b0b06, 0xe92a2a1b, 0xffd2d357, 0xfff3f54b, 0xfff3f54b,
0xfff3f54f, 0xfff4f655, 0xfff5f769, 0xfff6f771, 0xfff5f768, 0xfff5f767,
0xfff4f65b, 0xfff4f655, 0xfff4f656, 0xffe4e55b, 0xff494938, 0xff474733,
0xff8c8c47, 0xfff5f666, 0xfff6f76f, 0xfff5f66e, 0xfff2f36b, 0xffebed67,
0xffe9ea64, 0xfff0f173, 0xfff2f375, 0xffeced5f, 0xffeaeb54, 0xffe6e756,
0xffdadc4d, 0xffd6d73e, 0xffd6d73d, 0xff727238, 0xfe555541, 0x68393925,
0x03020201, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x01000000, 0x00000000,
0x00000000, 0x00000000, 0x4b1b1b11, 0xff444420, 0xffeeef4c, 0xffe1e34a,
0xffdedf4b, 0xfff0f152, 0xfff3f56b, 0xfff6f77c, 0xfff6f777, 0xfff6f770,
0xfff5f663, 0xfff4f659, 0xfff4f659, 0xfff5f660, 0xffb9ba50, 0xff40402c,
0xfff5f660, 0xfff5f768, 0xfff5f770, 0xfff3f56f, 0xffedef6b, 0xffe3e565,
0xffe1e263, 0xffebed75, 0xffeff17c, 0xffe9eb63, 0xffe6e854, 0xffdedf53,
0xffd4d64c, 0xffdcdd43, 0xffe3e53d, 0xffd1d240, 0xff505034, 0x5d242418,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x01000000, 0x88202013, 0xff5f5f2b, 0xff62623a,
0xffc2c347, 0xffe7e94c, 0xffeaec6e, 0xffeff07d, 0xfff3f57e, 0xfff5f77a,
0xfff6f772, 0xfff5f662, 0xfff4f65d, 0xfff5f661, 0xfff5f65f, 0xffd0d158,
0xfff5f662, 0xfff5f76a, 0xfff4f571, 0xfff1f26f, 0xffeaeb6c, 0xffe1e267,
0xffe1e366, 0xffebec78, 0xffebed7f, 0xffe5e673, 0xffe3e45e, 0xffd6d753,
0xff707039, 0xff757533, 0xffcecf45, 0xffedee43, 0xffd9db42, 0xfc525230,
0x5725251a, 0x00000000, 0x03020202, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x02010100, 0x46343415, 0xff5c5c38, 0xff8c8c41,
0xffedef4e, 0xffd4d650, 0xffcacb64, 0xffe1e273, 0xffe6e770, 0xffeeef79,
0xfff3f47f, 0xfff5f675, 0xfff5f663, 0xfff5f663, 0xfff5f661, 0xfff5f662,
0xfff5f764, 0xfff5f76d, 0xfff3f573, 0xffeced70, 0xffe3e46d, 0xffddde69,
0xffe1e36c, 0xffe8ea7c, 0xffe7e87f, 0xffe3e47d, 0xffe5e67a, 0xffe4e576,
0xff494927, 0xff1b1b17, 0xff787840, 0xffe4e549, 0xfff0f244, 0xffd6d842,
0xfc39392c, 0xb039392e, 0x71282827, 0x3c242424, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x08070703, 0x6635351c, 0xff4a4a35, 0xffe4e655,
0xffe7e852, 0xff737443, 0xffd4d56d, 0xffdadb6c, 0xffd6d766, 0xffdbdc66,
0xffe5e671, 0xffedee7f, 0xfff1f276, 0xfff3f468, 0xfff4f665, 0xfff5f766,
0xfff5f769, 0xfff4f571, 0xfff1f276, 0xffe8e974, 0xffddde71, 0xffdcde71,
0xffe3e479, 0xffe9ea82, 0xffe8e982, 0xffe8e984, 0xffd5d67e, 0xf444442c,
0x630c0c0a, 0x4018180f, 0xd8464631, 0xffb8b849, 0xffeff147, 0xffeef045,
0xff7a7a37, 0xff52523d, 0xff626250, 0xf8545454, 0x140b0b0b, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x2f232312, 0xec51513a, 0xffa2a251, 0xfff0f167,
0xff797941, 0xff606043, 0xffdbdc70, 0xffe2e370, 0xffd4d669, 0xffcfd164,
0xffd5d667, 0xffdedf75, 0xffe7e885, 0xffedee79, 0xfff1f36e, 0xfff4f56d,
0xfff5f673, 0xfff3f477, 0xffeff07d, 0xffe6e781, 0xffe0e182, 0xffe4e587,
0xffe9ea88, 0xffedee89, 0xffedee88, 0xffa5a663, 0xf42f2f22, 0x591f1f1a,
0x00000000, 0x00000000, 0x190b0b06, 0xd9484833, 0xffb8b947, 0xfff0f24d,
0xffdfe055, 0xff767647, 0xffe7e784, 0xffb1b183, 0x953e3e3d, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x100b0b08,
0x00000000, 0x0d0c0c05, 0xc4727340, 0xffcbcc61, 0xfff3f46f, 0xffb6b761,
0xff2b2b2a, 0x89333323, 0xf5313120, 0xffb3b45c, 0xffdfe06f, 0xffd4d569,
0xffd0d168, 0xffd3d46f, 0xffdbdc7c, 0xffe6e783, 0xffeeef7f, 0xfff2f47c,
0xfff4f57d, 0xfff2f483, 0xffeef089, 0xffe8e988, 0xffe7e98d, 0xffedee93,
0xfff0f196, 0xffdbdc85, 0xff5d5e3c, 0xc022221a, 0x200c0c09, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x512e2e18, 0xff737341, 0xffcbcc52,
0xfff0f161, 0xffd2d35c, 0xffddde6c, 0xffeff184, 0xfc7f7f6e, 0x100a0a0a,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x48222219, 0xe464644c,
0x87343428, 0xb07b7b3c, 0xffb2b354, 0xfff5f767, 0xffe9ea68, 0xff52523c,
0xcb4a4a47, 0x02010101, 0x4628281d, 0xdc2b2b1d, 0xff6f6f3b, 0xffbbbc60,
0xffd9da6f, 0xffd5d673, 0xffd9da7d, 0xffe5e687, 0xffeff08a, 0xfff2f389,
0xfff3f48a, 0xfff0f18c, 0xffeced8b, 0xffeaea8b, 0xffeaeb92, 0xffb2b374,
0xff5c5c41, 0xec272724, 0x75232321, 0x06040403, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0xab4b4b39, 0xffa1a261, 0xffb5b555,
0xffeff15b, 0xffedef67, 0xffeaeb6c, 0xffeaec73, 0xff9b9b6d, 0x55262625,
0x00000000, 0x00000000, 0x00000000, 0x52202018, 0xff6c6d4f, 0xffabab70,
0xff818152, 0xff54543c, 0xff9a9a46, 0xfff2f453, 0xff7e7f44, 0xf551513f,
0x4c31312b, 0x00000000, 0x02010101, 0x352c2c1e, 0x74242418, 0xcb1e1e16,
0xff535431, 0xffadae68, 0xffe4e592, 0xffeeef8e, 0xfff4f590, 0xfff5f691,
0xfff3f491, 0xffe6e78a, 0xffc6c778, 0xff94945d, 0xff43432f, 0xbb21211c,
0x541a1a19, 0x0d060606, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x3211110e, 0xff80805a, 0xfff5f695, 0xffbebe6f,
0xffdfe055, 0xffe7e968, 0xffe8e96a, 0xffe5e66f, 0xffadae6e, 0x46171715,
0x00000000, 0x00000000, 0x00000000, 0xd2363629, 0xffc2c374, 0xfff8f98f,
0xffeeef71, 0xffa1a143, 0xffeff148, 0xffc8c943, 0xea494931, 0x1e16160d,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x05040403, 0x04030302,
0x4d14140e, 0xbd1f1f1b, 0xff444433, 0xff78784e, 0xff9c9c61, 0xff7b7b4e,
0xff3f3f2d, 0xe623231b, 0xbf161611, 0x8d171712, 0x3d171711, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x01000000, 0xad2c2c25, 0xffcbcc7a, 0xfff6f88e, 0xffedee87,
0xffd6d854, 0xffd7d866, 0xffe1e36b, 0xffe4e574, 0xffcbcc7d, 0x4e131313,
0x00000000, 0x00000000, 0x07050503, 0xf73a3a2b, 0xffd4d477, 0xfff7f888,
0xffeaeb6a, 0xffe3e449, 0xfff3f543, 0xffbabb3f, 0xff7e7e3d, 0x86404026,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x3f1a1a19, 0x5f080808, 0x5f030303, 0x5f0a0a0a,
0x3f1d1d18, 0x08050504, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x01000000, 0xfc525240, 0xfff3f48b, 0xfff8f98d, 0xffedef83,
0xffcdcf59, 0xffc2c363, 0xffd5d670, 0xffe3e47f, 0xffddde88, 0x9d2a2a2a,
0x00000000, 0x00000000, 0x03020201, 0xfb36362b, 0xfff4f483, 0xfff6f781,
0xfff2f46a, 0xfff1f355, 0xfff3f544, 0xffe1e145, 0xffdee04e, 0xf756563d,
0x341e1e12, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x05040403, 0xff838358, 0xfff8f98d, 0xfff8f98d, 0xffebec7d,
0xffa7a851, 0xffa2a353, 0xffc8c971, 0xffdfe080, 0xffdadb88, 0xa7292929,
0x00000000, 0x00000000, 0x5e373721, 0xff59593e, 0xfff6f784, 0xfff0f27a,
0xffe7e965, 0xffe7e961, 0xffeeef48, 0xfff3f54e, 0xfff4f65a, 0xff8a8a4c,
0x681c1c17, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x01000000, 0xf1828256, 0xfff8f98d, 0xfff8f98d, 0xff9b9c5e,
0xff82834d, 0xff97984e, 0xffbfc06e, 0xffdbdc80, 0xffd9da87, 0x8a212121,
0x00000000, 0x00000000, 0xb341412f, 0xff74744c, 0xfff4f683, 0xffebed77,
0xffdadc65, 0xffd5d769, 0xffe2e348, 0xfff0f252, 0xfff5f662, 0xffcdce60,
0x7f22221d, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0xe2828255, 0xfff8f98f, 0xffd7d77f, 0xff585840,
0xffb1b169, 0xff6c6c3e, 0xffbbbc6e, 0xffdbdb83, 0xffcdce81, 0xb13b3b3b,
0x00000000, 0x00000000, 0xbf444433, 0xff72724d, 0xfff4f584, 0xffeff079,
0xffddde6d, 0xffcccd77, 0xffd2d44d, 0xffe8ea56, 0xfff4f66a, 0xffdbdc65,
0xba2a2a27, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0xf7707050, 0xfff2f390, 0xff686848, 0xff9b9b5f,
0xffabac6d, 0xff525231, 0xffb7b86e, 0xffdadb84, 0xffbebf7d, 0x893c3c3c,
0x00000000, 0x00000000, 0xbf404032, 0xff9b9b60, 0xffe9ea81, 0xfff5f67e,
0xffc7c867, 0xffabab6e, 0xffc7c858, 0xffdcde59, 0xfff1f36c, 0xffd7d867,
0xbc2c2c28, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0xd74d4d3e, 0xffa8a86f, 0xfc46463d, 0xe6d8d994,
0xff8c8c60, 0xff606039, 0xffb7b86d, 0xffdedf8a, 0xfc9b9b71, 0x3b191919,
0x00000000, 0x00000000, 0x87323227, 0xff95955f, 0xffadae6a, 0xfff7f885,
0xffc0c06d, 0xff606048, 0xffc5c663, 0xffd0d15a, 0xffeaeb6f, 0xffbdbe62,
0xa92f2f27, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x803e3e39, 0xff2d2d2c, 0xa8535351, 0x5b545442,
0xff515143, 0xff82824e, 0xffc0c177, 0xffa3a46e, 0x9f34342f, 0x00000000,
0x00000000, 0x00000000, 0x1e0d0d0a, 0xfc6e6e51, 0xff6d6d50, 0xfff0f18f,
0xffdadb89, 0xff353531, 0xff87884c, 0xffc8c861, 0xffe0e171, 0xffa1a25e,
0xa7313128, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x0a070707, 0xbd585858, 0x00000000, 0x482f2f2e,
0xff6b6b5f, 0xffa8a880, 0xffbebf96, 0xf443433d, 0x2c0c0c0c, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x2714140e, 0xf678785a, 0xffaaaa79,
0xffe4e49b, 0xff4b4b42, 0xde515143, 0xff959657, 0xffd7d879, 0xff7e7e53,
0x8f282822, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x02010101, 0x00000000, 0xa25a5a5a,
0xff7f7f7f, 0xffb0b0b0, 0xfb676767, 0x5f232323, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x9b3e3e33, 0xffabab7f,
0xfff5f5af, 0xff44443f, 0x4a333329, 0xc3292920, 0xfecccd87, 0xfb50503e,
0x240c0c0a, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x69484848,
0xb2787878, 0x975a5a5a, 0x1f0f0f0f, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x1e10100c, 0xf948483d,
0xffdbdca4, 0xc7272725, 0x00000000, 0x01000000, 0x9a434333, 0xd5363631,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x350e0e0c,
0xee484841, 0xb3262625, 0x00000000, 0x00000000, 0x1e040404, 0xb53c3c38,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x251a1a19, 0x97212121, 0x0d040404, 0x00000000, 0x00000000, 0x03010101,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,

6
examples/null/Makefile Normal file
View file

@ -0,0 +1,6 @@
TARGET = null.img
APP_SOURCES = main.c
LIB_DIR = ../../lib
include $(LIB_DIR)/Makefile.rules

20
examples/null/main.c Normal file
View file

@ -0,0 +1,20 @@
/*
* "Null" SVGA example.
*
* This is a trivial SVGA test which just switches video modes and
* halts the CPU.
*/
#include "intr.h"
#include "svga.h"
int
main(void)
{
Intr_Init();
Intr_SetFaultHandlers(SVGA_DefaultFaultHandler);
SVGA_Init();
SVGA_SetMode(1024, 768, 32);
return 0;
}

View file

@ -0,0 +1,7 @@
TARGET = screen-annotation.img
VMX_MEMSIZE = 16
APP_SOURCES = main.c
LIB_DIR = ../../lib
include $(LIB_DIR)/Makefile.rules

View file

@ -0,0 +1,341 @@
/*
* This example illustrates annotated GMRFB-to-screen blits.
* Annotations are a way to give the device extra information about
* the data in a blit. In this case, we're guaranteeing that the
* contents of the blit are the result of a fill or copy operation.
*
* This example cheats a bit, and it actually lies to the SVGA device
* in its annotations. This lets you see whether the annotations are
* working or not- if the host uses the blit data we supply, we'll see
* one result. If it uses the annotation, we'll see something
* different.
*
* This example requires SVGA Screen Object support.
*/
#include "svga.h"
#include "gmr.h"
#include "screen.h"
#include "intr.h"
#include "screen.h"
#include "screendraw.h"
#include "math.h"
#include "mt19937ar.h"
#include "timer.h"
#define GMRID_SCREEN_DRAW 0
#define GMRID_NOISE 1
#define FRAME_RATE 60
#define SCREEN_ID 0
static volatile uint32 timerTick;
/*
* prepareNoiseRect --
*
* Prepare some noise as the source for a blit.
* This defines the GMRFB, and generates a random source origin.
*/
static void
prepareNoiseRect(SVGASignedPoint *origin) // OUT
{
const uint32 bytesPerLine = 1024;
static const SVGAGMRImageFormat format = {{{ 32, 24 }}};
const SVGAGuestPtr gPtr = { GMRID_NOISE, 0 };
const uint32 rand = genrand_int32();
Screen_DefineGMRFB(gPtr, bytesPerLine, format);
origin->x = rand & 0x7F;
origin->y = (rand >> 8) & 0x7F;
}
/*
* updateBorders --
*
* Clean up after the previous frame of animation, and draw the
* white border around the current frame.
*/
static void
updateBorders(const SVGASignedRect *pOld,
const SVGASignedRect *pNew)
{
const uint32 color = 0;
SVGASignedRect newRect = *pNew;
/*
* Outset each rectangle by one pixel, to make room for the border.
*/
newRect.left--;
newRect.right++;
newRect.top--;
newRect.bottom++;
/*
* Draw the white borders
*/
ScreenDraw_Border(newRect.left, newRect.top, newRect.right, newRect.bottom,
0xFFFFFF, 1);
/*
* Clear any pixels from 'oldRect' that are not in 'newRect'.
*/
if (pOld) {
SVGASignedRect oldRect = *pOld;
oldRect.left--;
oldRect.right++;
oldRect.top--;
oldRect.bottom++;
/* Clear the right edge */
if (newRect.right < oldRect.right) {
ScreenDraw_Rectangle(newRect.right, oldRect.top,
oldRect.right, oldRect.bottom,
color);
}
/* Clear the left edge */
if (newRect.left > oldRect.left) {
ScreenDraw_Rectangle(oldRect.left, oldRect.top,
newRect.left, oldRect.bottom,
color);
}
/* Clear the top edge */
if (newRect.top > oldRect.top) {
ScreenDraw_Rectangle(oldRect.left, oldRect.top,
oldRect.right, newRect.top,
color);
}
/* Clear the bottom edge */
if (newRect.bottom < oldRect.bottom) {
ScreenDraw_Rectangle(oldRect.left, newRect.bottom,
oldRect.right, oldRect.bottom,
color);
}
}
}
/*
* updateFillRect --
*
* Animate the test rectangle which demonstrates fill annotations.
*/
static void
updateFillRect(const SVGASignedRect *oldRect,
const SVGASignedRect *newRect)
{
SVGASignedPoint srcOrigin;
static const SVGAColorBGRX color = {{{ 0xFF, 0xCC, 0xCC }}}; // Light blue
prepareNoiseRect(&srcOrigin);
Screen_AnnotateFill(color);
Screen_BlitFromGMRFB(&srcOrigin, newRect, SCREEN_ID);
updateBorders(oldRect, newRect);
}
/*
* updateCopyRect --
*
* Animate the test rectangle which demonstrates copy annotations.
*/
static void
updateCopyRect(const SVGASignedRect *oldRect,
const SVGASignedRect *newRect)
{
/*
* The first time through, draw a checkerboard test pattern.
* On subsequent frames, annotate a copy of it from the previous frame.
*/
if (oldRect) {
SVGASignedPoint noiseSrc, copySrc;
prepareNoiseRect(&noiseSrc);
copySrc.x = oldRect->left;
copySrc.y = oldRect->top;
Screen_AnnotateCopy(&copySrc, SCREEN_ID);
Screen_BlitFromGMRFB(&noiseSrc, newRect, SCREEN_ID);
} else {
ScreenDraw_Checkerboard(newRect->left, newRect->top,
newRect->right, newRect->bottom);
}
updateBorders(oldRect, newRect);
}
/*
* allocNoise --
*
* Allocates a new GMR, and fills it with random noise.
*/
static void
allocNoise(void)
{
const uint32 numPages = 500;
const uint32 numWords = numPages * PAGE_SIZE / sizeof(uint32);
PPN pages = GMR_DefineContiguous(GMRID_NOISE, numPages);
uint32 *ptr = PPN_POINTER(pages);
int i;
init_genrand(0);
for (i = 0; i < numWords; i++) {
ptr[i] = genrand_int32();
}
}
/*
* timerISR --
*
* Trivial timer ISR, just increments our tick counter.
*/
void
timerISR(int vector)
{
timerTick++;
}
/*
* main --
*
* Initialization and main loop.
*/
int
main(void)
{
uint32 frame = 0;
uint32 lastTick = 0;
Intr_Init();
Intr_SetFaultHandlers(SVGA_DefaultFaultHandler);
Timer_InitPIT(PIT_HZ / FRAME_RATE);
Intr_SetMask(PIT_IRQ, TRUE);
Intr_SetHandler(IRQ_VECTOR(PIT_IRQ), timerISR);
SVGA_Init();
GMR_Init();
Heap_Reset();
SVGA_SetMode(0, 0, 32);
Screen_Init();
ScreenDraw_Init(GMRID_SCREEN_DRAW);
allocNoise();
/*
* Define a screen.
*/
SVGAScreenObject myScreen = {
.structSize = sizeof(SVGAScreenObject),
.id = SCREEN_ID,
.flags = SVGA_SCREEN_HAS_ROOT | SVGA_SCREEN_IS_PRIMARY,
.size = { 800, 600 },
.root = { 0, 0 },
};
Screen_Define(&myScreen);
/*
* Draw some explanatory text.
*/
char docString[] =
"Annotated Blit Sample:"
"\n\n"
"You should see two moving rectangles. The left one is animated "
"using a fill-annotated blit. The blit itself contains random "
"noise, but the annotation is a blue fill. If your host is "
"using the annotation, you will see the blue. If not, you'll "
"see noise. Either one is correct, but it is often more efficient "
"to use the fill."
"\n\n"
"The right one is a copy-annotated blit. The blit data is again "
"random noise, and the copy is a screen-to-screen copy which "
"moves the rectangle from its old position to the new position. "
"We drew a checkerboard pattern to the screen once, and that "
"pattern should be preserved indefinitely if the annotation is "
"being executed correctly."
"\n\n"
"Both rectangles should have a 1-pixel solid white border, and "
"in both cases we use a fill-annotated blit to clear the screen "
"behind each rectangle. This annotation doesn't lie, its blit data "
"matches the advertised fill color.";
ScreenDraw_SetScreen(myScreen.id, myScreen.size.width, myScreen.size.height);
Console_Clear();
ScreenDraw_WrapText(docString, 770);
Console_WriteString(docString);
/*
* Animate the two rectangles indefinitely, sleeping between frames.
*/
while (1) {
SVGASignedRect oldRect1, oldRect2;
SVGASignedRect newRect1, newRect2;
/*
* Move them around in a circle.
*/
float theta = frame * 0.01;
newRect1.left = 190 + cosf(theta) * 60;
newRect1.top = 350 + sinf(theta) * 60;
newRect1.right = newRect1.left + 80;
newRect1.bottom = newRect1.top + 120;
newRect2.left = 530 + sinf(theta) * 60;
newRect2.top = 350 + cosf(theta) * 60;
newRect2.right = newRect2.left + 80;
newRect2.bottom = newRect2.top + 120;
/*
* Update the position of each.
*/
updateFillRect(frame ? &oldRect1 : NULL, &newRect1);
updateCopyRect(frame ? &oldRect2 : NULL, &newRect2);
oldRect1 = newRect1;
oldRect2 = newRect2;
/*
* Wait for the next timer tick.
*/
while (timerTick == lastTick) {
Intr_Halt();
}
lastTick = timerTick;
frame++;
}
return 0;
}

View file

@ -0,0 +1,7 @@
TARGET = screen-cursor.img
VMX_MEMSIZE = 16
APP_SOURCES = main.c
LIB_DIR = ../../lib
include $(LIB_DIR)/Makefile.rules

View file

@ -0,0 +1,96 @@
0xff, 0xff, 0xf0, 0x0f, 0xff, 0xff, 0x00, 0x00,
0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00,
0xff, 0xfc, 0x00, 0x00, 0x3f, 0xff, 0x00, 0x00,
0xff, 0xf0, 0x00, 0x00, 0x0f, 0xff, 0x00, 0x00,
0xff, 0xc0, 0x00, 0x00, 0x03, 0xff, 0x00, 0x00,
0xff, 0x80, 0x00, 0x00, 0x01, 0xff, 0x00, 0x00,
0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
0xfe, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x00,
0xfc, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00,
0xf8, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00,
0xf0, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00,
0xf0, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00,
0xe0, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00,
0xe0, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00,
0xc0, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00,
0xc0, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00,
0x80, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
0x80, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
0x80, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
0x80, 0x00, 0x00, 0x00, 0x00, 0x01, 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, 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, 0x00, 0x00,
0x80, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
0x80, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
0x80, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
0x80, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
0xc0, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00,
0xc0, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00,
0xe0, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00,
0xe0, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00,
0xf0, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00,
0xf0, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00,
0xf8, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00,
0xfc, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00,
0xfe, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x00,
0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
0xff, 0x80, 0x00, 0x00, 0x01, 0xff, 0x00, 0x00,
0xff, 0xc0, 0x00, 0x00, 0x03, 0xff, 0x00, 0x00,
0xff, 0xf0, 0x00, 0x00, 0x0f, 0xff, 0x00, 0x00,
0xff, 0xfc, 0x00, 0x00, 0x3f, 0xff, 0x00, 0x00,
0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00,
0xff, 0xff, 0xf0, 0x0f, 0xff, 0xff, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x03, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x0f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x1f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x7f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
0x01, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
0x03, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
0x03, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
0x07, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
0x0f, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
0x0f, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
0x1f, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
0x1f, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
0x3f, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
0x3f, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
0x3f, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
0x3f, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
0x7f, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
0x7f, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
0x7f, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
0x7f, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xff, 0xff, 0xfe, 0x00, 0x00,
0x00, 0x00, 0x00, 0xff, 0xff, 0xfe, 0x00, 0x00,
0x00, 0x00, 0x00, 0xff, 0xff, 0xfe, 0x00, 0x00,
0x00, 0x00, 0x00, 0xff, 0xff, 0xfe, 0x00, 0x00,
0x00, 0x00, 0x00, 0xff, 0xff, 0xfc, 0x00, 0x00,
0x00, 0x00, 0x00, 0xff, 0xff, 0xfc, 0x00, 0x00,
0x00, 0x00, 0x00, 0xff, 0xff, 0xfc, 0x00, 0x00,
0x00, 0x00, 0x00, 0xff, 0xff, 0xfc, 0x00, 0x00,
0x00, 0x00, 0x00, 0xff, 0xff, 0xf8, 0x00, 0x00,
0x00, 0x00, 0x00, 0xff, 0xff, 0xf8, 0x00, 0x00,
0x00, 0x00, 0x00, 0xff, 0xff, 0xf0, 0x00, 0x00,
0x00, 0x00, 0x00, 0xff, 0xff, 0xf0, 0x00, 0x00,
0x00, 0x00, 0x00, 0xff, 0xff, 0xe0, 0x00, 0x00,
0x00, 0x00, 0x00, 0xff, 0xff, 0xc0, 0x00, 0x00,
0x00, 0x00, 0x00, 0xff, 0xff, 0xc0, 0x00, 0x00,
0x00, 0x00, 0x00, 0xff, 0xff, 0x80, 0x00, 0x00,
0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xff, 0xfe, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xff, 0xf8, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xff, 0xf0, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xff, 0xc0, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

View file

@ -0,0 +1,96 @@
0xff, 0xff, 0xf0, 0x0f, 0xff, 0xff, 0x00, 0x00,
0xff, 0xff, 0x0f, 0x00, 0xff, 0xff, 0x00, 0x00,
0xff, 0xfc, 0xff, 0x00, 0x3f, 0xff, 0x00, 0x00,
0xff, 0xf3, 0xff, 0x00, 0x0f, 0xff, 0x00, 0x00,
0xff, 0xcf, 0xff, 0x00, 0x03, 0xff, 0x00, 0x00,
0xff, 0x9f, 0xff, 0x00, 0x01, 0xff, 0x00, 0x00,
0xff, 0x7f, 0xff, 0x00, 0x00, 0xff, 0x00, 0x00,
0xfe, 0xff, 0xff, 0x00, 0x00, 0x7f, 0x00, 0x00,
0xfd, 0xff, 0xff, 0x00, 0x00, 0x3f, 0x00, 0x00,
0xfb, 0xff, 0xff, 0x00, 0x00, 0x1f, 0x00, 0x00,
0xf3, 0xff, 0xff, 0x00, 0x00, 0x0f, 0x00, 0x00,
0xf7, 0xff, 0xff, 0x00, 0x00, 0x0f, 0x00, 0x00,
0xef, 0xff, 0xff, 0x00, 0x00, 0x07, 0x00, 0x00,
0xef, 0xff, 0xff, 0x00, 0x00, 0x07, 0x00, 0x00,
0xdf, 0xff, 0xff, 0x00, 0x00, 0x03, 0x00, 0x00,
0xdf, 0xff, 0xff, 0x00, 0x00, 0x03, 0x00, 0x00,
0xbf, 0xff, 0xff, 0x00, 0x00, 0x01, 0x00, 0x00,
0xbf, 0xff, 0xff, 0x00, 0x00, 0x01, 0x00, 0x00,
0xbf, 0xff, 0xff, 0x00, 0x00, 0x01, 0x00, 0x00,
0xbf, 0xff, 0xff, 0x00, 0x00, 0x01, 0x00, 0x00,
0x7f, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
0x7f, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
0x7f, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
0x7f, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xff, 0xff, 0xfe, 0x00, 0x00,
0x00, 0x00, 0x00, 0xff, 0xff, 0xfe, 0x00, 0x00,
0x00, 0x00, 0x00, 0xff, 0xff, 0xfe, 0x00, 0x00,
0x00, 0x00, 0x00, 0xff, 0xff, 0xfe, 0x00, 0x00,
0x80, 0x00, 0x00, 0xff, 0xff, 0xfd, 0x00, 0x00,
0x80, 0x00, 0x00, 0xff, 0xff, 0xfd, 0x00, 0x00,
0x80, 0x00, 0x00, 0xff, 0xff, 0xfd, 0x00, 0x00,
0x80, 0x00, 0x00, 0xff, 0xff, 0xfd, 0x00, 0x00,
0xc0, 0x00, 0x00, 0xff, 0xff, 0xfb, 0x00, 0x00,
0xc0, 0x00, 0x00, 0xff, 0xff, 0xfb, 0x00, 0x00,
0xe0, 0x00, 0x00, 0xff, 0xff, 0xf7, 0x00, 0x00,
0xe0, 0x00, 0x00, 0xff, 0xff, 0xf7, 0x00, 0x00,
0xf0, 0x00, 0x00, 0xff, 0xff, 0xef, 0x00, 0x00,
0xf0, 0x00, 0x00, 0xff, 0xff, 0xcf, 0x00, 0x00,
0xf8, 0x00, 0x00, 0xff, 0xff, 0xdf, 0x00, 0x00,
0xfc, 0x00, 0x00, 0xff, 0xff, 0xbf, 0x00, 0x00,
0xfe, 0x00, 0x00, 0xff, 0xff, 0x7f, 0x00, 0x00,
0xff, 0x00, 0x00, 0xff, 0xfe, 0xff, 0x00, 0x00,
0xff, 0x80, 0x00, 0xff, 0xf9, 0xff, 0x00, 0x00,
0xff, 0xc0, 0x00, 0xff, 0xf3, 0xff, 0x00, 0x00,
0xff, 0xf0, 0x00, 0xff, 0xcf, 0xff, 0x00, 0x00,
0xff, 0xfc, 0x00, 0xff, 0x3f, 0xff, 0x00, 0x00,
0xff, 0xff, 0x00, 0xf0, 0xff, 0xff, 0x00, 0x00,
0xff, 0xff, 0xf0, 0x0f, 0xff, 0xff, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x03, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x0f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x1f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x7f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
0x01, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
0x03, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
0x03, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
0x07, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
0x0f, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
0x0f, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
0x1f, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
0x1f, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
0x3f, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
0x3f, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
0x3f, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
0x3f, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
0x7f, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
0x7f, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
0x7f, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
0x7f, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xff, 0xff, 0xfe, 0x00, 0x00,
0x00, 0x00, 0x00, 0xff, 0xff, 0xfe, 0x00, 0x00,
0x00, 0x00, 0x00, 0xff, 0xff, 0xfe, 0x00, 0x00,
0x00, 0x00, 0x00, 0xff, 0xff, 0xfe, 0x00, 0x00,
0x00, 0x00, 0x00, 0xff, 0xff, 0xfc, 0x00, 0x00,
0x00, 0x00, 0x00, 0xff, 0xff, 0xfc, 0x00, 0x00,
0x00, 0x00, 0x00, 0xff, 0xff, 0xfc, 0x00, 0x00,
0x00, 0x00, 0x00, 0xff, 0xff, 0xfc, 0x00, 0x00,
0x00, 0x00, 0x00, 0xff, 0xff, 0xf8, 0x00, 0x00,
0x00, 0x00, 0x00, 0xff, 0xff, 0xf8, 0x00, 0x00,
0x00, 0x00, 0x00, 0xff, 0xff, 0xf0, 0x00, 0x00,
0x00, 0x00, 0x00, 0xff, 0xff, 0xf0, 0x00, 0x00,
0x00, 0x00, 0x00, 0xff, 0xff, 0xe0, 0x00, 0x00,
0x00, 0x00, 0x00, 0xff, 0xff, 0xc0, 0x00, 0x00,
0x00, 0x00, 0x00, 0xff, 0xff, 0xc0, 0x00, 0x00,
0x00, 0x00, 0x00, 0xff, 0xff, 0x80, 0x00, 0x00,
0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xff, 0xfe, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xff, 0xf8, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xff, 0xf0, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xff, 0xc0, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

View file

@ -0,0 +1,196 @@
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x87, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x01, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x7f, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x07, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00,
0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x01, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00,
0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x7f, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00,
0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00,
0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x07, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00,
0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00,
0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xff, 0xf0, 0x00, 0x00, 0x00,
0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xff, 0xf0, 0x00, 0x00, 0x00,
0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xff, 0xf0, 0x00, 0x00, 0x00,
0xff, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xf0, 0x00, 0x00, 0x00,
0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xf0, 0x00, 0x00, 0x00,
0xff, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xf0, 0x00, 0x00, 0x00,
0xff, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xf0, 0x00, 0x00, 0x00,
0xff, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xf0, 0x00, 0x00, 0x00,
0xff, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xf0, 0x00, 0x00, 0x00,
0xff, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xf0, 0x00, 0x00, 0x00,
0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xf0, 0x00, 0x00, 0x00,
0xff, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xf0, 0x00, 0x00, 0x00,
0xff, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xf0, 0x00, 0x00, 0x00,
0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xf0, 0x00, 0x00, 0x00,
0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00,
0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00,
0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00,
0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00,
0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00,
0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00,
0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00,
0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00,
0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00,
0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00,
0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00,
0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00,
0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00,
0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00,
0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00,
0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00,
0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00,
0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00,
0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00,
0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00,
0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00,
0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x80, 0x30, 0x00, 0x00, 0x00,
0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x80, 0x30, 0x00, 0x00, 0x00,
0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xc0, 0x10, 0x00, 0x00, 0x00,
0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xc0, 0x10, 0x00, 0x00, 0x00,
0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xc0, 0x10, 0x00, 0x00, 0x00,
0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xc0, 0x10, 0x00, 0x00, 0x00,
0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xc0, 0x10, 0x00, 0x00, 0x00,
0x81, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x01, 0xe0, 0x10, 0x00, 0x00, 0x00,
0x83, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xc0, 0x01, 0xf8, 0x10, 0x00, 0x00, 0x00,
0x83, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xc0, 0x01, 0xf8, 0x10, 0x00, 0x00, 0x00,
0x83, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xe0, 0x01, 0xf8, 0x10, 0x00, 0x00, 0x00,
0x83, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xe0, 0x07, 0xf8, 0x10, 0x00, 0x00, 0x00,
0x03, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xe0, 0x0f, 0xf8, 0x10, 0x00, 0x00, 0x00,
0x03, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xe0, 0x0f, 0xf8, 0x10, 0x00, 0x00, 0x00,
0x03, 0xfe, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x0f, 0xfc, 0x10, 0x00, 0x00, 0x00,
0x03, 0xfe, 0x07, 0x80, 0x00, 0x00, 0x00, 0x60, 0x00, 0xfc, 0x0f, 0xfc, 0x10, 0x00, 0x00, 0x00,
0x03, 0xfe, 0x07, 0xe0, 0x00, 0x00, 0x00, 0xe0, 0x00, 0xfc, 0x0f, 0xfc, 0x10, 0x00, 0x00, 0x00,
0x03, 0xfe, 0x07, 0xf8, 0x00, 0x00, 0x00, 0xe0, 0x00, 0xfc, 0x0f, 0xfc, 0x00, 0x00, 0x00, 0x00,
0x03, 0xfe, 0x0f, 0xfe, 0x00, 0x00, 0x00, 0xf0, 0x01, 0xfc, 0x0f, 0xfc, 0x00, 0x00, 0x00, 0x00,
0x03, 0xfe, 0x0f, 0xff, 0x80, 0x00, 0x00, 0xf0, 0x07, 0xfc, 0x0f, 0xfc, 0x00, 0x00, 0x00, 0x00,
0x03, 0xff, 0x1f, 0xff, 0xe0, 0x00, 0x00, 0xf0, 0x07, 0xfc, 0x0f, 0xfc, 0x00, 0x00, 0x00, 0x00,
0x03, 0xff, 0xff, 0xff, 0xf8, 0x07, 0x00, 0xf0, 0x07, 0xfc, 0x0f, 0xfc, 0x00, 0x00, 0x00, 0x00,
0x03, 0xff, 0xff, 0xff, 0xfe, 0x1f, 0x00, 0x78, 0x07, 0xfe, 0x0f, 0xfc, 0x00, 0x00, 0x00, 0x00,
0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x7e, 0x07, 0xfe, 0x0f, 0xfc, 0x00, 0x00, 0x00, 0x00,
0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x7e, 0x07, 0xfe, 0x0f, 0xfc, 0x00, 0x00, 0x00, 0x00,
0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x7e, 0x07, 0xfe, 0x0f, 0xfc, 0x00, 0x00, 0x00, 0x00,
0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01, 0xfe, 0x07, 0xfe, 0x0f, 0xfc, 0x00, 0x00, 0x00, 0x00,
0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03, 0xfe, 0x07, 0xfe, 0x07, 0xfc, 0x00, 0x00, 0x00, 0x00,
0x9f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03, 0xfe, 0x07, 0xfe, 0x07, 0xfc, 0x00, 0x00, 0x00, 0x00,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03, 0xfe, 0x07, 0xfe, 0x07, 0xfc, 0x00, 0x00, 0x00, 0x00,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03, 0xff, 0x07, 0xfe, 0x07, 0xff, 0x30, 0x00, 0x00, 0x00,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03, 0xff, 0x07, 0xfe, 0x07, 0xff, 0xf0, 0x00, 0x00, 0x00,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03, 0xff, 0x07, 0xfe, 0x07, 0xff, 0xf0, 0x00, 0x00, 0x00,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03, 0xff, 0x07, 0xfe, 0x07, 0xff, 0xf0, 0x00, 0x00, 0x00,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03, 0xff, 0x07, 0xfe, 0x07, 0xff, 0xf0, 0x00, 0x00, 0x00,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03, 0xff, 0x03, 0xfe, 0x07, 0xff, 0xf0, 0x00, 0x00, 0x00,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03, 0xff, 0x03, 0xfe, 0x07, 0xff, 0xf0, 0x00, 0x00, 0x00,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03, 0xff, 0x03, 0xff, 0x0f, 0xff, 0xf0, 0x00, 0x00, 0x00,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03, 0xff, 0x03, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x83, 0xff, 0x03, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x83, 0xff, 0x03, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x83, 0xff, 0x03, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x83, 0xff, 0x03, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x83, 0xff, 0x03, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x81, 0xff, 0x03, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x81, 0xff, 0xcf, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x81, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x81, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x81, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x81, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x81, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x81, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 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, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x38, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0xf8, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe3, 0xf8, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0xfc, 0x00, 0x00, 0x00, 0x00,
0x00, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x3f, 0xfc, 0x00, 0x00, 0x00, 0x00,
0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0xff, 0xfc, 0x00, 0x00, 0x00, 0x00,
0x00, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe3, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x00,
0x00, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x00,
0x01, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x3f, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x00,
0x01, 0xc7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x00,
0x01, 0xf1, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe3, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
0x03, 0xfc, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0xff, 0xff, 0xfc, 0x00, 0x00, 0x00, 0x00,
0x03, 0xff, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x3f, 0xff, 0xff, 0xf1, 0x00, 0x00, 0x00, 0x00,
0x03, 0xff, 0xc7, 0xff, 0xff, 0xff, 0xff, 0xf8, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00,
0x07, 0xff, 0xf1, 0xff, 0xff, 0xff, 0xff, 0xe3, 0xff, 0xff, 0xff, 0x1c, 0x00, 0x00, 0x00, 0x00,
0x07, 0xff, 0xfc, 0x7f, 0xff, 0xff, 0xff, 0x8f, 0xff, 0xff, 0xfc, 0x7e, 0x00, 0x00, 0x00, 0x00,
0x07, 0xff, 0xff, 0x1f, 0xff, 0x0f, 0xfe, 0x3f, 0xff, 0xff, 0xf0, 0x7f, 0x00, 0x00, 0x00, 0x00,
0x07, 0xff, 0xff, 0xc7, 0xfc, 0x43, 0xf8, 0xff, 0xff, 0xff, 0xc4, 0x3f, 0x00, 0x00, 0x00, 0x00,
0x0f, 0xff, 0xff, 0xf1, 0xfb, 0xfb, 0xe3, 0xff, 0xff, 0xff, 0x18, 0x1f, 0x80, 0x00, 0x00, 0x00,
0x0f, 0xff, 0xff, 0xfc, 0x79, 0xf3, 0x8f, 0xff, 0xff, 0xfc, 0x03, 0x0f, 0x80, 0x00, 0x00, 0x00,
0x07, 0xff, 0xff, 0xff, 0x1c, 0x06, 0x3f, 0xff, 0xff, 0xf1, 0xcf, 0x8f, 0x80, 0x00, 0x00, 0x00,
0x09, 0xff, 0xff, 0xff, 0xc7, 0xf8, 0xff, 0xff, 0xff, 0xc7, 0xe7, 0x8f, 0x80, 0x00, 0x00, 0x00,
0x04, 0x7f, 0xff, 0xff, 0xf1, 0xe3, 0xff, 0xff, 0xff, 0x1f, 0xf3, 0x8f, 0x80, 0x00, 0x00, 0x00,
0x01, 0x1f, 0xff, 0xff, 0xfc, 0x0f, 0xff, 0xff, 0xfc, 0x3f, 0xfb, 0x8f, 0x80, 0x00, 0x00, 0x00,
0x04, 0x67, 0xff, 0xff, 0xff, 0x3f, 0xff, 0xff, 0xf0, 0x1f, 0xfb, 0x0f, 0x80, 0x00, 0x00, 0x00,
0x07, 0x11, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xc6, 0x4f, 0xf8, 0x0f, 0x80, 0x00, 0x00, 0x00,
0x07, 0xc4, 0x7f, 0xff, 0xff, 0x7f, 0xff, 0xff, 0x08, 0x0f, 0xf8, 0x0f, 0x80, 0x00, 0x00, 0x00,
0x27, 0xf1, 0x9f, 0xff, 0xff, 0x7f, 0xff, 0xfc, 0x43, 0xc7, 0xf8, 0x0f, 0x80, 0x00, 0x00, 0x00,
0x23, 0xfc, 0x47, 0xff, 0xff, 0x7f, 0xff, 0xf1, 0xf3, 0xc7, 0xf8, 0x07, 0x80, 0x00, 0x00, 0x00,
0x23, 0xff, 0x19, 0xff, 0xff, 0x7f, 0xff, 0xc7, 0xfb, 0xc7, 0xf8, 0x07, 0x80, 0x00, 0x00, 0x00,
0x2b, 0xff, 0xc4, 0x7f, 0xff, 0x7f, 0xff, 0x1f, 0xf9, 0xc7, 0xf8, 0x07, 0x80, 0x00, 0x00, 0x00,
0x28, 0xff, 0xf1, 0x1f, 0xff, 0x7f, 0xfc, 0x1f, 0xfd, 0xc7, 0xf8, 0x04, 0xc0, 0x00, 0x00, 0x00,
0x28, 0x3f, 0xfc, 0x47, 0xff, 0x7f, 0xf1, 0x4f, 0xfd, 0x07, 0xf8, 0x00, 0xc0, 0x00, 0x00, 0x00,
0x28, 0x0f, 0xff, 0x11, 0xff, 0x7f, 0xc6, 0x07, 0xfc, 0x07, 0xfc, 0x00, 0xc0, 0x00, 0x00, 0x00,
0x28, 0x03, 0xff, 0xc6, 0x7f, 0x7f, 0x01, 0xc7, 0xfc, 0x07, 0xfc, 0x00, 0xc0, 0x00, 0x00, 0x00,
0x28, 0x00, 0xff, 0xf1, 0x1f, 0x7c, 0x73, 0xe3, 0xfc, 0x07, 0xf8, 0x00, 0xc0, 0x00, 0x00, 0x00,
0x08, 0x00, 0x3f, 0xfc, 0x47, 0x71, 0xf9, 0xe3, 0xfc, 0x07, 0xf0, 0x02, 0xc0, 0x00, 0x00, 0x00,
0x08, 0x00, 0x0f, 0xff, 0x11, 0x41, 0xfd, 0xeb, 0xfc, 0x03, 0xc0, 0x00, 0xc0, 0x00, 0x00, 0x00,
0x08, 0x00, 0x03, 0xff, 0xc4, 0x14, 0xfc, 0xe3, 0xfc, 0x03, 0xc0, 0x00, 0xc0, 0x00, 0x00, 0x00,
0x18, 0x00, 0xb0, 0xff, 0xf1, 0x20, 0x7e, 0xc3, 0xfc, 0x00, 0x40, 0x00, 0xc0, 0x00, 0x00, 0x00,
0x18, 0x00, 0xb0, 0x3f, 0xfc, 0x1c, 0x3e, 0x03, 0xfc, 0x00, 0x60, 0x00, 0xc0, 0x00, 0x00, 0x00,
0x58, 0x00, 0xa0, 0x0f, 0xff, 0x3e, 0x3e, 0x03, 0xfc, 0x00, 0x60, 0x00, 0xc0, 0x00, 0x00, 0x00,
0x18, 0x00, 0xa0, 0x03, 0xff, 0x7e, 0x3e, 0x03, 0xfc, 0x00, 0x60, 0x00, 0xc0, 0x00, 0x00, 0x00,
0x18, 0x00, 0xa0, 0x00, 0xff, 0x7e, 0x3e, 0x03, 0xfc, 0x00, 0x60, 0x00, 0x40, 0x00, 0x00, 0x00,
0x58, 0x00, 0xa0, 0x00, 0x3f, 0x7e, 0x3e, 0x03, 0xf0, 0x00, 0x60, 0x00, 0x40, 0x00, 0x00, 0x00,
0x58, 0x00, 0x00, 0x00, 0x0f, 0x7c, 0x3e, 0x01, 0xe0, 0x00, 0x60, 0x00, 0x40, 0x00, 0x00, 0x00,
0x58, 0x00, 0x00, 0x00, 0x03, 0x70, 0x3e, 0x01, 0x20, 0x00, 0x60, 0x01, 0x60, 0x00, 0x00, 0x00,
0x58, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x30, 0x00, 0x60, 0x01, 0x60, 0x00, 0x00, 0x00,
0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x30, 0x00, 0x60, 0x00, 0x60, 0x00, 0x00, 0x00,
0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x30, 0x00, 0x20, 0x01, 0x60, 0x00, 0x00, 0x00,
0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x30, 0x00, 0x20, 0x00, 0x60, 0x00, 0x00, 0x00,
0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x30, 0x00, 0x20, 0x00, 0x60, 0x00, 0x00, 0x00,
0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x30, 0x00, 0x20, 0x00, 0x60, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0x00, 0x30, 0x00, 0x20, 0x00, 0x60, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0x00, 0x30, 0x00, 0x20, 0x00, 0x60, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x00, 0x30, 0x00, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x00, 0x30, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x00, 0x10, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x10, 0x00, 0xb0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x10, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x10, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x10, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x58, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x58, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x58, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x58, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2c, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 362 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 328 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 836 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 485 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

View file

@ -0,0 +1,901 @@
/*
* This is a test app for virtual hardware cursor overlays. It
* provides a number of test cases which exercise and demonstrate the
* various cursor modes.
*
* This example requires SVGA Screen Object support. (The cursor
* functionality we're testing has nothing to do with Screen Object,
* but Screen Object is required by our text drawing code...)
*/
#include "svga.h"
#include "gmr.h"
#include "screen.h"
#include "intr.h"
#include "screendraw.h"
#include "keyboard.h"
#include "vmbackdoor.h"
#include "timer.h"
#include "mt19937ar.h"
#include "math.h"
/*
* Constants
*/
#define GMRID_SCREEN_DRAW 0
#define GMRID_NOISE 1
#define FRAME_RATE 60
/*
* Global data
*/
int currentTest = -1;
const int testListX = 150;
const int testListY = 70;
const int testListItemHeight = 22;
SVGAScreenObject myScreen = {
.structSize = sizeof(SVGAScreenObject),
.id = 0,
.flags = SVGA_SCREEN_HAS_ROOT | SVGA_SCREEN_IS_PRIMARY,
.size = { 800, 600 },
.root = { 150000, -0x20000000 },
};
/*
* Test Cases
*/
void
testAlphaArrow(void)
{
static const SVGAFifoCmdDefineAlphaCursor cursor = {
.id = 0,
.hotspotX = 1,
.hotspotY = 1,
.width = 36,
.height = 51,
};
static const uint32 data[] = {
# include "rgba_arrow.h"
};
void *fifoData;
/*
* Switch to 8-bit mode. Alpha cursors should work even if the
* legacy framebuffer is in a low color depth.
*/
SVGA_WriteReg(SVGA_REG_BITS_PER_PIXEL, 8);
SVGA_BeginDefineAlphaCursor(&cursor, &fifoData);
memcpy(fifoData, data, sizeof data);
SVGA_FIFOCommitAll();
}
void
testGradient(int size)
{
const SVGAFifoCmdDefineAlphaCursor cursor = {
.id = 0,
.hotspotX = size / 2,
.hotspotY = size / 2,
.width = size,
.height = size,
};
uint32 *data;
int x, y;
SVGA_WriteReg(SVGA_REG_BITS_PER_PIXEL, 8);
SVGA_BeginDefineAlphaCursor(&cursor, (void**) &data);
for (y = 0; y < cursor.height; y++) {
for (x = 0; x < cursor.width; x++) {
uint8 alpha = y * 255 / cursor.height;
/* Solid white, with pre-multiplied alpha: L = 255 * alpha / 255 */
uint8 luma = alpha;
*(data++) = (alpha << 24) | (luma << 16) | (luma << 8) | luma;
}
}
SVGA_FIFOCommitAll();
}
void
testGradient64(void)
{
testGradient(64);
}
void
testGradient180(void)
{
testGradient(180);
}
void
testGradient256(void)
{
testGradient(256);
}
void
testMonochrome(void)
{
static const SVGAFifoCmdDefineCursor cursor = {
.id = 0,
.hotspotX = 24,
.hotspotY = 24,
.width = 48,
.height = 48,
.andMaskDepth = 1,
.xorMaskDepth = 1,
};
static const uint8 data[] = {
# include "beachball_mono.h"
};
void *andData, *xorData;
/*
* Switch to 32bpp mode, just because we can. Monochrome cursors
* work in any framebuffer depth.
*/
SVGA_WriteReg(SVGA_REG_BITS_PER_PIXEL, 32);
SVGA_BeginDefineCursor(&cursor, &andData, &xorData);
memcpy(andData, data, sizeof data);
SVGA_FIFOCommitAll();
}
void
testMonochromeXOR(void)
{
static const SVGAFifoCmdDefineCursor cursor = {
.id = 0,
.hotspotX = 24,
.hotspotY = 24,
.width = 48,
.height = 48,
.andMaskDepth = 1,
.xorMaskDepth = 1,
};
static const uint8 data[] = {
# include "beachball_mono_xor.h"
};
void *andData, *xorData;
SVGA_WriteReg(SVGA_REG_BITS_PER_PIXEL, 32);
SVGA_BeginDefineCursor(&cursor, &andData, &xorData);
memcpy(andData, data, sizeof data);
SVGA_FIFOCommitAll();
}
void
testMonochromeLarge(void)
{
static const SVGAFifoCmdDefineCursor cursor = {
.id = 0,
.hotspotX = 50,
.hotspotY = 50,
.width = 100,
.height = 98,
.andMaskDepth = 1,
.xorMaskDepth = 1,
};
static const uint8 data[] = {
# include "chip_mono.h"
};
void *andData, *xorData;
/*
* Switch to 32bpp mode, just because we can. Monochrome cursors
* work in any framebuffer depth.
*/
SVGA_WriteReg(SVGA_REG_BITS_PER_PIXEL, 32);
SVGA_BeginDefineCursor(&cursor, &andData, &xorData);
memcpy(andData, data, sizeof data);
SVGA_FIFOCommitAll();
}
void
testANDXOR32(void)
{
static const SVGAFifoCmdDefineCursor cursor = {
.id = 0,
.hotspotX = 16,
.hotspotY = 16,
.width = 32,
.height = 32,
.andMaskDepth = 32,
.xorMaskDepth = 32
};
uint32 *andData, *xorData;
int x, y;
SVGA_WriteReg(SVGA_REG_BITS_PER_PIXEL, 32);
SVGA_BeginDefineCursor(&cursor, (void**) &andData, (void**) &xorData);
for (y = 0; y < cursor.height; y++) {
for (x = 0; x < cursor.width; x++) {
*(andData++) = 0x808080;
*(xorData++) = y * 127 / cursor.height;
}
}
SVGA_FIFOCommitAll();
}
static const uint32 yellowCrabData[] = {
# include "yellow_crab_rgba.h"
};
void
buildCrabANDMask(uint8 *andData)
{
const uint32 *rgba = yellowCrabData;
const int width = 48;
const int height = 50;
uint32 andPitch = ((width + 31) / 32) * 4;
uint8 *andLine;
int x, y;
for (y = 0; y < height; y++) {
andLine = andData;
andData += andPitch;
memset(andLine, 0, andPitch);
for (x = 0; x < width; x++) {
uint32 color = *(rgba++);
*andLine <<= 1;
if ((color & 0xFF000000) == 0) {
/*
* Transparent pixel
*/
*andLine |= 1;
}
if ((x & 7) == 7) {
andLine++;
}
}
}
}
void
testCrabAlpha(void)
{
static const SVGAFifoCmdDefineAlphaCursor cursor = {
.id = 0,
.hotspotX = 24,
.hotspotY = 25,
.width = 48,
.height = 50,
};
void *fifoData;
SVGA_WriteReg(SVGA_REG_BITS_PER_PIXEL, 32);
SVGA_BeginDefineAlphaCursor(&cursor, &fifoData);
memcpy(fifoData, yellowCrabData, sizeof yellowCrabData);
SVGA_FIFOCommitAll();
}
void
testCrabANDXOR32(void)
{
static const SVGAFifoCmdDefineCursor cursor = {
.id = 0,
.hotspotX = 24,
.hotspotY = 25,
.width = 48,
.height = 50,
.andMaskDepth = 1,
.xorMaskDepth = 32
};
uint8 *andData;
uint32 *xorData;
SVGA_WriteReg(SVGA_REG_BITS_PER_PIXEL, 32);
SVGA_BeginDefineCursor(&cursor, (void**) &andData, (void**) &xorData);
buildCrabANDMask(andData);
memcpy(xorData, yellowCrabData, sizeof yellowCrabData);
SVGA_FIFOCommitAll();
}
void
testCrabANDXOR16(void)
{
static const SVGAFifoCmdDefineCursor cursor = {
.id = 0,
.hotspotX = 24,
.hotspotY = 25,
.width = 48,
.height = 50,
.andMaskDepth = 1,
.xorMaskDepth = 16
};
const uint32 *rgba = yellowCrabData;
uint8 *andData;
uint16 *xorData;
int x, y;
SVGA_WriteReg(SVGA_REG_BITS_PER_PIXEL, 16);
if (SVGA_ReadReg(SVGA_REG_DEPTH) != 16) {
Console_Panic("Expected SVGA_REG_DEPTH == 16 for 16bpp mode");
}
SVGA_BeginDefineCursor(&cursor, (void**) &andData, (void**) &xorData);
buildCrabANDMask(andData);
for (y = 0; y < cursor.height; y++) {
for (x = 0; x < cursor.width; x++) {
uint32 color = *(rgba++);
/*
* Convert to RGB 5-6-5
*/
uint8 r = (color >> 19) & 0x1F;
uint8 g = (color >> 10) & 0x3F;
uint8 b = (color >> 3) & 0x1F;
*(xorData++) = (r << 11) | (g << 5) | b;
}
}
SVGA_FIFOCommitAll();
}
void
testCrabANDXOR8(void)
{
static const SVGAFifoCmdDefineCursor cursor = {
.id = 0,
.hotspotX = 24,
.hotspotY = 25,
.width = 48,
.height = 50,
.andMaskDepth = 1,
.xorMaskDepth = 8
};
static const uint8 crabPixels[] = {
# include "yellow_crab_256_pixels.h"
};
static const uint8 crabColormap[] = {
# include "yellow_crab_256_colormap.h"
};
uint8 *andData, *xorData;
int i;
SVGA_WriteReg(SVGA_REG_BITS_PER_PIXEL, 8);
if (SVGA_ReadReg(SVGA_REG_PSEUDOCOLOR) != TRUE) {
Console_Panic("Expected SVGA_REG_PSUEDOCOLOR == TRUE for 8bpp mode");
}
/*
* Load the crab's colormap into the SVGA palette registers.
*/
for (i = 0; i < arraysize(crabColormap); i++) {
SVGA_WriteReg(SVGA_PALETTE_BASE + i, crabColormap[i]);
}
SVGA_BeginDefineCursor(&cursor, (void**) &andData, (void**) &xorData);
buildCrabANDMask(andData);
memcpy(xorData, crabPixels, sizeof crabPixels);
SVGA_FIFOCommitAll();
}
void
createPaletteCursor(void)
{
/*
* Set up a cursor which shows every color in the palette. It has
* a 1-pixel border of color 255, but every other color forms a
* 16x16 grid in which each square is a different color. Each grid
* square is 3x3 pixels.
*
* We also take this opportunity to use an 8-bit AND mask, but it's
* fully opaque (all zeroes).
*
* This does mean that to function correctly, this cursor needs
* color 0 to be black. The SVGA device doesn't specify whether
* AND/XOR masks are applied before or after pseudocolor emulation,
* so we need to be okay with either.
*/
static const SVGAFifoCmdDefineCursor cursor = {
.id = 0,
.hotspotX = 24,
.hotspotY = 24,
.width = 49,
.height = 49,
.andMaskDepth = 8,
.xorMaskDepth = 8
};
uint8 *andData, *xorData;
uint8 *line;
int x, y;
uint32 pitch = roundup(cursor.width, sizeof(uint32)) * sizeof(uint32);
SVGA_WriteReg(SVGA_REG_BITS_PER_PIXEL, 8);
if (SVGA_ReadReg(SVGA_REG_PSEUDOCOLOR) != TRUE) {
Console_Panic("Expected SVGA_REG_PSUEDOCOLOR == TRUE for 8bpp mode");
}
SVGA_BeginDefineCursor(&cursor, (void**) &andData, (void**) &xorData);
memset(andData, 0, pitch * cursor.height);
for (y = 0; y < cursor.height; y++) {
line = xorData;
xorData += pitch;
for (x = 0; x < cursor.width; x++) {
uint8 color;
if (y == 0 || x == 0 || y == cursor.height - 1 || x == cursor.width - 1) {
/* Border color */
color = 0xFF;
} else {
int row = (y - 1) / 3;
int column = (x - 1) / 3;
color = row * 16 + column;
}
*(line++) = color;
}
}
SVGA_FIFOCommitAll();
}
void
animatePalette(void)
{
/*
* Animate the palette. This is stolen from the vbe-palette test...
*/
static int tick = 0;
int i;
/*
* Let the phase of each color channel slowly drift around.
*/
const float rPhase = tick * 0.001;
const float gPhase = tick * 0.002;
const float bPhase = tick * 0.003;
/*
* Animate every color except 0 (used for the AND mask) and 255
* (for the border).
*/
for (i = 1; i < 255; i++) {
const int x = (i & 0x0F) - 3;
const int y = (i >> 4) - 3;
const float t = (x*x + y*y) * 0.05 + tick * 0.02;
const uint8 r = sinf(t + rPhase) * 0x7f + 0x80;
const uint8 g = sinf(t + gPhase) * 0x7f + 0x80;
const uint8 b = sinf(t + bPhase) * 0x7f + 0x80;
SVGA_WriteReg(SVGA_PALETTE_BASE + i * 3 + 0, r);
SVGA_WriteReg(SVGA_PALETTE_BASE + i * 3 + 1, g);
SVGA_WriteReg(SVGA_PALETTE_BASE + i * 3 + 2, b);
}
tick++;
}
void
blit32(const uint32 *src, int srcX, int srcY, int srcWidth,
uint32 *dest, int destX, int destY, int destWidth,
int copyWidth, int copyHeight)
{
src += srcX + srcY * srcWidth;
dest += destX + destY * destWidth;
while (copyHeight--) {
memcpy32(dest, src, copyWidth);
src += srcWidth;
dest += destWidth;
}
}
void
testCursorAnim(void)
{
/*
* Animate a cursor image of a moon orbiting a planet. The cursor
* hotspot is always centered on the planet, but we dynamically
* size the cursor according to the bounding box around the planet
* and moon, and we dynamically adjust the hotspot to keep it
* centered on the moon.
*/
const int moonWidth = 10;
const int planetWidth = 20;
static int tick = 0;
float angle = tick * 0.03;
tick++;
const int orbitRadius = 40;
int orbitX = cosf(angle) * orbitRadius;
int orbitY = sinf(angle) * orbitRadius;
int width, height, planetX, planetY, moonX, moonY;
if (orbitX >= 0) {
width = planetWidth + orbitX;
planetX = planetWidth/2;
moonX = planetX + orbitX;
} else {
width = planetWidth - orbitX;
moonX = planetWidth/2;
planetX = moonX - orbitX;
}
if (orbitY >= 0) {
height = planetWidth + orbitY;
planetY = planetWidth/2;
moonY = planetY + orbitY;
} else {
height = planetWidth - orbitY;
moonY = planetWidth/2;
planetY = moonY - orbitY;
}
const SVGAFifoCmdDefineAlphaCursor cursor = {
.id = 0,
.hotspotX = planetX,
.hotspotY = planetY,
.width = width,
.height = height,
};
uint32 *image;
static const uint32 planet[] = {
# include "planet_rgba.h"
};
static const uint32 moon[] = {
# include "moon_rgba.h"
};
SVGA_WriteReg(SVGA_REG_BITS_PER_PIXEL, 8);
SVGA_BeginDefineAlphaCursor(&cursor, (void**) &image);
memset32(image, 0, width * height);
blit32(planet, 0, 0, planetWidth,
image, planetX - planetWidth/2, planetY - planetWidth/2, width,
planetWidth, planetWidth);
blit32(moon, 0, 0, moonWidth,
image, moonX - moonWidth/2, moonY - moonWidth/2, width,
moonWidth, moonWidth);
SVGA_FIFOCommitAll();
}
/*
* gTestCases --
*
* Master array of cursor test cases. Each one has a title and a
* function pointer. The function is run once when a test mode is
* selected.
*/
struct {
void (*fn)(void);
const char *title;
void (*animateFn)(void);
} gTestCases[] = {
{ testAlphaArrow, "Translucent arrow cursor (36x51)" },
{ testGradient64, "Gradient from transparent white to opaque white (64x64)" },
{ testGradient180, "Gradient from transparent white to opaque white (180x180)" },
{ testGradient256, "Gradient from transparent white to opaque white (256x256)" },
{ testMonochrome, "Monochrome beachball cursor (48x48)" },
{ testMonochromeXOR, "Monochrome beachball cursor with XOR pixels (48x48)" },
{ testMonochromeLarge, "Monochrome chip cursor (100x96)" },
{ testANDXOR32, "AND masks off 7 LSBs, XOR draws blue gradient (32x32)" },
{ testCrabAlpha, "Yellow crab, alpha blended (48x50)" },
{ testCrabANDXOR32, "Yellow crab, 1-bit AND, 32-bit XOR (48x50)" },
{ testCrabANDXOR16, "Yellow crab, 1-bit AND, 16-bit XOR (48x50)" },
{ testCrabANDXOR8, "Yellow crab, 1-bit AND, 8-bit XOR (48x50)" },
{ createPaletteCursor, "Palette animation, 8-bit AND/XOR (49x49)", animatePalette },
{ testCursorAnim, "Animated cursor (variable size and hotspot)", testCursorAnim }
};
/*
* selectTest --
*
* Switch to a new current test case. Hilight the new test, un-hilight
* the old one, and call the new test's function.
*/
void
selectTest(int newTest)
{
if (newTest < 0) {
newTest += arraysize(gTestCases);
} else if (newTest >= arraysize(gTestCases)) {
newTest -= arraysize(gTestCases);
}
if (currentTest != newTest) {
if (currentTest >= 0) {
ScreenDraw_Border(testListX,
testListY + testListItemHeight * currentTest,
myScreen.size.width - testListX,
testListY + testListItemHeight * (currentTest + 1),
0x000000, 2);
}
currentTest = newTest;
ScreenDraw_Border(testListX,
testListY + testListItemHeight * currentTest,
myScreen.size.width - testListX,
testListY + testListItemHeight * (currentTest + 1),
0xFFFF00, 2);
gTestCases[newTest].fn();
}
}
/*
* allocNoise --
*
* Allocates a new GMR, and fills it with random noise.
*/
static void
allocNoise(void)
{
const uint32 numPages = 500;
const uint32 numWords = numPages * PAGE_SIZE / sizeof(uint32);
PPN pages = GMR_DefineContiguous(GMRID_NOISE, numPages);
uint32 *ptr = PPN_POINTER(pages);
int i;
init_genrand(0);
for (i = 0; i < numWords; i++) {
ptr[i] = genrand_int32();
}
}
/*
* prepareNoiseRect --
*
* Prepare some noise as the source for a blit.
* This defines the GMRFB, and generates a random source origin.
*/
static void
prepareNoiseRect(SVGASignedPoint *origin) // OUT
{
const uint32 bytesPerLine = 512;
static const SVGAGMRImageFormat format = {{{ 32, 24 }}};
const SVGAGuestPtr gPtr = { GMRID_NOISE, 0 };
const uint32 rand = genrand_int32();
Screen_DefineGMRFB(gPtr, bytesPerLine, format);
origin->x = rand & 0x7F;
origin->y = (rand >> 8) & 0x7F;
}
/*
* main --
*
* Initialization and main loop. This reads a global array of test
* cases, and presents a menu which cycles through them. The main
* loop services keyboard and mouse input, and draws an animated test
* pattern for testing cursor interaction with the base layer.
*/
int
main(void)
{
Intr_Init();
Intr_SetFaultHandlers(SVGA_DefaultFaultHandler);
Timer_InitPIT(PIT_HZ / FRAME_RATE);
Intr_SetMask(PIT_IRQ, TRUE);
SVGA_Init();
GMR_Init();
Keyboard_Init();
VMBackdoor_MouseInit(TRUE);
Heap_Reset();
SVGA_SetMode(0, 0, 32);
Screen_Init();
ScreenDraw_Init(GMRID_SCREEN_DRAW);
allocNoise();
Screen_Define(&myScreen);
/*
* Draw the menu of test modes.
*/
ScreenDraw_SetScreen(myScreen.id, myScreen.size.width, myScreen.size.height);
Console_Clear();
ScreenDraw_Border(0, 0, myScreen.size.width, myScreen.size.height, 0x808080, 1);
Console_WriteString("Cursor tests:\n"
"Select with up/down arrows. "
"Move cursor with mouse or WASD keys.\n");
for (currentTest = 0; currentTest < arraysize(gTestCases); currentTest++) {
Console_MoveTo(testListX + 2, testListY + testListItemHeight * currentTest + 2);
Console_Format("%d. %s", currentTest + 1, gTestCases[currentTest].title);
}
/*
* Draw a white square on the right side of the menu, so we can see
* what the cursors look like on a solid white background.
*/
ScreenDraw_Rectangle(myScreen.size.width - testListX + 10,
testListY,
myScreen.size.width - 10,
myScreen.size.height - 10,
0xFFFFFF);
/*
* Main loop.
*/
selectTest(0);
while (1) {
int prevTest = currentTest - 1;
int nextTest = currentTest + 1;
static VMMousePacket mouseState;
const int kbdMouseSpeed = 100;
Bool needCursorUpdate = FALSE;
while (Keyboard_IsKeyPressed(KEY_UP)) {
selectTest(prevTest);
}
while (Keyboard_IsKeyPressed(KEY_DOWN)) {
selectTest(nextTest);
}
while (VMBackdoor_MouseGetPacket(&mouseState)) {
needCursorUpdate = TRUE;
}
if (Keyboard_IsKeyPressed('w')) {
mouseState.y -= kbdMouseSpeed;
needCursorUpdate = TRUE;
}
if (Keyboard_IsKeyPressed('s')) {
mouseState.y += kbdMouseSpeed;
needCursorUpdate = TRUE;
}
if (Keyboard_IsKeyPressed('a')) {
mouseState.x -= kbdMouseSpeed;
needCursorUpdate = TRUE;
}
if (Keyboard_IsKeyPressed('d')) {
mouseState.x += kbdMouseSpeed;
needCursorUpdate = TRUE;
}
if (needCursorUpdate) {
/*
* Send a cursor position update. In order to test the SVGA
* device's cursor screen ID support, we alternate between
* sending cursor updates in virtual coordinates and in
* screen-relative coordinates.
*
* If all is well, cursor movement should still be smooth. If
* there's a bug in decoding, the cursor will jitter as it's
* moved, or the cursor may flicker if it's moved over an
* animated region like the static bar on the left side of
* the screen.
*/
/*
* Fixed-point to pixels.
*/
SVGASignedPoint pixelLocation = {
mouseState.x * myScreen.size.width / 65535,
mouseState.y * myScreen.size.height / 65535
};
uint32 screenId;
static Bool toggle;
if (toggle) {
screenId = SVGA_ID_INVALID;
pixelLocation.x += myScreen.root.x;
pixelLocation.y += myScreen.root.y;
toggle = FALSE;
} else {
screenId = myScreen.id;
toggle = TRUE;
}
SVGA_MoveCursor(TRUE, pixelLocation.x, pixelLocation.y, screenId);
}
/*
* Draw some noise on the side of the screen, for testing overlay compositing.
*/
SVGASignedPoint srcOrigin;
SVGASignedRect noiseRect = {
10, testListY, testListX - 10, myScreen.size.height - 10,
};
prepareNoiseRect(&srcOrigin);
Screen_BlitFromGMRFB(&srcOrigin, &noiseRect, myScreen.id);
/*
* Some tests are animated...
*/
if (gTestCases[currentTest].animateFn) {
gTestCases[currentTest].animateFn();
}
/*
* Wait for the next frame.
*/
Intr_Halt();
}
return 0;
}

View file

@ -0,0 +1,17 @@
0x00000000, 0x00000000, 0x3e020202, 0xc9161515, 0xdc1f1f1f, 0xdc1f1e1e,
0xc9131212, 0x3e020202, 0x00000000, 0x00000000, 0x00000000, 0x880f0e0e,
0xe6484646, 0xf5d1c9c9, 0xf5d6cfcf, 0xf5cbc5c5, 0xf5b6b1b1, 0xe63b3a3a,
0x880c0b0b, 0x00000000, 0x3e020202, 0xe6484545, 0xf5e5dcdc, 0xf5e9e0e0,
0xf5e0d9d9, 0xf5d4cdcd, 0xf5c7c2c2, 0xf5bab5b5, 0xe6383737, 0x3e010101,
0xc9161515, 0xf5cfc7c7, 0xf5e7dede, 0xf5f2e8e8, 0xf5e5dddd, 0xf5d8d1d1,
0xf5cac4c4, 0xf5bdb8b8, 0xf5a7a3a3, 0xc9111111, 0xdc1f1f1f, 0xf5d3cdcd,
0xf5ded7d7, 0xf5e4dcdc, 0xf5dfd8d8, 0xf5d6cfcf, 0xf5c9c4c4, 0xf5bcb8b8,
0xf5afabab, 0xdc191919, 0xdc1e1e1e, 0xf5c9c4c4, 0xf5d2cbcb, 0xf5d7d0d0,
0xf5d5cece, 0xf5cec8c8, 0xf5c4bfbf, 0xf5b9b5b5, 0xf5acaaaa, 0xdc191919,
0xc9121212, 0xf5b4b1b1, 0xf5c5c0c0, 0xf5c9c4c4, 0xf5c8c3c3, 0xf5c4bfbf,
0xf5bcb8b8, 0xf5b2afaf, 0xf59f9d9d, 0xc9101010, 0x3e020202, 0xe63b3939,
0xf5b8b4b4, 0xf5bbb7b7, 0xf5bbb7b7, 0xf5b8b4b4, 0xf5b2afaf, 0xf5aba8a8,
0xe6353434, 0x3e010101, 0x00000000, 0x880b0b0b, 0xe6383737, 0xf5a5a2a2,
0xf5aeabab, 0xf5aba9a9, 0xf59f9d9d, 0xe6353434, 0x880b0b0b, 0x00000000,
0x00000000, 0x00000000, 0x3e010101, 0xc9111010, 0xdc191919, 0xdc191919,
0xc9101010, 0x3e010101, 0x00000000, 0x00000000,

View file

@ -0,0 +1,67 @@
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x04000000,
0x49010101, 0x900d0d10, 0xc4141419, 0xd71e1e25, 0xd71c1c25, 0xc4121218,
0x910a0a0f, 0x49000001, 0x04000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x2d000000, 0xd3161618, 0xf0696876, 0xf79c9ab2, 0xf5b2afd0, 0xf5acabcf,
0xf5a4a4cc, 0xf5999ac6, 0xf77a7ba5, 0xf04a4c6b, 0xd20e0e15, 0x2d000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x02000000, 0x8a0c0c0e, 0xe5343338, 0xf6bbb6c9, 0xf5cac5db, 0xf5c5c1d9,
0xf5bfbbd6, 0xf5b6b3d3, 0xf5acabcf, 0xf5a3a2cb, 0xf59898c7, 0xf58d8fc3,
0xf6767aaf, 0xe51f2030, 0x8a07070b, 0x02000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x8a0c0c0e, 0xf1716e79, 0xf5d3cddd, 0xf5d7d1df,
0xf5d6d0de, 0xf5d1cbdc, 0xf5c8c4da, 0xf5bfbbd6, 0xf5b4b2d2, 0xf5aaa9ce,
0xf59e9ec9, 0xf59394c5, 0xf5878ac1, 0xf57b7fbc, 0xf13e4166, 0x8a06070b,
0x00000000, 0x00000000, 0x00000000, 0x2d000000, 0xe5343338, 0xf5d2ccdd,
0xf5dcd5e1, 0xf5e2dbe3, 0xf5e2dbe3, 0xf5dbd4e0, 0xf5d1cbdc, 0xf5c6c2d9,
0xf5bbb7d5, 0xf5afadd0, 0xf5a3a3cb, 0xf59798c7, 0xf58c8ec3, 0xf57f83be,
0xf57479b9, 0xe51a1c2e, 0x2d000000, 0x00000000, 0x04000000, 0xd3161518,
0xf6b8b4c8, 0xf5d5cede, 0xf5e0d9e3, 0xf5ebe2e7, 0xf5ede4e8, 0xf5e2dbe3,
0xf5d7d0df, 0xf5cac5db, 0xf5bfbbd6, 0xf5b2b0d1, 0xf5a7a6cd, 0xf59a9bc8,
0xf58f91c4, 0xf58285bf, 0xf5777aba, 0xf66267a7, 0xd20a0b14, 0x04000000,
0x49010101, 0xf0686576, 0xf5c6c2d9, 0xf5d2ccdd, 0xf5ded7e2, 0xf5e9e0e6,
0xf5ede4e8, 0xf5e3dce4, 0xf5d8d2df, 0xf5ccc7dc, 0xf5c1bdd7, 0xf5b4b1d2,
0xf5a9a7cd, 0xf59c9cc8, 0xf59192c4, 0xf58487c0, 0xf5797cbb, 0xf56c72b6,
0xf0353962, 0x49000001, 0x910d0d0f, 0xf79997b1, 0xf5c2bed7, 0xf5ccc7dc,
0xf5d7d0df, 0xf5ded8e2, 0xf5e1dae3, 0xf5ddd6e1, 0xf5d5cede, 0xf5cac5db,
0xf5c0bcd6, 0xf5b4b1d2, 0xf5a9a7cd, 0xf59c9cc8, 0xf59192c4, 0xf58587c0,
0xf5797cbb, 0xf56d72b6, 0xf7515796, 0x9106070d, 0xc4141419, 0xf5aeadce,
0xf5bbb8d5, 0xf5c4c0d8, 0xf5cdc7dc, 0xf5d3cddd, 0xf5d6cfde, 0xf5d4cede,
0xf5cdc8dc, 0xf5c5c1d9, 0xf5bcb8d5, 0xf5b1aed1, 0xf5a6a5cc, 0xf59b9bc8,
0xf59091c4, 0xf58487c0, 0xf5797cbb, 0xf56c72b6, 0xf56066b0, 0xc40a0b15,
0xd71d1d25, 0xf5a9a8cd, 0xf5b2b0d1, 0xf5bbb8d5, 0xf5c3bfd8, 0xf5c7c3da,
0xf5cac4db, 0xf5c8c4da, 0xf5c4c1d9, 0xf5bebad6, 0xf5b6b3d3, 0xf5acabcf,
0xf5a2a2cb, 0xf59798c7, 0xf58d8fc3, 0xf58185bf, 0xf5777aba, 0xf56b71b6,
0xf56066b1, 0xd7101020, 0xd71b1b25, 0xf5a0a0ca, 0xf5a9a8cd, 0xf5b0aed1,
0xf5b7b4d3, 0xf5bcb8d5, 0xf5bebad6, 0xf5bebad6, 0xf5bbb7d4, 0xf5b5b2d2,
0xf5aeacd0, 0xf5a6a5cc, 0xf59d9dc9, 0xf59394c5, 0xf5898bc2, 0xf57e82bd,
0xf57479b9, 0xf5686eb5, 0xf55e64b0, 0xd70f1020, 0xc4111118, 0xf59596c4,
0xf59f9fc9, 0xf5a6a5cc, 0xf5ababcf, 0xf5afadd0, 0xf5b2afd1, 0xf5b2afd1,
0xf5afadd0, 0xf5abaacf, 0xf5a6a5cc, 0xf59e9ec9, 0xf59697c6, 0xf58e90c4,
0xf58487c0, 0xf57a7ebc, 0xf57075b8, 0xf5656bb3, 0xf55961ae, 0xc4090a15,
0x910a0a0e, 0xf77778a3, 0xf59495c5, 0xf59b9bc8, 0xf5a0a0ca, 0xf5a4a3cb,
0xf5a6a5cc, 0xf5a6a5cc, 0xf5a5a4cc, 0xf5a1a1ca, 0xf59c9cc8, 0xf59697c6,
0xf58f91c4, 0xf58789c1, 0xf57e81bd, 0xf5757aba, 0xf56b71b6, 0xf56167b2,
0xf7485093, 0x9105060d, 0x49000001, 0xf0484a6a, 0xf58a8cc2, 0xf59091c4,
0xf59495c5, 0xf59898c7, 0xf59a9ac7, 0xf59a9bc8, 0xf5999ac7, 0xf59697c6,
0xf59393c5, 0xf58d8fc3, 0xf58789c1, 0xf57f82be, 0xf5777bbb, 0xf56e74b7,
0xf5656bb3, 0xf55c63b0, 0xf02e3160, 0x49000000, 0x04000000, 0xd30e0e16,
0xf67477ad, 0xf58487c0, 0xf5898bc2, 0xf58c8ec3, 0xf58e90c4, 0xf58f91c4,
0xf58e90c4, 0xf58c8ec3, 0xf5888bc1, 0xf58386bf, 0xf57d81bd, 0xf5777bbb,
0xf57075b8, 0xf5676db4, 0xf55f66b1, 0xf64f56a0, 0xd2090913, 0x04000000,
0x00000000, 0x2d000000, 0xe51d1f30, 0xf5797cbb, 0xf57c80bd, 0xf58083be,
0xf58285bf, 0xf58286bf, 0xf58285bf, 0xf58083be, 0xf57d81bd, 0xf57a7dbb,
0xf57479b9, 0xf56e74b7, 0xf5676db4, 0xf56066b1, 0xf55860ae, 0xe514172c,
0x2d000000, 0x00000000, 0x00000000, 0x00000000, 0x8a06070b, 0xf13c3f65,
0xf57176b8, 0xf57479b9, 0xf5767aba, 0xf5777bba, 0xf5777aba, 0xf5757aba,
0xf57378b9, 0xf56f74b7, 0xf56a70b5, 0xf5646bb3, 0xf55f65b1, 0xf55860ae,
0xf12c315f, 0x8a04050a, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x02000000, 0x8a06060b, 0xe51a1b2e, 0xf66065a6, 0xf56a70b5, 0xf56b71b6,
0xf56b71b6, 0xf5696fb5, 0xf5676db4, 0xf5646ab3, 0xf56067b1, 0xf55b62af,
0xf64e56a0, 0xe514172c, 0x8a04050a, 0x02000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x2d000000, 0xd30a0b14,
0xf0343862, 0xf7505695, 0xf55e65af, 0xf55e65b1, 0xf55c63b0, 0xf55860ae,
0xf7484f92, 0xf02d315f, 0xd2090913, 0x2d000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x04000000, 0x49000001, 0x9006070d, 0xc4090b15, 0xd70f1020,
0xd70f1020, 0xc4090a15, 0x9105060d, 0x49000000, 0x04000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000,

View file

@ -0,0 +1,307 @@
0x6e000000, 0x10000000, 0x01000000, 0x01000000, 0x01000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x90000001, 0x57000001, 0x13000000, 0x04000000, 0x04000000, 0x03000000,
0x01000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x6a010103, 0x4a030306, 0x69000001, 0x09000000, 0x08000000, 0x07000000,
0x04000000, 0x02000000, 0x01000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x62020204, 0x2106060c, 0x4b06060c, 0x70010103, 0x1e000000, 0x0d000000,
0x08000000, 0x05000000, 0x02000000, 0x01000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x64020205, 0x2f080910, 0x2c090a12, 0x6207070e, 0x6b020205, 0x22000000,
0x0d000000, 0x09000000, 0x05000000, 0x02000000, 0x01000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x5d020205, 0x380a0a13, 0x330c0c17, 0x410c0d18, 0x6c090a12, 0x76020205,
0x13000000, 0x0d000000, 0x09000000, 0x04000000, 0x02000000, 0x01000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x55030407, 0x440c0d18, 0x390e0e1b, 0x440f101e, 0x4a10101f, 0x6f0d0d1a,
0x78030307, 0x24000000, 0x0f000000, 0x09000000, 0x05000000, 0x02000000,
0x01000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x4d040408, 0x4d0d0e1a, 0x3f10111f, 0x49111221, 0x4f121323, 0x53131325,
0x7d0d0e1a, 0x72040409, 0x24000000, 0x0f000000, 0x0a000000, 0x05000000,
0x02000000, 0x01000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x42040408, 0x590f0f1c, 0x44121324, 0x4e131425, 0x55141528, 0x59151629,
0x60151629, 0x820f101e, 0x7705050a, 0x16000000, 0x10000000, 0x0a000000,
0x05000000, 0x02000000, 0x01000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x30020205, 0x720f0f1d, 0x4b151528, 0x5516172b, 0x5c17182c, 0x6018182e,
0x64181930, 0x67191a31, 0x8016162a, 0x7706070d, 0x26000001, 0x12000000,
0x0a000000, 0x05000000, 0x02000000, 0x01000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x2a020205, 0x77101020, 0x5117182d, 0x5b18192f, 0x62191a30, 0x671a1b32,
0x6b1b1c34, 0x6e1c1c35, 0x701c1d36, 0x8a15162a, 0x7708080f, 0x2a000001,
0x11000000, 0x0b000000, 0x06000000, 0x03000000, 0x01000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x29020205, 0x77121223, 0x56191a30, 0x611a1b32, 0x681b1c34, 0x6d1c1d36,
0x711d1e38, 0x751e1f3a, 0x781f203b, 0x7c1e203b, 0x9218192f, 0x7b080810,
0x1e000000, 0x12000000, 0x0b000000, 0x06000000, 0x03000000, 0x01000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x27020205, 0x78131325, 0x5e1c1d36, 0x691c1e38, 0x701d1e39, 0x751e1f3a,
0x7a1f203c, 0x7d20213e, 0x80212240, 0x83222342, 0x85222443, 0x9b1d1e39,
0x8d080810, 0x30000001, 0x15000000, 0x0c000000, 0x06000000, 0x03000000,
0x01000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x24020204, 0x78121224, 0x661e1f3a, 0x6f1f203c, 0x771f213d, 0x7c20223e,
0x81212241, 0x84222342, 0x87232544, 0x8a242546, 0x8c252647, 0x8e252648,
0xa41c1d37, 0x8a090a13, 0x32000102, 0x14000000, 0x0d000000, 0x07000000,
0x03000000, 0x01000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x21000001, 0x7a0f0f1e, 0x6e1f203c, 0x75212240, 0x7d222341, 0x83222343,
0x88232545, 0x8b252646, 0x8e252648, 0x9126274a, 0x9427284c, 0x9628294d,
0x99282a4d, 0xab1e1f3a, 0x92090912, 0x23000000, 0x16000000, 0x0d000000,
0x06000000, 0x03000000, 0x01000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x1f000000, 0x7e0e0f1c, 0x7721223f, 0x7c232445, 0x84242546, 0x8b252647,
0x90262749, 0x9327284b, 0x9628294d, 0x99282a4f, 0x9c2a2b50, 0x9f2b2c52,
0xa12b2d54, 0xa22c2d55, 0xb3242546, 0x960a0a14, 0x36010102, 0x1a000000,
0x0e000000, 0x08000000, 0x04000000, 0x01000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x1a000001, 0x7b0f101e, 0x7f222443, 0x82262749, 0x8b26284a, 0x9227294c,
0x97282a4e, 0x9a292a4f, 0x9d2a2b51, 0xa02b2d53, 0xa32c2e55, 0xa52c2e56,
0xa82e2f58, 0xaa2e305a, 0xab2e305b, 0xb8222443, 0x910b0b17, 0x37010102,
0x18000000, 0x0f000000, 0x08000000, 0x03000000, 0x01000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x15000102, 0x780f0f1d, 0x88242545, 0x8828294d, 0x91282a4f, 0x98292a4f,
0x9e2a2c52, 0xa12b2d53, 0xa32c2e55, 0xa62d2e57, 0xaa2e3059, 0xac2f305b,
0xaf30325c, 0xb131325e, 0xb2313360, 0xb431335e, 0xbd252749, 0x960c0c18,
0x28000000, 0x19000000, 0x0f000000, 0x07000000, 0x03000000, 0x01000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x0e000001, 0x740d0e1a, 0x91242647, 0x8f2a2c52, 0x982b2d53, 0xa02c2d55,
0xa62d2e57, 0xa92e2f58, 0xac2f305a, 0xaf30315c, 0xb130325d, 0xb4313360,
0xb6323461, 0xb9333563, 0xba333564, 0xbb343765, 0xbc353767, 0xc62d2f58,
0x9b0b0c17, 0x3a010103, 0x1d000000, 0x10000000, 0x08000000, 0x04000000,
0x01000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x06000000, 0x6c0a0a14, 0x99252748, 0x942c2e55, 0x9e2d2f57, 0xa52d2f59,
0xac2f315b, 0xaf30325c, 0xb230325e, 0xb5323360, 0xb7323462, 0xb9333563,
0xbc353665, 0xbe353766, 0xc0363868, 0xc237396a, 0xc3383a6b, 0xc3383a6d,
0xca2a2b52, 0x93111122, 0x3a020204, 0x1b000000, 0x10000000, 0x08000000,
0x03000000, 0x01000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x02000000, 0x660a0a13, 0x9e27284c, 0x9a2f305a, 0xa32f315c, 0xab30325d,
0xb231335f, 0xb5323361, 0xb8333562, 0xba343564, 0xbd353666, 0xbf353868,
0xc2363969, 0xc438396b, 0xc6383b6d, 0xc8393b6e, 0xc93a3b6f, 0xca3b3c72,
0xcb3a3d71, 0xcb2f315c, 0x99101121, 0x31010102, 0x1b000000, 0x10000000,
0x07000000, 0x03000000, 0x01000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x02000000, 0x62090a13, 0xa2292a50, 0xa031325f, 0xa9323360, 0xb1323461,
0xb8333664, 0xbc353665, 0xbf353767, 0xc1363869, 0xc337396a, 0xc6383a6c,
0xc8393a6e, 0xca393c6f, 0xcc3b3c71, 0xcf3c3e74, 0xd03c3e74, 0xd23d3f76,
0xd23e4078, 0xd23e4179, 0xd9353867, 0xaa101120, 0x44020205, 0x20000000,
0x11000000, 0x09000000, 0x05000000, 0x01000000, 0x01000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x02000000, 0x5f080810, 0xa6292a4f, 0xa5333563, 0xae333564, 0xb7353766,
0xbe363868, 0xc237396a, 0xc438396b, 0xc7383b6e, 0xc9393b6f, 0xcb3a3c70,
0xcd3b3d72, 0xd03c3e74, 0xd23d3f75, 0xd43e4077, 0xd53f4179, 0xd740417b,
0xd940437d, 0xd941447d, 0xd941447e, 0xdb333562, 0xa8131425, 0x47020305,
0x1e000000, 0x12000000, 0x0a000000, 0x04000000, 0x01000000, 0x01000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x02000000, 0x5806070d, 0xa9282a4e, 0xab353767, 0xb3363868, 0xbc37386a,
0xc3383a6c, 0xc7383b6e, 0xc93a3b6f, 0xcc3b3c71, 0xce3b3d72, 0xd03c3e74,
0xd23d3f76, 0xd43e4077, 0xd63f4179, 0xd840427b, 0xda40437d, 0xdc42447f,
0xde434581, 0xdf434582, 0xe0444784, 0xe0444682, 0xe1353767, 0xb1121223,
0x36010102, 0x1f000000, 0x13000000, 0x09000000, 0x04000000, 0x01000000,
0x01000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x02000000, 0x44020305, 0xa8252749, 0xb1383a6c, 0xba383b6e, 0xc2393c6f,
0xc93b3c71, 0xcd3b3d72, 0xd03c3e74, 0xd23d3f76, 0xd43e4077, 0xd63e4179,
0xd840427b, 0xda40437d, 0xdc41447e, 0xde434480, 0xdf434582, 0xe1444683,
0xe3454785, 0xe5464887, 0xe6474989, 0xe7484a8b, 0xe7484b8c, 0xea3d4077,
0xb4131324, 0x4a020205, 0x25000000, 0x14000000, 0x0b000000, 0x05000000,
0x01000000, 0x01000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x01000000, 0x3e020204, 0xab242647, 0xb73a3c70, 0xbf3b3c71, 0xc73c3d73,
0xce3c3f75, 0xd23d4076, 0xd53e4178, 0xd740417b, 0xd940427c, 0xdb41437e,
0xdd424480, 0xde434580, 0xe0434682, 0xe2454684, 0xe4454886, 0xe6474988,
0xe8474a8a, 0xe9484a8b, 0xea494c8c, 0xec4a4c8f, 0xec4a4d90, 0xec4b4d91,
0xeb393b6f, 0xb115162a, 0x4c020205, 0x22000000, 0x15000000, 0x0b000000,
0x04000000, 0x01000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x01000000, 0x37030306, 0xad252648, 0xbc3c3e74, 0xc43d3f76, 0xcb3e3f76,
0xd33f4179, 0xd63f427a, 0xd940437c, 0xdb41437e, 0xde434480, 0xe0434682,
0xe1444683, 0xe3454785, 0xe5464887, 0xe6474988, 0xe8474a8a, 0xea484b8c,
0xec4a4c8e, 0xed4a4d90, 0xee4b4e90, 0xf04c4f92, 0xf14c4f94, 0xf24e5096,
0xf24c4f94, 0xef3b3d73, 0xb7141427, 0x3b010102, 0x23000000, 0x15000000,
0x09000000, 0x04000000, 0x01000000, 0x00000000, 0x00000000, 0x00000000,
0x01000000, 0x2c030307, 0xb31f203e, 0xc23f4178, 0xca40427b, 0xd140437c,
0xd941447e, 0xdc42457f, 0xde434480, 0xe2434581, 0xe43f427b, 0xe640417b,
0xe8424580, 0xe9444683, 0xea454886, 0xeb464989, 0xed484b8b, 0xef494b8e,
0xf04b4d90, 0xf14b4e91, 0xf24c4f94, 0xf44d5095, 0xf54e5197, 0xf650529a,
0xf851549d, 0xf851549d, 0xfb444683, 0xb8151629, 0x4e030305, 0x28000000,
0x15000000, 0x0b000000, 0x05000000, 0x01000000, 0x00000000, 0x00000000,
0x00000000, 0x20030306, 0xb41c1e38, 0xc841437d, 0xcf41447f, 0xd6434480,
0xdd434682, 0xe0444783, 0xe3454885, 0xe4363869, 0xce1d1d37, 0xca1a1c34,
0xd7222443, 0xd7252649, 0xd7282a4e, 0xe32c2d55, 0xe42c2e56, 0xe42e305a,
0xe930325d, 0xeb2f315d, 0xeb30315e, 0xf0323462, 0xf43a3c6f, 0xf53d3f76,
0xf7424480, 0xfb424581, 0xfb444784, 0xf6323460, 0xb40f101e, 0x4e020204,
0x23000000, 0x14000000, 0x0a000000, 0x03000000, 0x01000000, 0x00000000,
0x00000000, 0x0d010102, 0xb117182e, 0xcd434581, 0xd4444683, 0xdb444785,
0xe1464887, 0xe5464988, 0xe7464988, 0xda1d1e3a, 0x8c020205, 0x85010103,
0x8a030307, 0x89030408, 0x89040408, 0x8f05050a, 0x9005050a, 0x9105060b,
0x9405060b, 0x9605050b, 0x9805050b, 0xa3080811, 0xac0d0e1a, 0xad0e0e1b,
0xb1101120, 0xb9111221, 0xb6111223, 0xb0111121, 0xa407080f, 0x65020205,
0x32000000, 0x1f000000, 0x10000000, 0x06000000, 0x02000000, 0x00000000,
0x00000000, 0x04000000, 0xae15162a, 0xd3454786, 0xd9464987, 0xe0474989,
0xe6484a8a, 0xea494c8d, 0xef3b3d74, 0xb107070e, 0x7c000000, 0x79000000,
0x74000000, 0x6f000000, 0x6b000000, 0x69000000, 0x6a000000, 0x6c000000,
0x6e000000, 0x70000000, 0x72000000, 0x73000000, 0x75000000, 0x77000000,
0x79000000, 0x79000000, 0x78000000, 0x71000000, 0x66000000, 0x56000000,
0x3d000000, 0x29000000, 0x18000000, 0x0a000000, 0x04000000, 0x01000000,
0x00000000, 0x04000000, 0xaa15162a, 0xd9474a8a, 0xde484a8b, 0xe4494c8d,
0xea4a4d8f, 0xee494c8e, 0xef28294d, 0x8a020203, 0x7c000000, 0x76000000,
0x6a000000, 0x60000000, 0x58000000, 0x54000000, 0x54000000, 0x55000000,
0x57000000, 0x59000000, 0x5a000000, 0x5c000000, 0x5e000000, 0x60000000,
0x62000000, 0x64000000, 0x65000000, 0x62000000, 0x5c000000, 0x50000000,
0x3d000000, 0x2a000000, 0x1a000000, 0x0b000000, 0x04000000, 0x01000000,
0x00000000, 0x03000000, 0x9c111222, 0xdf484a8b, 0xe34a4d90, 0xe94b4e92,
0xee4c4f93, 0xf341447f, 0xcf16162b, 0x80000000, 0x7a000000, 0x6f000000,
0x5d000000, 0x4d000000, 0x42000000, 0x3b000000, 0x39000000, 0x3a000000,
0x3c000000, 0x3d000000, 0x3e000000, 0x40000000, 0x41000000, 0x43000000,
0x46000000, 0x48000000, 0x49000000, 0x48000000, 0x46000000, 0x3f000000,
0x32000000, 0x24000000, 0x17000000, 0x0a000000, 0x04000000, 0x01000000,
0x00000000, 0x03000000, 0x8a0e0e1c, 0xe7484b8b, 0xea4e5095, 0xee4e5197,
0xf34e5196, 0xf0303260, 0xa106070e, 0x80000000, 0x76000000, 0x65000000,
0x4b000000, 0x36000000, 0x28000000, 0x1f000000, 0x1d000000, 0x1d000000,
0x1e000000, 0x1f000000, 0x1f000000, 0x20000000, 0x21000000, 0x23000000,
0x25000000, 0x26000000, 0x27000000, 0x28000000, 0x27000000, 0x25000000,
0x1e000000, 0x16000000, 0x0e000000, 0x07000000, 0x03000000, 0x01000000,
0x00000000, 0x02000000, 0x6e06070d, 0xed474a8a, 0xee4f5299, 0xf250539a,
0xf6494c8d, 0xd61d1f39, 0x90010103, 0x7f000000, 0x71000000, 0x5b000000,
0x3d000000, 0x28000000, 0x19000000, 0x10000000, 0x0d000000, 0x0d000000,
0x0d000000, 0x0e000000, 0x0e000000, 0x0f000000, 0x0f000000, 0x10000000,
0x11000000, 0x12000000, 0x13000000, 0x14000000, 0x13000000, 0x12000000,
0x0f000000, 0x0c000000, 0x08000000, 0x04000000, 0x02000000, 0x00000000,
0x00000000, 0x02000000, 0x60040408, 0xf2464987, 0xf351539c, 0xf752559e,
0xf53f417a, 0xb60c0c17, 0x85000000, 0x7c000000, 0x6a000000, 0x51000000,
0x32000000, 0x1c000000, 0x0f000000, 0x07000000, 0x05000000, 0x04000000,
0x04000000, 0x04000000, 0x05000000, 0x05000000, 0x05000000, 0x06000000,
0x06000000, 0x07000000, 0x07000000, 0x07000000, 0x07000000, 0x07000000,
0x06000000, 0x05000000, 0x03000000, 0x01000000, 0x01000000, 0x00000000,
0x00000000, 0x02000000, 0x5607070e, 0xf8464787, 0xf95356a2, 0xfc5456a3,
0xe3222342, 0x8f020205, 0x82000000, 0x76000000, 0x60000000, 0x44000000,
0x25000000, 0x13000000, 0x08000000, 0x02000000, 0x01000000, 0x01000000,
0x00000000, 0x00000000, 0x01000000, 0x01000000, 0x01000000, 0x01000000,
0x01000000, 0x01000000, 0x01000000, 0x02000000, 0x02000000, 0x02000000,
0x01000000, 0x01000000, 0x01000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x02000000, 0x4907070e, 0xfd42447f, 0xfe5659a6, 0xff4c4f92,
0xbb0c0c18, 0x7c000000, 0x7f000000, 0x6f000000, 0x56000000, 0x3a000000,
0x1d000000, 0x0d000000, 0x05000000, 0x01000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x01000000, 0x3807070e, 0xff3e4077, 0xff575aa6, 0xfd333564,
0x82030307, 0x7a000000, 0x7a000000, 0x67000000, 0x4b000000, 0x2f000000,
0x16000000, 0x09000000, 0x03000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x01000000, 0x10010103, 0xff333562, 0xff4d5094, 0xc7191a31,
0x66000000, 0x74000000, 0x72000000, 0x59000000, 0x3e000000, 0x24000000,
0x0f000000, 0x06000000, 0x02000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x01000000, 0x05000000, 0xfb30315c, 0xf83b3d72, 0x860b0b16,
0x62000000, 0x6e000000, 0x68000000, 0x4e000000, 0x33000000, 0x1b000000,
0x0a000000, 0x03000000, 0x01000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x01000000, 0x05000000, 0xf5292b51, 0xce252749, 0x5b020205,
0x5c000000, 0x65000000, 0x5c000000, 0x41000000, 0x28000000, 0x14000000,
0x07000000, 0x02000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x01000000, 0x05000000, 0xdc191a32, 0x8a0c0c18, 0x3b000000,
0x52000000, 0x57000000, 0x4d000000, 0x33000000, 0x1d000000, 0x0d000000,
0x04000000, 0x01000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x01000000, 0x04000000, 0xb00d0e1a, 0x4d040408, 0x33000000,
0x48000000, 0x4a000000, 0x3f000000, 0x27000000, 0x15000000, 0x09000000,
0x02000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x03000000, 0x5707070e, 0x20000001, 0x2c000000,
0x3c000000, 0x3c000000, 0x31000000, 0x1d000000, 0x0e000000, 0x06000000,
0x01000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x03000000, 0x09000000, 0x14000000, 0x21000000,
0x2c000000, 0x2b000000, 0x22000000, 0x13000000, 0x09000000, 0x03000000,
0x01000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x02000000, 0x07000000, 0x0f000000, 0x18000000,
0x1f000000, 0x1e000000, 0x17000000, 0x0c000000, 0x05000000, 0x02000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x01000000, 0x05000000, 0x0a000000, 0x0f000000,
0x14000000, 0x13000000, 0x0e000000, 0x07000000, 0x02000000, 0x01000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x01000000, 0x02000000, 0x05000000, 0x08000000,
0x09000000, 0x08000000, 0x06000000, 0x03000000, 0x01000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x01000000, 0x02000000, 0x03000000,
0x04000000, 0x04000000, 0x02000000, 0x01000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x01000000,
0x01000000, 0x01000000, 0x01000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,

View file

@ -0,0 +1,20 @@
#!/usr/bin/env python
#
# Convert an image file to hexadecimal bytes of indexed color data.
#
# -- Micah Dowty <micah@vmware.com>
#
import Image
import sys
im = Image.open(sys.argv[1])
column = 0
for byte in im.getdata():
print "0x%02x, " % byte,
column += 1
if column == 8:
print
column = 0

View file

@ -0,0 +1,20 @@
#!/usr/bin/env python
#
# Convert an image file to hexadecimal bytes of colormap data.
#
# -- Micah Dowty <micah@vmware.com>
#
import Image
import sys
im = Image.open(sys.argv[1])
column = 0
for byte in im.getpalette():
print "0x%02x, " % byte,
column += 1
if column == 8:
print
column = 0

View file

@ -0,0 +1,29 @@
#!/usr/bin/env python
#
# Convert a 1bpp image file to hexadecimal bytes of monochrome
# bitmap data. Bits are packed MSB-first. Each scanline is padded
# to 32 bits.
#
# -- Micah Dowty <micah@vmware.com>
#
import Image
import sys
im = Image.open(sys.argv[1])
sys.stderr.write("width=%d height=%d\n" % im.size)
width, height = im.size
paddedWidth = (width + 31) & ~31
for y in range(height):
for xByte in range(paddedWidth / 8):
byte = 0
for xBit in range(8):
x = xByte * 8 + xBit
if x < width and im.getpixel((x,y)):
byte |= 1 << (7 - xBit)
print "0x%02x, " % byte,
print

View file

@ -0,0 +1,29 @@
#!/usr/bin/env python
#
# Convert an image file to hexadecimal words of pre-multiplied RGBA data.
#
# -- Micah Dowty <micah@vmware.com>
#
import Image
import sys
im = Image.open(sys.argv[1])
sys.stderr.write("width=%d height=%d\n" % im.size)
words = []
def flush():
print " ".join(words)
del words[:]
for r, g, b, a in im.getdata():
r = r * a // 255
g = g * a // 255
b = b * a // 255
words.append("0x%02x%02x%02x%02x," % (a,r,g,b))
if len(words) >= 6:
flush()
flush()

View file

@ -0,0 +1,96 @@
0x00, 0x00, 0x00, 0xf0, 0xf0, 0xf0, 0x7c, 0xf9,
0x01, 0xc8, 0x24, 0x28, 0x25, 0x3b, 0xe5, 0x0e,
0x10, 0x06, 0x10, 0x11, 0x08, 0x10, 0x11, 0x0c,
0x10, 0x12, 0x06, 0x10, 0x12, 0x09, 0x12, 0x14,
0x11, 0x15, 0x16, 0x14, 0x18, 0x1a, 0x11, 0x19,
0x1a, 0x18, 0x1b, 0x1c, 0x17, 0x1c, 0x1e, 0x1b,
0x1d, 0x1f, 0x0f, 0x1d, 0x1f, 0x1b, 0x23, 0x24,
0x1c, 0x26, 0x27, 0x19, 0x26, 0x28, 0x25, 0x29,
0x2b, 0x28, 0x2c, 0x2c, 0x19, 0x2a, 0x2c, 0x1f,
0x2d, 0x2d, 0x17, 0x30, 0x30, 0x2a, 0x33, 0x32,
0x17, 0x30, 0x32, 0x24, 0x32, 0x31, 0x2a, 0x30,
0x32, 0x2f, 0x32, 0x34, 0x31, 0x36, 0x37, 0x25,
0x38, 0x38, 0x21, 0x36, 0x38, 0x35, 0x3a, 0x3a,
0x17, 0x39, 0x3c, 0x30, 0x40, 0x3e, 0x32, 0x3f,
0x3e, 0x37, 0x40, 0x41, 0x19, 0x3e, 0x40, 0x2e,
0x44, 0x43, 0x2a, 0x44, 0x44, 0x3d, 0x44, 0x46,
0x43, 0x48, 0x48, 0x30, 0x48, 0x4a, 0x2a, 0x48,
0x49, 0x36, 0x4b, 0x4b, 0x43, 0x4c, 0x4d, 0x3b,
0x4c, 0x4c, 0x48, 0x4d, 0x50, 0x42, 0x52, 0x54,
0x30, 0x54, 0x53, 0x3b, 0x53, 0x54, 0x41, 0x55,
0x54, 0x3c, 0x57, 0x57, 0x2b, 0x59, 0x59, 0x40,
0x5d, 0x5a, 0x3d, 0x5c, 0x5f, 0x22, 0x59, 0x5b,
0x58, 0x5c, 0x5b, 0x54, 0x5c, 0x5e, 0x3a, 0x61,
0x5f, 0x29, 0x62, 0x5f, 0x41, 0x62, 0x62, 0x36,
0x62, 0x61, 0x49, 0x61, 0x63, 0x4f, 0x63, 0x65,
0x40, 0x67, 0x68, 0x28, 0x67, 0x68, 0x3d, 0x66,
0x67, 0x65, 0x68, 0x6a, 0x45, 0x6a, 0x69, 0x50,
0x6c, 0x6c, 0x41, 0x6a, 0x6a, 0x5c, 0x69, 0x6d,
0x4d, 0x6f, 0x6d, 0x3d, 0x70, 0x6d, 0x4f, 0x71,
0x72, 0x33, 0x71, 0x72, 0x3b, 0x71, 0x72, 0x4d,
0x73, 0x73, 0x48, 0x75, 0x73, 0x43, 0x76, 0x79,
0x41, 0x77, 0x76, 0x5c, 0x7a, 0x78, 0x48, 0x79,
0x78, 0x4d, 0x7c, 0x7c, 0x38, 0x7f, 0x7c, 0x45,
0x7d, 0x7c, 0x5a, 0x7d, 0x7f, 0x40, 0x80, 0x82,
0x28, 0x7b, 0x7c, 0x7a, 0x82, 0x80, 0x4f, 0x81,
0x81, 0x55, 0x80, 0x80, 0x72, 0x81, 0x84, 0x4b,
0x86, 0x87, 0x38, 0x86, 0x87, 0x48, 0x85, 0x84,
0x6a, 0x89, 0x87, 0x55, 0x88, 0x87, 0x5b, 0x89,
0x8a, 0x4b, 0x8d, 0x8d, 0x47, 0x90, 0x91, 0x3e,
0x91, 0x92, 0x46, 0x92, 0x92, 0x4c, 0x93, 0x94,
0x54, 0x93, 0x93, 0x60, 0x92, 0x94, 0x5b, 0x97,
0x98, 0x3e, 0x98, 0x9a, 0x46, 0x9b, 0x99, 0x4d,
0x98, 0x9c, 0x4e, 0x99, 0x9b, 0x61, 0x9b, 0x9c,
0x5c, 0x9b, 0x9b, 0x71, 0x9f, 0x9e, 0x58, 0xa3,
0xa3, 0x41, 0xa1, 0xa4, 0x50, 0xa3, 0xa4, 0x63,
0xa5, 0xa6, 0x4b, 0xa2, 0xa6, 0x71, 0xaa, 0xad,
0x3b, 0xa8, 0xa9, 0x70, 0xae, 0xac, 0x43, 0xa8,
0xa7, 0x8c, 0xae, 0xac, 0x65, 0xaf, 0xb1, 0x37,
0xac, 0xac, 0x80, 0xae, 0xae, 0x6d, 0xae, 0xb2,
0x47, 0xac, 0xb0, 0x61, 0xb2, 0xb1, 0x4e, 0xaf,
0xb1, 0x5c, 0xb5, 0xb6, 0x5a, 0xae, 0xb0, 0xad,
0xb5, 0xb9, 0x46, 0xb8, 0xb7, 0x54, 0xba, 0xbb,
0x39, 0xb9, 0xba, 0x4f, 0xb4, 0xb9, 0x70, 0xb8,
0xba, 0x64, 0xb8, 0xba, 0x6b, 0xc0, 0xbd, 0x54,
0xbc, 0xc0, 0x54, 0xc0, 0xc1, 0x47, 0xbe, 0xbf,
0x62, 0xc0, 0xc2, 0x6b, 0xbe, 0xbf, 0x96, 0xc5,
0xc4, 0x60, 0xc1, 0xc4, 0x76, 0xc3, 0xc3, 0x80,
0xc7, 0xc9, 0x56, 0xc7, 0xca, 0x5e, 0xcc, 0xcc,
0x41, 0xcc, 0xcc, 0x4d, 0xc9, 0xca, 0x74, 0xcd,
0xd1, 0x3d, 0xcf, 0xcf, 0x4d, 0xcf, 0xd2, 0x34,
0xcb, 0xcd, 0x7e, 0xd0, 0xd1, 0x57, 0xcf, 0xd1,
0x5d, 0xd3, 0xd7, 0x43, 0xd1, 0xd4, 0x67, 0xd2,
0xd7, 0x4b, 0xd5, 0xd8, 0x3b, 0xd6, 0xd7, 0x55,
0xd9, 0xd7, 0x4d, 0xd7, 0xd5, 0x70, 0xd6, 0xd6,
0x78, 0xd7, 0xd8, 0x65, 0xd5, 0xd6, 0x7f, 0xd9,
0xdc, 0x3f, 0xd8, 0xdc, 0x48, 0xd6, 0xd9, 0x6c,
0xd4, 0xd9, 0x72, 0xd8, 0xd5, 0x9f, 0xda, 0xdb,
0x60, 0xd8, 0xd7, 0x94, 0xdc, 0xdc, 0x61, 0xda,
0xdf, 0x5b, 0xd8, 0xdb, 0x89, 0xdd, 0xe0, 0x4c,
0xe0, 0xe1, 0x3b, 0xe1, 0xdf, 0x5d, 0xdd, 0xe1,
0x56, 0xe0, 0xe2, 0x46, 0xdc, 0xdd, 0x85, 0xd8,
0xdc, 0xa4, 0xde, 0xe0, 0x6b, 0xdf, 0xde, 0x7f,
0xdd, 0xe0, 0x72, 0xe3, 0xe1, 0x57, 0xe4, 0xe5,
0x3f, 0xe2, 0xe2, 0x66, 0xdf, 0xde, 0x97, 0xe4,
0xe6, 0x4a, 0xe4, 0xe7, 0x53, 0xe4, 0xe5, 0x71,
0xe7, 0xe6, 0x63, 0xe6, 0xe6, 0x6a, 0xea, 0xea,
0x3b, 0xe3, 0xe8, 0x64, 0xe5, 0xe9, 0x5d, 0xe2,
0xe5, 0x92, 0xeb, 0xeb, 0x47, 0xe5, 0xe8, 0x7a,
0xe4, 0xe8, 0x81, 0xeb, 0xec, 0x50, 0xe9, 0xe7,
0x88, 0xe7, 0xe7, 0x8f, 0xe9, 0xec, 0x58, 0xea,
0xe8, 0x82, 0xed, 0xeb, 0x68, 0xeb, 0xef, 0x63,
0xed, 0xed, 0x71, 0xf0, 0xf0, 0x4b, 0xee, 0xf0,
0x54, 0xf2, 0xf1, 0x43, 0xee, 0xee, 0x79, 0xee,
0xf1, 0x5d, 0xeb, 0xf1, 0x6c, 0xf5, 0xf3, 0x3b,
0xec, 0xef, 0x80, 0xef, 0xf5, 0x46, 0xf1, 0xf6,
0x3c, 0xf5, 0xf4, 0x47, 0xed, 0xf0, 0x88, 0xf0,
0xef, 0x8f, 0xee, 0xef, 0x97, 0xf5, 0xf5, 0x51,
0xf3, 0xf2, 0x76, 0xf1, 0xf5, 0x68, 0xf4, 0xf6,
0x5a, 0xf5, 0xf7, 0x63, 0xf7, 0xf5, 0x71, 0xf4,
0xf7, 0x6b, 0xf2, 0xf7, 0x71, 0xf7, 0xf6, 0x7a,
0xf5, 0xf6, 0x80, 0xf3, 0xf7, 0x8f, 0xf5, 0xf4,
0xaf, 0xf6, 0xf8, 0x89, 0xf9, 0xf7, 0x97, 0xf9,
0xf9, 0x9f, 0xff, 0xff, 0xff, 0xf7, 0xf7, 0xf7,
0xf8, 0xf8, 0xf8, 0xf9, 0xf9, 0xf9, 0xfa, 0xfa,
0xfa, 0xfb, 0xfb, 0xfb, 0xfc, 0xfc, 0xfc, 0xfd,
0xfd, 0xfd, 0xfe, 0xfe, 0xfe, 0xff, 0xff, 0xff,

View file

@ -0,0 +1,300 @@
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41,
0x31, 0x41, 0x2e, 0x29, 0x21, 0x0d, 0x0f, 0x0f,
0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x1d, 0x2a, 0x47, 0x4c, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x2c, 0x38, 0x68,
0x9b, 0xc6, 0xea, 0xea, 0xee, 0xc7, 0x83, 0x55,
0x2d, 0x15, 0x0f, 0x0f, 0x0a, 0x00, 0x00, 0x00,
0x00, 0x00, 0x2e, 0x81, 0x71, 0x4f, 0x07, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x3c, 0x67, 0xce, 0xe1,
0xe1, 0xe3, 0xe1, 0xe3, 0xe7, 0xe7, 0xe7, 0xea,
0xed, 0xd8, 0x8d, 0x5d, 0x25, 0x15, 0x0f, 0x00,
0x00, 0x34, 0x5d, 0xf3, 0xf3, 0x64, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x44, 0xad, 0xe2, 0xe2, 0xe2,
0xe2, 0xe2, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe3,
0xe7, 0xe7, 0xea, 0xe9, 0xd8, 0x97, 0x49, 0x14,
0x1c, 0x2b, 0x8e, 0xf3, 0x9c, 0x54, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x79, 0x93, 0x4c, 0x00, 0x00,
0x00, 0x00, 0x4b, 0xae, 0xe1, 0xe2, 0xe2, 0xdf,
0xdf, 0xe3, 0xe7, 0xe7, 0xe3, 0xe1, 0xe2, 0xe2,
0xe1, 0xe3, 0xd9, 0xce, 0xd1, 0xc6, 0xcb, 0xb3,
0x62, 0x17, 0x54, 0xd0, 0x7e, 0x06, 0x00, 0x38,
0x83, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x6b, 0x7e, 0xee, 0x76, 0x33, 0x05,
0x22, 0x09, 0x98, 0xe7, 0xe1, 0xe3, 0xe1, 0xe1,
0xe7, 0xea, 0xed, 0xeb, 0xea, 0xe3, 0xe1, 0xe1,
0xe1, 0xe2, 0xdb, 0xdb, 0xce, 0xd1, 0xc5, 0xb7,
0xc1, 0xbe, 0x65, 0x20, 0x54, 0x00, 0x42, 0xaf,
0xe8, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x50, 0x38, 0x85, 0xed, 0xc3, 0x95,
0x67, 0x08, 0xea, 0xe7, 0xe7, 0xeb, 0xed, 0xed,
0xed, 0xed, 0xee, 0xef, 0xed, 0xeb, 0xea, 0xea,
0xe7, 0xe1, 0xe1, 0xe1, 0xe3, 0xdb, 0xce, 0xc5,
0xad, 0xa6, 0xb9, 0x89, 0x00, 0x06, 0x92, 0xd8,
0xbe, 0x5f, 0x3b, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x05, 0x48, 0x85, 0xd6,
0x1a, 0x9d, 0xe7, 0xe7, 0xeb, 0xf3, 0xf1, 0xf0,
0xef, 0xef, 0xf0, 0xf3, 0xed, 0xe7, 0xe7, 0xea,
0xea, 0xe7, 0xe7, 0xe1, 0xe2, 0xe1, 0xdb, 0xce,
0xad, 0x9f, 0x9f, 0x9a, 0x9a, 0x43, 0x59, 0x86,
0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x6e, 0x86, 0x59,
0x5a, 0xe1, 0xea, 0xeb, 0xef, 0xf4, 0xf4, 0xef,
0xed, 0xee, 0xee, 0xf0, 0xee, 0xe7, 0xe7, 0xe3,
0xe7, 0xe7, 0xe7, 0xea, 0xe7, 0xe1, 0xe3, 0xd9,
0xc2, 0xad, 0x9f, 0x9f, 0xae, 0xc6, 0x36, 0x00,
0x00, 0x00, 0x07, 0x1e, 0x00, 0x00, 0x00, 0x00,
0x00, 0x4f, 0x36, 0x00, 0x00, 0x22, 0x7c, 0x18,
0xd1, 0xea, 0xed, 0xef, 0xf1, 0xf5, 0xf0, 0xed,
0xea, 0xeb, 0xeb, 0xeb, 0xea, 0xe7, 0xe7, 0xe7,
0xe7, 0xea, 0xeb, 0xeb, 0xeb, 0xeb, 0xea, 0xd9,
0xce, 0xc2, 0xa6, 0x9f, 0x9d, 0xb7, 0xc6, 0x00,
0x0c, 0x64, 0x7b, 0x41, 0x00, 0x00, 0x00, 0x00,
0x00, 0x5c, 0x89, 0x76, 0x78, 0x84, 0x8f, 0x26,
0xeb, 0xee, 0xed, 0xef, 0xf1, 0xf3, 0xed, 0xe7,
0xe7, 0xea, 0xeb, 0xeb, 0xea, 0xe7, 0xe7, 0xe7,
0xea, 0xeb, 0xeb, 0xa2, 0xeb, 0x8f, 0xee, 0xeb,
0xdb, 0xca, 0xb8, 0x9f, 0x9a, 0xa8, 0xd1, 0x82,
0x16, 0xe5, 0xd3, 0x47, 0x00, 0x00, 0x00, 0x00,
0x00, 0x5c, 0xeb, 0xeb, 0xeb, 0xeb, 0x6e, 0x60,
0xeb, 0xed, 0xed, 0xec, 0xf0, 0xee, 0xea, 0xce,
0xe7, 0xe7, 0xea, 0xea, 0xea, 0xe7, 0xe7, 0xe7,
0xea, 0xeb, 0xeb, 0x99, 0x84, 0x76, 0xed, 0xed,
0xe7, 0xe1, 0xce, 0xad, 0x9a, 0x9a, 0xb7, 0xdd,
0x00, 0xa9, 0xb0, 0x71, 0x05, 0x05, 0x00, 0x00,
0x00, 0x40, 0x54, 0x44, 0x46, 0x48, 0x10, 0x88,
0xea, 0xeb, 0xeb, 0xed, 0xed, 0xeb, 0x88, 0x4e,
0x82, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7,
0xea, 0xeb, 0xeb, 0xd7, 0x37, 0x8f, 0xeb, 0xec,
0xea, 0xe3, 0xdb, 0xc5, 0xa3, 0x9a, 0x9d, 0xc5,
0x39, 0x67, 0x78, 0x4b, 0x00, 0x00, 0x00, 0x00,
0x00, 0x2f, 0x69, 0x6e, 0x70, 0x6f, 0x00, 0x98,
0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xd4, 0x38, 0x7c,
0x3c, 0x82, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7,
0xea, 0xeb, 0xeb, 0x90, 0x37, 0x61, 0xc8, 0xc9,
0xeb, 0xe7, 0xe1, 0xda, 0xc2, 0x9d, 0x9d, 0xad,
0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x48, 0x6b, 0x71, 0x00, 0xdc,
0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0x84, 0x2d, 0xa3,
0x91, 0x24, 0x88, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7,
0xea, 0xeb, 0xeb, 0x61, 0x69, 0x78, 0x66, 0xc3,
0xdd, 0xe3, 0xe3, 0xe7, 0xce, 0xae, 0x9d, 0xa3,
0x7f, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x1b, 0x3e, 0x46, 0x6a, 0xa4, 0x05, 0xeb,
0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0x50, 0x2d, 0xe3,
0xe3, 0x75, 0x24, 0xb7, 0xe3, 0xe7, 0xe7, 0xe7,
0xea, 0xeb, 0xcb, 0x48, 0x8f, 0xdd, 0x66, 0x69,
0xd7, 0xe3, 0xdb, 0xd9, 0xd1, 0xbb, 0xa5, 0xa3,
0xa5, 0x06, 0xdc, 0xf0, 0x9c, 0x28, 0x00, 0x00,
0x00, 0x72, 0xbe, 0xa4, 0x99, 0xd6, 0x05, 0xe7,
0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0x42, 0x44, 0xe3,
0xe3, 0xdb, 0x59, 0x52, 0xe3, 0xe7, 0xe7, 0xe7,
0xea, 0xeb, 0x90, 0x57, 0xd7, 0xeb, 0xb9, 0x6f,
0x6f, 0xce, 0xd9, 0xda, 0xd4, 0xb7, 0xa8, 0xae,
0xc5, 0x00, 0xe0, 0xe0, 0x7e, 0x00, 0x00, 0x00,
0x00, 0x6c, 0xec, 0xed, 0xed, 0xee, 0x05, 0xea,
0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0x35, 0x6d, 0xe3,
0xe3, 0xe1, 0xce, 0x4b, 0x91, 0xe7, 0xe7, 0xea,
0xea, 0xeb, 0x8f, 0x86, 0xeb, 0xeb, 0xeb, 0xeb,
0xb9, 0xd1, 0xd9, 0xd1, 0xc8, 0xae, 0xa5, 0xae,
0xc5, 0x00, 0x8e, 0xb0, 0x63, 0x00, 0x00, 0x00,
0x00, 0x55, 0x8d, 0x65, 0x48, 0x3c, 0x00, 0x98,
0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0x44, 0xce, 0xe3,
0xe3, 0xe3, 0xe3, 0xce, 0xce, 0xe7, 0xea, 0xea,
0xea, 0xeb, 0xc8, 0xcc, 0xeb, 0xeb, 0xeb, 0xeb,
0xea, 0xe7, 0xe7, 0xd4, 0xc7, 0xa8, 0x9e, 0xa3,
0xb7, 0x08, 0x09, 0x1f, 0x07, 0x00, 0x00, 0x00,
0x00, 0x12, 0x0e, 0x00, 0x00, 0x00, 0x00, 0xbe,
0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xd4, 0xe7, 0xe3,
0xe3, 0xe3, 0xe7, 0xe3, 0xe3, 0xea, 0xea, 0xea,
0xea, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb,
0xea, 0xea, 0xea, 0xd7, 0xd0, 0xa1, 0x9e, 0xa7,
0xba, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x3b, 0x00, 0xeb,
0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xea, 0xe7, 0xe7,
0xe3, 0xe3, 0xe7, 0xe7, 0xe3, 0xea, 0xea, 0xea,
0xea, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb,
0xea, 0xea, 0xeb, 0xde, 0xd3, 0xab, 0xa1, 0xb2,
0xcf, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x05, 0x00, 0x00, 0x07, 0x53, 0x95, 0x10, 0xbb,
0xe3, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xe7, 0xe7,
0xe3, 0xe3, 0xe7, 0xe7, 0xe3, 0xea, 0xea, 0xea,
0xea, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb,
0xeb, 0xeb, 0xeb, 0xec, 0xd3, 0xaf, 0xa2, 0xb4,
0xd5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x05, 0x5e, 0x6b, 0x86, 0xc8, 0xeb, 0x4d, 0x7f,
0xe1, 0xe7, 0xeb, 0xeb, 0xeb, 0xeb, 0xe7, 0xe7,
0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xea, 0xea, 0xea,
0xc1, 0x84, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb,
0xeb, 0xeb, 0xeb, 0xe8, 0xd3, 0xa9, 0xa4, 0xc0,
0xe6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x12, 0x8e, 0xee, 0xed, 0xed, 0xe9, 0x75, 0x5a,
0xe1, 0xea, 0xed, 0xed, 0xed, 0xeb, 0xe7, 0xe7,
0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xea, 0xea, 0xea,
0x76, 0x69, 0xed, 0xed, 0xeb, 0xeb, 0xeb, 0xed,
0xeb, 0xeb, 0xeb, 0xe8, 0xd3, 0xac, 0xaa, 0xd0,
0xb1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x3e, 0xc9, 0xe9, 0xd7, 0xd7, 0x98, 0x08,
0xe3, 0xeb, 0xed, 0xed, 0xed, 0xed, 0xea, 0xea,
0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xea, 0xea, 0xea,
0x4b, 0x57, 0xed, 0xed, 0xeb, 0xeb, 0xeb, 0xed,
0xeb, 0xeb, 0xed, 0xdc, 0xcd, 0xaa, 0xa4, 0xd0,
0x7d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x42, 0x65, 0x57, 0x46, 0x3f, 0x00,
0xba, 0xed, 0xed, 0xeb, 0xeb, 0xed, 0xeb, 0xea,
0xe7, 0xea, 0xe7, 0xe7, 0x9b, 0x59, 0xda, 0xd4,
0x25, 0x70, 0xed, 0xed, 0xed, 0xeb, 0xeb, 0xed,
0xed, 0xed, 0xeb, 0xd7, 0xbe, 0x98, 0x52, 0x44,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00,
0x59, 0xed, 0xe7, 0xe3, 0xe7, 0xea, 0xeb, 0xeb,
0xea, 0xea, 0xe7, 0xe7, 0xe7, 0x48, 0x59, 0x84,
0x1d, 0xcc, 0xed, 0xed, 0xed, 0xed, 0xe9, 0xee,
0xee, 0xdd, 0xda, 0xd4, 0xae, 0x9d, 0x7a, 0x1b,
0x00, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xa1, 0xe3, 0xe3, 0xe7, 0xe7, 0xeb, 0xee,
0xeb, 0xeb, 0xea, 0xe7, 0xe7, 0xcc, 0x2d, 0x2d,
0x66, 0xeb, 0xed, 0xed, 0xe9, 0xd7, 0xcc, 0xe8,
0xe8, 0xd4, 0xd1, 0xc6, 0xae, 0xa6, 0xa6, 0x4d,
0x2f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x10, 0xd9, 0xbb, 0xb7, 0xd9, 0xed, 0xef,
0xec, 0xed, 0xeb, 0xea, 0xea, 0xea, 0x8b, 0x27,
0xea, 0xeb, 0xed, 0xee, 0xde, 0xc8, 0xb9, 0xd8,
0xdc, 0xcc, 0xc6, 0xba, 0xa5, 0xad, 0xca, 0x9d,
0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x3d, 0x3f, 0x91, 0xc5, 0xd8, 0xdc,
0xf0, 0xef, 0xee, 0xeb, 0xea, 0xeb, 0xea, 0xa1,
0xeb, 0xed, 0xee, 0xec, 0xd6, 0xc3, 0xc3, 0xdc,
0xe0, 0xc7, 0xc1, 0xa7, 0x4e, 0x4d, 0x9a, 0xca,
0xad, 0x2c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x3c, 0x66, 0xd9, 0xa5, 0x99, 0xc0,
0xc9, 0xdc, 0xf0, 0xec, 0xeb, 0xeb, 0xeb, 0xeb,
0xeb, 0xed, 0xee, 0xd8, 0xc3, 0xbe, 0xc3, 0xcf,
0xcf, 0xd0, 0xcf, 0xcf, 0x10, 0x00, 0x52, 0xc5,
0xe1, 0xa6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x13, 0xc6, 0xc5, 0x51, 0xa4, 0xab,
0xab, 0xb2, 0xc7, 0xe0, 0xe8, 0xe9, 0xeb, 0xeb,
0xeb, 0xee, 0xe8, 0xc7, 0xc0, 0xc0, 0xcf, 0xd0,
0xd0, 0xd0, 0xac, 0x13, 0x00, 0x00, 0x0c, 0x88,
0xdb, 0xdb, 0x56, 0x33, 0x41, 0x30, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x33, 0x76, 0xe9, 0x52, 0x3e, 0xc0, 0xc7,
0xaf, 0xa4, 0xab, 0xc0, 0xd5, 0xdc, 0xde, 0xed,
0xee, 0xe8, 0xdc, 0xd0, 0xbf, 0xd2, 0xd5, 0xe4,
0xe4, 0x77, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13,
0x88, 0xd9, 0xba, 0x54, 0xd5, 0x80, 0x05, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x51, 0x99, 0xee, 0x8d, 0x00, 0x00, 0x00, 0x86,
0xbe, 0xa4, 0xa4, 0xb0, 0xbf, 0xd0, 0xdc, 0xe8,
0xef, 0xf0, 0xe4, 0xd2, 0xd2, 0xe6, 0xe6, 0xbc,
0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x51, 0xa1, 0xdd, 0xa1, 0xbe, 0xe0, 0x5e, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x59,
0x84, 0xeb, 0xd6, 0x33, 0x1e, 0x00, 0x00, 0x00,
0x4e, 0x92, 0xaf, 0xa9, 0xaa, 0xd2, 0xe4, 0xf3,
0xf3, 0xe4, 0xe5, 0xd2, 0xd3, 0x81, 0x38, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1b,
0x77, 0x89, 0xda, 0xd7, 0xd6, 0xd8, 0x73, 0x00,
0x00, 0x00, 0x00, 0x00, 0x4a, 0x7b, 0x5c, 0x35,
0x6e, 0xe7, 0x59, 0x2f, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x2c, 0x7e, 0xcd, 0xe5, 0xf1, 0xf1,
0xf1, 0xd2, 0x96, 0x6c, 0x0c, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58,
0xf4, 0x8e, 0xba, 0xcb, 0xd6, 0xc9, 0x81, 0x00,
0x00, 0x00, 0x00, 0x00, 0x96, 0xf3, 0xd8, 0x75,
0xdb, 0x9a, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x0c, 0x55, 0x71, 0x55,
0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa0,
0xf3, 0xe4, 0xa7, 0xab, 0xc3, 0xc7, 0xa0, 0x00,
0x00, 0x00, 0x00, 0x00, 0xaa, 0xf3, 0xd6, 0xc5,
0xe2, 0x8a, 0x56, 0x06, 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, 0x2f, 0xf1,
0xf3, 0xe0, 0xa1, 0x95, 0xb0, 0xd0, 0xbc, 0x00,
0x00, 0x00, 0x00, 0x00, 0xf0, 0xf0, 0xe9, 0xe7,
0xe2, 0xbb, 0xb7, 0x33, 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, 0x5d, 0xf3,
0xf3, 0xe0, 0x78, 0x76, 0x9c, 0xbf, 0xb6, 0x00,
0x00, 0x00, 0x00, 0x38, 0xf0, 0xe8, 0xcb, 0xcc,
0xdb, 0xe3, 0xea, 0x65, 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, 0x5d, 0xf3,
0xf3, 0x72, 0x5f, 0x6f, 0x93, 0xbf, 0xb6, 0x00,
0x00, 0x00, 0x0c, 0x50, 0xf0, 0xdc, 0xb2, 0xaf,
0xbb, 0xd9, 0xeb, 0xa2, 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, 0x5d, 0xf3,
0xac, 0x37, 0x7e, 0x4b, 0x8e, 0xbc, 0xa0, 0x05,
0x00, 0x00, 0x0c, 0x4f, 0xf0, 0xdc, 0xbe, 0x9c,
0xa5, 0xd4, 0xed, 0xb2, 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, 0x4a, 0xf1,
0x4a, 0x72, 0x81, 0x32, 0x8c, 0xbc, 0x97, 0x05,
0x00, 0x00, 0x07, 0x71, 0xcf, 0xef, 0x95, 0x81,
0x98, 0xb5, 0xe9, 0xab, 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, 0x1b, 0x7b,
0x0e, 0xb3, 0x64, 0x3f, 0x8e, 0xbc, 0x73, 0x00,
0x00, 0x00, 0x00, 0x6c, 0x7e, 0xf0, 0x93, 0x40,
0x95, 0xa1, 0xd8, 0x92, 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, 0x05, 0x00,
0x30, 0x2f, 0x23, 0x5c, 0x96, 0x79, 0x00, 0x00,
0x00, 0x00, 0x00, 0x4c, 0x4c, 0xe5, 0xb6, 0x00,
0x61, 0x95, 0xbe, 0x74, 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, 0x3a,
0x00, 0x00, 0x49, 0x80, 0x94, 0x0e, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x58, 0x7b, 0xc4, 0x19,
0x23, 0x6a, 0xaa, 0x5d, 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, 0x3a, 0x5b, 0x87, 0x45, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x07, 0x80, 0xf2, 0x0e,
0x00, 0x00, 0xa0, 0x2f, 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, 0x11, 0x5b, 0x3a, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0xbd, 0x00,
0x00, 0x00, 0x0c, 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, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x00,
0x00, 0x00, 0x00, 0x05, 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, 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, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

View file

@ -0,0 +1,401 @@
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x05050504, 0x3e393935, 0xab626252, 0xd44b4b3e, 0xff5f5f4c,
0xff4c4c43, 0xff43433b, 0xff373734, 0xc01a1a1a, 0x921e1e1e, 0x5e1d1d1d,
0x24141414, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x5f323232, 0xb343433f,
0xbf68684e, 0xb26e6e50, 0x2f222219, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x1c18180b, 0x9d545430, 0xfd59593b, 0xff8e8f41, 0xffcbcc4f, 0xffe6e75a,
0xfff2f45a, 0xfff3f55e, 0xfff3f46f, 0xffe4e574, 0xffaeaf60, 0xff777850,
0xfe4a4a38, 0xe12a2a29, 0xa11e1e1e, 0x711f1f1f, 0x22111111, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xde50504a, 0xffb0b16f,
0xff9a9b64, 0xff757551, 0xfe3d3d38, 0x0a080807, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x2e14140c,
0xec5b5b3b, 0xff92923e, 0xffeaec45, 0xfff3f549, 0xfff3f548, 0xfff3f54c,
0xfff3f54a, 0xfff3f54b, 0xfff4f550, 0xfff4f655, 0xfff4f653, 0xfff4f65b,
0xfff5f669, 0xffebed72, 0xffb7b864, 0xff818254, 0xfd3f3f35, 0xcf2b2b2b,
0x631e1e1e, 0x0e0a0a0a, 0x00000000, 0x6f54543f, 0xff808056, 0xfff7f889,
0xfff5f68b, 0xf1868759, 0x361b1b13, 0x0e0d0d0a, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x2a25251e, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x4e33331b, 0xf065653b,
0xffdcdd45, 0xfff3f542, 0xfff3f541, 0xfff3f542, 0xfff3f541, 0xfff3f544,
0xfff3f545, 0xfff3f545, 0xfff3f546, 0xfff3f547, 0xfff3f549, 0xfff3f54c,
0xfff4f653, 0xfff4f552, 0xfff3f459, 0xfff1f366, 0xffeeef77, 0xffc6c782,
0xff69695b, 0xe9292929, 0x922f2f2a, 0xa2474732, 0xffb8b86d, 0xfff7f888,
0xffc9c973, 0xed787849, 0x00000000, 0x2c1b1b10, 0xcf33332a, 0x3910100c,
0x01000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x2a28291b, 0xe5a5a56f, 0xfdc4c571, 0xe66a6a4a,
0x5b383820, 0x0a090906, 0x01000000, 0x2a1c1c0f, 0xef707040, 0xffddde4b,
0xfff3f546, 0xfff3f542, 0xfff3f543, 0xfff3f441, 0xfff3f443, 0xfff3f54c,
0xfff3f54f, 0xfff3f550, 0xfff3f54d, 0xfff3f547, 0xfff3f543, 0xfff3f542,
0xfff3f547, 0xfff3f44c, 0xfff0f24d, 0xffeced4d, 0xffe9eb54, 0xffe8e958,
0xffe7e967, 0xffd7d896, 0xff84846a, 0xff2d2d1f, 0xff777746, 0xffe9ea82,
0xffa8a863, 0x883f3f24, 0x2e19190f, 0xeb5d5d41, 0xffafb061, 0xea51513d,
0x0d070704, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0xbc959562, 0xffaaaa61, 0xfff4f572, 0xffa5a556,
0xfd54543d, 0xc23e3e2d, 0x6e4f4f22, 0xca3c3c25, 0xffc2c351, 0xfff4f550,
0xfff3f549, 0xfff3f54b, 0xfff3f549, 0xfff3f548, 0xfff3f54f, 0xfff3f55b,
0xfff4f66a, 0xfff4f668, 0xfff4f558, 0xfff3f54d, 0xfff3f547, 0xfff3f545,
0xfff3f545, 0xfff3f544, 0xfff0f246, 0xffeef049, 0xffecee4a, 0xffeaeb4e,
0xffe6e74f, 0xffe2e34f, 0xffe1e25d, 0xffdedf70, 0xff89894e, 0xff3a3a24,
0xff7a7a47, 0x301d1d0d, 0xe5666641, 0xffd5d66d, 0xfff1f378, 0xff9b9b57,
0x992f2f27, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x03020202, 0xb473734b, 0xe85a5a3e, 0xffb0b05a, 0xfff4f56c,
0xffe0e167, 0xffc1c25e, 0xff909041, 0xff40401b, 0xfff2f457, 0xfff4f553,
0xfff3f552, 0xfff4f560, 0xfff4f66b, 0xfff4f56e, 0xfff4f569, 0xfff4f66b,
0xfff5f778, 0xfff6f77f, 0xfff5f76e, 0xfff5f662, 0xfff4f660, 0xfff4f65d,
0xfff4f654, 0xfff3f54a, 0xfff2f445, 0xfff2f447, 0xfff1f349, 0xffeff14a,
0xffeaec4c, 0xffe2e44a, 0xffd9db44, 0xffd6d73f, 0xffdedf5f, 0xffb7b853,
0xff232316, 0xe3404026, 0xffc1c165, 0xffeaec74, 0xffe0e170, 0xf383834f,
0xf05c5c54, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x03020202, 0x100d0d08, 0x170f0f08, 0xa23e3e2b, 0xff6e6e46,
0xffabac58, 0xffebec69, 0xff323219, 0xffd2d345, 0xfff4f652, 0xfff4f656,
0xfff4f561, 0xfff6f787, 0xfff6f792, 0xfff6f786, 0xfff5f678, 0xfff5f77b,
0xfff6f887, 0xfff7f88d, 0xfff5f770, 0xfff4f557, 0xfff3f552, 0xfff5f660,
0xfff5f65f, 0xfff4f657, 0xfff4f553, 0xfff3f545, 0xfff3f542, 0xfff2f446,
0xfff0f24b, 0xffe8ea4b, 0xffdcde45, 0xffd3d439, 0xffd2d33b, 0xffcecf45,
0xffcccd48, 0xff68692e, 0xff7c7d41, 0xffb8b95f, 0xe3696940, 0x3e1f1f13,
0x251f1f17, 0x21161616, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x07060604, 0x09080805, 0x3e323218, 0xdd9b9b49,
0xffb8b85a, 0xff7f7f3f, 0xff858631, 0xfff3f54a, 0xfff4f65b, 0xfff4f665,
0xfff6f77f, 0xfff8f99c, 0xfff7f896, 0xfff5f77e, 0xfff5f66d, 0xfff5f771,
0xfff5f775, 0xfff7f884, 0xfff6f773, 0xfff4f657, 0xfff4f550, 0xfff3f54b,
0xfff4f551, 0xfff4f656, 0xfff4f653, 0xfff4f65a, 0xfff4f654, 0xfff3f546,
0xfff2f34a, 0xffedef4c, 0xffe4e646, 0xffd9da3e, 0xffd1d338, 0xffd0d139,
0xffdbdd4d, 0xffe6e757, 0xff575727, 0xd5393925, 0x1a0f0f07, 0x49171712,
0xdb424236, 0xe54e4e4b, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x261a1a17, 0xb86f6f48, 0x8757572c, 0x37212110, 0x271b1b0c, 0x684a4a1d,
0xfdb0b049, 0xff2b2b17, 0xffeced56, 0xfff4f65f, 0xfff5f66a, 0xfff5f77a,
0xfff7f895, 0xfff8f99d, 0xfff6f887, 0xfff4f669, 0xfff4f55d, 0xfff5f661,
0xfff5f768, 0xfff5f664, 0xfff4f65d, 0xfff4f656, 0xfff4f656, 0xfff4f656,
0xfff4f658, 0xfff5f65f, 0xfff5f762, 0xfff5f662, 0xfff5f662, 0xfff5f763,
0xfff3f55e, 0xffeff14f, 0xffeaeb47, 0xffe3e441, 0xffd7d83a, 0xffccce37,
0xffcfd03f, 0xffe1e353, 0xffe2e453, 0xf92b2b15, 0xd842422e, 0xff87875d,
0xffa6a66f, 0xcb63634f, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x02010100, 0xff81814e, 0xffb8b856, 0xffa4a44f, 0xffa6a64f, 0xffafaf51,
0xffb8b953, 0xff43431d, 0xfff5f666, 0xfff5f771, 0xfff5f66a, 0xfff5f77a,
0xfff7f892, 0xfff6f88e, 0xfff4f66d, 0xfff3f557, 0xfff4f553, 0xfff4f65a,
0xfff5f664, 0xfff5f661, 0xfff4f659, 0xfff4f656, 0xfff4f656, 0xfff4f657,
0xfff4f65a, 0xfff5f663, 0xfff5f765, 0xffcccd5d, 0xfff4f566, 0xffbfbf58,
0xfff6f772, 0xfff3f560, 0xffeff147, 0xffeaeb43, 0xffdfe13e, 0xffcfd138,
0xffc8c93e, 0xffd5d64f, 0xffeaeb50, 0xffb1b247, 0xff48482b, 0xffeff093,
0xffe9ea91, 0xff696951, 0x1b111111, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0xff7e7e4b, 0xfff5f766, 0xfff5f662, 0xfff5f662, 0xfff5f663,
0xff979844, 0xff818234, 0xfff5f662, 0xfff5f76d, 0xfff5f66a, 0xfff5f676,
0xfff6f782, 0xfff5f673, 0xfff2f457, 0xffe9ea4c, 0xfff2f44f, 0xfff4f658,
0xfff5f660, 0xfff5f65e, 0xfff4f659, 0xfff4f656, 0xfff4f656, 0xfff4f657,
0xfff4f65a, 0xfff5f662, 0xfff5f766, 0xffc7c85b, 0xffb3b355, 0xffa3a350,
0xfff5f76b, 0xfff6f76f, 0xfff3f552, 0xffeff143, 0xffe8ea45, 0xffdadc3e,
0xffcbcc42, 0xffcacc44, 0xffdedf4d, 0xffeff15c, 0xff35351f, 0xffd4d574,
0xffd9da74, 0xff979861, 0x913b3b3a, 0x00000000, 0x00000000, 0x00000000,
0x01000000, 0xff606045, 0xff7b7b48, 0xff696a42, 0xff686842, 0xff6b6b43,
0xff454525, 0xffb6b74a, 0xfff4f65d, 0xfff4f664, 0xfff4f666, 0xfff5f66a,
0xfff5f66e, 0xfff4f661, 0xffb8b847, 0xff74743d, 0xffb0b146, 0xfff4f654,
0xfff4f658, 0xfff4f658, 0xfff4f656, 0xfff4f656, 0xfff4f656, 0xfff4f657,
0xfff4f659, 0xfff5f662, 0xfff5f766, 0xffedee65, 0xff59593f, 0xffbcbd56,
0xfff4f668, 0xfff6f776, 0xfff4f65c, 0xfff3f54c, 0xffeff147, 0xffe7e94c,
0xffd6d742, 0xffc9ca41, 0xffd1d344, 0xffe4e64d, 0xff5e5e24, 0xff919140,
0xffa0a145, 0xc36b6b3a, 0x552a2a20, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x96545441, 0xa28f904b, 0xa29a9b48, 0xa29c9c4e, 0xb29a9b52,
0xf8363625, 0xffc7c95b, 0xfff5f662, 0xfff4f663, 0xfff4f663, 0xfff4f663,
0xfff5f668, 0xffeaec5c, 0xff59593b, 0xffabac43, 0xff5d5d3b, 0xffb0b146,
0xfff4f653, 0xfff4f654, 0xfff4f552, 0xfff4f655, 0xfff4f657, 0xfff4f657,
0xfff4f659, 0xfff5f662, 0xfff5f766, 0xffbfc059, 0xff57573e, 0xff888849,
0xffe5e561, 0xffe7e871, 0xfff5f663, 0xfff4f551, 0xfff3f54a, 0xffeff054,
0xffe2e344, 0xffd0d142, 0xffcccd3e, 0xffdadb44, 0xff676726, 0xc12e2e18,
0x51343416, 0x04030301, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x01000000, 0x29222213, 0x9a6c6c44, 0xdb8f8f5f, 0xd89b9b64,
0xe6272717, 0xffecee77, 0xfff5f663, 0xfff5f663, 0xfff4f663, 0xfff5f663,
0xfff5f768, 0xffb0b050, 0xff494939, 0xffd7d848, 0xffc0c146, 0xff3c3c31,
0xffb6b747, 0xfff4f551, 0xfff4f54f, 0xfff4f654, 0xfff4f657, 0xfff4f657,
0xfff4f659, 0xfff5f661, 0xfff5f766, 0xff86874a, 0xff93934c, 0xffa8a851,
0xff8f8f4d, 0xffdfe06a, 0xfff1f362, 0xfff3f54e, 0xfff3f54c, 0xfff3f456,
0xffe9eb49, 0xffd9da45, 0xffcfd042, 0xffd7d844, 0xffb3b43e, 0xed151512,
0xdb3c3c30, 0xdb38382c, 0xdb313127, 0xd52c2c25, 0x00000000, 0x00000000,
0x40262619, 0xcd4e4e3a, 0xf95d5d42, 0xff6d6d47, 0xff919150, 0xffd2d366,
0xff404020, 0xfff5f662, 0xfff5f664, 0xfff5f665, 0xfff5f665, 0xfff5f665,
0xfff5f767, 0xff707043, 0xff4b4b39, 0xfff1f34b, 0xfff3f54b, 0xffa1a241,
0xff3d3d31, 0xffdedf4c, 0xfff3f54d, 0xfff4f655, 0xfff4f657, 0xfff4f657,
0xfff4f659, 0xfff5f661, 0xffe3e561, 0xff6c6c44, 0xffbebe57, 0xfff1f263,
0xff8b8b4a, 0xff939350, 0xffeaec5f, 0xfff3f44c, 0xfff1f24b, 0xfff1f254,
0xffecee53, 0xffe0e24b, 0xffd5d74b, 0xffd8d94c, 0xffd8d94d, 0xff3b3c22,
0xfff0f180, 0xfff2f382, 0xffcaca75, 0x8f4e4e34, 0x02010101, 0x00000000,
0x1e17170d, 0xff9b9c5b, 0xffdedf6c, 0xffd1d164, 0xffc7c861, 0xffeeef6d,
0xff40401f, 0xfff4f658, 0xfff5f666, 0xfff5f666, 0xfff5f665, 0xfff5f666,
0xfff5f767, 0xff616140, 0xff67673c, 0xfff3f54b, 0xfff3f54b, 0xfff1f24a,
0xff7d7e3e, 0xff76763d, 0xfff2f44d, 0xfff4f656, 0xfff4f658, 0xfff4f658,
0xfff4f659, 0xfff5f661, 0xffbebf58, 0xff7c7c48, 0xffeaec61, 0xfff5f664,
0xffe1e25f, 0xff98984f, 0xff95954a, 0xffebec4c, 0xffeef04a, 0xffedee52,
0xffe9eb5d, 0xffdfe14d, 0xffd9da52, 0xffdbdd4e, 0xffe4e64f, 0xff1a1a15,
0xffebec80, 0xffeced82, 0xffabac68, 0x431c1c14, 0x00000000, 0x00000000,
0x04030302, 0xff939359, 0xfff6f775, 0xfff5f66f, 0xfff4f56e, 0xfff4f570,
0xff3e3f1f, 0xfff4f559, 0xfff5f668, 0xfff5f668, 0xfff5f667, 0xfff5f766,
0xfff5f768, 0xff54543d, 0xff979842, 0xfff3f54c, 0xfff3f54b, 0xfff3f54a,
0xffebed4d, 0xff6c6d3d, 0xffbebf46, 0xfff4f657, 0xfff4f658, 0xfff4f659,
0xfff4f65a, 0xfff5f661, 0xffbebe58, 0xffb2b255, 0xfff5f764, 0xfff5f664,
0xfff5f664, 0xfff5f765, 0xffdcdd59, 0xffebed50, 0xffeef04d, 0xffeaec53,
0xffe6e765, 0xffd9da4c, 0xffd4d651, 0xffdadb49, 0xffe2e44d, 0xff363614,
0xffb6b767, 0xffdadb76, 0xff878757, 0x612a2a21, 0x00000000, 0x00000000,
0x00000000, 0xeb76764f, 0xffbabb64, 0xff8c8c4d, 0xff6b6b3f, 0xff5e5e3c,
0xff10100c, 0xffc9ca5c, 0xfff5f769, 0xfff5f768, 0xfff5f767, 0xfff5f767,
0xfff5f768, 0xff6a6a42, 0xffeaec4e, 0xfff3f54d, 0xfff3f54b, 0xfff3f54b,
0xfff4f54e, 0xffebed4d, 0xffe9eb4b, 0xfff4f658, 0xfff4f659, 0xfff4f659,
0xfff4f65a, 0xfff5f661, 0xffe4e562, 0xffe8ea64, 0xfff5f765, 0xfff5f664,
0xfff5f664, 0xfff5f767, 0xfff5f65e, 0xfff4f656, 0xfff1f352, 0xffedee5a,
0xffe5e672, 0xffd4d550, 0xffcfd050, 0xffd6d84a, 0xffdfe14d, 0xff3d3d18,
0x9c42422b, 0xaf4c4c32, 0xab3f3f32, 0x73383837, 0x00000000, 0x00000000,
0x00000000, 0x8b434335, 0xaf42423d, 0x712a2a2a, 0x411c1c1a, 0x3113130f,
0xff1e1e1d, 0xffdfe16e, 0xfff5f769, 0xfff5f768, 0xfff5f767, 0xfff5f767,
0xfff5f768, 0xffedee5e, 0xfff4f550, 0xfff3f54e, 0xfff3f54b, 0xfff3f54c,
0xfff4f54f, 0xfff3f54e, 0xfff3f54d, 0xfff4f659, 0xfff4f65a, 0xfff4f65a,
0xfff4f65b, 0xfff5f662, 0xfff5f767, 0xfff5f768, 0xfff5f765, 0xfff5f764,
0xfff5f765, 0xfff5f767, 0xfff5f65f, 0xfff4f65c, 0xfff4f55a, 0xffeef063,
0xffe4e581, 0xffd3d458, 0xffcecf52, 0xffd7d857, 0xffe1e357, 0xff3d3d1a,
0x2316160d, 0x03020202, 0x03020202, 0x01000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x05030303, 0x765b5b51,
0xff2f2f25, 0xfff5f665, 0xfff5f763, 0xfff5f768, 0xfff5f768, 0xfff5f768,
0xfff5f768, 0xfff5f660, 0xfff4f551, 0xfff4f54f, 0xfff3f54c, 0xfff3f54c,
0xfff4f54f, 0xfff4f54f, 0xfff3f54e, 0xfff4f659, 0xfff4f65a, 0xfff4f65a,
0xfff4f65b, 0xfff5f662, 0xfff5f768, 0xfff5f768, 0xfff5f765, 0xfff5f764,
0xfff5f665, 0xfff5f767, 0xfff5f660, 0xfff5f660, 0xfff4f661, 0xffeff16d,
0xffe5e68c, 0xffd4d562, 0xffcfd056, 0xffd9db5e, 0xffe7e879, 0xff3b3b21,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x06030303, 0x48313130, 0x783f3f38, 0xe476765c, 0xffc3c35f,
0xff454622, 0xffe1e248, 0xfff3f54c, 0xfff5f763, 0xfff5f768, 0xfff5f768,
0xfff5f768, 0xfff5f661, 0xfff4f552, 0xfff4f551, 0xfff3f54d, 0xfff3f54e,
0xfff4f54f, 0xfff4f54f, 0xfff3f54e, 0xfff4f65a, 0xfff4f65a, 0xfff4f65a,
0xfff4f65c, 0xfff5f763, 0xfff5f769, 0xfff5f769, 0xfff5f766, 0xfff5f765,
0xfff5f765, 0xfff5f767, 0xfff5f661, 0xfff5f661, 0xfff5f664, 0xfff1f273,
0xffe7e890, 0xffd5d66b, 0xffd1d25e, 0xffddde66, 0xffebec8a, 0xff24241c,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x6c3e3e3e, 0xf17f7f72, 0xff959560, 0xffb5b65b, 0xffe6e765, 0xfff5f768,
0xff6f7034, 0xffadae39, 0xfff3f548, 0xfff4f658, 0xfff5f769, 0xfff5f769,
0xfff5f769, 0xfff5f663, 0xfff4f655, 0xfff4f653, 0xfff3f54f, 0xfff4f550,
0xfff4f550, 0xfff4f54f, 0xfff4f54f, 0xfff4f65c, 0xfff4f65b, 0xfff4f65b,
0xffddde57, 0xffb2b354, 0xfff5f769, 0xfff5f769, 0xfff5f767, 0xfff5f766,
0xfff5f766, 0xfff5f769, 0xfff5f663, 0xfff5f663, 0xfff5f667, 0xfff1f376,
0xffe7e78f, 0xffd5d674, 0xffd1d268, 0xffe1e273, 0xfff0f19e, 0xfa242422,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x90464639, 0xffb8b868, 0xfff6f773, 0xfff5f76c, 0xfff4f568, 0xfff1f366,
0xffa6a749, 0xff7d7e29, 0xfff3f548, 0xfff4f659, 0xfff5f76a, 0xfff5f76a,
0xfff5f76b, 0xfff5f767, 0xfff4f658, 0xfff4f656, 0xfff4f551, 0xfff4f652,
0xfff4f551, 0xfff4f550, 0xfff4f550, 0xfff4f65d, 0xfff4f65c, 0xfff4f65c,
0xff9fa04b, 0xff91914d, 0xfff5f76a, 0xfff5f76a, 0xfff5f768, 0xfff5f767,
0xfff5f766, 0xfff5f76a, 0xfff5f765, 0xfff5f765, 0xfff5f769, 0xfff1f279,
0xffe5e690, 0xffd4d57e, 0xffd3d578, 0xffe4e684, 0xffd6d6a3, 0xbf090909,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x05040402, 0xec616142, 0xffe4e56c, 0xfff3f46b, 0xffeff167, 0xffeef065,
0xffcacb58, 0xff43431b, 0xfff3f54b, 0xfff5f765, 0xfff5f76a, 0xfff5f76a,
0xfff5f76c, 0xfff5f76c, 0xfff4f65d, 0xfff4f65a, 0xfff4f654, 0xfff4f656,
0xfff4f652, 0xfff4f550, 0xfff3f450, 0xfff4f65d, 0xfff4f65c, 0xfff4f65d,
0xff6e6f41, 0xff7c7c47, 0xfff5f76b, 0xfff5f76b, 0xfff5f769, 0xfff5f768,
0xfff5f767, 0xfff5f76b, 0xfff5f769, 0xfff5f769, 0xfff5f66d, 0xfff0f17b,
0xffe3e491, 0xffd3d477, 0xffd2d46c, 0xffe6e780, 0xffa7a78c, 0x9c191919,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x602c2c1c, 0xff626241, 0xff8c8c4f, 0xff7c7c48, 0xff676843,
0xa8636335, 0xff383820, 0xffe2e35c, 0xfff5f76c, 0xfff5f76a, 0xfff5f764,
0xfff5f766, 0xfff6f770, 0xfff5f663, 0xfff5f660, 0xfff4f658, 0xfff4f65a,
0xfff4f654, 0xfff4f551, 0xffcccc4b, 0xff818145, 0xffeff15b, 0xffeaec5a,
0xff3d3d36, 0xff999a4f, 0xfff5f76c, 0xfff5f76d, 0xfff5f76a, 0xfff5f769,
0xfff5f768, 0xfff6f76d, 0xfff5f76d, 0xfff4f56a, 0xfff2f464, 0xffeced65,
0xffdedf6a, 0xffcbcc5b, 0xff77773f, 0xff6a6a41, 0xff383825, 0x65262623,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x01000000, 0x973b3b28, 0x64373720, 0x43262615, 0x06040402,
0x0b0a0a07, 0x98373722, 0xff7f7f40, 0xfff6f76d, 0xfff4f657, 0xfff4f54e,
0xfff4f551, 0xfff5f660, 0xfff5f769, 0xfff5f767, 0xfff4f65e, 0xfff5f660,
0xfff4f657, 0xfff4f653, 0xfff2f453, 0xff6e6e42, 0xff808143, 0xffadae4e,
0xff323231, 0xffe7e862, 0xfff6f76d, 0xfff6f76d, 0xfff5f66b, 0xfff3f568,
0xfff2f467, 0xfff4f670, 0xfff4f671, 0xfff0f162, 0xffeeef55, 0xffe8ea58,
0xffdbdc4f, 0xffd2d342, 0xffacad40, 0xff4d4d39, 0xf4333329, 0x7e48482f,
0x04030303, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x05040404, 0x09080806,
0x02010101, 0x110b0b06, 0xe92a2a1b, 0xffd2d357, 0xfff3f54b, 0xfff3f54b,
0xfff3f54f, 0xfff4f655, 0xfff5f769, 0xfff6f771, 0xfff5f768, 0xfff5f767,
0xfff4f65b, 0xfff4f655, 0xfff4f656, 0xffe4e55b, 0xff494938, 0xff474733,
0xff8c8c47, 0xfff5f666, 0xfff6f76f, 0xfff5f66e, 0xfff2f36b, 0xffebed67,
0xffe9ea64, 0xfff0f173, 0xfff2f375, 0xffeced5f, 0xffeaeb54, 0xffe6e756,
0xffdadc4d, 0xffd6d73e, 0xffd6d73d, 0xff727238, 0xfe555541, 0x68393925,
0x03020201, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x01000000, 0x00000000,
0x00000000, 0x00000000, 0x4b1b1b11, 0xff444420, 0xffeeef4c, 0xffe1e34a,
0xffdedf4b, 0xfff0f152, 0xfff3f56b, 0xfff6f77c, 0xfff6f777, 0xfff6f770,
0xfff5f663, 0xfff4f659, 0xfff4f659, 0xfff5f660, 0xffb9ba50, 0xff40402c,
0xfff5f660, 0xfff5f768, 0xfff5f770, 0xfff3f56f, 0xffedef6b, 0xffe3e565,
0xffe1e263, 0xffebed75, 0xffeff17c, 0xffe9eb63, 0xffe6e854, 0xffdedf53,
0xffd4d64c, 0xffdcdd43, 0xffe3e53d, 0xffd1d240, 0xff505034, 0x5d242418,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x01000000, 0x88202013, 0xff5f5f2b, 0xff62623a,
0xffc2c347, 0xffe7e94c, 0xffeaec6e, 0xffeff07d, 0xfff3f57e, 0xfff5f77a,
0xfff6f772, 0xfff5f662, 0xfff4f65d, 0xfff5f661, 0xfff5f65f, 0xffd0d158,
0xfff5f662, 0xfff5f76a, 0xfff4f571, 0xfff1f26f, 0xffeaeb6c, 0xffe1e267,
0xffe1e366, 0xffebec78, 0xffebed7f, 0xffe5e673, 0xffe3e45e, 0xffd6d753,
0xff707039, 0xff757533, 0xffcecf45, 0xffedee43, 0xffd9db42, 0xfc525230,
0x5725251a, 0x00000000, 0x03020202, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x02010100, 0x46343415, 0xff5c5c38, 0xff8c8c41,
0xffedef4e, 0xffd4d650, 0xffcacb64, 0xffe1e273, 0xffe6e770, 0xffeeef79,
0xfff3f47f, 0xfff5f675, 0xfff5f663, 0xfff5f663, 0xfff5f661, 0xfff5f662,
0xfff5f764, 0xfff5f76d, 0xfff3f573, 0xffeced70, 0xffe3e46d, 0xffddde69,
0xffe1e36c, 0xffe8ea7c, 0xffe7e87f, 0xffe3e47d, 0xffe5e67a, 0xffe4e576,
0xff494927, 0xff1b1b17, 0xff787840, 0xffe4e549, 0xfff0f244, 0xffd6d842,
0xfc39392c, 0xb039392e, 0x71282827, 0x3c242424, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x08070703, 0x6635351c, 0xff4a4a35, 0xffe4e655,
0xffe7e852, 0xff737443, 0xffd4d56d, 0xffdadb6c, 0xffd6d766, 0xffdbdc66,
0xffe5e671, 0xffedee7f, 0xfff1f276, 0xfff3f468, 0xfff4f665, 0xfff5f766,
0xfff5f769, 0xfff4f571, 0xfff1f276, 0xffe8e974, 0xffddde71, 0xffdcde71,
0xffe3e479, 0xffe9ea82, 0xffe8e982, 0xffe8e984, 0xffd5d67e, 0xf444442c,
0x630c0c0a, 0x4018180f, 0xd8464631, 0xffb8b849, 0xffeff147, 0xffeef045,
0xff7a7a37, 0xff52523d, 0xff626250, 0xf8545454, 0x140b0b0b, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x2f232312, 0xec51513a, 0xffa2a251, 0xfff0f167,
0xff797941, 0xff606043, 0xffdbdc70, 0xffe2e370, 0xffd4d669, 0xffcfd164,
0xffd5d667, 0xffdedf75, 0xffe7e885, 0xffedee79, 0xfff1f36e, 0xfff4f56d,
0xfff5f673, 0xfff3f477, 0xffeff07d, 0xffe6e781, 0xffe0e182, 0xffe4e587,
0xffe9ea88, 0xffedee89, 0xffedee88, 0xffa5a663, 0xf42f2f22, 0x591f1f1a,
0x00000000, 0x00000000, 0x190b0b06, 0xd9484833, 0xffb8b947, 0xfff0f24d,
0xffdfe055, 0xff767647, 0xffe7e784, 0xffb1b183, 0x953e3e3d, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x100b0b08,
0x00000000, 0x0d0c0c05, 0xc4727340, 0xffcbcc61, 0xfff3f46f, 0xffb6b761,
0xff2b2b2a, 0x89333323, 0xf5313120, 0xffb3b45c, 0xffdfe06f, 0xffd4d569,
0xffd0d168, 0xffd3d46f, 0xffdbdc7c, 0xffe6e783, 0xffeeef7f, 0xfff2f47c,
0xfff4f57d, 0xfff2f483, 0xffeef089, 0xffe8e988, 0xffe7e98d, 0xffedee93,
0xfff0f196, 0xffdbdc85, 0xff5d5e3c, 0xc022221a, 0x200c0c09, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x512e2e18, 0xff737341, 0xffcbcc52,
0xfff0f161, 0xffd2d35c, 0xffddde6c, 0xffeff184, 0xfc7f7f6e, 0x100a0a0a,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x48222219, 0xe464644c,
0x87343428, 0xb07b7b3c, 0xffb2b354, 0xfff5f767, 0xffe9ea68, 0xff52523c,
0xcb4a4a47, 0x02010101, 0x4628281d, 0xdc2b2b1d, 0xff6f6f3b, 0xffbbbc60,
0xffd9da6f, 0xffd5d673, 0xffd9da7d, 0xffe5e687, 0xffeff08a, 0xfff2f389,
0xfff3f48a, 0xfff0f18c, 0xffeced8b, 0xffeaea8b, 0xffeaeb92, 0xffb2b374,
0xff5c5c41, 0xec272724, 0x75232321, 0x06040403, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0xab4b4b39, 0xffa1a261, 0xffb5b555,
0xffeff15b, 0xffedef67, 0xffeaeb6c, 0xffeaec73, 0xff9b9b6d, 0x55262625,
0x00000000, 0x00000000, 0x00000000, 0x52202018, 0xff6c6d4f, 0xffabab70,
0xff818152, 0xff54543c, 0xff9a9a46, 0xfff2f453, 0xff7e7f44, 0xf551513f,
0x4c31312b, 0x00000000, 0x02010101, 0x352c2c1e, 0x74242418, 0xcb1e1e16,
0xff535431, 0xffadae68, 0xffe4e592, 0xffeeef8e, 0xfff4f590, 0xfff5f691,
0xfff3f491, 0xffe6e78a, 0xffc6c778, 0xff94945d, 0xff43432f, 0xbb21211c,
0x541a1a19, 0x0d060606, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x3211110e, 0xff80805a, 0xfff5f695, 0xffbebe6f,
0xffdfe055, 0xffe7e968, 0xffe8e96a, 0xffe5e66f, 0xffadae6e, 0x46171715,
0x00000000, 0x00000000, 0x00000000, 0xd2363629, 0xffc2c374, 0xfff8f98f,
0xffeeef71, 0xffa1a143, 0xffeff148, 0xffc8c943, 0xea494931, 0x1e16160d,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x05040403, 0x04030302,
0x4d14140e, 0xbd1f1f1b, 0xff444433, 0xff78784e, 0xff9c9c61, 0xff7b7b4e,
0xff3f3f2d, 0xe623231b, 0xbf161611, 0x8d171712, 0x3d171711, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x01000000, 0xad2c2c25, 0xffcbcc7a, 0xfff6f88e, 0xffedee87,
0xffd6d854, 0xffd7d866, 0xffe1e36b, 0xffe4e574, 0xffcbcc7d, 0x4e131313,
0x00000000, 0x00000000, 0x07050503, 0xf73a3a2b, 0xffd4d477, 0xfff7f888,
0xffeaeb6a, 0xffe3e449, 0xfff3f543, 0xffbabb3f, 0xff7e7e3d, 0x86404026,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x3f1a1a19, 0x5f080808, 0x5f030303, 0x5f0a0a0a,
0x3f1d1d18, 0x08050504, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x01000000, 0xfc525240, 0xfff3f48b, 0xfff8f98d, 0xffedef83,
0xffcdcf59, 0xffc2c363, 0xffd5d670, 0xffe3e47f, 0xffddde88, 0x9d2a2a2a,
0x00000000, 0x00000000, 0x03020201, 0xfb36362b, 0xfff4f483, 0xfff6f781,
0xfff2f46a, 0xfff1f355, 0xfff3f544, 0xffe1e145, 0xffdee04e, 0xf756563d,
0x341e1e12, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x05040403, 0xff838358, 0xfff8f98d, 0xfff8f98d, 0xffebec7d,
0xffa7a851, 0xffa2a353, 0xffc8c971, 0xffdfe080, 0xffdadb88, 0xa7292929,
0x00000000, 0x00000000, 0x5e373721, 0xff59593e, 0xfff6f784, 0xfff0f27a,
0xffe7e965, 0xffe7e961, 0xffeeef48, 0xfff3f54e, 0xfff4f65a, 0xff8a8a4c,
0x681c1c17, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x01000000, 0xf1828256, 0xfff8f98d, 0xfff8f98d, 0xff9b9c5e,
0xff82834d, 0xff97984e, 0xffbfc06e, 0xffdbdc80, 0xffd9da87, 0x8a212121,
0x00000000, 0x00000000, 0xb341412f, 0xff74744c, 0xfff4f683, 0xffebed77,
0xffdadc65, 0xffd5d769, 0xffe2e348, 0xfff0f252, 0xfff5f662, 0xffcdce60,
0x7f22221d, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0xe2828255, 0xfff8f98f, 0xffd7d77f, 0xff585840,
0xffb1b169, 0xff6c6c3e, 0xffbbbc6e, 0xffdbdb83, 0xffcdce81, 0xb13b3b3b,
0x00000000, 0x00000000, 0xbf444433, 0xff72724d, 0xfff4f584, 0xffeff079,
0xffddde6d, 0xffcccd77, 0xffd2d44d, 0xffe8ea56, 0xfff4f66a, 0xffdbdc65,
0xba2a2a27, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0xf7707050, 0xfff2f390, 0xff686848, 0xff9b9b5f,
0xffabac6d, 0xff525231, 0xffb7b86e, 0xffdadb84, 0xffbebf7d, 0x893c3c3c,
0x00000000, 0x00000000, 0xbf404032, 0xff9b9b60, 0xffe9ea81, 0xfff5f67e,
0xffc7c867, 0xffabab6e, 0xffc7c858, 0xffdcde59, 0xfff1f36c, 0xffd7d867,
0xbc2c2c28, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0xd74d4d3e, 0xffa8a86f, 0xfc46463d, 0xe6d8d994,
0xff8c8c60, 0xff606039, 0xffb7b86d, 0xffdedf8a, 0xfc9b9b71, 0x3b191919,
0x00000000, 0x00000000, 0x87323227, 0xff95955f, 0xffadae6a, 0xfff7f885,
0xffc0c06d, 0xff606048, 0xffc5c663, 0xffd0d15a, 0xffeaeb6f, 0xffbdbe62,
0xa92f2f27, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x803e3e39, 0xff2d2d2c, 0xa8535351, 0x5b545442,
0xff515143, 0xff82824e, 0xffc0c177, 0xffa3a46e, 0x9f34342f, 0x00000000,
0x00000000, 0x00000000, 0x1e0d0d0a, 0xfc6e6e51, 0xff6d6d50, 0xfff0f18f,
0xffdadb89, 0xff353531, 0xff87884c, 0xffc8c861, 0xffe0e171, 0xffa1a25e,
0xa7313128, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x0a070707, 0xbd585858, 0x00000000, 0x482f2f2e,
0xff6b6b5f, 0xffa8a880, 0xffbebf96, 0xf443433d, 0x2c0c0c0c, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x2714140e, 0xf678785a, 0xffaaaa79,
0xffe4e49b, 0xff4b4b42, 0xde515143, 0xff959657, 0xffd7d879, 0xff7e7e53,
0x8f282822, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x02010101, 0x00000000, 0xa25a5a5a,
0xff7f7f7f, 0xffb0b0b0, 0xfb676767, 0x5f232323, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x9b3e3e33, 0xffabab7f,
0xfff5f5af, 0xff44443f, 0x4a333329, 0xc3292920, 0xfecccd87, 0xfb50503e,
0x240c0c0a, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x69484848,
0xb2787878, 0x975a5a5a, 0x1f0f0f0f, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x1e10100c, 0xf948483d,
0xffdbdca4, 0xc7272725, 0x00000000, 0x01000000, 0x9a434333, 0xd5363631,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x350e0e0c,
0xee484841, 0xb3262625, 0x00000000, 0x00000000, 0x1e040404, 0xb53c3c38,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x251a1a19, 0x97212121, 0x0d040404, 0x00000000, 0x00000000, 0x03010101,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,

View file

@ -0,0 +1,7 @@
TARGET = screen-dma-coalesce.img
VMX_MEMSIZE = 16
APP_SOURCES = main.c
LIB_DIR = ../../lib
include $(LIB_DIR)/Makefile.rules

View file

@ -0,0 +1,223 @@
/*
* Demonstration for DMA coalescing in SVGA devices which support SVGA
* Screen Object.
*
* All DMA operations, including Screen Object DMAs and legacy
* "UPDATE" commands" include extra guarantees on hosts which support
* the Screen Object extension. DMAs must occur when and only when
* the guest specifies them in the FIFO. All DMA side-effects must
* occur in FIFO order, and at any FENCE the guest is guaranteed that
* all DMAs prior to that fence have taken place.
*
* So, this is fairly strict compared to pre-Screen-Object hosts, but
* the SVGA device still has room to optimize away redundant DMA
* operations that occur between two FENCEs. If the guest asks the
* SVGA device to perform the same DMA 100 times, there is no way to
* tell the difference between performing one DMA and performing 100
* DMAs if they all occur at exactly the same instant.
*
* Many things can act as a barrier for this optimization: other types
* of DMA operations, including readback. DMA from a different
* GMRFB. DMA with incompatible source/dest offsets. FENCEs or legacy
* SYNCs.
*
* As a simple demonstration of this feature, this demo runs three
* timed tests:
*
* - One DMA followed by a fence
* - Ten overlapping DMAs, followed by one fence
* - Ten overlapping DMAs, each followed by a fence
*
* If this optimization is working correctly, the first two tests
* should take nearly the same amount of time, with the third test
* running at about 1/10th the speed.
*/
#include "svga.h"
#include "gmr.h"
#include "screen.h"
#include "intr.h"
#include "screendraw.h"
#include "vmbackdoor.h"
#include "math.h"
#include "mt19937ar.h"
#define GMRID_SCREEN_DRAW 0
#define GMRID_NOISE 1
typedef struct {
int numDMAs;
Bool fencePerDMA;
Bool finalFence;
const char *text;
} TestInfo;
TestInfo testInfoArray[] = {
{
1, FALSE, TRUE,
"One DMA followed by one Fence."
},
{
10, FALSE, TRUE,
"Ten DMAs followed by one Fence.\nShould be nearly the same as #1."
},
{
10, TRUE, FALSE,
"Ten DMAs, each followed by a Fence.\nShould take 10x as long as #1."
},
};
/*
* allocNoise --
*
* Allocates a new GMR, and fills it with random noise.
*/
static void
allocNoise(void)
{
const uint32 numPages = 500;
const uint32 numWords = numPages * PAGE_SIZE / sizeof(uint32);
PPN pages = GMR_DefineContiguous(GMRID_NOISE, numPages);
uint32 *ptr = PPN_POINTER(pages);
int i;
init_genrand(0);
for (i = 0; i < numWords; i++) {
ptr[i] = genrand_int32();
}
}
/*
* prepareNoiseRect --
*
* Prepare some noise as the source for a blit.
* This defines the GMRFB, and generates a random source origin.
*/
static void
prepareNoiseRect(SVGASignedPoint *origin) // OUT
{
const uint32 bytesPerLine = 512;
static const SVGAGMRImageFormat format = {{{ 32, 24 }}};
const SVGAGuestPtr gPtr = { GMRID_NOISE, 0 };
const uint32 rand = genrand_int32();
Screen_DefineGMRFB(gPtr, bytesPerLine, format);
origin->x = rand & 0x7F;
origin->y = (rand >> 8) & 0x7F;
}
/*
* main --
*/
int
main(void)
{
Intr_Init();
Intr_SetFaultHandlers(SVGA_DefaultFaultHandler);
SVGA_Init();
GMR_Init();
Heap_Reset();
SVGA_SetMode(0, 0, 32);
Screen_Init();
ScreenDraw_Init(GMRID_SCREEN_DRAW);
allocNoise();
/*
* Define a screen.
*/
SVGAScreenObject myScreen = {
.structSize = sizeof(SVGAScreenObject),
.id = 0,
.flags = SVGA_SCREEN_HAS_ROOT | SVGA_SCREEN_IS_PRIMARY,
.size = { 800, 600 },
.root = { 0, 0 },
};
Screen_Define(&myScreen);
/*
* Draw some intro text.
*/
ScreenDraw_SetScreen(myScreen.id, myScreen.size.width, myScreen.size.height);
Console_Clear();
ScreenDraw_Border(0, 0, myScreen.size.width, myScreen.size.height, 0xFF0000, 1);
Console_WriteString("Screen DMA Coalescing test.\n"
"\n"
"This example demonstrates an optimization which "
"eliminates redundant DMA operations.\n"
"The three tests below each issue a different "
"combination of DMAs and Fences. The text\n"
"below explains the expected peformance of each test.\n");
/*
* Main loop. Alternate between the three tests, timing each.
*/
while (1) {
int testNum;
const int numRepeats = 200;
for (testNum = 0; testNum < arraysize(testInfoArray); testNum++) {
TestInfo *testInfo = &testInfoArray[testNum];
VMTime before, after;
int repeat;
SVGA_SyncToFence(SVGA_InsertFence());
VMBackdoor_GetTime(&before);
for (repeat = 0; repeat < numRepeats; repeat++) {
int numDMA;
SVGASignedPoint blitOrigin;
/*
* To be coalesced, the DMAs below need the same offset
* between source and dest.
*/
prepareNoiseRect(&blitOrigin);
for (numDMA = 0; numDMA < testInfo->numDMAs; numDMA++) {
const uint32 dmaWidth = 256;
const uint32 dmaHeight = 256;
const uint32 margin = 5;
SVGASignedRect blitDest = { myScreen.size.width - margin - dmaWidth,
myScreen.size.height - margin - dmaHeight,
myScreen.size.width - margin,
myScreen.size.height - margin };
/*
* We can redefine the GMRFB, but coalescing will only
* occur if it's exactly the same for each DMA.
*/
Screen_BlitFromGMRFB(&blitOrigin, &blitDest, myScreen.id);
if (testInfo->fencePerDMA) {
SVGA_InsertFence();
}
}
if (testInfo->finalFence) {
SVGA_InsertFence();
}
}
SVGA_SyncToFence(SVGA_InsertFence());
VMBackdoor_GetTime(&after);
Console_MoveTo(10, 150 + 120 * testNum);
Console_Format("Test #%d: %s\n\nSpeed: %d us ",
testNum + 1, testInfo->text,
VMBackdoor_TimeDiffUS(&before, &after) / numRepeats);
}
}
return 0;
}

View file

@ -0,0 +1,7 @@
TARGET = screen-gmr-discontig.img
VMX_MEMSIZE = 32
APP_SOURCES = main.c
LIB_DIR = ../../lib
include $(LIB_DIR)/Makefile.rules

View file

@ -0,0 +1,107 @@
/*
* Stress test for GMR-to-screen blits with a static but highly
* discontiguous mapping.
*
* In this test, we define a single large discontiguous GMR, and blit
* to the screen from random addresses in this GMR.
*
* To measure this test's performance, use mksPerfTool to read the
* number of SWB messages processed per second on the host.
*/
#include "svga.h"
#include "gmr.h"
#include "screen.h"
#include "intr.h"
#include "math.h"
int
main(void)
{
Intr_Init();
Intr_SetFaultHandlers(SVGA_DefaultFaultHandler);
SVGA_Init();
GMR_Init();
Heap_Reset();
SVGA_SetMode(0, 0, 32);
Screen_Init();
SVGAScreenObject myScreen = {
.structSize = sizeof(SVGAScreenObject),
.id = 0,
.flags = SVGA_SCREEN_HAS_ROOT | SVGA_SCREEN_IS_PRIMARY,
.size = { 1600, 1200 },
.root = { -1234, 5678 },
};
Screen_Define(&myScreen);
const uint32 gmrId = 0;
uint32 numPages = 1 + (myScreen.size.width * myScreen.size.height *
sizeof(uint32)) / PAGE_SIZE;
PPN pages = GMR_DefineEvenPages(gmrId, numPages);
const uint32 bitsPerPixel = 32;
const uint32 colorDepth = 24;
const uint32 bytesPerLine = myScreen.size.width * sizeof(uint32);
const SVGAGMRImageFormat format = {{{
.bitsPerPixel = bitsPerPixel,
.colorDepth = colorDepth,
}}};
SVGAGuestPtr gPtr = {
.gmrId = gmrId,
.offset = 0,
};
Screen_DefineGMRFB(gPtr, bytesPerLine, format);
/*
* This is much like the tiny-2d-updates test, except with Screen
* Object and with larger blits... We emit an endless series of
* frames, each one of which has a different screen color (we XOR a
* constant with the GMR). For each frame, we update the screen in
* a grid of small tiles.
*/
const uint32 tileSize = 21; // Some random odd size...
while (1) {
PPN p;
int x, y;
/*
* We don't synchronize these writes to the host's DMA
* completion. This means we'll get tearing- you'll see a
* horizontal line at some point, which indicates how far along
* in this repaint we are at the time the host gets around to
* refreshing the screen.
*
* No big deal. This isn't intended to be an example of correct
* rendering, we're just testing to see how fast the host can
* perform these blits out of discontiguous memory.
*/
p = pages;
for (x = 0; x < numPages; x++) {
uint32 *pageData = PPN_POINTER(p);
for (y = 0; y < PAGE_SIZE / sizeof(uint32); y++) {
pageData[y] ^= 0xFFFFFF;
}
p += 2;
}
for (y = 0; y < myScreen.size.height; y += tileSize) {
for (x = 0; x < myScreen.size.width; x += tileSize) {
SVGASignedPoint blitOrigin = { x, y };
SVGASignedRect blitDest = { x, y, x+tileSize, y+tileSize };
Screen_BlitFromGMRFB(&blitOrigin, &blitDest, myScreen.id);
}
}
}
return 0;
}

View file

@ -0,0 +1,7 @@
TARGET = screen-gmr-remap.img
VMX_MEMSIZE = 32
APP_SOURCES = main.c
LIB_DIR = ../../lib
include $(LIB_DIR)/Makefile.rules

View file

@ -0,0 +1,202 @@
/*
* Stress test for GMR-to-screen blits with dynamic GMR mapping.
*
* This test uses GMRs in a rather extreme way- it repeatedly repaints
* the screen in page-sized (32*32*4 = 4096) chunks, using GMRs which
* are redefined for each DMA operation. Each in-flight DMA has a
* separate GMR allocated to it.
*
* The first page of each GMR contains the data we're actually blitting
* to the screen. This page comes from a rotating pool of 4096 pages
* (16 MB of memory) which has a static pattern of colored tiles painted
* into it during initialization.
*
* The rest of each GMR is fluff. After the single page of useful
* data, we have 128 dummy pages. This makes the GMRs a bit more
* reasonably sized (512 KB) to simulate the size of a more typical
* graphics-related mapping.
*/
#include "svga.h"
#include "gmr.h"
#include "screen.h"
#include "intr.h"
#include "math.h"
/*
* fillPages --
*
* Fill a range of contiguous pages with a test pattern. In this
* case, each page is a solid color and each consecutive page has a
* different color.
*/
static void
fillPages(PPN firstPage, uint32 count, uint32 tileSize)
{
while (count) {
const uint32 tick = (uint32)firstPage;
const float rPhase = tick * 0.01;
const float gPhase = tick * 0.02;
const float bPhase = tick * 0.03;
const uint8 r = sinf(rPhase) * 0x60 + 0x80;
const uint8 g = sinf(gPhase) * 0x60 + 0x80;
const uint8 b = sinf(bPhase) * 0x60 + 0x80;
const uint32 color = (r << 16) | (g << 8) | b;
memset32(PPN_POINTER(firstPage), color, tileSize * tileSize);
count--;
firstPage++;
}
}
/*
* main --
*
* Main loop and initialization.
*/
int
main(void)
{
Intr_Init();
Intr_SetFaultHandlers(SVGA_DefaultFaultHandler);
SVGA_Init();
GMR_Init();
Heap_Reset();
SVGA_SetMode(0, 0, 32);
Screen_Init();
SVGAScreenObject myScreen = {
.structSize = sizeof(SVGAScreenObject),
.id = 0,
.flags = SVGA_SCREEN_HAS_ROOT | SVGA_SCREEN_IS_PRIMARY,
.size = { 800, 600 },
.root = { -1234, 5678 },
};
Screen_Define(&myScreen);
const uint32 numPages = 4096;
const uint32 tileSize = 32;
const uint32 bitsPerPixel = 32;
const uint32 colorDepth = 24;
const uint32 tileBytesPerLine = tileSize * sizeof(uint32);
const SVGAGMRImageFormat tileFormat = {{{
.bitsPerPixel = bitsPerPixel,
.colorDepth = colorDepth,
}}};
/*
* Allocate a pool of system memory pages. In a real driver, these
* might be pages we get at runtime from a user-mode app and lock
* down prior to a DMA operation. We have many more pages than we
* have GMRs or in-flight DMAs.
*/
PPN firstPage = Heap_AllocPages(numPages);
PPN lastPage = firstPage + numPages - 1;
PPN currentPage = firstPage;
fillPages(firstPage, numPages, tileSize);
/*
* Allocate a GMR descriptor full of dummy mappings. We'll throw a
* handful of these into each GMR, so that the resulting GMRs have
* a more realistic size than just a single page.
*/
static SVGAGuestMemDescriptor dummyPages[128];
int i;
for (i = 0; i < arraysize(dummyPages); i++) {
dummyPages[i].ppn = 1024 + (i & 0xF) * 3;
dummyPages[i].numPages = 1;
}
PPN dummyDescriptor = GMR_AllocDescriptor(dummyPages, arraysize(dummyPages));
/*
* Allocate a single page to use for the GMR descriptor
* head. Instead of using GMR_Define(), we'll do this manually so
* that we can keep recycling the same single-page descriptor.
*/
PPN descPage = Heap_AllocPages(1);
SVGAGuestMemDescriptor *desc = PPN_POINTER(descPage);
/*
* Each GMR has a fence, so we can wait to re-use it until after
* the DMA has expired. In this example, we use the first 32 GMRs.
*/
uint32 gmrFences[32] = { 0 };
uint32 gmrIndex = 5;
/*
* Keep looping over the whole screen, tile by tile.
*/
while (1) {
int x, y;
for (y = 0; y < myScreen.size.height; y += tileSize) {
for (x = 0; x < myScreen.size.width; x += tileSize) {
/*
* Wait until we're done with the old GMR.
*/
SVGA_SyncToFence(gmrFences[gmrIndex]);
/*
* Define the new GMR, point it to the next sysmem page in
* our pool. The first page in this GMR will be our
* filled page, the rest will be dummy pages.
*/
desc[0].ppn = currentPage;
desc[0].numPages = 1;
desc[1].ppn = dummyDescriptor;
desc[1].numPages = 0;
SVGA_WriteReg(SVGA_REG_GMR_ID, gmrIndex);
SVGA_WriteReg(SVGA_REG_GMR_DESCRIPTOR, descPage);
currentPage++;
if (currentPage == lastPage) {
currentPage = firstPage;
}
/*
* Do a blit from this GMR to the screen, and set a fence so that
* we can wait to recycle the GMR until after this DMA completes.
*/
SVGAGuestPtr gPtr = {
.gmrId = gmrIndex,
.offset = 0,
};
Screen_DefineGMRFB(gPtr, tileBytesPerLine, tileFormat);
SVGASignedPoint blitOrigin = { 0, 0 };
SVGASignedRect blitDest = { x, y, x+tileSize, y+tileSize };
Screen_BlitFromGMRFB(&blitOrigin, &blitDest, myScreen.id);
gmrFences[gmrIndex] = SVGA_InsertFence();
/*
* Next GMR..
*/
gmrIndex = (gmrIndex + 1) % arraysize(gmrFences);
}
}
}
return 0;
}

View file

@ -0,0 +1,7 @@
TARGET = screen-multimon.img
VMX_MEMSIZE = 16
APP_SOURCES = main.c
LIB_DIR = ../../lib
include $(LIB_DIR)/Makefile.rules

View file

@ -0,0 +1,470 @@
/*
* This is an example of dynamic multi-monitor support in the VMware
* SVGA device, using the Screen Object extension. This demo lets you
* interactively modify, create, and destroy screens.
*/
#include "svga.h"
#include "gmr.h"
#include "screen.h"
#include "intr.h"
#include "screendraw.h"
#include "math.h"
#include "keyboard.h"
#include "vmbackdoor.h"
#include "timer.h"
SVGAScreenObject screens[9];
int currentScreen;
int screenContainingCursor;
volatile uint32 keyBuffer;
int movementAmount = 10;
SVGASignedPoint screenCursorPos;
SVGASignedRect boundingRect;
#define POLL_RATE_HZ 60
#define CURSOR_WIDTH 35
#define CURSOR_HEIGHT 40
/*
* updateBoundingRect --
*
* Recalculate the bounding rectangle of all rooted screens and
* store the result in boundingRect.
*/
void
updateBoundingRect(void)
{
uint32 id;
boundingRect.left = boundingRect.top = 0x7fffffff;
boundingRect.right = boundingRect.bottom = 0x80000000;
for (id = 0; id < arraysize(screens); id++) {
SVGAScreenObject *screen = &screens[id];
if (screen->id == SVGA_ID_INVALID ||
!(screen->flags & SVGA_SCREEN_HAS_ROOT)) {
continue;
}
boundingRect.left = MIN(boundingRect.left, screen->root.x);
boundingRect.top = MIN(boundingRect.top, screen->root.y);
boundingRect.right = MAX(boundingRect.right,
(int32)(screen->root.x + screen->size.width));
boundingRect.bottom = MAX(boundingRect.bottom,
(int32)(screen->root.y + screen->size.height));
}
}
/*
* defineAlphaArrow --
*
* Defines an alpha cursor (a pointing arrow).
*/
void
defineAlphaArrow(void)
{
static const SVGAFifoCmdDefineAlphaCursor cursor = {
.id = 0,
.hotspotX = 1,
.hotspotY = 1,
.width = CURSOR_WIDTH,
.height = CURSOR_HEIGHT,
};
static const uint32 data[] = {
# include "rgba_arrow.h"
};
void *fifoData;
SVGA_BeginDefineAlphaCursor(&cursor, &fifoData);
memcpy(fifoData, data, sizeof data);
SVGA_FIFOCommitAll();
}
/*
* drawScreenBorder --
*
* Redraw the border of a screen, indicating whether or not it's current.
*/
void
drawScreenBorder(const SVGAScreenObject *screen)
{
const int t = 4; // Thickness
const uint32 color = currentScreen == screen->id ? 0xffffdd : 0x555555;
const int w = screen->size.width;
const int h = screen->size.height;
if (screen->id != SVGA_ID_INVALID) {
ScreenDraw_SetScreen(screen->id, screen->size.width, screen->size.height);
ScreenDraw_Border(0, 0, w, h, color, t);
}
}
/*
* drawScreenText --
*
* Draw informational text on a screen.
*/
void
drawScreenText(const SVGAScreenObject *screen)
{
ScreenDraw_SetScreen(screen->id, screen->size.width, screen->size.height);
Console_MoveTo(10, 10);
Console_Format("Screen #%d\n"
"%dx%d at (%d,%d) \n",
screen->id, screen->size.width, screen->size.height,
screen->root.x, screen->root.y);
if (screen->id == screenContainingCursor) {
Console_Format("Cursor: (%d,%d) \n",
screenCursorPos.x, screenCursorPos.y);
} else {
Console_Format(" \n");
}
Console_Format("\n"
"1-%d or mouse click selects screen.\n"
"Arrow keys move screen.\n"
"'wasd' adjusts size.\n"
"'WASD' adjusts size without repaint.\n"
"Space bar toggles create/destroy.\n"
"\n"
"Moving %d pixels at a time. \n"
"(Adjust with [ ] keys.)\n",
arraysize(screens),
movementAmount);
}
/*
* paintScreen --
*
* Draw informational text, a background, and a border to each
* screen.
*/
void
paintScreen(const SVGAScreenObject *screen)
{
ScreenDraw_SetScreen(screen->id, screen->size.width, screen->size.height);
Console_Clear();
drawScreenText(screen);
drawScreenBorder(screen);
}
/*
* setCurrentScreen --
*
* Switch to a new 'current' screen, and indicate it visually by
* repainting the border. If the new screen ID is bad, do nothing.
*/
void
setCurrentScreen(int nextScreen)
{
if (nextScreen >= 0 && nextScreen < arraysize(screens)) {
int prevScreen = currentScreen;
currentScreen = nextScreen;
drawScreenBorder(&screens[prevScreen]);
drawScreenBorder(&screens[nextScreen]);
}
}
/*
* toggleScreenExistence --
*
* Define or undefine the current screen. When we first define it,
* paint its contents.
*/
void
toggleScreenExistence(void)
{
SVGAScreenObject *screen = &screens[currentScreen];
if (screen->id == SVGA_ID_INVALID) {
screen->id = currentScreen;
Screen_Define(screen);
paintScreen(screen);
} else {
Screen_Destroy(screen->id);
screen->id = SVGA_ID_INVALID;
}
}
/*
* kbIRQ --
*
* Keyboard IRQ handler. This runs with IRQs disabled, so we need
* to thunk this key back to the main loop before we do any SVGA
* drawing as a result.
*/
fastcall void
kbIRQ(KeyEvent *event)
{
if (event->key && event->pressed) {
keyBuffer = event->key;
}
}
/*
* kbHandler --
*
* Keyboard event handler, running in the main loop.
*/
fastcall void
kbHandler(uint32 key)
{
/* Digits select a screen */
setCurrentScreen(key - '1');
SVGAScreenObject *screen = &screens[currentScreen];
if (key == ' ') {
toggleScreenExistence();
updateBoundingRect();
return;
}
if (screen->id == SVGA_ID_INVALID) {
return;
}
switch (key) {
case '[':
movementAmount = MAX(1, movementAmount - 1);
drawScreenText(screen);
break;
case ']':
movementAmount++;
drawScreenText(screen);
break;
case KEY_LEFT:
screen->root.x -= movementAmount;
drawScreenText(screen);
Screen_Define(screen);
break;
case KEY_RIGHT:
screen->root.x += movementAmount;
drawScreenText(screen);
Screen_Define(screen);
break;
case KEY_UP:
screen->root.y -= movementAmount;
drawScreenText(screen);
Screen_Define(screen);
break;
case KEY_DOWN:
screen->root.y += movementAmount;
drawScreenText(screen);
Screen_Define(screen);
break;
case 'A':
screen->size.width -= movementAmount;
drawScreenText(screen);
Screen_Define(screen);
break;
case 'D':
screen->size.width += movementAmount;
drawScreenText(screen);
Screen_Define(screen);
break;
case 'W':
screen->size.height -= movementAmount;
drawScreenText(screen);
Screen_Define(screen);
break;
case 'S':
screen->size.height += movementAmount;
drawScreenText(screen);
Screen_Define(screen);
break;
case 'a':
screen->size.width -= movementAmount;
Screen_Define(screen);
paintScreen(screen);
break;
case 'd':
screen->size.width += movementAmount;
Screen_Define(screen);
paintScreen(screen);
break;
case 'w':
screen->size.height -= movementAmount;
Screen_Define(screen);
paintScreen(screen);
break;
case 's':
screen->size.height += movementAmount;
Screen_Define(screen);
paintScreen(screen);
break;
}
updateBoundingRect();
}
/*
* main --
*
* Initialization and main loop.
*/
int
main(void)
{
uint32 id;
Intr_Init();
Intr_SetFaultHandlers(SVGA_DefaultFaultHandler);
/*
* TODO: We currently poll the mouse on a timer. We could instead
* make this interrupt-driven, but that might need changes to the
* PS/2 controller.
*/
Timer_InitPIT(PIT_HZ / POLL_RATE_HZ);
Intr_SetMask(PIT_IRQ, TRUE);
Keyboard_Init();
Keyboard_SetHandler(kbIRQ);
VMBackdoor_MouseInit(TRUE);
SVGA_Init();
GMR_Init();
Heap_Reset();
SVGA_SetMode(0, 0, 32);
Screen_Init();
ScreenDraw_Init(0);
/*
* Initialize default parameters for each screen. None of these
* exist yet, and we indicate that by setting their ID to
* SVGA_ID_INVALID.
*/
for (id = 0; id < arraysize(screens); id++) {
SVGAScreenObject *screen = &screens[id];
screen->structSize = sizeof *screen;
screen->id = SVGA_ID_INVALID;
screen->flags = SVGA_SCREEN_HAS_ROOT;
screen->size.width = 320;
screen->size.height = 240;
screen->root.x = 320 * id;
screen->root.y = 0;
}
/*
* Make the first screen primary, to work around bug 399528 in the
* Workstation UI.
*/
screens[0].flags |= SVGA_SCREEN_IS_PRIMARY;
/*
* Make a screen visible, so the user can see our instructions.
*/
toggleScreenExistence();
updateBoundingRect();
defineAlphaArrow();
/*
* Main loop: Wait for keyboard interrupts, and handle keys by
* pulling them out of eventBuffer.
*/
while (1) {
uint32 key = KEY_NONE;
Bool needCursorUpdate = FALSE;
static VMMousePacket mouseState;
Intr_Halt();
Atomic_Exchange(keyBuffer, key);
if (key != KEY_NONE) {
kbHandler(key);
}
while (VMBackdoor_MouseGetPacket(&mouseState)) {
needCursorUpdate = TRUE;
}
if (needCursorUpdate) {
SVGASignedPoint virtualCursorPos;
Bool cursorOnScreen = FALSE;
virtualCursorPos.x = boundingRect.left +
(mouseState.x * (boundingRect.right - boundingRect.left)) / 65535;
virtualCursorPos.y = boundingRect.top +
(mouseState.y * (boundingRect.bottom - boundingRect.top)) / 65535;
for (id = 0; id < arraysize(screens); id++) {
SVGAScreenObject *screen = &screens[id];
if (screen->id == SVGA_ID_INVALID ||
!(screen->flags & SVGA_SCREEN_HAS_ROOT)) {
continue;
}
if (screen->root.x <= virtualCursorPos.x &&
screen->root.x + screen->size.width > virtualCursorPos.x &&
screen->root.y <= virtualCursorPos.y &&
screen->root.y + screen->size.height > virtualCursorPos.y) {
cursorOnScreen = TRUE;
screenCursorPos.x = virtualCursorPos.x - screen->root.x;
screenCursorPos.y = virtualCursorPos.y - screen->root.y;
if (mouseState.buttons & VMMOUSE_LEFT_BUTTON) {
setCurrentScreen(screen->id);
}
if (screenContainingCursor != screen->id) {
int oldScreenContainingCursor = screenContainingCursor;
screenContainingCursor = screen->id;
drawScreenText(&screens[oldScreenContainingCursor]);
}
drawScreenText(screen);
}
}
SVGA_MoveCursor(cursorOnScreen,
screenCursorPos.x,
screenCursorPos.y,
screenContainingCursor);
}
}
return 0;
}

View file

@ -0,0 +1,234 @@
0x5f1a1917, 0x60171716, 0x12030302, 0x07000000, 0x07000000, 0x06000000,
0x04000000, 0x03000000, 0x02000000, 0x01000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x922f2e28,
0xf36b6853, 0xbd3c3b33, 0x3f0c0c0c, 0x18020202, 0x0e000000, 0x0a000000,
0x07000000, 0x05000000, 0x03000000, 0x01000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x8a282823, 0xffaea97a,
0xffa9a478, 0xf0666350, 0xa12a2925, 0x39080808, 0x16000000, 0x10000000,
0x0b000000, 0x07000000, 0x04000000, 0x02000000, 0x01000000, 0x01000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x6b1a1917, 0xfeaca778, 0xffc6bf87,
0xffbeb784, 0xfe9e9871, 0xf15f5c4c, 0x8d1f1e1d, 0x3a070707, 0x18000000,
0x10000000, 0x0b000000, 0x07000000, 0x04000000, 0x02000000, 0x01000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x68191917, 0xfc9e9b6f, 0xffc8c288, 0xffc4bd86,
0xffbfb884, 0xffb2ab7d, 0xfc888265, 0xd547453c, 0x7c1c1b19, 0x2d040404,
0x16000000, 0x0f000000, 0x09000000, 0x06000000, 0x03000000, 0x02000000,
0x01000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x5d191915, 0xf599956c, 0xffcbc589, 0xffc6c087, 0xffc2bb86,
0xffbeb684, 0xffb9b182, 0xffaaa27a, 0xfd7a755e, 0xc3363530, 0x6010100f,
0x1e000000, 0x14000000, 0x0d000000, 0x08000000, 0x05000000, 0x03000000,
0x01000000, 0x01000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x4f141411, 0xee807e5d, 0xffcdc88a, 0xffc9c388, 0xffc5be86, 0xffc1ba85,
0xffbcb583, 0xffb8b081, 0xffb3aa7f, 0xffa09875, 0xf6696553, 0xb932302c,
0x510d0d0c, 0x1f000000, 0x13000000, 0x0d000000, 0x08000000, 0x05000000,
0x02000000, 0x01000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x3a0b0b0a,
0xe2726f54, 0xffd0cb8b, 0xffccc689, 0xffc7c187, 0xffc3bc86, 0xffbfb784,
0xffbab383, 0xffb6ae81, 0xffb2a97f, 0xffaaa17c, 0xff8e866b, 0xe6545146,
0x99252522, 0x3b060606, 0x1b000000, 0x11000000, 0x0b000000, 0x07000000,
0x04000000, 0x02000000, 0x01000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x24040403, 0xd4575644,
0xffd3ce8c, 0xffcec98a, 0xffcac489, 0xffc6bf87, 0xffc1ba85, 0xffbdb584,
0xffb9b082, 0xffb4ac80, 0xffb0a77f, 0xffaca27d, 0xffa39a79, 0xfe827a65,
0xe3494740, 0x841a1a19, 0x30030303, 0x17000000, 0x0f000000, 0x0a000000,
0x06000000, 0x04000000, 0x02000000, 0x01000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x18000000, 0xcc4c4c3d, 0xffcdc988,
0xffd1cb8b, 0xffcdc789, 0xffc8c288, 0xffc4bd86, 0xffc0b984, 0xffbcb483,
0xffb7af81, 0xffb3aa7f, 0xffafa57e, 0xffaaa07c, 0xffa69b7b, 0xff9c9175,
0xfa746d5d, 0xd643403a, 0x6e141413, 0x29020202, 0x16000000, 0x0f000000,
0x0a000000, 0x06000000, 0x03000000, 0x02000000, 0x01000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x13000000, 0xbe4c4b3a, 0xffcac686, 0xffd3ce8c,
0xffcfca8a, 0xffcbc589, 0xffc6c087, 0xffc2bb85, 0xffbeb784, 0xffbab282,
0xffb5ad81, 0xffb1a87f, 0xffada37d, 0xffa89e7c, 0xffa4997a, 0xff9f9378,
0xff8d846e, 0xf5625e52, 0xb62f2e2b, 0x530d0d0d, 0x21010101, 0x13000000,
0x0d000000, 0x08000000, 0x05000000, 0x03000000, 0x01000000, 0x01000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x12000000, 0xa33e3d30, 0xffbcb97e, 0xffd6d28d, 0xffd2cd8b,
0xffcec88a, 0xffc9c388, 0xffc5be87, 0xffc1b985, 0xffbcb483, 0xffb8b082,
0xffb4ab80, 0xffafa67e, 0xffaba17d, 0xffa79c7b, 0xffa29779, 0xff9e9378,
0xff9a8f77, 0xff877e6b, 0xf65c574e, 0xa7262624, 0x42090808, 0x1b000000,
0x12000000, 0x0c000000, 0x08000000, 0x04000000, 0x02000000, 0x01000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x10000000, 0x882d2d24, 0xffb2b079, 0xffd8d48e, 0xffd4d08c, 0xffd0cb8b,
0xffccc689, 0xffc8c187, 0xffc3bd86, 0xffbfb784, 0xffbbb382, 0xffb6ae81,
0xffb2a97f, 0xffaea47e, 0xffaaa07c, 0xffa59b7b, 0xffa19679, 0xff9d9177,
0xff9a8f77, 0xff968c75, 0xfd7e7665, 0xe34c4941, 0x8e201f1e, 0x38060606,
0x18000000, 0x0f000000, 0x0a000000, 0x06000000, 0x03000000, 0x01000000,
0x01000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0f000000,
0x61191915, 0xfda5a472, 0xffdbd78f, 0xffd7d38d, 0xffd2ce8b, 0xffcec88a,
0xffcac488, 0xffc6c087, 0xffc1bb85, 0xffbdb684, 0xffb9b182, 0xffb4ac80,
0xffb0a77f, 0xffaca27d, 0xffa89d7b, 0xffa3987a, 0xff9f9478, 0xff9b9077,
0xff9a8f77, 0xff9a8f77, 0xff928872, 0xfd766f5f, 0xd23c3a36, 0x71171716,
0x24020202, 0x12000000, 0x0c000000, 0x07000000, 0x04000000, 0x02000000,
0x01000000, 0x00000000, 0x00000000, 0x00000000, 0x0d000000, 0x4b0e0e0d,
0xfc9a986a, 0xffddda90, 0xffdad68f, 0xffd6d18d, 0xffd1cc8b, 0xffcdc78a,
0xffc9c288, 0xffc4bd86, 0xffc0b985, 0xffbcb483, 0xffb7af81, 0xffb3aa80,
0xffafa57e, 0xffaaa07c, 0xffa69b7b, 0xffa29679, 0xff9d9278, 0xff9a8f77,
0xff998e77, 0xff958b74, 0xff8c836e, 0xff8e846f, 0xfb686256, 0xc5363431,
0x550f0f0e, 0x17000000, 0x0d000000, 0x07000000, 0x04000000, 0x02000000,
0x01000000, 0x00000000, 0x00000000, 0x0c000000, 0x3e0c0c0b, 0xf5888761,
0xffe0dc90, 0xffdcd88f, 0xffd8d48e, 0xffd3cf8c, 0xffcfca8a, 0xffcbc689,
0xffc7c087, 0xffc3bc85, 0xffbeb784, 0xffbab182, 0xffb6ad81, 0xffb1a87f,
0xffa79e7a, 0xfe948b6f, 0xfc7c7560, 0xee5b564a, 0xe3424039, 0xdc393733,
0xd3363430, 0xc532302c, 0xcd363531, 0xce373632, 0xd2353432, 0xda2f2f2e,
0xa3212121, 0x410a0a0a, 0x0b000000, 0x06000000, 0x03000000, 0x02000000,
0x01000000, 0x00000000, 0x0b000000, 0x350b0b09, 0xe37a7957, 0xffe2df91,
0xffdfdb90, 0xffdad78e, 0xffd6d18d, 0xffd2cd8b, 0xffcec889, 0xffc9c388,
0xffc5bf87, 0xffc1ba85, 0xffbcb483, 0xffb4ac7f, 0xfd898367, 0xf6585549,
0xd8312f2b, 0xb6141414, 0x9d0b0b0b, 0x8a040404, 0x77000000, 0x6a000000,
0x5f000000, 0x52000000, 0x48000000, 0x48040404, 0x5b0c0c0c, 0x85181818,
0x9a1f1f1f, 0x0f000000, 0x09000000, 0x05000000, 0x02000000, 0x01000000,
0x00000000, 0x0a000000, 0x2a070706, 0xce545441, 0xffe4e192, 0xffe2df91,
0xffddda90, 0xffd9d58e, 0xffd5d08d, 0xffd0cb8b, 0xffccc689, 0xffc8c188,
0xffbeb883, 0xfd898465, 0xeb46463b, 0xc3191919, 0x94030303, 0x86000000,
0x7d000000, 0x74000000, 0x6b000000, 0x62000000, 0x59000000, 0x51000000,
0x47000000, 0x3e000000, 0x34000000, 0x2a000000, 0x21000000, 0x18000000,
0x10000000, 0x0b000000, 0x06000000, 0x03000000, 0x01000000, 0x01000000,
0x09000000, 0x1d020202, 0xb538382f, 0xffe4e392, 0xffe4e192, 0xffe0dd91,
0xffdbd88f, 0xffd7d38d, 0xffd3ce8c, 0xffcdc889, 0xfeafaa78, 0xf45f5d4b,
0xc51e1e1c, 0x9d070707, 0x86000000, 0x7a000000, 0x70000000, 0x65000000,
0x5b000000, 0x52000000, 0x4a000000, 0x43000000, 0x3c000000, 0x36000000,
0x2f000000, 0x29000000, 0x22000000, 0x1b000000, 0x15000000, 0x0f000000,
0x0a000000, 0x07000000, 0x04000000, 0x02000000, 0x01000000, 0x08000000,
0x13000000, 0xa0262623, 0xffe2e191, 0xffe6e493, 0xffe2e091, 0xffdeda90,
0xffdad68e, 0xffd5d18c, 0xfea9a574, 0xe9444339, 0xae0e0e0e, 0x8a000000,
0x7d000000, 0x70000000, 0x63000000, 0x56000000, 0x4a000000, 0x40000000,
0x38000000, 0x31000000, 0x2b000000, 0x27000000, 0x23000000, 0x1f000000,
0x1b000000, 0x17000000, 0x13000000, 0x0f000000, 0x0b000000, 0x08000000,
0x06000000, 0x03000000, 0x02000000, 0x01000000, 0x07000000, 0x11000000,
0x90262621, 0xffcbca85, 0xffe7e694, 0xffe5e393, 0xffe1de91, 0xffdad68e,
0xfe9b996c, 0xd7282825, 0x9b060606, 0x84000000, 0x74000000, 0x65000000,
0x55000000, 0x46000000, 0x3a000000, 0x2e000000, 0x26000000, 0x1f000000,
0x1a000000, 0x16000000, 0x13000000, 0x11000000, 0x0f000000, 0x0e000000,
0x0c000000, 0x0b000000, 0x09000000, 0x07000000, 0x05000000, 0x03000000,
0x02000000, 0x01000000, 0x01000000, 0x06000000, 0x0f000000, 0x7a22221d,
0xfeb6b57a, 0xffe7e694, 0xffe6e593, 0xffe2e091, 0xfdb0ad77, 0xda33322c,
0x95040404, 0x80000000, 0x70000000, 0x5e000000, 0x4d000000, 0x3d000000,
0x2f000000, 0x24000000, 0x1b000000, 0x15000000, 0x10000000, 0x0d000000,
0x0a000000, 0x09000000, 0x08000000, 0x07000000, 0x06000000, 0x05000000,
0x05000000, 0x05000000, 0x03000000, 0x03000000, 0x02000000, 0x01000000,
0x01000000, 0x00000000, 0x05000000, 0x0e000000, 0x53131310, 0xfda3a370,
0xffe7e694, 0xffe7e694, 0xfec8c783, 0xe648473a, 0x98070707, 0x7e000000,
0x6e000000, 0x5b000000, 0x47000000, 0x36000000, 0x27000000, 0x1c000000,
0x13000000, 0x0d000000, 0x09000000, 0x07000000, 0x05000000, 0x04000000,
0x03000000, 0x02000000, 0x02000000, 0x02000000, 0x02000000, 0x02000000,
0x02000000, 0x01000000, 0x01000000, 0x01000000, 0x00000000, 0x00000000,
0x00000000, 0x05000000, 0x0c000000, 0x2f070706, 0xf9868560, 0xffe7e694,
0xffe5e493, 0xf066664d, 0x9c0e0e0d, 0x7a000000, 0x6b000000, 0x58000000,
0x44000000, 0x30000000, 0x22000000, 0x16000000, 0x0e000000, 0x09000000,
0x05000000, 0x03000000, 0x02000000, 0x01000000, 0x01000000, 0x01000000,
0x01000000, 0x01000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x04000000, 0x0b000000, 0x1c010101, 0xf7787859, 0xffe3e292, 0xfcbab97b,
0xbd242421, 0x75010101, 0x6a000000, 0x59000000, 0x45000000, 0x31000000,
0x20000000, 0x14000000, 0x0c000000, 0x07000000, 0x04000000, 0x02000000,
0x01000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x04000000,
0x0a000000, 0x14000000, 0xea727153, 0xffd7d68b, 0xf3717053, 0x76060606,
0x63000000, 0x59000000, 0x46000000, 0x33000000, 0x21000000, 0x13000000,
0x0b000000, 0x05000000, 0x03000000, 0x01000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x03000000, 0x08000000,
0x12000000, 0xcb5b5b44, 0xfdb3b278, 0xb72b2b26, 0x57000000, 0x53000000,
0x48000000, 0x35000000, 0x24000000, 0x15000000, 0x0b000000, 0x05000000,
0x02000000, 0x01000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x02000000, 0x07000000, 0x10000000,
0xac404032, 0xf382825d, 0x80141413, 0x48000000, 0x45000000, 0x39000000,
0x28000000, 0x19000000, 0x0e000000, 0x06000000, 0x03000000, 0x01000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x02000000, 0x06000000, 0x0d000000, 0x8223231e,
0xdf46463b, 0x52070707, 0x3b000000, 0x37000000, 0x2b000000, 0x1d000000,
0x11000000, 0x08000000, 0x03000000, 0x01000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x02000000, 0x05000000, 0x0b000000, 0x65141413, 0xd02c2c2c,
0x2e000000, 0x2e000000, 0x2a000000, 0x20000000, 0x14000000, 0x0c000000,
0x05000000, 0x02000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x01000000, 0x04000000, 0x09000000, 0x520f0f0f, 0xb2242424, 0x22000000,
0x24000000, 0x20000000, 0x18000000, 0x0f000000, 0x08000000, 0x03000000,
0x01000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x01000000,
0x03000000, 0x06000000, 0x3d0b0b0b, 0x891b1b1b, 0x19000000, 0x1b000000,
0x17000000, 0x11000000, 0x0a000000, 0x05000000, 0x02000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x02000000,
0x05000000, 0x0f010101, 0x1c030303, 0x12000000, 0x13000000, 0x11000000,
0x0c000000, 0x07000000, 0x03000000, 0x01000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x01000000, 0x03000000,
0x07000000, 0x0a000000, 0x0d000000, 0x0e000000, 0x0c000000, 0x08000000,
0x05000000, 0x02000000, 0x01000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x01000000, 0x02000000, 0x05000000,
0x07000000, 0x09000000, 0x0a000000, 0x08000000, 0x06000000, 0x03000000,
0x01000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x01000000, 0x01000000, 0x03000000, 0x05000000,
0x06000000, 0x07000000, 0x05000000, 0x04000000, 0x02000000, 0x01000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x01000000, 0x02000000, 0x03000000, 0x04000000,
0x04000000, 0x04000000, 0x03000000, 0x01000000, 0x01000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x01000000, 0x02000000, 0x02000000, 0x03000000,
0x02000000, 0x01000000, 0x01000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x01000000, 0x01000000, 0x01000000, 0x01000000,
0x01000000, 0x01000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x01000000, 0x01000000, 0x01000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000,

View file

@ -0,0 +1,7 @@
TARGET = screen-present-clip.img
VMX_MEMSIZE = 16
APP_SOURCES = main.c
LIB_DIR = ../../lib
include $(LIB_DIR)/Makefile.rules

View file

@ -0,0 +1,513 @@
/*
* Test clipping for Present and Surface-to-Screen blits.
*
* This example requires SVGA Screen Object and SVGA3D support.
*/
#include "svga.h"
#include "svga3d.h"
#include "svga3dutil.h"
#include "matrix.h"
#include "math.h"
#include "gmr.h"
#include "screen.h"
#include "intr.h"
#include "screendraw.h"
#include "console_vga.h"
/*
* 3D Rendering Definitions
*/
typedef struct {
float position[3];
uint32 color;
} MyVertex;
typedef struct {
int numRects;
SVGASignedRect rects[2048];
} ClipBuffer;
uint32 vertexSid, indexSid;
ClipBuffer circles[2];
const int surfWidth = 224;
const int surfHeight = 168;
SVGA3dSurfaceImageId colorImage;
SVGA3dSurfaceImageId depthImage;
static const MyVertex vertexData[] = {
{ {-1, -1, -1}, 0xffffff },
{ {-1, -1, 1}, 0xffff00 },
{ {-1, 1, -1}, 0xff00ff },
{ {-1, 1, 1}, 0xff0000 },
{ { 1, -1, -1}, 0x00ffff },
{ { 1, -1, 1}, 0x00ff00 },
{ { 1, 1, -1}, 0x0000ff },
{ { 1, 1, 1}, 0x000000 },
};
static const uint16 indexData[] = {
0, 1, 1, 3, 3, 2, 2, 0, // -X
4, 5, 5, 7, 7, 6, 6, 4, // +X
0, 4,
1, 5,
2, 6,
3, 7,
};
const uint32 numLines = arraysize(indexData) / 2;
/*
* initScreens --
*
* Set up our Screen Objects, and label them.
*/
static void
initScreens(void)
{
static const SVGAScreenObject screen = {
.structSize = sizeof(SVGAScreenObject),
.id = 0,
.flags = SVGA_SCREEN_HAS_ROOT | SVGA_SCREEN_IS_PRIMARY,
.size = { 1024, 768 },
.root = { 1000, 2000 },
};
Screen_Define(&screen);
ScreenDraw_SetScreen(screen.id, screen.size.width, screen.size.height);
Console_Clear();
Console_Format("Surface-to-Screen Blit Clipping Test\n");
ScreenDraw_Border(0, 0, screen.size.width, screen.size.height, 0xFF0000, 1);
Console_MoveTo(20, 45);
Console_Format("Stair-step clipping (small tiles)");
Console_MoveTo(20, 245);
Console_Format("Top/bottom halves swapped");
Console_MoveTo(20, 445);
Console_Format("Scaled bottom half, with hole");
Console_MoveTo(350, 65);
Console_Format("Zoomed to 1.5x full screen, two circular clip regions");
Console_MoveTo(5, 660);
Console_Format("Stair-step, clipped against screen edges");
}
/*
* presentWithClipBuf --
*
* Present our surface to the screen, with clipping data from a ClipBuffer.
*
* The supplied ClipBuffer is always in screen coordinates. We
* convert them into dest-relative coordinates for the
* surface-to-screen blit.
*/
static void
presentWithClipBuf(ClipBuffer *buf, int dstL, int dstT, int dstR, int dstB)
{
SVGASignedRect srcRect = { 0, 0, surfWidth, surfHeight };
SVGASignedRect dstRect = { dstL, dstT, dstR, dstB };
SVGASignedRect *clip;
int i;
SVGA3D_BeginBlitSurfaceToScreen(&colorImage, &srcRect, 0,
&dstRect, &clip, buf->numRects);
for (i = 0; i < buf->numRects; i++) {
clip->left = buf->rects[i].left - dstL;
clip->top = buf->rects[i].top - dstT;
clip->right = buf->rects[i].right - dstL;
clip->bottom = buf->rects[i].bottom - dstT;
clip++;
}
SVGA_FIFOCommitAll();
}
/*
* prepareCircle --
*
* Prepare a ClipBuffer with a circular clip region, and draw an
* outline around the region.
*/
static void
prepareCircle(ClipBuffer *buf, int centerX, int centerY, int radius)
{
int r, i;
i = 0;
for (r = -radius; r <= radius; r++) {
int chordRadius = __builtin_sqrtf(radius * radius - r * r) + 0.5f;
SVGASignedRect *rect = &buf->rects[i++];
rect->left = centerX - chordRadius;
rect->top = centerY - r;
rect->right = centerX + chordRadius;
rect->bottom = centerY - r + 1;
ScreenDraw_Rectangle(rect->left - 1, rect->top - 1,
rect->right + 1, rect->bottom + 1,
0xffffff);
}
buf->numRects = i;
}
/*
* presentStairStep --
*
* Use a non-scaled Present to draw many small square tiles, and
* clip the edge to a stair-step pattern. This tests performance
* for large numbers of clip rectangles, and it will make any edge
* artifacts very noticeable.
*
* This is a set of copyrects where all of the sources line up,
* so it is also expressable as a clip rectangle.
*/
static void
presentStairStep(int xOffset, int yOffset)
{
const int gridSize = 16;
const int numRects = (gridSize + 1) * gridSize / 2;
const int squareWidth = surfWidth / gridSize;
const int squareHeight = surfHeight / gridSize;
int x, y, i;
SVGA3dCopyRect *cr;
SVGA3D_BeginPresent(colorImage.sid, &cr, numRects);
i = 0;
for (x = 0; x < gridSize; x++) {
for (y = 0; y < gridSize; y++) {
if (x + y < gridSize) {
cr[i].srcx = x * squareWidth;
cr[i].srcy = y * squareHeight;
cr[i].x = cr[i].srcx + xOffset;
cr[i].y = cr[i].srcy + yOffset;
cr[i].w = squareWidth;
cr[i].h = squareHeight;
i++;
}
}
}
if (i != numRects) {
SVGA_Panic("Incorrect numRects in present()");
}
SVGA_FIFOCommitAll();
}
/*
* present --
*
* Copy our rendered cube to the screen. This is where we test clipping.
*/
static void
present(void)
{
/*
* Main stair-step unscaled present test.
*/
presentStairStep(1020, 2065);
/*
* Another non-scaled present, this time using the copyrects in a
* way which is not also expressable as a clip rectangle. In this
* case, we're using one Present to split the image in half (top
* and bottom) and reverse the two halves.
*/
{
SVGA3dCopyRect *cr;
SVGA3D_BeginPresent(colorImage.sid, &cr, 2);
cr[0].srcx = 0;
cr[0].srcy = surfHeight / 2;
cr[0].x = 1020;
cr[0].y = 2265;
cr[0].w = surfWidth;
cr[0].h = surfHeight / 2;
cr[1].srcx = 0;
cr[1].srcy = 0;
cr[1].x = 1020;
cr[1].y = 2265 + surfHeight / 2;
cr[1].w = surfWidth;
cr[1].h = surfHeight / 2;
SVGA_FIFOCommitAll();
}
/*
* A fairly normal scaled blit. This one is only slightly scaled, unlike the
* large one below- so it may be easier to see a different class of bugs.
* For clipping, we remove a hole from the center of the image.
*
* We also test source clipping by displaying the bottom half.
*/
{
SVGASignedRect *clip;
SVGASignedRect srcRect = { 0, surfHeight/2, surfWidth, surfHeight };
SVGASignedRect dstRect = { 20, 465, 325, 655 };
SVGA3D_BeginBlitSurfaceToScreen(&colorImage, &srcRect, 0,
&dstRect, &clip, 4);
// Top
clip[0].left = 0;
clip[0].top = 0;
clip[0].right = 445;
clip[0].bottom = 75;
// Bottom
clip[1].left = 0;
clip[1].top = 115;
clip[1].right = 445;
clip[1].bottom = 330;
// Left
clip[2].left = 0;
clip[2].top = 75;
clip[2].right = 63;
clip[2].bottom = 115;
// Right
clip[3].left = 242;
clip[3].top = 75;
clip[3].right = 305;
clip[3].bottom = 115;
SVGA_FIFOCommitAll();
}
/*
* Stair-step, clipped against the bottom and left sides of the screen.
*/
presentStairStep(1000 - surfHeight/2, 2000 + 768 - surfHeight/2);
/*
* Scaled circles. We scale these asymmetrically, to about 1.5x the
* size of the screen.
*/
{
int i;
for (i = 0; i < arraysize(circles); i++) {
presentWithClipBuf(&circles[i], -500, -300, 1300, 1000);
}
}
}
/*
* setup3D --
*
* Allocate 3D resources.
*/
static void
setup3D(void)
{
colorImage.sid = SVGA3DUtil_DefineSurface2D(surfWidth, surfHeight, SVGA3D_X8R8G8B8);
depthImage.sid = SVGA3DUtil_DefineSurface2D(surfWidth, surfHeight, SVGA3D_Z_D16);
SVGA3D_DefineContext(CID);
vertexSid = SVGA3DUtil_DefineStaticBuffer(vertexData, sizeof vertexData);
indexSid = SVGA3DUtil_DefineStaticBuffer(indexData, sizeof indexData);
}
/*
* drawCube --
*
* Draw a spinning wireframe cube.
*/
static void
drawCube(void)
{
static float angle = 0.5f;
SVGA3dRect *rect;
Matrix perspectiveMat;
SVGA3dTextureState *ts;
SVGA3dRenderState *rs;
SVGA3dRect viewport = { 0, 0, surfWidth, surfHeight };
SVGA3D_SetRenderTarget(CID, SVGA3D_RT_COLOR0, &colorImage);
SVGA3D_SetRenderTarget(CID, SVGA3D_RT_DEPTH, &depthImage);
SVGA3D_SetViewport(CID, &viewport);
SVGA3D_SetZRange(CID, 0.0f, 1.0f);
SVGA3D_BeginSetRenderState(CID, &rs, 5);
{
rs[0].state = SVGA3D_RS_BLENDENABLE;
rs[0].uintValue = FALSE;
rs[1].state = SVGA3D_RS_ZENABLE;
rs[1].uintValue = TRUE;
rs[2].state = SVGA3D_RS_ZWRITEENABLE;
rs[2].uintValue = TRUE;
rs[3].state = SVGA3D_RS_ZFUNC;
rs[3].uintValue = SVGA3D_CMP_LESS;
rs[4].state = SVGA3D_RS_LIGHTINGENABLE;
rs[4].uintValue = FALSE;
}
SVGA_FIFOCommitAll();
SVGA3D_BeginSetTextureState(CID, &ts, 4);
{
ts[0].stage = 0;
ts[0].name = SVGA3D_TS_BIND_TEXTURE;
ts[0].value = SVGA3D_INVALID_ID;
ts[1].stage = 0;
ts[1].name = SVGA3D_TS_COLOROP;
ts[1].value = SVGA3D_TC_SELECTARG1;
ts[2].stage = 0;
ts[2].name = SVGA3D_TS_COLORARG1;
ts[2].value = SVGA3D_TA_DIFFUSE;
ts[3].stage = 0;
ts[3].name = SVGA3D_TS_ALPHAARG1;
ts[3].value = SVGA3D_TA_DIFFUSE;
}
SVGA_FIFOCommitAll();
/*
* Draw a red border around the render target, to test edge
* accuracy in Present.
*/
SVGA3D_BeginClear(CID, SVGA3D_CLEAR_COLOR | SVGA3D_CLEAR_DEPTH,
0xFF0000, 1.0f, 0, &rect, 1);
*rect = viewport;
SVGA_FIFOCommitAll();
/*
* Draw the background color
*/
SVGA3D_BeginClear(CID, SVGA3D_CLEAR_COLOR | SVGA3D_CLEAR_DEPTH,
0x336699, 1.0f, 0, &rect, 1);
rect->x = viewport.x + 1;
rect->y = viewport.y + 1;
rect->w = viewport.w - 2;
rect->h = viewport.h - 2;
SVGA_FIFOCommitAll();
SVGA3dVertexDecl *decls;
SVGA3dPrimitiveRange *ranges;
Matrix view;
Matrix_Copy(view, gIdentityMatrix);
Matrix_Scale(view, 0.5, 0.5, 0.5, 1.0);
Matrix_RotateX(view, 30.0 * M_PI / 180.0);
Matrix_RotateY(view, angle);
Matrix_Translate(view, 0, 0, 2.2);
angle += 0.02;
Matrix_Perspective(perspectiveMat, 45.0f, 4.0f / 3.0f, 0.1f, 100.0f);
SVGA3D_SetTransform(CID, SVGA3D_TRANSFORM_WORLD, gIdentityMatrix);
SVGA3D_SetTransform(CID, SVGA3D_TRANSFORM_PROJECTION, perspectiveMat);
SVGA3D_SetTransform(CID, SVGA3D_TRANSFORM_VIEW, view);
SVGA3D_BeginDrawPrimitives(CID, &decls, 2, &ranges, 1);
{
decls[0].identity.type = SVGA3D_DECLTYPE_FLOAT3;
decls[0].identity.usage = SVGA3D_DECLUSAGE_POSITION;
decls[0].array.surfaceId = vertexSid;
decls[0].array.stride = sizeof(MyVertex);
decls[0].array.offset = offsetof(MyVertex, position);
decls[1].identity.type = SVGA3D_DECLTYPE_D3DCOLOR;
decls[1].identity.usage = SVGA3D_DECLUSAGE_COLOR;
decls[1].array.surfaceId = vertexSid;
decls[1].array.stride = sizeof(MyVertex);
decls[1].array.offset = offsetof(MyVertex, color);
ranges[0].primType = SVGA3D_PRIMITIVE_LINELIST;
ranges[0].primitiveCount = numLines;
ranges[0].indexArray.surfaceId = indexSid;
ranges[0].indexArray.stride = sizeof(uint16);
ranges[0].indexWidth = sizeof(uint16);
}
SVGA_FIFOCommitAll();
}
/*
* main --
*
* Initialization, main loop.
*/
int
main(void)
{
static FPSCounterState fps;
uint32 frameFence = 0;
uint32 nextFence;
Intr_Init();
Intr_SetFaultHandlers(SVGA_DefaultFaultHandler);
SVGA_Init();
GMR_Init();
Heap_Reset();
SVGA_SetMode(0, 0, 32);
SVGA3D_Init();
Screen_Init();
ScreenDraw_Init(0);
initScreens();
setup3D();
/*
* One big circle, and a smaller one that overlaps the top-right
* corner. (This tests positive and negative clipping extremes.)
*/
prepareCircle(&circles[0], 650, 400, 300);
prepareCircle(&circles[1], 1000, 50, 250);
while (1) {
if (SVGA3DUtil_UpdateFPSCounter(&fps)) {
Console_MoveTo(900, 730);
Console_Format("%s ", fps.text);
}
drawCube();
/*
* Flow control- one frame in the FIFO at a time.
*/
nextFence = SVGA_InsertFence();
SVGA_SyncToFence(frameFence);
frameFence = nextFence;
present();
}
return 0;
}

View file

@ -0,0 +1,7 @@
TARGET = screen-render-test.img
VMX_MEMSIZE = 16
APP_SOURCES = main.c wols4x3.yuv.z.data.o
LIB_DIR = ../../lib
include $(LIB_DIR)/Makefile.rules

Binary file not shown.

After

Width:  |  Height:  |  Size: 166 KiB

View file

@ -0,0 +1,631 @@
/*
* This is a test which demonstrates many features of the Screen
* Object rendering model:
*
* - GMR-to-screen blits from multiple GMRFBs onto multiple screens
* - SVGA3D-to-screen blits, with scaling, onto multiple screens
* - screen-to-GMR blits
* - Video Overlay with GMRs and Screen Objects
*
* For a complete test of Screen Object, several other tests are also
* necessary:
*
* - Per-screen cursors (screen-multimon test)
* - Screen creation, destruction, and redefinition (screen-multimon)
* - Checkpointing
*
* This example requires SVGA Screen Object and SVGA3D support.
*/
#include "svga.h"
#include "svga3d.h"
#include "svga3dutil.h"
#include "matrix.h"
#include "math.h"
#include "gmr.h"
#include "screen.h"
#include "intr.h"
#include "screendraw.h"
#include "datafile.h"
/*
* 3D Rendering Definitions
*/
typedef struct {
float position[3];
uint32 color;
} MyVertex;
uint32 vertexSid, indexSid;
const int surfWidth = 1024;
const int surfHeight = 512;
SVGA3dSurfaceImageId colorImage;
SVGA3dSurfaceImageId depthImage;
static const MyVertex vertexData[] = {
{ {-1, -1, -1}, 0xFFFFFFFF },
{ {-1, -1, 1}, 0xFFFFFF00 },
{ {-1, 1, -1}, 0xFFFF00FF },
{ {-1, 1, 1}, 0xFFFF0000 },
{ { 1, -1, -1}, 0xFF00FFFF },
{ { 1, -1, 1}, 0xFF00FF00 },
{ { 1, 1, -1}, 0xFF0000FF },
{ { 1, 1, 1}, 0xFF000000 },
};
#define QUAD(a,b,c,d) a, b, d, d, c, a
static const uint16 indexData[] = {
QUAD(0,1,2,3), // -X
QUAD(4,5,6,7), // +X
QUAD(0,1,4,5), // -Y
QUAD(2,3,6,7), // +Y
QUAD(0,2,4,6), // -Z
QUAD(1,3,5,7), // +Z
};
#undef QUAD
const uint32 numTriangles = arraysize(indexData) / 3;
/*
* initScreens --
*
* Set up our Screen Objects, and label them.
*/
void
initScreens(void)
{
int i;
/*
* Define two screens:
*
* +-------+
* |0 |
* | |
* +--+----+-+
* |1 |
* +------+
*
* The screen 0 is 799x405, the screen 1 is 600x200.
* Neither screen is rooted at 0,0.
*/
SVGAScreenObject screens[] = {
{
.structSize = sizeof(SVGAScreenObject),
.id = 0,
.flags = SVGA_SCREEN_HAS_ROOT | SVGA_SCREEN_IS_PRIMARY,
.size = { 799, 405 },
.root = { -1234, 5678 },
},
{
.structSize = sizeof(SVGAScreenObject),
.id = 1,
.flags = SVGA_SCREEN_HAS_ROOT,
.size = { 600, 200 },
.root = { -1234 + 302, 5678 + 405 },
},
};
for (i = 0; i < arraysize(screens); i++) {
const SVGAScreenObject *screen = &screens[i];
Screen_Define(screen);
ScreenDraw_SetScreen(screen->id, screen->size.width, screen->size.height);
Console_Clear();
Console_MoveTo(5, screen->size.height - 20);
Console_Format("Screen #%d\n", screen->id);
ScreenDraw_Border(0, 0, screen->size.width, screen->size.height, 0xFF0000, 1);
}
}
/*
* initOverlays --
*
* Set up a video overlay using a non-default screen ID and a
* system memory GMR. These are both new features included in
* the Screen Object extension.
*/
void
initOverlays(void)
{
/*
* A video test card, in UYVY format.
*
* It's a 720x576 pixel 4:3 aspect test card designed by Barney
* Wol. (http://www.barney-wol.net/testpatterns)
*
* Decompress it into a new system memory GMR.
*/
DECLARE_DATAFILE(testCardFile, wols4x3_yuv_z);
const uint32 gmrId = 1;
const int videoWidth = 720;
const int videoHeight = 576;
const int videoBytes = videoWidth * videoHeight * 2;
const int videoPages = (videoBytes + PAGE_MASK) / PAGE_SIZE;
PPN videoFirstPage = GMR_DefineContiguous(gmrId, videoPages);
DataFile_Decompress(testCardFile, PPN_POINTER(videoFirstPage), videoBytes);
/*
* Display the video using Screen 1's coordinate system, but
* actually have it overlap the right edge of the line segment that
* screens 0 and 1 share.
*/
SVGAOverlayUnit overlay = {
.enabled = TRUE,
.format = VMWARE_FOURCC_UYVY,
.flags = SVGA_VIDEO_FLAG_COLORKEY,
.colorKey = 0x000000,
.width = videoWidth,
.height = videoHeight,
.srcWidth = videoWidth,
.srcHeight = videoHeight,
.pitches[0] = videoWidth * 2,
.dataGMRId = gmrId,
.dataOffset = 0,
.dstX = 220,
.dstY = -100,
.dstWidth = 320,
.dstHeight = 240,
.dstScreenId = 1,
};
SVGA_VideoSetAllRegs(0, &overlay, SVGA_VIDEO_DST_SCREEN_ID);
/*
* XXX: Flush twice, to work around a bug in legacy backends.
* New SWB backends don't have this problem, but it's harmless.
*/
SVGA_VideoFlush(0);
SVGA_VideoFlush(0);
/*
* Draw a border around the video
*/
ScreenDraw_SetScreen(1, 0, 0);
ScreenDraw_Border(overlay.dstX - 1, overlay.dstY - 1,
overlay.dstX + overlay.dstWidth + 1,
overlay.dstY + overlay.dstHeight + 1,
0xFFFF00, 1);
/*
* Some text to explain the video
*/
Console_MoveTo(overlay.dstX, overlay.dstY + overlay.dstHeight + 5);
Console_Format("Video overlay on Screen 1, sysmem GMR");
}
/*
* setup3D --
*
* Allocate 3D resources that are used by draw3D() and cubeLoop().
*/
void
setup3D(void)
{
/*
* Set up some 3D resources: A color buffer, depth buffer, vertex
* buffer, and index buffer. Load the VB and IB with data for a
* cube with unique vertex colors.
*/
colorImage.sid = SVGA3DUtil_DefineSurface2D(surfWidth, surfHeight, SVGA3D_X8R8G8B8);
depthImage.sid = SVGA3DUtil_DefineSurface2D(surfWidth, surfHeight, SVGA3D_Z_D16);
SVGA3D_DefineContext(CID);
vertexSid = SVGA3DUtil_DefineStaticBuffer(vertexData, sizeof vertexData);
indexSid = SVGA3DUtil_DefineStaticBuffer(indexData, sizeof indexData);
}
/*
* drawCube --
*
* Draw a cube with the specified viewport and background color.
* Every time we draw a cube, it rotates a little.
*/
void
drawCube(SVGA3dRect *viewport, uint32 bgColor)
{
static float angle = 0.5f;
SVGA3dRect *rect;
Matrix perspectiveMat;
SVGA3dTextureState *ts;
SVGA3dRenderState *rs;
SVGA3D_SetRenderTarget(CID, SVGA3D_RT_COLOR0, &colorImage);
SVGA3D_SetRenderTarget(CID, SVGA3D_RT_DEPTH, &depthImage);
SVGA3D_SetViewport(CID, viewport);
SVGA3D_SetZRange(CID, 0.0f, 1.0f);
SVGA3D_BeginSetRenderState(CID, &rs, 5);
{
rs[0].state = SVGA3D_RS_BLENDENABLE;
rs[0].uintValue = FALSE;
rs[1].state = SVGA3D_RS_ZENABLE;
rs[1].uintValue = TRUE;
rs[2].state = SVGA3D_RS_ZWRITEENABLE;
rs[2].uintValue = TRUE;
rs[3].state = SVGA3D_RS_ZFUNC;
rs[3].uintValue = SVGA3D_CMP_LESS;
rs[4].state = SVGA3D_RS_LIGHTINGENABLE;
rs[4].uintValue = FALSE;
}
SVGA_FIFOCommitAll();
SVGA3D_BeginSetTextureState(CID, &ts, 4);
{
ts[0].stage = 0;
ts[0].name = SVGA3D_TS_BIND_TEXTURE;
ts[0].value = SVGA3D_INVALID_ID;
ts[1].stage = 0;
ts[1].name = SVGA3D_TS_COLOROP;
ts[1].value = SVGA3D_TC_SELECTARG1;
ts[2].stage = 0;
ts[2].name = SVGA3D_TS_COLORARG1;
ts[2].value = SVGA3D_TA_DIFFUSE;
ts[3].stage = 0;
ts[3].name = SVGA3D_TS_ALPHAARG1;
ts[3].value = SVGA3D_TA_DIFFUSE;
}
SVGA_FIFOCommitAll();
/*
* Clear unused areas of the surface to white
*/
SVGA3D_BeginClear(CID, SVGA3D_CLEAR_COLOR | SVGA3D_CLEAR_DEPTH,
0xFFFFFFFF, 1.0f, 0, &rect, 1);
rect->x = 0;
rect->y = 0;
rect->w = surfWidth;
rect->w = surfHeight;
SVGA_FIFOCommitAll();
/*
* Draw the background color
*/
SVGA3D_BeginClear(CID, SVGA3D_CLEAR_COLOR | SVGA3D_CLEAR_DEPTH,
bgColor | 0x42000000, 1.0f, 0, &rect, 1);
*rect = *viewport;
SVGA_FIFOCommitAll();
SVGA3dVertexDecl *decls;
SVGA3dPrimitiveRange *ranges;
Matrix view;
Matrix_Copy(view, gIdentityMatrix);
Matrix_Scale(view, 0.5, 0.5, 0.5, 1.0);
Matrix_RotateX(view, 30.0 * M_PI / 180.0);
Matrix_RotateY(view, angle);
Matrix_Translate(view, 0, 0, 2.5);
angle += 0.01;
Matrix_Perspective(perspectiveMat, 45.0f, 4.0f / 3.0f, 0.1f, 100.0f);
SVGA3D_SetTransform(CID, SVGA3D_TRANSFORM_WORLD, gIdentityMatrix);
SVGA3D_SetTransform(CID, SVGA3D_TRANSFORM_PROJECTION, perspectiveMat);
SVGA3D_SetTransform(CID, SVGA3D_TRANSFORM_VIEW, view);
SVGA3D_BeginDrawPrimitives(CID, &decls, 2, &ranges, 1);
{
decls[0].identity.type = SVGA3D_DECLTYPE_FLOAT3;
decls[0].identity.usage = SVGA3D_DECLUSAGE_POSITION;
decls[0].array.surfaceId = vertexSid;
decls[0].array.stride = sizeof(MyVertex);
decls[0].array.offset = offsetof(MyVertex, position);
decls[1].identity.type = SVGA3D_DECLTYPE_D3DCOLOR;
decls[1].identity.usage = SVGA3D_DECLUSAGE_COLOR;
decls[1].array.surfaceId = vertexSid;
decls[1].array.stride = sizeof(MyVertex);
decls[1].array.offset = offsetof(MyVertex, color);
ranges[0].primType = SVGA3D_PRIMITIVE_TRIANGLELIST;
ranges[0].primitiveCount = numTriangles;
ranges[0].indexArray.surfaceId = indexSid;
ranges[0].indexArray.stride = sizeof(uint16);
ranges[0].indexWidth = sizeof(uint16);
}
SVGA_FIFOCommitAll();
}
/*
* draw3D --
*
* Set up some 3D resources, and draw a simple cube scene to
* several places on the frontbuffer. Each cube is drawn using a
* distinct background color.
*/
void
draw3D(void)
{
/*
* Scenes to render
*/
const int dstWidth = 160;
const int dstHeight = 120;
struct {
uint32 screenId;
SVGA3dRect viewport;
int x, y;
uint32 bgColor;
const char *label;
} scenes[] = {
/*
* These scenes all use different but overlapping parts of the
* render target, so it's quite obvious if the wrong image is
* being displayed- either you'll see part of the frame
* overwritten by a different frame, or the image will be
* misaligned.
*/
{ 0, { 123, 65, 160, 120 }, 320, 20 + 145 * 0, 0x800000, "Red" }, // Non-scaled
{ 0, { 150, 82, 320, 240 }, 320, 20 + 145 * 1, 0x008000, "Green" }, // Scaled
{ 0, { 85, 32, 400, 300 }, 320, 20 + 145 * 2, 0x000080, "Blue" }, // Scaled
{ 0, { 160, 40, 160, 120 }, 320, 20 + 145 * 3, 0xae3aff, "Purple" }, // Non-scaled
};
int i;
for (i = 0; i < arraysize(scenes); i++) {
drawCube(&scenes[i].viewport, scenes[i].bgColor);
SVGASignedRect srcRect = { scenes[i].viewport.x,
scenes[i].viewport.y,
scenes[i].viewport.x + scenes[i].viewport.w,
scenes[i].viewport.y + scenes[i].viewport.h };
SVGASignedRect dstRect = { scenes[i].x,
scenes[i].y,
scenes[i].x + dstWidth,
scenes[i].y + dstHeight };
/*
* Draw some text underneath the Present. If you can see this
* text, something is wrong.
*/
ScreenDraw_SetScreen(scenes[i].screenId, 0, 0);
Console_MoveTo(dstRect.left + 10, (dstRect.top + dstRect.bottom) / 2);
Console_WriteString("XXX: 2D!");
/*
* Present our scene to the front buffer using the new surface-to-screen blit.
*/
SVGA3D_BlitSurfaceToScreen(&colorImage, &srcRect,
scenes[i].screenId, &dstRect);
/*
* Draw on the frontbuffer to label this scene, and draw
* a border around it.
*/
ScreenDraw_SetScreen(scenes[i].screenId, 0, 0);
Console_MoveTo(dstRect.left, dstRect.top);
Console_WriteString(scenes[i].label);
ScreenDraw_Border(dstRect.left - 1, dstRect.top - 1,
dstRect.right + 1, dstRect.bottom + 1,
0xFFFF00, 1);
}
}
/*
* cubeLoop --
*
* Draw a spinning cube in an infinite loop, using the same
* backbuffer and other resources that we used on the earlier
* cubes.
*/
void
cubeLoop(void)
{
/* Draw a label */
ScreenDraw_SetScreen(1, 0, 0);
Console_MoveTo(230, -265);
Console_WriteString("Spinning, Orange:");
while (1) {
SVGA3dRect viewport = { 0, 0, 160, 120 };
SVGASignedRect srcRect = { 0, 0, 160, 120 };
SVGASignedRect dstRect = { 230, -245, 230+160, -245+120 };
drawCube(&viewport, 0xd9a54a);
SVGA3D_BlitSurfaceToScreen(&colorImage, &srcRect, 1, &dstRect);
}
}
/*
* complementBytes --
*
* For a range of bytes, do an in-place complement. Every bit is inverted.
*/
void
complementBytes(uint8 *ptr, uint32 count)
{
while (count) {
*ptr ^= 0xFF;
ptr++;
count--;
}
}
/*
* doBlits --
*
* Use screen-to-GMR and GMR-to-screen blits in order to copy from
* one part of the screen to another. To prove that the guest can
* access the GMR data, we invert part of the image.
*/
void
doBlits()
{
struct {
SVGAGMRImageFormat format;
int screenId;
int srcx, srcy;
int dstx, dsty;
int labelx, labely;
const char *label;
} blits[] = {
/*
* Copy the red image, using 24-bit color, and label the bottom
* half (inverse) as Cyan.
*/
{
{{{32, 24}}}, 0,
319, 19, // src
134, 19, // dest
1, 103, // label
"Cyan",
},
/*
* Copy the green image using 15-bit color, and label the bottom as pink.
*/
{
{{{16, 15}}}, 0,
319, 164, // src
134, 164, // dest
1, 103, // label
"Pink",
},
/*
* Try to copy the blue image. The screen-to-GMR blit will fail, since
* we don't support screen-to-GMR blits that aren't contained within one
* screen. So we'll end up drawing gray (the color we clear the buffer with)
* and a ligher gray on the bottom where we invert.
*/
{
{{{32, 24}}}, 0,
319, 309, // src
134, 309, // dest
1, 1, // label
"Gray, no cube",
},
/*
* Now try to copy part of the video overlay from Screen 2.
* We should get the text and border, but no video.
*/
{
{{{16, 16}}}, 1,
200, 70, // src
230, -400, // dest
0, 0, // label
"Frame & Text, No Video",
},
};
const int width = 162;
const int height = 122;
const SVGASignedPoint gmrOrigin = { 123, 4 };
const int maxBytesPerLine = (width + gmrOrigin.x) * 4;
const int numBytes = maxBytesPerLine * (height + gmrOrigin.y);
const int offset = 12345;
const int numPages = (offset + numBytes + PAGE_MASK) / PAGE_SIZE;
const int gmrId = 2;
PPN firstPage = GMR_DefineContiguous(gmrId, numPages);
int i;
for (i = 0; i < arraysize(blits); i++) {
/* Wait for any previous DMA to finish */
SVGA_SyncToFence(SVGA_InsertFence());
/* Clear the buffer to 0x42 (will appear dark grey) */
memset(PPN_POINTER(firstPage), 0x42, numPages * PAGE_SIZE);
SVGAGuestPtr gPtr = { gmrId, offset };
uint32 bytesPerLine = blits[i].format.bitsPerPixel * width / 8;
Screen_DefineGMRFB(gPtr, bytesPerLine, blits[i].format);
SVGASignedPoint srcPoint = { blits[i].srcx, blits[i].srcy };
SVGASignedPoint dstPoint = { blits[i].dstx, blits[i].dsty };
SVGASignedRect srcRect = { srcPoint.x, srcPoint.y,
srcPoint.x + width, srcPoint.y + height };
SVGASignedRect dstRect = { dstPoint.x, dstPoint.y,
dstPoint.x + width, dstPoint.y + height };
Screen_BlitToGMRFB(&gmrOrigin, &srcRect, blits[i].screenId);
/* Wait for the DMA to finish */
SVGA_SyncToFence(SVGA_InsertFence());
/* Invert the colors in the bottom half of the image */
uint8 *pixels = (offset +
bytesPerLine * (gmrOrigin.y + height/2) +
blits[i].format.bitsPerPixel * gmrOrigin.x / 8 +
(uint8*)PPN_POINTER(firstPage));
complementBytes(pixels, bytesPerLine * height/2);
/* Copy it back */
Screen_BlitFromGMRFB(&gmrOrigin, &dstRect, blits[i].screenId);
/* Draw a label for the bottom half */
ScreenDraw_SetScreen(blits[i].screenId, 0, 0);
Console_MoveTo(dstRect.left + blits[i].labelx, dstRect.top + blits[i].labely);
Console_WriteString(blits[i].label);
}
}
/*
* main --
*
* Initialization, main loop.
*/
int
main(void)
{
Intr_Init();
Intr_SetFaultHandlers(SVGA_DefaultFaultHandler);
SVGA_Init();
GMR_Init();
Heap_Reset();
SVGA_SetMode(0, 0, 32);
SVGA3D_Init();
Screen_Init();
ScreenDraw_Init(0);
initScreens();
setup3D();
draw3D();
initOverlays();
doBlits();
cubeLoop();
return 0;
}

File diff suppressed because one or more lines are too long

Some files were not shown because too many files have changed in this diff Show more