# HG changeset patch
# User Alex Williamson <alex.williamson@xxxxxx>
# Date 1186951802 21600
# Node ID cd51fa91956be20dbd744d46117f7f989e08c334
# Parent 5b19839d036508fb2721a567798359dd11f68916
# Parent 7953164cebb6dfbbee08d06c91f424b63d87ed71
merge with xen-unstable.hg
---
xen/arch/x86/genapic/es7000.c | 27
xen/arch/x86/genapic/es7000plat.c | 141
xen/include/asm-x86/mach-es7000/mach_mpparse.h | 45
extras/mini-os/Makefile | 4
extras/mini-os/arch/x86/Makefile | 3
extras/mini-os/arch/x86/mm.c | 6
tools/firmware/etherboot/README | 3
tools/firmware/etherboot/eb-rtl8139.zrom.h | 2051 +++++++++++++
tools/firmware/hvmloader/Makefile | 4
tools/libxc/xc_dom_x86.c | 2
tools/pygrub/src/LiloConf.py | 24
tools/python/xen/util/acmpolicy.py | 96
tools/python/xen/util/security.py | 40
tools/python/xen/xend/XendDomainInfo.py | 16
tools/python/xen/xend/server/DevController.py | 27
tools/python/xen/xend/server/blkif.py | 42
tools/python/xen/xm/activatepolicy.py | 27
tools/python/xen/xm/main.py | 5
tools/python/xen/xm/new.py | 3
tools/python/xen/xm/resources.py | 1
tools/python/xen/xm/setpolicy.py | 40
tools/security/Makefile | 11
tools/security/policies/default-security_policy.xml | 30
tools/security/policies/default-ul-security_policy.xml | 41
tools/security/xensec_ezpolicy | 7
tools/xenstat/libxenstat/src/xenstat.c | 2
tools/xenstore/utils.c | 7
tools/xenstore/utils.h | 2
tools/xenstore/xenstored_core.c | 16
unmodified_drivers/linux-2.6/platform-pci/machine_reboot.c | 10
xen/acm/acm_chinesewall_hooks.c | 199 -
xen/acm/acm_policy.c | 6
xen/acm/acm_simple_type_enforcement_hooks.c | 2
xen/arch/powerpc/multiboot2.c | 67
xen/arch/x86/domain_build.c | 8
xen/arch/x86/genapic/Makefile | 2
xen/arch/x86/genapic/bigsmp.c | 10
xen/arch/x86/genapic/probe.c | 2
xen/arch/x86/hvm/irq.c | 26
xen/arch/x86/hvm/svm/svm.c | 1
xen/arch/x86/hvm/vmx/vmx.c | 1
xen/arch/x86/mm/hap/guest_walk.c | 2
xen/arch/x86/mm/hap/hap.c | 56
xen/arch/x86/mm/p2m.c | 180 -
xen/arch/x86/mm/paging.c | 86
xen/common/compat/grant_table.c | 4
xen/common/libelf/libelf-dominfo.c | 104
xen/common/libelf/libelf-loader.c | 132
xen/common/libelf/libelf-tools.c | 30
xen/common/page_alloc.c | 14
xen/include/asm-powerpc/boot.h | 46
xen/include/asm-x86/domain.h | 17
xen/include/asm-x86/hap.h | 2
xen/include/asm-x86/msr.h | 5
xen/include/public/libelf.h | 18
xen/include/xen/multiboot2.h | 99
firmware/etherboot/eb-rtl8139.zrom | 0
57 files changed, 3074 insertions(+), 778 deletions(-)
diff -r 5b19839d0365 -r cd51fa91956b extras/mini-os/Makefile
--- a/extras/mini-os/Makefile Sun Aug 12 12:19:13 2007 -0600
+++ b/extras/mini-os/Makefile Sun Aug 12 14:50:02 2007 -0600
@@ -123,3 +123,7 @@ tags:
tags:
$(all_sources) | xargs ctags
+.PHONY: TAGS
+TAGS:
+ $(all_sources) | xargs etags
+
diff -r 5b19839d0365 -r cd51fa91956b extras/mini-os/arch/x86/Makefile
--- a/extras/mini-os/arch/x86/Makefile Sun Aug 12 12:19:13 2007 -0600
+++ b/extras/mini-os/arch/x86/Makefile Sun Aug 12 14:50:02 2007 -0600
@@ -2,6 +2,9 @@
# x86 architecture specific makefiles.
# It's is used for x86_32, x86_32y and x86_64
#
+
+XEN_ROOT = ../../../..
+include $(XEN_ROOT)/Config.mk
# include arch.mk has to be before mini-os.mk!
diff -r 5b19839d0365 -r cd51fa91956b extras/mini-os/arch/x86/mm.c
--- a/extras/mini-os/arch/x86/mm.c Sun Aug 12 12:19:13 2007 -0600
+++ b/extras/mini-os/arch/x86/mm.c Sun Aug 12 14:50:02 2007 -0600
@@ -405,9 +405,9 @@ void *map_frames(unsigned long *f, unsig
void arch_init_p2m(unsigned long max_pfn)
{
-#define L1_P2M_SHIFT 10
-#define L2_P2M_SHIFT 20
-#define L3_P2M_SHIFT 30
+#define L1_P2M_SHIFT 9
+#define L2_P2M_SHIFT 18
+#define L3_P2M_SHIFT 27
#define L1_P2M_ENTRIES (1 << L1_P2M_SHIFT)
#define L2_P2M_ENTRIES (1 << (L2_P2M_SHIFT - L1_P2M_SHIFT))
#define L3_P2M_ENTRIES (1 << (L3_P2M_SHIFT - L2_P2M_SHIFT))
diff -r 5b19839d0365 -r cd51fa91956b tools/firmware/etherboot/README
--- a/tools/firmware/etherboot/README Sun Aug 12 12:19:13 2007 -0600
+++ b/tools/firmware/etherboot/README Sun Aug 12 14:50:02 2007 -0600
@@ -6,3 +6,6 @@ Rom-o-matic.net will provide this image
Rom-o-matic.net will provide this image at the following URL:
http://rom-o-matic.net/5.4.3/build.php?version=5.4.3&F=ignore&nic=rtl8139%3Artl8139+--+%5B0x10ec%2C0x8139%5D&ofmt=Binary+ROM+Image%28.zrom%29&arch=i386&ASK_BOOT=-1&BOOT_FIRST=BOOT_NIC&BOOT_SECOND=BOOT_NOTHING&BOOT_THIRD=BOOT_NOTHING&BOOT_INDEX=0&STATIC_CLIENT_IP=&STATIC_SUBNET_MASK=&STATIC_SERVER_IP=&STATIC_GATEWAY_IP=&STATIC_BOOTFILE=&EXIT_ON_FILE_LOAD_ERROR=on&DHCP_CLIENT_ID=&DHCP_CLIENT_ID_LEN=&DHCP_CLIENT_ID_TYPE=&DHCP_USER_CLASS=&DHCP_USER_CLASS_LEN=&ALLOW_ONLY_ENCAPSULATED=on&DEFAULT_BOOTFILE=&CONGESTED=on&BACKOFF_LIMIT=7&TIMEOUT=180&TRY_FLOPPY_FIRST=0&EXIT_IF_NO_OFFER=on&TAGGED_IMAGE=on&ELF_IMAGE=on&PXE_IMAGE=on&DOWNLOAD_PROTO_TFTP=on&COMCONSOLE=0x3F8&CONSPEED=9600&COMPARM=0x03&PXE_EXPORT=on&CONFIG_PCI=on&CONFIG_ISA=on&BUILD_ID=&PCBIOS=on&PXE_DHCP_STRICT=on&A=Get+ROM
+
+and the mkhex script in tools/firmware/hvmloader will make the header
+file from the downloaded image.
diff -r 5b19839d0365 -r cd51fa91956b tools/firmware/etherboot/eb-rtl8139.zrom
Binary file tools/firmware/etherboot/eb-rtl8139.zrom has changed
diff -r 5b19839d0365 -r cd51fa91956b tools/firmware/etherboot/eb-rtl8139.zrom.h
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tools/firmware/etherboot/eb-rtl8139.zrom.h Sun Aug 12 14:50:02
2007 -0600
@@ -0,0 +1,2051 @@
+unsigned etherboot[] = {
+0xeb40aa55, 0xbfe96c65, 0x68744500, 0x6f627265,
+0x0000746f, 0x00540000, 0x0034001c, 0x52494350,
+0x813910ec, 0x00180000, 0x00000200, 0x00010040,
+0x00008000, 0x506e5024, 0x00000201, 0x00008a00,
+0x00090000, 0x00027fd7, 0x00001400, 0x00cc0000,
+0x00000000, 0x49444e55, 0x0000a016, 0x01000201,
+0x10001000, 0x43500abe, 0x81265249, 0x5024007d,
+0x81260c75, 0x506e027d, 0x20b80475, 0x1e50cb00,
+0xd88ec031, 0x3d0304a1, 0x1d74e44c, 0xa30064a1,
+0x66a10300, 0x0302a300, 0xa300afb8, 0xc88c0064,
+0xb80066a3, 0x04a3e44c, 0xb8581f03, 0x31cb0020,
+0xa3d88ec0, 0x02a10304, 0x0066a303, 0xa30300a1,
+0x50660064, 0x0aeb026a, 0x06eb006a, 0x016a5066,
+0xe78900eb, 0x1e505716, 0xb60f2e0e, 0xc1000206,
+0x6a5009e0, 0x012be812, 0x8ec88c58, 0x4a068fd8,
+0x48068f06, 0x50581f06, 0x6a0c6a66, 0x0060e900,
+0x16e08953, 0x55506650, 0x468be589, 0x02468910,
+0x8912468b, 0x685d0446, 0x5066104d, 0x0f2e0e50,
+0x000206b6, 0x5009e0c1, 0xe6e8146a, 0x8f2e5800,
+0x2e064a06, 0x0648068f, 0xc72e6658, 0x00038006,
+0x66000000, 0x00020168, 0x50686600, 0xe8000178,
+0xc4830010, 0x89175b12, 0x3ce85bdc, 0x0002ca01,
+0x6650006a, 0xc0200f50, 0x586601a8, 0x832d7458,
+0x0000247c, 0x44871175, 0x44890424, 0x00b80024,
+0x87000500, 0x50042444, 0x0002b4b8, 0x74c08500,
+0x011ee805, 0xe9580000, 0x000006c0, 0xe5895550,
+0x00067e83, 0x8b501375, 0x46890646, 0x46c76602,
+0x05000004, 0xeb5d5800, 0x1e585d02, 0xb8665066,
+0x000002b4, 0x74c08566, 0x0f061e2f, 0x83a80fa0,
+0x895508ec, 0x46010fe5, 0xe80e1602, 0xd1e803a8,
+0xe8000000, 0x0000027e, 0x010f5858, 0x835d0256,
+0xa90f08c4, 0x1f07a10f, 0x8cc03166, 0x66d88ec8,
+0x6604e0c1, 0x00038005, 0x0ba36600, 0x1f586604,
+0x500175e9, 0xbb061e60, 0xc38e0040, 0x131e8b26,
+0x06e3c100, 0x0d7feb81, 0x2606ebc1, 0x00131e89,
+0x8c06e3c1, 0x89d88ed0, 0x4c8b36e6, 0x78c98518,
+0x47878d15, 0xbfc08e0c, 0xc1831000, 0x8ecf291a,
+0xfcfc89d0, 0x6066a4f3, 0x1f0ec38e, 0x57afb966,
+0x89660000, 0xcf8966ce, 0xf3fd4166, 0x66fca467,
+0x66506661, 0xd889c031, 0x04e0c166, 0x80a32666,
+0xc7266603, 0xf0038406, 0x660000d7, 0x87e58958,
+0x5e89165e, 0x611f0714, 0xb80650cb, 0xc08e0040,
+0x0013a126, 0x0506e0c1, 0xe8c10dbe, 0x13a32606,
+0xc3580700, 0x0000e860, 0x815d0000, 0x0002baed,
+0x56b9fd00, 0x8d000051, 0x06530db4, 0xbc8d0000,
+0x00457c0d, 0xfca4f300, 0x457db58d, 0xbd8d0000,
+0x00000650, 0xffffffbd, 0xa405ebff, 0x0775db01,
+0xee831e8b, 0x72db11fc, 0x40c031f2, 0x0775db01,
+0xee831e8b, 0x11db11fc, 0x75db01c0, 0x831e8b07,
+0xdb11fcee, 0xc931e673, 0x7203e883, 0x08e0c10d,
+0x8346068a, 0x5074fff0, 0xdb01c589, 0x1e8b0775,
+0x11fcee83, 0x01c911db, 0x8b0775db, 0xfcee831e,
+0xc911db11, 0x01411d75, 0x8b0775db, 0xfcee831e,
+0xc911db11, 0x0775db01, 0xee831e8b, 0x73db11fc,
+0x814141e6, 0xfff300fd, 0x01d183ff, 0x2f348d56,
+0xe95ea4f3, 0xffffff74, 0x9090c361, 0x90909090,
+0x00000000, 0x00000000, 0x0feb02eb, 0x89559c50,
+0x87c88ce5, 0x46870646, 0x9c9d5d04, 0x0fa80f50,
+0x161e06a0, 0x01dee80e, 0x550cec83, 0x24448b50,
+0x00000d28, 0x44890006, 0x00e81024, 0x5d000000,
+0x003fed81, 0x858b0000, 0x0000008b, 0x0000002d,
+0x04dc0500, 0x44890000, 0x858d0824, 0x00000067,
+0x0c244489, 0xe8c35d58, 0x0000007a, 0x071f1f1f,
+0xa90fa10f, 0x5502c483, 0xf766e589, 0x00000646,
+0x755d0004, 0x9dcb9d02, 0x000004ca, 0x53000000,
+0xe8555756, 0x00000000, 0x98ed815d, 0x8b000000,
+0x0001bb9d, 0xa3eb8100, 0x8f000002, 0x0002b783,
+0xb3838f00, 0x8f000002, 0x0002af83, 0xab838f00,
+0x8f000002, 0x0002a383, 0xa7a38900, 0x8b000002,
+0x0001b3a5, 0xb7b5ff00, 0xe8000001, 0x00000006,
+0xe904c483, 0x535500d9, 0x0000e850, 0x815d0000,
+0x0000eeed, 0x9b858d00, 0x89000001, 0x00019d85,
+0x44b70f00, 0xe0c11024, 0x24442904, 0xc1c3890c,
+0x896604eb, 0x890e245c, 0x04ebc1c3, 0x9d8d5366,
+0x0000018e, 0x5366c329, 0x00000868, 0x849d8d00,
+0x29000001, 0x896653c3, 0x0001a585, 0x10e8c100,
+0x01a78588, 0xa5880000, 0x000001aa, 0x2444b70f,
+0x04e0c11e, 0xad858966, 0x89000001, 0x10ebc1c3,
+0x01af9d88, 0xbd880000, 0x000001b2, 0x9b95010f,
+0x66000001, 0x8e0010bb, 0x8ec429d3, 0x8ec38edb,
+0xcbeb8ee3, 0x80c3200f, 0x220ffee3, 0xc166cbc3,
+0xd08e04e8, 0x5b665866, 0x17cb5d66, 0x00000000,
+0xff000000, 0x000000ff, 0xff00009b, 0x000000ff,
+0x00000093, 0x00000000, 0x00000000, 0x30000000,
+0x0042e801, 0x000000e8, 0xed815d00, 0x000001c9,
+0x02bbbd8b, 0x8d8b0000, 0x000002bf, 0xf3fce689,
+0xa7a58ba4, 0xff000002, 0x0002a3b5, 0xab9d8b00,
+0x8b000002, 0x0002afb5, 0xb3bd8b00, 0x8b000002,
+0x0002b7ad, 0x6afac300, 0x66556600, 0x89506653,
+0xdb3166e5, 0xdb8e5b0e, 0x04e3c166, 0x46b70f66,
+0xd801660e, 0x0c468966, 0x66dd8966, 0x00e8db31,
+0x8d665b00, 0x66005287, 0x8966e801, 0x66005487,
+0x003e878d, 0x66e80166, 0x006a8789, 0x16c03166,
+0xe0c16658, 0xb70f6604, 0xc50166ec, 0x97010f66,
+0x200f0052, 0x0f010cc0, 0xff66c022, 0x66006aaf,
+0x8e0010b8, 0x8eec89d0, 0x8ec08ed8, 0x58e88ee0,
+0x17c35d5b, 0x00000000, 0xff000000, 0x000000ff,
+0xff00cf9f, 0x000000ff, 0x6f00cf93, 0x08000002,
+0x00000000, 0x00000000, 0x00000000, 0x00000000,
+0x00000000, 0x00000000, 0x00000000, 0x00000000,
+0x02000000, 0x0002bd01, 0x00000000, 0x90909090,
+0x00008008, 0xfffffb7f, 0xc7835f58, 0x5b585e06,
+0x89d68e59, 0x00f883fc, 0x53510375, 0x750207cb,
+0xcd19cd02, 0xffeefdbb, 0x9090fb18, 0xf958fbfa,
+0x069c15cd, 0xbb660eb4, 0xcd000001, 0x5cd20c10,
+0xc0317f6e, 0xe43016cd, 0x9c01b407, 0xadff0258,
+0xe083fffb, 0x12cdfa03, 0x31c931f9, 0x523158d2,
+0xc4835048, 0x165b6606, 0xbff7ed07, 0x66e789fd,
+0x39e820b8, 0x4150ba66, 0xb966534d, 0x66154514,
+0xeddf7609, 0x5b9c50fe, 0x7c009a07, 0x1f0e5819,
+0x099e8d5d, 0x55cb1500, 0xdfffb7dd, 0x1eff2e18,
+0x729c002d, 0x81e5891c, 0x0f3c027e, 0x08009584,
+0xedff7f01, 0x8000c637, 0x0788037e, 0x5d9d0101,
+0x0002ca5d, 0xc1016600, 0x6ffffedb, 0x2966da02,
+0x660377c3, 0xff85db31, 0x39661274, 0x132b76c2,
+0xe6ed07c3, 0x13cb6ef6, 0x1eebd989, 0xd272ca1d,
+0xde28f766, 0x39f7ee76, 0x07e376da, 0x1527ca01,
+0xc11dd089, 0xfffe56c3, 0x5292eede, 0x2e4d9bbe,
+0x54045c8b, 0xffa5e804, 0x8108c683, 0xc877abfe,
+0xeaa4dede, 0x5ecb5a66, 0x660000c3, 0x97b7d33d,
+0x850fffed, 0x2666ff72, 0x00047d83, 0x66506809,
+0x458b0d51, 0xbbfedbe5, 0x084d0400, 0xe8ff3157,
+0x0b5fffa4, 0xfd891089, 0x66dbb7fb, 0x42e9ee59,
+0x91000c14, 0x06e8da87, 0xff33e905, 0x56f85757,
+0xbf5033d8, 0xc166aa60, 0x5b3010e1, 0x36dfdd6d,
+0xc14b6ced, 0xcb8910e9, 0x030a1359, 0xdb6fffe8,
+0x115a90b7, 0x45582a0a, 0xe853c35f, 0xe95bffc8,
+0x9b30fef7, 0x01f0d0bb, 0x09016866, 0x00686eeb,
+0xfe500507, 0x789785ed, 0x80002be8, 0xa19ccb08,
+0x9d137556, 0xad564eb8, 0x5317dbe1, 0x07004036,
+0x003e1ed7, 0x0f9d38f8, 0xd93c2ff7, 0x42c83a2e,
+0x66d55000, 0x4487c88c, 0x76030424, 0x7b05fbbb,
+0x0f08ec83, 0x0f660801, 0x66a002a8, 0xfb76dd5a,
+0x66164185, 0x128d600e, 0x0c038938, 0xfb6e4407,
+0xe850dff6, 0xed815d39, 0x89060514, 0x058138ad,
+0x7dbf168b, 0xbaa9bbfb, 0x8d217400, 0x09c470b5,
+0xd470bd8d, 0x72f43905, 0x6f8e3904, 0x76fcfeec,
+0xb9e6890d, 0xcf293248, 0xe8a4f36d, 0xb9b64fe3,
+0x2d8bdfb7, 0x686c2936, 0x450b83e8, 0xed12203f,
+0x0f7b6dfe, 0x04240ab7, 0x5026245c, 0x6088858d,
+0x6dbffa50, 0x548fb6ff, 0x01d38e7c, 0x6158cbec,
+0xa102a993, 0x1f660766, 0x6ffb9a14, 0x8b9d0ce4,
+0x9cd42464, 0x832696f7, 0x6fb7fec5, 0x9dcb9dbc,
+0x565507ca, 0x247c8b57, 0x983d2b10, 0xb6bfb7b8,
+0xafa81061, 0x0480e868, 0x7cbae855, 0x336edd63,
+0x0ee05b1f, 0x8904e2a3, 0x6dbfbe77, 0xb9237dfb,
+0xa3f129b4, 0x2015732e, 0x7ffe00ea, 0x00a80bf7,
+0x10b80008, 0x8ed88e1c, 0x8ed08ec0, 0x5fe88ee0,
+0xe6c35d5e, 0x35dbbbf3, 0x3589e620, 0x283d0524,
+0xddbf2c1d, 0xa358efdd, 0x34250b30, 0x70bb5905,
+0x5f1d033e, 0x770f6853, 0x4328bacf, 0xb1e8e451,
+0x0ca5890b, 0xcde9a528, 0x2f00bf75, 0x612974a5,
+0x768de4cf, 0x4d7b7f00, 0xbcfc77b7, 0x6020a88f,
+0x1b22ed0a, 0xa15bb7b1, 0x35b70234, 0xd0ff0b07,
+0x91cf7e8b, 0x8b8b9191, 0x8b158b8b, 0x23bbc28d,
+0xff041ca1, 0xda4c8be2, 0xb7ff1bd4, 0x5189680b,
+0x89045902, 0x69890861, 0x5e71890c, 0xdcd0bd79,
+0x006d148f, 0x431f1bc3, 0xbf4a8b08, 0x37b6dbfe,
+0x0862095a, 0x728b0c6a, 0x147a8b10, 0x59b80519,
+0xfd4f6b69, 0x9c284389, 0xb664bea0, 0x5401c2d8,
+0x208dce0c, 0xb849687e, 0x1f30b8b9, 0x5d5821a2,
+0x87bc3c9d, 0x3d282ef1, 0x50802b07, 0x2e4070f0,
+0x89003881, 0xb1fa8285, 0x6fd23921, 0x29077095,
+0x7ee68d4f, 0x530c281d, 0x9da95350, 0xdd4bed1d,
+0x43892a4b, 0x1d0a0302, 0x04438810, 0xfdb84702,
+0x63880cf2, 0x585b0f07, 0x560090c3, 0x6cbe72a1,
+0x1b0aed6e, 0x0483000d, 0x6a24c629, 0x33736f00,
+0xf2b801fd, 0xee2d0629, 0xdd056850, 0xe8efe37a,
+0x189008bc, 0x0dbd3b80, 0x057003c6, 0x2f62b63c,
+0x00b03cdc, 0x5b060e18, 0x51000c03, 0x1dbe9b63,
+0x24046f21, 0x0602026a, 0xcd0c0650, 0x50eebdb3,
+0x2d40f9b8, 0x70f24b52, 0xe816e589, 0x1a2d955a,
+0x7d550119, 0x79dfd6df, 0x0374c085, 0x6dd5b60f,
+0x49509b5a, 0x2f973488, 0x8f0203b6, 0x03060e46,
+0xf636b0f9, 0x9229f98c, 0xf7b42f1c, 0x0e722f6b,
+0x05212603, 0x672107e8, 0x2625b987, 0x16d861c0,
+0x32ee0e23, 0xe30e233c, 0xf7063e4c, 0x872723d0,
+0x1f298bcd, 0x2ece1616, 0x4db93ccc, 0xad1f2321,
+0x1f46792f, 0x53565795, 0x5b4bee27, 0xc76614ee,
+0x6c8dadc5, 0x570a6a04, 0x7778d7ca, 0x2ebb7497,
+0xeb81562a, 0x6c05f23e, 0xe8ee7598, 0x24f3375d,
+0x34750d83, 0x705eb6d8, 0xd2854c72, 0x3c835b75,
+0x7f68eb0a, 0xf51664da, 0x06e0c106, 0xae018c07,
+0x702ad7c8, 0xe87414c4, 0x1b060a15, 0xebd2f63b,
+0x88006dea, 0x025a5669, 0xc9ec60d8, 0x55cceb92,
+0x3b072094, 0xdba3ffee, 0x062b381d, 0x31617d7b,
+0x6ae089ed, 0xe102501e, 0xb8c3bdaf, 0xd09f6450,
+0x06c4e805, 0x607f78f7, 0x0282811b, 0x8b4175cd,
+0xdde3a404, 0x75b14777, 0x4334b22a, 0xd5283c8d,
+0x05b9fc0a, 0xffba5eb4, 0x5b14c5f7, 0x0b7da5f3,
+0xa874db85, 0x89a106ba, 0xc156b7da, 0xdeada599,
+0xf2eb3a14, 0x67eb102f, 0xd4e80c87, 0xabbbd601,
+0xbbddfffe, 0xa3bd02f7, 0x0a71ba40, 0x4c68206a,
+0x7bbba30b, 0x1044bedb, 0x6cff0f47, 0x0c48a35a,
+0xcb737559, 0x6f6fbb67, 0x0af22705, 0x0854a399,
+0xc70d44a1, 0xbc1ed7bd, 0x09f42005, 0x336e003c,
+0x5009b20f, 0x0f581589, 0xbac1055c, 0x1901b191,
+0x64091060, 0xd9360d23, 0x2268a3d8, 0x2c703c6c,
+0xafb876a1, 0x082e59e1, 0xe3073916, 0xd7861b73,
+0x83351763, 0x18744ebd, 0x9b181aff, 0xfc6bf033,
+0x77e7721d, 0x868bebed, 0x95bf0b7f, 0xdbfa837f,
+0x52779285, 0x7e24ff3d, 0x77e070ad, 0x8532be4b,
+0xb52b941e, 0xfdafe0df, 0x23d3391b, 0x770c72ce,
+0x0676c60e, 0x2d8d8b8b, 0x2c0db5bc, 0x3fc70729,
+0xc3b1d835, 0x19d209da, 0x629d8b3d, 0xdb7f0db6,
+0x228d08fb, 0x2e70870f, 0x0903f981, 0xe9bb1f7b,
+0xce89640b, 0xdf894203, 0x5230bd13, 0x70deedbd,
+0x04b7d739, 0x1d46820f, 0x0f6c0877, 0xdfec3c86,
+0x8009cdc1, 0xc1891b77, 0xc8291577, 0x8c89da19,
+0x6c7701db, 0x1de96289, 0x4c0e011e, 0xb03ec990,
+0x85c781ba, 0x66580954, 0xe970ddd0, 0x13b8bff0,
+0xab05d704, 0x1f12b86d, 0x6a83c39c, 0x2e400a0c,
+0x08b221de, 0xe208af48, 0xe07b8376, 0xef4c35ff,
+0x74e70d5b, 0x60380310, 0xa337f6f7, 0xfdd2e91e,
+0x770f684d, 0x704d3e1e, 0x38ed93bc, 0x0949feeb,
+0x2b8520a1, 0xc9b59b30, 0x1d4f4669, 0xf75837f5,
+0x59379ae8, 0xda380062, 0xbafc5357, 0x109ffc77,
+0x89d6ff05, 0x15c5e8c3, 0x0d8ba6ba, 0x48f16e2d,
+0xebc1ca65, 0x91028b46, 0x16a178b6, 0x891f2af6,
+0x62dff5c7, 0xcab6df6b, 0xc1d7bd3a, 0x071c0ae2,
+0x7625b7cb, 0x896802d1, 0x04aa9cd7, 0xd0a15b5a,
+0xf889c5e1, 0xf1516b63, 0x70edbbd6, 0x54689fe8,
+0x89587524, 0x78935bd8, 0x56c08fbf, 0x03c28984,
+0xe2815d15, 0xb102c575, 0x8c8d921f, 0xd66b801a,
+0xcdc5a9a9, 0xf289bdac, 0x4e1d280d, 0x7b7ffbbc,
+0x701474c9, 0x02c7044a, 0x45524621, 0x9a00c281,
+0xec754966, 0x6e867b19, 0x5c1deb47, 0x04a36965,
+0xe8b0df6e, 0x5a5863f8, 0x06fcb5e9, 0xedc75790,
+0xb96f81ad, 0x115429ca, 0xe7c1faaa, 0xb77d1bb2,
+0xfa81c06f, 0x81580280, 0x53754f3f, 0xed8bb603,
+0x5f0457da, 0xc9044f1d, 0xc3c5ebc7, 0xd9846170,
+0x53b0fe56, 0xa9998df8, 0x2dfdc184, 0x5900e381,
+0xa13b29b9, 0xde1866a3, 0x0c0eafc1, 0x51b5bb1b,
+0x6bf37268, 0x03768f00, 0xfba25795, 0x52561882,
+0x599161e8, 0x25b929d8, 0x3529eefc, 0xeb5b0046,
+0x5ab890e4, 0xbb65b856, 0x08fc4aed, 0x60158b46,
+0xbac5b350, 0x74da6f6f, 0xff475b02, 0x41144c39,
+0x587421b6, 0x097a05c7, 0xd5b87704, 0xd8eb5ae0,
+0x403d3417, 0xd72d4cd1, 0xc774dcd5, 0x22960d39,
+0xb1cdbdad, 0xe869df6b, 0x448a24c7, 0x6c2d82d1,
+0xeb87b83a, 0x365621db, 0xb62d7b54, 0x1c0777be,
+0x477a9639, 0x8b7008d8, 0xb854be9b, 0x37bbfbe3,
+0x43900578, 0x938389cf, 0xbd828d07, 0xfa63ba2f,
+0xb85d0183, 0xba0f2df2, 0xd1bbdffb, 0x9615be34,
+0xa13a148d, 0xc83bc46c, 0x7c4beac1, 0x8b1a5ef8,
+0x0d180409, 0x765689b6, 0x7ec103c7, 0x7605ab4f,
+0xae8d0001, 0xb0f08d8b, 0xb63e7489, 0x2fc57cbb,
+0x53b1a975, 0xb7926702, 0xc229760b, 0x9ec6fd3b,
+0xdfa315bd, 0x8294ea81, 0x86038992, 0x509c8789,
+0x2bdfeb00, 0xd32b696b, 0x109e4d81, 0xd5b139d0,
+0xfc3d3a70, 0xdb001822, 0x7fe9dd1b, 0x89130480,
+0x1c2d2bc5, 0x8bda1425, 0xc68ea96e, 0x7adc0c42,
+0x1fa291fe, 0x0d9eef64, 0x8f01bf42, 0x84e8560c,
+0x6ed9124c, 0xc601e3b1, 0x1cff20c4, 0x6c1730ff,
+0x9d76ee15, 0xc31b2c3f, 0xf45e5502, 0x08b0be03,
+0xc134b9ef, 0x4e1c4f01, 0x6a61731e, 0xe0304cfb,
+0x80972a78, 0x85b5a903, 0x3a0d06ed, 0x07c3248e,
+0x7ab84d45, 0x9e084377, 0x10438b14, 0xe08df891,
+0x1cded6db, 0x9c979902, 0x1859c541, 0xc05c7a03,
+0x033e5df4, 0x675e4d3d, 0x36ff5046, 0x756f847c,
+0x4bebe857, 0x730320f8, 0x45e9d70c, 0x3960e857,
+0x19744c29, 0xbf4e0873, 0x2d2befc2, 0x06e88933,
+0x2a0ee9ec, 0x056f6df4, 0xe0eb0419, 0xd10d9690,
+0x82eb7e03, 0xa110a32d, 0x08a5080a, 0xfce18303,
+0x2ed1beb6, 0x4355045f, 0x5154cc29, 0xd56bae3e,
+0x5f5b99dd, 0x3ef632e8, 0x830655d0, 0x89b89b08,
+0xc3415dec, 0x1eb76990, 0x387e1dbc, 0x9024ac8b,
+0xf7503658, 0xe0f873c5, 0x4c96e83a, 0x9c47c713,
+0x4a274674, 0x18ef9a94, 0x4e601236, 0x898984bc,
+0xc3830ffb, 0xe16fc818, 0x75118dd6, 0x108b2029,
+0xa12ab9ab, 0x99e056a5, 0x1a8ff9f7, 0xfe10c206,
+0x7d7709bb, 0x940e1810, 0xca114208, 0x5553f07c,
+0xeb718ef5, 0x29920862, 0xe581ca0b, 0x3db5c06b,
+0x087466bb, 0x140a7449, 0xb8956d38, 0x8f69f17b,
+0x106a102c, 0xa119e1c3, 0xd02db00f, 0x2900d028,
+0xc4ddcba1, 0x8b90d1fe, 0x020d68f3, 0xae07718a,
+0xc10a19c5, 0xa0882f72, 0x714719bd, 0x1b0e8ba3,
+0xc177ce3b, 0x0972edf5, 0x15154a72, 0xe685ed5e,
+0xc308b985, 0xe30b0abe, 0xb8077768, 0xd939d5d1,
+0x0b73288b, 0x5fa5ede1, 0x423204c1, 0x72d4c101,
+0xc10b5bf5, 0x1931c35e, 0x1007a60a, 0xea4ed4a1,
+0xb85bbde5, 0x6e85b75b, 0x840fd848, 0x50bd6a07,
+0x942d7c88, 0xb3f0e783, 0xb5e370cb, 0xb9f72724,
+0x01a13880, 0xaf94afde, 0x0e838d0f, 0xf7f63759,
+0x77982db4, 0xa00505b8, 0xaf081304, 0x5d038607,
+0x6e030ada, 0x6b04a77f, 0x8dc2b077, 0xf0e5566c,
+0x1febf622, 0x9a28776d, 0x772a6804, 0x05499d29,
+0xc6e57598, 0xc65899c6, 0x36880707, 0x38d7ec47,
+0x862b666f, 0xb61c18bb, 0x1cec7418, 0x12bf071d,
+0xeb2a076e, 0x02d8171e, 0xa166d622, 0x032e1661,
+0xac43335c, 0x3e1a3b26, 0xd6da2e0d, 0x285314dd,
+0x321b2003, 0x6da9182b, 0x2b127d9b, 0x0330155b,
+0x91919a7b, 0x43c770ce, 0x0e080542, 0x91919106,
+0x2c14160c, 0xdd236375, 0x1e1805ff, 0x40093670,
+0x7609db63, 0x6342435a, 0x48054607, 0x7c83637c,
+0x054e4a12, 0x1d521250, 0x5683475b, 0x49f558a9,
+0x325d28dc, 0x0543e97c, 0x60738d6a, 0xba082f68,
+0x2b584894, 0x14bbff52, 0x2c0846c6, 0x23a7e2bf,
+0xd5ad6ec5, 0xf40a466c, 0x917546c4, 0x0320bace,
+0x9b8bf714, 0x2bf7220f, 0x1603d739, 0x36fd2ddf,
+0x0311fb01, 0x2671ae77, 0xf295fa01, 0x0fe38337,
+0xdfb6cf0d, 0x23030c5c, 0x010646c7, 0x910e0402,
+0x23221246, 0x18056323, 0xb7761c1a, 0x46e6c76f,
+0x285e032a, 0x979e2c6a, 0x0946b1fd, 0x31e0c108,
+0x8c80c740, 0x3ea7f40d, 0x98a42372, 0xcde81c04,
+0x43318b47, 0x160a6377, 0xd0e85532, 0x91063503,
+0x027a4736, 0x38652510, 0xede9b4d8, 0xf8431011,
+0x0558c2d3, 0x6eee0981, 0x2d7a8585, 0x4e53deeb,
+0xb46eebe8, 0x9c8ae3a0, 0xf71d1cf7, 0x20d9de5b,
+0xc3bf3ee0, 0x813256de, 0xbb05ec52, 0x88ba830e,
+0x760fd788, 0x98f9044b, 0x2168be6d, 0x188b068d,
+0xf8ce54b2, 0x06815fe3, 0x89a4c24f, 0x840b5282,
+0xe11dfe13, 0x58824d19, 0x8019840c, 0x1bee5e06,
+0x82c7eebc, 0xf9601056, 0xb8da293a, 0x811b31b3,
+0x65018df7, 0x83c71689, 0x8393ec69, 0x34ad64f0,
+0x7581826f, 0xbd09b908, 0xc87a1fb3, 0x82b865c3,
+0xf7380b0e, 0x70928bef, 0x89e81089, 0xd967349a,
+0x090d75a8, 0xe835eb44, 0x136bd5e9, 0x1b1e754e,
+0xc4132305, 0x04afa1b8, 0xb2c75859, 0x7c4c2d00,
+0x833668e8, 0xf78843ba, 0xd9c13add, 0x8b8a5151,
+0x601376b5, 0x6d4b0c35, 0xe0e201bd, 0x23720beb,
+0xd81f68b4, 0x6a0ee2fa, 0x6fd01aae, 0x8d046780,
+0x96600f01, 0x57130835, 0x5f233e2f, 0x5c505067,
+0x115e70fa, 0xe8d8f08a, 0x43b01eb0, 0xfea75d38,
+0xc283d70c, 0xdb388104, 0x06d318c0, 0x4276d0ae,
+0x042d67a6, 0xde0fb8ef, 0x0842af8d, 0x1e045162,
+0x4a2581a2, 0xe3e88ebe, 0x0a13b4d1, 0x0a246cd0,
+0xac400e50, 0x21431a36, 0x6e25ca55, 0x5bc9cddb,
+0x012b518b, 0x75065209, 0x70effba9, 0x1058f42b,
+0xc4ebd109, 0x8b7ae068, 0x0bba5ad4, 0x25e8bbb1,
+0x3e40043f, 0x097b2013, 0x7343efc0, 0x0a6a13ef,
+0xb09e35e8, 0x4d42af0a, 0xb604c1c2, 0x0657a510,
+0x77a957cc, 0x77be1cb7, 0x8b07771b, 0xdb121934,
+0x7bc5b6ea, 0x7bc574ce, 0x05352218, 0x90b6ede9,
+0x1825178d, 0x76012648, 0x00ede007, 0x0f3b91ed,
+0xab6942c4, 0x01e8dc97, 0x5a14dd6a, 0xf1dae240,
+0x823749fc, 0xc917d19f, 0x755a405f, 0xdc1f81bc,
+0x08b302d3, 0x247b8df6, 0x3bc2d42b, 0xeb0024b2,
+0x03068797, 0xc868377f, 0xbb535212, 0x594503c7,
+0x1bddf2eb, 0xf0850222, 0x5c478b18, 0x0cef1c24,
+0x683e0dbf, 0x41e9c578, 0xfce0b953, 0x8e0b4789,
+0x8a68dbdb, 0x6c478855, 0xd33aa272, 0x0a145712,
+0x5e68da17, 0xee52795d, 0x789fb7b3, 0xc87e4b42,
+0xe4293d4f, 0xf0f0c094, 0xf0de02ff, 0x0636748d,
+0x8d56ed31, 0x837b0745, 0xdea56786, 0x5750028c,
+0x83280b45, 0x1ab4fafd, 0x7e03edfc, 0x684f48e0,
+0xec58518d, 0xeef70cb7, 0x51fc2fc7, 0xa9ed6662,
+0x7f7cbacf, 0x81ba0575, 0x7b1dc206, 0xb8520029,
+0x89b80e86, 0xad770f06, 0x5c77ee5d, 0x6807895e,
+0x427d6068, 0x736bdc09, 0x38fe81a6, 0xfebbf496,
+0x50965ad6, 0x267504b4, 0x364e07c7, 0xe84147c7,
+0x0c48efe7, 0x144c061b, 0x1c14501a, 0x77e0f022,
+0x68f75aa4, 0x40fc45a0, 0x60c5fc5b, 0x95eb0fb0,
+0x708bdd0c, 0x7fb61768, 0xbf283577, 0x50c6b506,
+0x0bd1e7d3, 0xbcb02428, 0x80a97f89, 0x88b0ee99,
+0xcb89edee, 0x8833788c, 0x80dddcd9, 0xf8d3895b,
+0xfa950ff9, 0x7be0d1c0, 0x7b7eedab, 0xc9f64c8a,
+0x0275e688, 0xbf30c888, 0xedb776f6, 0xc883158a,
+0x794b088c, 0xbb113dcd, 0xfdddf610, 0x8cb05876,
+0xb3e5d10a, 0x56c50901, 0x622df34b, 0xe97ffb40,
+0x2a08f7b0, 0x04fe1bb3, 0x5390a46e, 0xb968587f,
+0x53dc840e, 0x6db77144, 0x05efca1b, 0x06ff4f08,
+0x0b5bef0c, 0x6b98a50f, 0xb4b004b6, 0x3e905bc2,
+0x68ee37fa, 0xe0662e9a, 0x45e409a6, 0xe820f570,
+0x2df558d9, 0xaefc03d6, 0x74107626, 0x5908e809,
+0x460cea2f, 0x8bf685ad, 0x5c1a5c5f, 0x2fc48d8a,
+0x31ffa171, 0xf98341ee, 0xd0f37e05, 0xda41b037,
+0xdab78dee, 0x444ef76d, 0x897f00b8, 0x405675ca,
+0xef03550a, 0x167bbb5b, 0x9588d422, 0x24ef3056,
+0x42c2ee28, 0x251e6b17, 0xef534c23, 0x3eda059c,
+0x6ecd3fc7, 0x2d3c6f58, 0x8f08c3e9, 0x5067d6ef,
+0x76c48665, 0x874789e0, 0x86842425, 0xbe9da106,
+0x6820a96e, 0x5a136be8, 0x21abf30f, 0xee6877ce,
+0x1cf2040e, 0x86475d1a, 0xf310f46f, 0x315339fc,
+0xfec46f2c, 0xd0f668c0, 0xdee80ec3, 0x3bfb6414,
+0xddb46a77, 0x83c60def, 0x0c430047, 0xc883f376,
+0xd0fc09ef, 0x2c8d069d, 0xc1818690, 0x86e29b1f,
+0x55758dd6, 0xcb81efa3, 0x4e558d3d, 0x6d437b78,
+0xecf7e8ef, 0x12708db5, 0x7da03e27, 0x829a3573,
+0x0c256616, 0xded7c080, 0x33e0b82d, 0xf03920d6,
+0x5249de72, 0xbfc2837e, 0x8a548d27, 0x7428b510,
+0x01418d11, 0x896f8c42, 0x5818a3d9, 0x09c60566,
+0x985bc037, 0xa855f1eb, 0xc17bfb14, 0xe37f6150,
+0x836175f8, 0x8fdac4fc, 0x7496f886, 0x0e6e1655,
+0x9d0b6dad, 0x6dae1ae8, 0x70fdc3b2, 0x1f27036a,
+0xc68969ed, 0xef03f625, 0xee1d4ba0, 0xe93ea910,
+0xdefe830d, 0xa25a1b0b, 0x76aaee70, 0xec8d1b1d,
+0xbf4f7360, 0xe5751a29, 0x85d231c2, 0x4960da0d,
+0x166587d0, 0x7eeeadc5, 0x003dfcf7, 0x644f4520,
+0xfcbb6476, 0x53d32955, 0x374d42d3, 0x5658d8b9,
+0x0b9ee860, 0x9fd27189, 0x3ad8c2a9, 0x5f036ec3,
+0xdfd7f960, 0x1588dc06, 0x8c350322, 0x1707468d,
+0x5e2562e6, 0x05f60aa3, 0xefb12fcd, 0xb910db6b,
+0x51b6af38, 0xa3cfefc3, 0xebec06c7, 0x415c5185,
+0xb7eb0c46, 0xd0fb406f, 0x93015cc6, 0x17081176,
+0x00a8b71a, 0xbb528b75, 0xb636c237, 0xeeb11c17,
+0x25062d0a, 0x49307fac, 0xad6fbb58, 0x0dc34c07,
+0xf64d8053, 0xc60ccb90, 0x0b90b6e6, 0xed5326d9,
+0xfe3190c7, 0xe8ef3868, 0x53db55fd, 0x1c9a50f2,
+0x7a24562c, 0xbd77134c, 0xfa810183, 0xbeab6948,
+0xeb0ed03d, 0x3d8d806d, 0x05c61310, 0x9e261c0d,
+0x481a5bb5, 0x7722126f, 0x85dd523a, 0xb024a3ad,
+0x0ec50350, 0xcf637823, 0xbb08fde0, 0xffc8c33c,
+0x5ffa8954, 0x6d361588, 0x555b3ebd, 0xe8013f56,
+0xe24b5c19, 0xb76dc4cb, 0x752e5041, 0x4ce819c2,
+0x1f445c68, 0x91c3601e, 0x3d5630b8, 0xd52db62a,
+0xc61753e6, 0xf00b4005, 0x175c1637, 0x1833dce8,
+0x57a7e803, 0xf81b6fdd, 0xd6c81556, 0x5884665d,
+0x1ee85975, 0x3a27e8dc, 0x17a9dd76, 0xe84f6e04,
+0xdae880d1, 0xeedba471, 0x13ba2468, 0x3d0ee953,
+0xa8fceaff, 0x6716836e, 0xdc0d5f18, 0xbbae0860,
+0x5e1763c4, 0x00c3f275, 0x5b572aa9, 0x8ebc0c84,
+0x0da1115b, 0x26b63703, 0x1017151c, 0x78e0e7c2,
+0x1407c18f, 0xebc73be7, 0x064fa187, 0x25ba23bb,
+0xff681cfc, 0x6ea37100, 0x4bc705a0, 0x3369e8fc,
+0xafa9043d, 0x7e091a96, 0x0f71be0c, 0xdb20e21b,
+0x440802fb, 0xdbc1d58f, 0x6c36ed74, 0x7e035cb7,
+0x27e48417, 0xff54eca1, 0x43a15b50, 0x17cba72c,
+0xc0fd2728, 0x74f0f7ee, 0x613b6826, 0xf43d796d,
+0xb5bb0220, 0x0b376cff, 0x0e097f58, 0x31d47ef8,
+0xe1d0ebdb, 0xf6360895, 0xf4eb030c, 0xc3c5a209,
+0xe022a21f, 0x0fe85d74, 0x5bd87e23, 0x893cf4c2,
+0x2818ab75, 0x5d0db91c, 0x51d900b8, 0x38f0a3a2,
+0x9b30fd82, 0xc77c4e5d, 0x8025e405, 0x2fe8125d,
+0x300939a8, 0xb6348d33, 0x265436d9, 0xcfe74303,
+0xe7f876b2, 0xe604b5b6, 0x7c04008b, 0x77fb8111,
+0xb9d72110, 0xe92857dd, 0xe4280430, 0xc1890e7d,
+0x53575f62, 0xba04f873, 0xb7f12c5b, 0x5916158b,
+0x5bf17a83, 0xc6ffa107, 0x66e884ec, 0x1939eb22,
+0x7420423b, 0x3bb76814, 0x124487d8, 0xe9ad3a5a,
+0x02bb78ce, 0x66c1df09, 0xa204c5cf, 0xf0b1e9b6,
+0xd4c15e83, 0x208edb00, 0x6a37716a, 0x82abd76f,
+0x5e23a158, 0xc200a6d6, 0x907bfdf7, 0x0c8d4362,
+0xe1a1359d, 0x6a162cd3, 0xe62e8174, 0x079efd0f,
+0xb61ac70f, 0x89b6035a, 0x62158924, 0xb0b84f7e,
+0xc46a0a84, 0x039e0975, 0x7a6c0a74, 0x08fe52ad,
+0xf8397fc1, 0x0b52c533, 0xa2d4eca9, 0xdf8b1ce4,
+0x770a8bec, 0x89d440c7, 0xb6fbf448, 0x1c705b0b,
+0xbb75200c, 0x8400e94b, 0xd40de2bb, 0x1378e802,
+0xfdf1e9f6, 0xf70b1833, 0x5cfd8a70, 0xd5ed35a4,
+0xc2664777, 0x0f970832, 0x3d25c588, 0x5d001f76,
+0xc709bbe9, 0xb1c28105, 0xe80ef88d, 0x328b4293,
+0x8d8cf685, 0x72dcdee1, 0x8e0fb21c, 0x618c076a,
+0xeadd830e, 0x0001b12d, 0xb48d5652, 0x0fd09e86,
+0x99788321, 0x05872724, 0x85ce4bbe, 0x03018c39,
+0x3bdbf004, 0x2c68eed2, 0x2abb59bf, 0x4b1ee913,
+0x01baeb86, 0x53d7ae47, 0x4aa1bdf3, 0x7b719fc4,
+0x3c89b10c, 0xbcd88a24, 0x31078a50, 0xc2fe25ba,
+0x10d284f6, 0x0c743a3c, 0x0b3e5446, 0x81b76d04,
+0xbbf4755f, 0xfbd37548, 0x1e730550, 0x7a463a7f,
+0x4ac0338a, 0x30020c70, 0x0db3c6df, 0x721d08c8,
+0x5a354be2, 0xdcd03e68, 0x5306568f, 0xda8a0938,
+0x89d81bfa, 0x699d01d6, 0xa9764a4f, 0x6ad33f75,
+0x27656803, 0xfbf8698d, 0x02d04e3a, 0x881e0a34,
+0x5ffdda01, 0x894e94aa, 0x78802414, 0x1a742f03,
+0x5250a88d, 0x5827a9fd, 0x081e1223, 0x3a388025,
+0x737a705e, 0x2a2fec4b, 0x89752f09, 0xd78b6ceb,
+0x4c69d26d, 0x37357ea3, 0x5d02eb79, 0xcc40bd11,
+0xb61b0453, 0x81f13e06, 0x8d0ab240, 0x9f7152c6,
+0xebc0fe9f, 0xe2faa34e, 0x21e890b6, 0xddfb0887,
+0x9b086ac6, 0x6a00902e, 0xe0b3ebfe, 0xe4c1b167,
+0x8005ffff, 0x833e653d, 0x5f14301b, 0x1f74288e,
+0xe0563ccd, 0x1652d454, 0x551d860f, 0xac36fde1,
+0x8112ee81, 0x8ed705c7, 0xdfb6b97d, 0x298e88c7,
+0xb6852460, 0xedc860ad, 0x0b64a005, 0x230f68ff,
+0x25801eee, 0x89105c29, 0xbe822bea, 0x1ed59c2a,
+0x4a11a35a, 0xd0708db4, 0x8af284f6, 0xaa16ddbd,
+0x88d5192b, 0x893803e8, 0x8dba370d, 0x48a24ff7,
+0x3c53d63c, 0x09c8840b, 0x077cb1f7, 0x5434ac02,
+0xefbb201a, 0x68a3775f, 0x8a04a106, 0x13a3240c,
+0x58a34403, 0x7ab90b7a, 0x15f7696f, 0x73685b42,
+0x57ee1455, 0x02904e3c, 0x7a57ec3d, 0x4ec9842a,
+0xb55b7490, 0x4b764a84, 0xcec41734, 0x74ce7c51,
+0xfdbb1a37, 0x39179995, 0xf3aa76f3, 0x6c575d53,
+0xaab044b7, 0xde76398f, 0x3a232029, 0x1d0177e2,
+0xefdf011a, 0x144b97ef, 0x5ec7c072, 0x50825dec,
+0x5fc3843f, 0xffffe361, 0x72377603, 0x701caed1,
+0x036d47e9, 0x8ebc1b1d, 0xe941a3c5, 0x14b4a53b,
+0x87bf8847, 0x92444806, 0x7b507958, 0xb76f4090,
+0x52d115b1, 0x0515507e, 0x7da082ec, 0xf34844a0,
+0xc733e23e, 0x24dd13e2, 0xc02e7c20, 0x05f61935,
+0xbd4bbec1, 0xbba89045, 0x08dbd0fe, 0x06dd7b6e,
+0x68057095, 0x21483c49, 0x60a9f740, 0x53e95442,
+0x0644901a, 0x37ca3058, 0xd230ce14, 0xa2128876,
+0xd04b1810, 0x182a3407, 0x1b29ca2e, 0x084466d0,
+0x662907cd, 0x34efe1e2, 0x32e80557, 0x602807ec,
+0x8a5df886, 0x35628068, 0x4851b64e, 0x60a6bd1b,
+0x508d0310, 0xd358a515, 0x0375ba2d, 0x4dc753c2,
+0xaa608efe, 0x2a367134, 0xdc3d95e2, 0xad7285ad,
+0x141a4c0f, 0x3502bb07, 0x7710eef5, 0x7614050f,
+0xad546609, 0x581b6868, 0x5231c31d, 0x2974ed03,
+0xdf89c8ee, 0xfb398303, 0x35882b54, 0x01dc9103,
+0x6a170683, 0x7308acff, 0x8d138b29, 0x8d468042,
+0x6db1d64b, 0x348d0ce3, 0xc0e74386, 0x77302c0e,
+0xff6f8e6f, 0xfa830b77, 0x083e7408, 0xd772eb89,
+0x29743218, 0x4cea7783, 0x74403cb7, 0x28579e23,
+0xa3fb079d, 0x4e245dd8, 0xd1787520, 0x3433e967,
+0x6f77ac0b, 0x68080624, 0xe8511a8e, 0x2d0836f2,
+0xae3b40b4, 0x6cf83d66, 0xda16d540, 0x147704da,
+0x03e89e83, 0x5d5ddb78, 0x75d312a2, 0xeb04aa93,
+0xfd03188d, 0x75ab7d86, 0x2b068bb6, 0x66e5bc74,
+0x7c0ec3a3, 0x3589f2f8, 0xc866e90b, 0x7fd21d37,
+0x0e57654b, 0x4fe92434, 0x6e1ccdff, 0x95c03e81,
+0xc48631a6, 0x88466b32, 0x93e5ff8d, 0x4bd0ad00,
+0xfeab946f, 0x74c809d8, 0xf8c82534, 0x2d03d339,
+0x0e72fa6d, 0xd8c4870f, 0xbc2cc139, 0xc21ec183,
+0xc7253d5f, 0x053ed405, 0x8bba09d0, 0xd8a1dc06,
+0x6b442308, 0x77fb2934, 0x772d4a14, 0x343ef229,
+0x576cfa01, 0xc0a1e0b0, 0xd48ee4ad, 0x720b2d35,
+0x2efc11a9, 0x683aadc0, 0xa36f1268, 0xac610713,
+0xed0cd62a, 0x62ed312b, 0x7e70ab62, 0x69adf1df,
+0xa12e740a, 0xcc15aec8, 0xcb80bc7b, 0x83cce376,
+0xd0e6c0be, 0x61a007ff, 0x624517b0, 0x3920c683,
+0xa1e67cc5, 0x78574437, 0x9beb3e3d, 0xe6c1c677,
+0xf75ff7da, 0xcc868b05, 0x897aa32c, 0xc48e8bf8,
+0x09efdb69, 0x9435f23f, 0xc1291358, 0x1189d319,
+0x84f742d9, 0x25d0861d, 0xa534f23b, 0xe9820f78,
+0x3245ba82, 0x0c0025c8, 0x584c2fb7, 0x5e493499,
+0xdf11c601, 0x3b350116, 0x4f7e7c2d, 0xac0f3d11,
+0x2c3d8958, 0x6e5336d6, 0x4afba1ff, 0xfe3f8238,
+0x1537a2da, 0xd9985e34, 0xee9215b7, 0x290719ba,
+0xdf1031e6, 0xc22f750c, 0x0aba1a90, 0x2f5b7e09,
+0x13cc0d14, 0x40269cdd, 0xaf6da555, 0x9a4e0957,
+0xe06a6c66, 0x34a4f5e8, 0x0b0a696b, 0x6943ee43,
+0x056e4deb, 0x52e82691, 0xa21da216, 0x2a65de00,
+0xd6211680, 0x2c710e60, 0x36e77f09, 0x4b29d05a,
+0x788dd539, 0x5c1a7d34, 0x2db04270, 0x5a494576,
+0xc15a15e8, 0x817fa5c3, 0x68f08f5c, 0xaf5a99a8,
+0xb6ff5c4d, 0x30bb2cd4, 0xf1f2a984, 0x4d6f09e2,
+0x214b63bc, 0xbe03941a, 0x1beb2921, 0xa9b4381a,
+0x43735c5f, 0xc1968d47, 0x84be15d0, 0xf991f887,
+0xbbe29514, 0x1366c271, 0x77a8d339, 0x261c8290,
+0x876e087b, 0x07148290, 0xb41674de, 0xb7ddc6c5,
+0x8b22808b, 0x40423937, 0x048ff4b0, 0x890ddbf7,
+0xe9e9202d, 0x3ce9d30a, 0x73d48d7c, 0x405b923f,
+0x43d48b6e, 0xa6f210a0, 0x7037ddba, 0x86418abf,
+0x261020a1, 0x7ab75206, 0x988dee89, 0xc7502600,
+0xeb50501e, 0x8a7000a1, 0xf4c0623b, 0x592b566c,
+0xedd2215e, 0x32f3179a, 0x8336ffd8, 0xe8190a0d,
+0x035b462d, 0xe29a8cf4, 0xec41bf5e, 0xe2c3e894,
+0xa3603c53, 0x61344abc, 0xe0715a23, 0x2d50e81f,
+0x6ce67460, 0x0cec91b7, 0x90046a0d, 0xb5b80729,
+0xa0c0456a, 0x236deeeb, 0x68c5fa1e, 0x2fd77b96,
+0x014258fa, 0xd984a814, 0xd4281027, 0xe95bf683,
+0xd2077f07, 0xc740bad6, 0x03c0246c, 0x46e0ce2c,
+0x013ee893, 0xc28152c4, 0x2781f82b, 0x7612d51f,
+0x7ddc050f, 0xc5d7056a, 0x3461bb59, 0x54ece0be,
+0x34181ced, 0x3bb1d818, 0x105c24b9, 0x000c0b10,
+0x9f020809, 0x257304ae, 0x65035d51, 0x6db8a024,
+0x750a8855, 0x134a815b, 0x3d0c3014, 0x19aadbb1,
+0x3b573e15, 0xc5137691, 0x5e76eb6d, 0x2b092b2c,
+0x89e00807, 0xace046e9, 0x140c1b2a, 0xe0345531,
+0x80480be1, 0x034deaa0, 0xe3468bb8, 0x888be2c7,
+0x00964edb, 0x32988bb3, 0x025bb8b0, 0x70da4eee,
+0x2e857228, 0x6dd6b6c8, 0x9d7b639d, 0x71fdfa13,
+0xc6137209, 0xf5db8468, 0x2bff6709, 0xdf6ca910,
+0x0ce42bd2, 0xc0396878, 0x03a38168, 0xe91420f6,
+0x7d001a76, 0x7b1e27f6, 0x9c68e3b8, 0x5a215f77,
+0xc42d56e9, 0x650f0dc2, 0x8d1c6353, 0x01cabd45,
+0x67bc22b7, 0x262575e8, 0x4bc7390b, 0x7b75384f,
+0x140d4514, 0x66143e47, 0x3b837741, 0x28ee7235,
+0xf7ef0059, 0xcc3595fb, 0x8bc48603, 0x9613d296,
+0x6ed7e2c8, 0xcf778901, 0xd3891c10, 0x11df847f,
+0x249e031c, 0xc37d818d, 0xc2390676, 0x307b4273,
+0xc20f6903, 0xc7090c76, 0x2ff606ee, 0x34a1c215,
+0x0a1e24be, 0x8df4153b, 0x1ccd1dfe, 0xd8f7e889,
+0x21ff1521, 0x41fd57c2, 0x3e225ca1, 0x843bd329,
+0x69ef409a, 0x61cc5a82, 0xb43b2ad7, 0x2e2b8d04,
+0x27f1e1bf, 0x5970073b, 0x330f4974, 0x05ad7501,
+0x68f0e1e0, 0x714d11ac, 0xe1a3995e, 0x582080b3,
+0x2d2924b8, 0x430781d4, 0x018a3534, 0x0aad2360,
+0xb3e84b1f, 0x0d91e82d, 0xaf5b8169, 0x39db982c,
+0xde283bd6, 0xe00ded12, 0x77c3615d, 0xd20c0f57,
+0xa1de9605, 0x9709d510, 0x3b5aa930, 0x203f8370,
+0x0155c529, 0x2015d8c7, 0xb1101dbe, 0x3f3bc0af,
+0x208520c7, 0x0c5a6300, 0xa04653b8, 0x61476a95,
+0x06396f64, 0x21c7dfed, 0x3d8bad72, 0x73ef3907,
+0xc0de182d, 0x05de17ed, 0xeac1071a, 0xfac93109,
+0x8d8dce19, 0xdbc78a5d, 0x898a8938, 0xad6ca39b,
+0x2930fbd5, 0xc9f8052d, 0x2587286a, 0x2c0982d9,
+0xf836e87e, 0x40cdb82e, 0xa0a35e11, 0xa519ca5a,
+0x638787c7, 0x2c321ab2, 0xfe36922c, 0x1163bab3,
+0x3e815457, 0x1b031336, 0xf3d2f174, 0xaf0b6add,
+0xcc682bd0, 0xc46f0928, 0x8159619f, 0x10ba9b28,
+0xbfe03a22, 0xf418fb40, 0xb9c0a107, 0x106a372c,
+0x41116856, 0xadd68e03, 0x454a9181, 0x379c2289,
+0x25422d48, 0x360e86be, 0x5207908e, 0x7e87b570,
+0xc750a3df, 0xfbef315c, 0xf7a2208a, 0x598fbc06,
+0x44a18674, 0x250f5ae8, 0xf52f5cf0, 0xe51d2996,
+0xf73c8d96, 0xdfbb003f, 0x3d7d5b78, 0x07864274,
+0x8a5a72c4, 0x16216f47, 0x3ac003a9, 0xc7db47c2,
+0x1b7df021, 0xea5659a1, 0x3a2d03f7, 0x81553076,
+0x02ea53e2, 0xdeacfc67, 0x0182550b, 0x013a2805,
+0x7c221cba, 0xad23138b, 0x0374d8e9, 0x60500847,
+0x142b5aad, 0x06fe0704, 0xfd881ecf, 0xe80477ff,
+0x3c60ae40, 0x5c5f037d, 0x08abd3ec, 0x078ac441,
+0xdb73b2b7, 0x97c5a46c, 0x1b5597b5, 0xb98f48b4,
+0x46e9a527, 0x96e9b10e, 0xbc0ba7fe, 0x57573a60,
+0x332061d8, 0x245e9577, 0x9242715e, 0xfe32dc34,
+0x366e0035, 0x0d3dbac0, 0x464c457f, 0x026e0fbb,
+0xa1d6ebd6, 0x004c2595, 0x0be0f63d, 0xd00001b4,
+0x90a166eb, 0x2d487ebf, 0x77a981f1, 0x6794b1dc,
+0xdb7016d9, 0x08a838d3, 0xc72320d0, 0x44eeeef8,
+0x740320cc, 0x75060506, 0x30d268b5, 0xe47d18df,
+0xd7782a24, 0xf4a2180b, 0xaac4693b, 0xd0af06ac,
+0x12e8e5e9, 0x5e78de70, 0xb51d493b, 0x97abb00c,
+0x76a20a61, 0xefa6bc6d, 0x36dd6815, 0xd7b85be1,
+0x241d3753, 0x5295d47e, 0xdfc801e7, 0x85df2c72,
+0x72c38b6f, 0x1403a33d, 0x3d860151, 0x7d180ec1,
+0x05fb005d, 0x986b09c4, 0x3074c488, 0xf7354247,
+0xfdb03df1, 0x04407a83, 0x15c6f235, 0x358e4218,
+0xf5f82080, 0xedd07c0f, 0x4dcb64d9, 0xc12b2d43,
+0xd84344e2, 0x788291d6, 0x405eed40, 0x5f64d1d3,
+0x05c7d642, 0xb0cc90c8, 0x5794a303, 0x3709d86b,
+0xb8786a1e, 0x3fd025ea, 0xb22f4075, 0xf0687ecc,
+0x300c2b0f, 0xd0240c89, 0x405a8ba6, 0x350bc5bd,
+0x03f56a0d, 0x55536d6a, 0x30ee0151, 0xf8f8a86e,
+0xdb101847, 0x22337208, 0x4ef3b213, 0xdbd28459,
+0xe94b823d, 0x8852fdec, 0xbb3743c4, 0x7e8609dd,
+0x5268f87d, 0xe8243651, 0xb11b1076, 0xe5b635a6,
+0xf83d8bfe, 0xa48c307d, 0xbecb0448, 0xecfd0b01,
+0xfe261342, 0xe1c1d189, 0x1184b952, 0x98a3460e,
+0x0cc71000, 0x9c6fa54b, 0x89a68dda, 0x6ec721f7,
+0x6d037dd8, 0x1e8675d5, 0x2b63565d, 0x681b8451,
+0x72f9a1ee, 0x894c76c0, 0x1acb46c1, 0xc72b1a2d,
+0x842967de, 0x267dc21f, 0xcc8801bf, 0x0e01b5a9,
+0x01dae8f1, 0x8dce640d, 0x5dc56b15, 0x2799e86a,
+0xdfb8fc8f, 0xeea56d1d, 0x8c998d49, 0xfa40433f,
+0x4aa9fbe0, 0x8103b0cc, 0xc6e844d4, 0xfa36dfd3,
+0x395018c5, 0x3e860ff0, 0x0579c6b5, 0x71235f98,
+0x01fd6cb1, 0x5d8c0a26, 0xd87c4cd2, 0x5d770e02,
+0x0ec1f729, 0xda263163, 0x9b3235ba, 0xfa120108,
+0x742dbf21, 0x400b76c0, 0xa0105f10, 0xd93941d0,
+0xa3805a72, 0xf70fd7b7, 0x7f215bd0, 0x28605d73,
+0x79f7cb45, 0xe8bae73d, 0x1ad2f7f6, 0xd28e0274,
+0x68213320, 0x423d58ef, 0x1a062d05, 0x28d8afe6,
+0xf08eecc4, 0x5eb78265, 0x08474c83, 0xd1a4b952,
+0x1c2eff6f, 0xc96933ad, 0x29da890a, 0xd269b2ca,
+0xa1b5684e, 0x690b9cb7, 0x2934b3f6, 0xa8d15cf2,
+0x2d1857f7, 0x06a10978, 0xddfa967a, 0xab82472e,
+0x0ea37f58, 0xd419eaeb, 0x097ba057, 0xc4440596,
+0x0660bfc4, 0x0159d2a0, 0x26991a5d, 0xf4b42c48,
+0x7501e4a4, 0xa05b1727, 0xf674fa01, 0xf886eee8,
+0xd0041ad3, 0x047806e9, 0xe2b31574, 0x859dfdba,
+0xc09e1b7f, 0xcac9d368, 0xebed17ff, 0x77da90e6,
+0x2abae829, 0x12ef6b5e, 0x0c1de84f, 0x7eef4274,
+0x0773d839, 0xeb31a2e8, 0xe3c35bf0, 0xdb92dcf5,
+0xeff3edf1, 0xed0e8958, 0x744d1dc6, 0x6a7bcbf7,
+0x7453e82e, 0x43f5eb58, 0x0dc42808, 0x84118af4,
+0x1074ebd2, 0x2f16318a, 0xe26e2370, 0x38df1ddf,
+0x52b774c2, 0x138afb9d, 0x100a018a, 0xd202cd0f,
+0xb6dd8c29, 0x41c36f0b, 0x742f432e, 0x4cde2be4,
+0xe893c08c, 0x5127d2eb, 0x168b71ab, 0x242c4597,
+0x1c8bc5ba, 0x1c239b5e, 0x50b59d4e, 0x4c142a16,
+0xe80795ae, 0x07ffe25e, 0x77c6b9b5, 0x02ff8337,
+0x428d0b7f, 0xfedf8501, 0x3a80efef, 0xc127752e,
+0x094708e6, 0x7e0315ce, 0xc0f089c1, 0xed0a1ba3,
+0x0410c8c1, 0x891cdb81, 0x81a11d30, 0xe829b548,
+0xc1f65dea, 0x94aa7ba2, 0xc50a29ef, 0x4c15ad0c,
+0x05741d7c, 0x50a18e2e, 0xff77d83e, 0x77093cd0,
+0x0ac36b14, 0x5c8d41b5, 0x7613d002, 0x0df685ec,
+0x18370a05, 0x9dea0e89, 0x4b06de4b, 0xbcd28ef5,
+0x64e41258, 0x841988ec, 0xe0edcb77, 0x0775d301,
+0xe80de002, 0x6b5bd2c1, 0x047ea978, 0xdeeb60e4,
+0x24016895, 0xbf14fe54, 0xbe85c1e1, 0xb054bdc1,
+0xe864e6d1, 0xdda1b8b4, 0xe6df087e, 0x4753ae26,
+0x0afb836f, 0xb71384e1, 0x09bcd00d, 0x6cc3137e,
+0x6aad889b, 0xeb42de50, 0x31bb77ec, 0x881377e8,
+0x4ad34fe8, 0x9a681875, 0x74db0680, 0x360d36ef,
+0xdc85bb12, 0x2debae1b, 0x200ae8f5, 0xac55627f,
+0x8edfebc5, 0xa93a9329, 0x0c9f0ac3, 0xa90dc68f,
+0x815f5d0f, 0xc581bcc6, 0xf0530a4e, 0x8de8f142,
+0x28a36b78, 0x00795e94, 0x8d83fff0, 0xc2d19cdc,
+0x60bb3f02, 0x83260051, 0xf7c3dc51, 0xec6d8f53,
+0xdd2dc381, 0x56882b74, 0xc1670555, 0xcc85d7ee,
+0x9404e068, 0xebe50423, 0x0daee807, 0x1acf9484,
+0xa93ec7e8, 0x1521c833, 0xcf839315, 0x9eefdb21,
+0x97778b3d, 0x86545817, 0x220553e8, 0x8b8b6e30,
+0xc7bf6e17, 0x9303cab4, 0xc3c1831a, 0xf08ef0e1,
+0xa9b75539, 0x0573caf7, 0x828c25ba, 0x16f72753,
+0x83cadd6a, 0x0211750a, 0xf16ba990, 0x740af896,
+0x3e07ea7b, 0x6bdc2826, 0x6d2cca19, 0xff47ab1e,
+0x2083f8dd, 0xd689c50b, 0xdd9e17e9, 0x0c5237fa,
+0x8de2a818, 0xc8d470b0, 0x9eb2c22a, 0xab10a32b,
+0x73087f09, 0xbcdca13e, 0x13abda5f, 0x123fc216,
+0xac503dbf, 0x042d59c3, 0xe6abc7fa, 0x1ef5674a,
+0x3826a35e, 0x12bc38a3, 0x63d597a7, 0xbe34a33b,
+0xacfe68a8, 0x81812e28, 0x5daf4c46, 0xa2a7dbe6,
+0xd9ebf26d, 0xa7757d58, 0x3cfc5808, 0x8b9e23c2,
+0x03cb1a8f, 0x73cb399f, 0x47785ff6, 0x76ce39f0,
+0x0e739e12, 0x3877cd39, 0xa9e8de39, 0x75cf1b81,
+0xc82943f1, 0x06001089, 0x055e0dba, 0x3b155faa,
+0xde0b9dfc, 0x1f558202, 0xc0890d1f, 0x9d4a2276,
+0xa673375d, 0x101bad1a, 0x35d9c889, 0x758df5f1,
+0xeb42c083, 0xa5a145be, 0x1b7c4529, 0xfc48ed2e,
+0xc40d3b85, 0x2c5df673, 0x3102ade2, 0x8d1889d0,
+0x06754841, 0x280dd8f0, 0xb9e5ebd0, 0x28478114,
+0xf843854e, 0xb06ff129, 0x217fb1a7, 0xf8598dc1,
+0x06411d3b, 0x2d435fa2, 0xd8e696e5, 0x4106fc30,
+0xd19858c8, 0x1533352b, 0x40b69003, 0x223b7034,
+0x83405c24, 0x8d4bb106, 0x03f09ffc, 0x0e071336,
+0xc25d80c6, 0xb52fa65d, 0x03343c18, 0x8b27b72d,
+0x44b6bb42, 0x8939fc89, 0xc27824f8, 0x939acd03,
+0xd1300db1, 0x46afc1c1, 0x47335a26, 0x32a00489,
+0xd3598941, 0x0b5a991f, 0xb6ec084b, 0x882c5b2a,
+0x4d5a5905, 0xdd7dec1c, 0x0314160c, 0x8c1f0453,
+0x9a604a82, 0x08bac022, 0x0e62b545, 0xa69ce496,
+0x8039a21d, 0x594edb01, 0x3b904dc3, 0xbc14d753,
+0x7e20684d, 0x21042003, 0x02bbbae2, 0x8314da34,
+0x11791968, 0x09e3ba45, 0xff6a16ec, 0xa6cd74f3,
+0xe64035ff, 0x2a2ebe66, 0x0f281c2a, 0xc8348210,
+0x18329e6d, 0x2a1e5ea1, 0x350b7cda, 0x3dc20d21,
+0x58590116, 0x2cefd475, 0xef114563, 0xf3582d1f,
+0xefc0a675, 0x155027fd, 0x733befd9, 0x54a12737,
+0x155c3d26, 0x07d12bc3, 0xfe5a8237, 0xac2dfb36,
+0x5def754b, 0x42745807, 0x172608b8, 0x655fdba7,
+0x689d1dbe, 0x3d972b69, 0x991ca3eb, 0x7f6818ef,
+0xcb9d8610, 0xb1730f05, 0xca7c78e8, 0xe144cca9,
+0xbf7ffd5d, 0x109f6653, 0xff740806, 0xa0e12ddc,
+0xa47a463f, 0xf17629cd, 0x4b007752, 0x8174a07a,
+0xa97e147b, 0x75f886ed, 0x0d046ae3, 0x6c1c438d,
+0xa20dec08, 0x232e3681, 0x22decacd, 0x1643f1d1,
+0x0aba6b50, 0x21c31e59, 0x44135200, 0xadd76402,
+0x1deb46d3, 0x3c7d240c, 0x5d10558b, 0x582edae6,
+0x342414e8, 0xb020b646, 0x0e356b04, 0x05230837,
+0xf729324e, 0x0e9f6d88, 0x8bf6c203, 0xb019b827,
+0x5f036341, 0xfefd6446, 0x6da8e8ae, 0xc904f37a,
+0xb016f5f5, 0x6bdbfef4, 0xbc800ac6, 0x06847303,
+0xf47dd17c, 0xed7e05f6, 0x28740604, 0x681c3c11,
+0xec1d13d9, 0xfdcd9301, 0x7b96b8bc, 0x24d2341f,
+0x012566de, 0xaedefd06, 0x23c955ab, 0x04090406,
+0xdbc4d610, 0xd8010436, 0x14253b68, 0xf672cc3f,
+0x0403efc7, 0x26104068, 0x6160b6de, 0x3a8d8f89,
+0xd6d9e316, 0xc701a245, 0x24045004, 0x082c7b1e,
+0x03bbbfcd, 0x681c6a16, 0xe1a84664, 0x75649982,
+0xb4b03f7a, 0x1fdff80e, 0x00139e91, 0x50383300,
+0x3a386856, 0x8faeab05, 0x28340cbe, 0x430333c8,
+0x0362d8dc, 0x0f14fbbc, 0xb5eb9f8f, 0x60a58c79,
+0xb3d27a01, 0x1f495aec, 0xe9d073f6, 0x68ee0d31,
+0x10e95c00, 0xc28c10ff, 0xe0b58b35, 0x577f68ae,
+0x45408d70, 0x43c60388, 0xb90f5891, 0x98b712a2,
+0x42bd8895, 0x9c43a1ed, 0xda310610, 0xa045b785,
+0x10062a15, 0x22fb723f, 0x433d452e, 0x0506be04,
+0x14c2ed03, 0xf5e3301a, 0x0526a6bb, 0x585b0c37,
+0x516c4911, 0x09171573, 0x18a31136, 0x5bdc4329,
+0x88bbf578, 0x704917b7, 0xbe147e8d, 0x6c35eb83,
+0x8014b1bf, 0x024782df, 0x476d5f03, 0xca5c45cd,
+0x0b23c05c, 0x68230b77, 0xc36689ef, 0xc33e1506,
+0xd18deef8, 0x68a61c87, 0x6a565318, 0xbfc7bd3c,
+0x0450dd06, 0xb028a366, 0x236bf1d5, 0x9341b08a,
+0x3fc3e6e3, 0x14563839, 0xc40c6823, 0x28a9ea0e,
+0x4610c037, 0x88bb63c6, 0x25744214, 0x3910404f,
+0x1106a37b, 0x97c8ec29, 0x1a9c40ed, 0x13602ac0,
+0x1ef54f8e, 0x892ec1b9, 0x715796e3, 0x453418e4,
+0x1e059800, 0x85a21e00, 0x59393f11, 0xd586c989,
+0xd603915d, 0xb457adc8, 0x39ff0997, 0xe0ba193f,
+0xc1a868c3, 0x5e021bf1, 0x711e081f, 0x7132aec8,
+0xf108c7d1, 0x1c93529f, 0xd42e2239, 0x0c18f708,
+0x7eedae1c, 0x9d86e6f6, 0xd8500642, 0xc56832ff,
+0x401e6849, 0x18ddda26, 0xdf1b8ce8, 0xf7ab1fc0,
+0xca688975, 0x91b40d93, 0x03611b00, 0xb82305b9,
+0x5241ae0a, 0xb759b75f, 0xc90c1758, 0x15108a51,
+0xd82bddb6, 0xba5fe34e, 0xa8bc08b7, 0x0722d9ee,
+0x7c5b02c0, 0xfa7d6b1d, 0x74ed30f7, 0x75171c0b,
+0x19e28c0a, 0xeb5f0eb1, 0x361145c7, 0x3a1780d6,
+0xc2504a48, 0xddbea267, 0x36b83dc0, 0xb72be80b,
+0x39eb61f4, 0x24d57f23, 0x7a09a194, 0x428aea0d,
+0x3c7a7444, 0x39b1b7ec, 0x29fa3f6d, 0x50770ca3,
+0x2f64ba4b, 0xff66f834, 0xb844d005, 0x774833b3,
+0xd1b4b607, 0x4837b63d, 0x82ae14e9, 0xaf638358,
+0x09120cd8, 0x950b325d, 0xe1d63db4, 0x5840e9c2,
+0x0e4b8dde, 0x9a11417c, 0x8d12ddc3, 0xaa08f670,
+0xa584127d, 0x1c0b6c62, 0x1505de0d, 0x96d58d2d,
+0x0512ca46, 0x84efb88f, 0x08db382d, 0xa8a1644a,
+0x6c759b00, 0x1e926a2f, 0xe6369ba3, 0xf3c64218,
+0xc5ad20c2, 0x1fc9d436, 0x8b66dee9, 0xaeb6ecee,
+0x1e7cf211, 0x397d424c, 0xb18960d0, 0xc00d5f5d,
+0x028dd616, 0x5c0b85c2, 0x6f8e7725, 0x8d73892e,
+0xb76d2b47, 0x2fa3d9da, 0x427b0ec0, 0xf70805fe,
+0x0bad40b1, 0xbc9c2003, 0xe1141685, 0xb10c5b04,
+0x88b5925c, 0x190d0fad, 0x06f8114d, 0xb850445c,
+0x43586dc3, 0x01d5562c, 0xf112c6d0, 0xbb92a5b6,
+0x241ff677, 0xbd1a3428, 0x19428fed, 0xe1eeb09c,
+0x5850ad52, 0x7672782b, 0x014352ae, 0x0efe505e,
+0xbb78477e, 0x47148a35, 0x0f9c0641, 0xcb0eed8e,
+0x682dec7e, 0xae2098dc, 0x1f1942f1, 0xa4171d6f,
+0xaa18e1e8, 0x14479b21, 0xa5cc0842, 0x081b861b,
+0x8ee91c58, 0x0eea3728, 0x3b4fa91e, 0x59e8f2e1,
+0xba210975, 0x80e82e6f, 0x967e077a, 0x8901508d,
+0xe115380e, 0xf22d36ae, 0xd272d0c6, 0x85412c53,
+0xc51de560, 0xde8f0767, 0xb7a3ec12, 0xb7ef9b12,
+0x67c9c3f0, 0x6a2e538d, 0xf2688352, 0x40fba05d,
+0xcb9f57b8, 0xb8721be9, 0x7dc20474, 0x093be9a4,
+0x5f3b8011, 0xd5b6f0a0, 0x743c0415, 0x8d4d6116,
+0x93801804, 0x78d5c258, 0xeb1fa702, 0xb0c0563c,
+0xe6096ac0, 0x6f5e417a, 0xe8b3123a, 0x0c061ae1,
+0x01a3ce75, 0x2dabb40a, 0xe29b1cd6, 0xc9a0d0a3,
+0x817feda6, 0x46efa65e, 0x8d21156d, 0x11762a5f,
+0xb8add208, 0x874ad1d0, 0x0774ee3b, 0xddbdd04e,
+0x7f804d15, 0xa1f3632a, 0xb8391b24, 0x922f0b85,
+0x7b66e975, 0x2a990fab, 0xbb6c9a37, 0x756c961d,
+0x723e473e, 0x0d46e06e, 0xc0c7ab46, 0x005746f3,
+0x71cec30b, 0xd7d88b55, 0xdbb0fb85, 0x211443ef,
+0xbf64a314, 0xa958044e, 0x068e6c88, 0x781a1a21,
+0x5854cf21, 0x6b3a1053, 0xb40e28de, 0xa3b53333,
+0xc5a38218, 0x0baacc07, 0x1858fbc1, 0x7f717fa8,
+0x117e7aba, 0x00debf3d, 0xd3136e6f, 0x0706057e,
+0x2705c068, 0xfa30039a, 0xaaf73fa1, 0xe8f8210b,
+0x0000199c, 0xe2a4c3f7, 0x2f513108, 0x469e04e9,
+0xa377dc88, 0x0462885e, 0x150fd0cc, 0x6888ec7e,
+0x6c43a580, 0x47e801b2, 0x52c59ba2, 0x57f16b19,
+0x9b66e8b3, 0x19849680, 0xe921f007, 0xd7dd590a,
+0x1a87ee1f, 0x10328d01, 0xf733205a, 0xae9fc7b2,
+0x3807e89a, 0xb3c5935d, 0xb99687d7, 0xd118f160,
+0x07ebb018, 0x326ce9dc, 0x50ec81ad, 0x8d48a0e0,
+0x03dbb7d7, 0xa00420a2, 0x3b210944, 0x7df60d1b,
+0x0c4505df, 0x09461622, 0xd9471623, 0x0cf5e860,
+0x59737724, 0xe9fe0240, 0x2c771176, 0x2e2d0401,
+0xc3e0e806, 0xa3e27c3e, 0xc6934627, 0x6de8f568,
+0xe048682f, 0x1beb7783, 0x167aba2c, 0xa3a83032,
+0x4cdb9d0f, 0x41e012d1, 0xdb143e2b, 0x677dcfbe,
+0x2df45984, 0x75db5413, 0x19bc0013, 0x8d193c19,
+0xed942494, 0x6e7fddd3, 0x680d6a24, 0xe852311c,
+0xc6ed0202, 0x14fe8425, 0x8b1889b9, 0xfffff8b0,
+0x1f86c20f, 0x17dfc531, 0x65c44094, 0x6da0cf09,
+0x06ca28c6, 0x1aff7f53, 0x17c0ec45, 0x6ae0418a,
+0x8b446a43, 0x7546e29f, 0x20b633e8, 0xd41b6a55,
+0xa86abfb7, 0xc2f9e833, 0x3c8d4511, 0x5fe24703,
+0x05c6ef6f, 0x7e5a7a0c, 0xa4b6531f, 0xee6c4f41,
+0x037f4676, 0xd2e8fb26, 0xdb46c329, 0xf7ae883b,
+0x3d83e17f, 0xf5e19576, 0xc0ef303d, 0x02f4742e,
+0xf1011ce3, 0xeef6dd20, 0x05c7de89, 0x8e31c71b,
+0xe068616a, 0x37b64efb, 0x131d3072, 0x93411031,
+0x13c660ed, 0x18160809, 0x91c221c2, 0x2616f22f,
+0x50d2230d, 0x13de4dc2, 0x9da223da, 0x18745330,
+0xf744eefc, 0x086c0712, 0x09af89e4, 0x3bada608,
+0x2e9ee02c, 0x712c3c43, 0xb3e85fd0, 0x7405cb09,
+0x7e13ef34, 0xc1dde8b1, 0x6c7f1ba1, 0xd1f112e9,
+0xf7acf029, 0xc0b132f1, 0x83c8c04b, 0x6b6513fd,
+0xc171e8c5, 0xc4817683, 0x0b72cb81, 0x5e3cbb09,
+0x2e1269c4, 0x22255098, 0x40552bb4, 0x636a09a8,
+0x5feeceae, 0xc1dbe874, 0x315f73ee, 0x33741cff,
+0x20b3ffc7, 0xc08ef5bd, 0xbce2e7a6, 0x07e08383,
+0x6be6e110, 0x47472ce0, 0x759eb60f, 0x82dfebdd,
+0x3944c383, 0xa1cf7cc7, 0x03408e72, 0xa382433c,
+0x81c33b19, 0x318f4be8, 0x3815b9c2, 0x6a0c5f28,
+0x73766949, 0x3b0dbc4f, 0x685ea166, 0x1b7c0ec7,
+0xe877068c, 0x71492692, 0x6b85686d, 0x49c28068,
+0xa100ca91, 0x1ac8429a, 0x5eaa59eb, 0xc10673ab,
+0x0d685c0a, 0x27083904, 0xe82fbfa9, 0x3b62f5c6,
+0x0a817308, 0x012a4e43, 0xc846f723, 0x8c6e83fe,
+0xfffedbe9, 0x0192beff, 0xe80f0de3, 0x45d314f3,
+0x3d766068, 0xde19a1da, 0xf6b914df, 0x231c786e,
+0xadf99d20, 0x0918921c, 0x59a35978, 0xab8f8120,
+0x80e46707, 0x979265c5, 0x9f0f1000, 0xa6499068,
+0x83346810, 0x6f8a31c3, 0xe9581844, 0x1403fe02,
+0xecd48a94, 0xafab1010, 0xc2c0505c, 0x76bcf785,
+0x00d4a009, 0x09b2c58a, 0xcf561366, 0x83c7a3b8,
+0x0a3014e8, 0xdb31806a, 0x2ce87d51, 0x58c626ea,
+0x62352d1f, 0x5022d97b, 0xb712cc54, 0x19c24ed4,
+0xec94c684, 0x0e230e49, 0xc0230064, 0x066368d1,
+0xbf0d0530, 0x157000fb, 0x3a34ac41, 0x2e27a50c,
+0xf05f1984, 0xf8915f8f, 0xfb803a0f, 0x83cf0d66,
+0xe0760df9, 0x341e3741, 0x423ae0ca, 0x92e1410c,
+0x3bfc2cab, 0xf833c509, 0xb9b16edf, 0x737506fd,
+0x6e762121, 0x8a0e5a8d, 0x8ddb0e52, 0xbb9c97e8,
+0xb1770a3c, 0x290fe065, 0x9a2a5502, 0x7e52d572,
+0xeadb7467, 0x5e590a77, 0xf7669875, 0x85a03f7e,
+0xc78b6279, 0x66bcf55c, 0x808bdc3d, 0x6e25bf16,
+0x14ea83fd, 0x8b66a148, 0xff70010c, 0x0174edd9,
+0x8122784b, 0xf739d129, 0x3235830f, 0x0a5df8a9,
+0x121529cd, 0xef1bf631, 0x4c7f80c1, 0x11097b80,
+0x3de44675, 0x063d358b, 0x83ec1eed, 0x8b5922c6,
+0x86f70456, 0xdc5f9fd6, 0xeb2bc5c2, 0xfd1587d1,
+0xdb91b683, 0x74727e8d, 0xfe7d9610, 0xabca8d5a,
+0xf70270ad, 0x8bc5281c, 0xec654628, 0xd1540338,
+0xda9dbb61, 0xea4da31f, 0xd4290806, 0xf45c24d1,
+0x860f6fd9, 0xfef9e5c7, 0x2f406f18, 0xc2562677,
+0xe80e6f8d, 0xb683128d, 0x81e4a11d, 0x3401697d,
+0x2299b798, 0x0ef357d2, 0x16da7790, 0x1a69a95b,
+0x391c2602, 0xae8fc0b1, 0x776c5ded, 0xb6567216,
+0xe52fc061, 0x4ee85720, 0x41a5a012, 0xc60416dd,
+0x2bb1244b, 0xf0550f31, 0x81019b70, 0xdfeec12a,
+0x8ac1c71c, 0x68122f43, 0x00366743, 0x67f2851f,
+0x31743624, 0xdab617b1, 0xfd7f7c03, 0xbde9fc3c,
+0x6c7c7dc0, 0x890cc4a7, 0xeea09506, 0xd6352d2d,
+0x05c72ddb, 0xe5c65c16, 0xc2f40ae8, 0x292c3218,
+0x831ee80f, 0x01f82f80, 0xfdd58648, 0x9c2a9567,
+0x9228f136, 0x68560d8a, 0x37e37faf, 0xca38dfe1,
+0xc2171473, 0x6644c06b, 0xb8149839, 0x74edf02d,
+0x72134205, 0x06fa80ec, 0x1d74081e, 0x6ece9c6e,
+0x50034623, 0xc6d70522, 0xaebd1165, 0xc37b204e,
+0x134aa22d, 0x41832380, 0x8fcceb89, 0x6053359e,
+0x1c363668, 0x5c00908d, 0xb97abeae, 0xa6bc649c,
+0x8a6a3ffe, 0x3c3c0246, 0x3cb00276, 0x588b5050,
+0xf90b8810, 0x81fc10e4, 0x4349c52e, 0x6f4833b3,
+0x53448368, 0xf3490af4, 0x29715f64, 0xa2279318,
+0x20607403, 0x0a74832e, 0x03220152, 0x75fb4360,
+0x13048006, 0x1f76b882, 0xd0f81aea, 0x0dc468b2,
+0xc618c805, 0xd045ad80, 0x487cc1dd, 0x4c6b66bf,
+0x558e067a, 0xd80135a1, 0xbdc35fe8, 0xd39a06a3,
+0x85c5892c, 0x636bb5ff, 0x01ceeb2c, 0xee397e3f,
+0xdff16b76, 0x7358071e, 0x841e8a0b, 0x0f5c75db,
+0xc286f572, 0x893bdaf4, 0x3505382d, 0xaa1d2e1a,
+0xc73f0827, 0x1b5001bb, 0x979b6a8d, 0x0bfb02c0,
+0xd6c0e858, 0x18f20ce9, 0x6e047310, 0x04a225ba,
+0x22a17fd7, 0x454b8a68, 0x7b3fd093, 0xfffff0c9,
+0x6eef51c3, 0xfbdddb60, 0x1038dcff, 0x60d0158a,
+0x2875d284, 0x06c18dae, 0x0996d179, 0x0cb0f81b,
+0x020fd8c8, 0xe2031215, 0x7ed99d20, 0x0812fbbe,
+0x483e1ed0, 0x353146d9, 0x9d4a0121, 0xc45eca61,
+0x4a017e84, 0xa015640c, 0x7ddb1efb, 0xdb6d3c10,
+0x840d2200, 0x102b1dc0, 0x668db7ef, 0x6102fe9d,
+0x4974810c, 0x54a33d80, 0x386d876d, 0x1605410e,
+0x97e0fe96, 0x46b6afba, 0x023074ec, 0xff26c8e9,
+0xc35405c6, 0x0125fbc0, 0x7b16c515, 0xecdd8282,
+0x16fffe08, 0x0d14cecd, 0x8e82c7b7, 0xa3231abc,
+0xa6ebcc68, 0xbbb50bb7, 0x809a7c49, 0x947605a2,
+0xf524c3a9, 0x007560ec, 0x9a0eba39, 0xeeec2e79,
+0x0969ae6e, 0x0500ff6f, 0x8337b02c, 0x0317c980,
+0x0003902e, 0xeed17acb, 0x8d1e79dd, 0xfb2cd1fd,
+0xe73b7408, 0xc236d1fb, 0x097a1885, 0x5ef90f08,
+0xc436c202, 0x183c1f02, 0x2e15fb39, 0xb7d4e82f,
+0x6200b95a, 0x185c50c4, 0xb7eca646, 0x72581503,
+0x2916e9ed, 0x733b4204, 0xec834990, 0x8200e1fe,
+0x20dd8917, 0xd6e90804, 0xc0589343, 0xd956a116,
+0xbf70140d, 0xfebeef70, 0xe99c2e3f, 0xe1760db0,
+0xe905a1bb, 0x01edfea7, 0x389d86eb, 0x5c3d837f,
+0x0cc52a54, 0x89b8ff20, 0xc49237f5, 0x083589ef,
+0xa3fd4b5f, 0x170d83d1, 0xe2520370, 0x04c3a1e9,
+0x65ada883, 0xb955ebb7, 0x089d24fc, 0x10f0061d,
+0x94b02c98, 0x1c18d8bc, 0xd6970986, 0xdc014c36,
+0x8d9c1c9f, 0xbae9332c, 0xb410b20a, 0xae0ca0da,
+0xfc54c807, 0x00807453, 0xe3d3c320, 0x8a5456e8,
+0xbaf7bf42, 0x071c71c7, 0x295164a0, 0x8f9f6ab6,
+0x41880f12, 0x51c363f0, 0x80c8b951, 0xf785aa51,
+0x8128ce85, 0xc70de0f9, 0x6d775430, 0x02138c13,
+0x13732c12, 0xdfd98501, 0x7401393e, 0x18c18365,
+0x166c5c24, 0x7fcb725b, 0x26134020, 0x9901aa44,
+0xed6e5812, 0xd21df442, 0x75cb3908, 0x39e2b0e6,
+0xb82dc1a8, 0xdc742ce9, 0xeac1209f, 0xbe14410a,
+0xbebe2d45, 0x4f89cd75, 0x0847092a, 0x81bdcdeb,
+0x932bc19b, 0x21718b8f, 0x867df339, 0xa0d737fe,
+0x94a3731c, 0x74d02c3b, 0xf239420a, 0x0bdcdf7c,
+0x8d6ede16, 0xd06c14a4, 0x81317502, 0x7eeab776,
+0xeb4704d0, 0x8a14cbb9, 0x236e757f, 0x428b3c07,
+0x83f66a1c, 0xc0574b51, 0x800675bf, 0x0bbd1b7a,
+0x39d51e8e, 0x70f61a10, 0xb6826ade, 0x09580319,
+0x6af04923, 0x89b58e0e, 0xddf8e325, 0x4c471ece,
+0xf753aac7, 0xc6353fd7, 0x19031a42, 0xf5177e39,
+0xdd897247, 0xfe815773, 0x77f7896f, 0xd8c7f742,
+0x781d2d7d, 0x7c127301, 0xb01e797a, 0xf020dd50,
+0x5515561c, 0x6bc5c8f1, 0x9b914a72, 0x16a2dfea,
+0x24759637, 0xfeff8147, 0x7b77e800, 0xbe765492,
+0xfd81a345, 0x00a97258, 0xfd10500c, 0x4745cd09,
+0x0684b5d1, 0x78ac4c72, 0x9208955d, 0x9bc24eb0,
+0x4c770589, 0xdb4664ff, 0x232248e2, 0x50897771,
+0x11560836, 0x371be85c, 0xdffb7728, 0x7883de7e,
+0x899174bf, 0x195088fa, 0x1a04ea89, 0xce6d5566,
+0x50de06c5, 0x58069b04, 0xee93bd30, 0x306a0f18,
+0xf72856a8, 0xbbba0fdd, 0x0a890a78, 0x2e144289,
+0x361f146a, 0x2735b517, 0x0c185c34, 0x516374b7,
+0x53202e80, 0x2d00161f, 0x89209f7e, 0xfce2eac2,
+0xf75aa68e, 0x0b74152e, 0x6d10c386, 0xe06f749b,
+0x24fb014b, 0x0fabcd7e, 0x483d6a53, 0xbab75844,
+0x5019a80d, 0x5a261a04, 0xf6c39a1d, 0xc4408602,
+0x368a1075, 0x9219c10f, 0x4288fdcd, 0xd0e9e918,
+0xd62a3c2f, 0xeb3c2215, 0x82b9bbd5, 0x70fb1217,
+0x7ee97a3f, 0x18505389, 0x751c0cc6, 0x2941d7cd,
+0x30433743, 0x128d6624, 0x1295d76e, 0x2e05caa8,
+0x17665872, 0xc21f11b6, 0xb04bc126, 0x43e5d603,
+0xb2180dc8, 0xa216a71c, 0x1f01f015, 0x9a2053e4,
+0x1fc26c1a, 0x0be5974c, 0x86a83856, 0xaf043f87,
+0xcd675a14, 0x65262ae7, 0x46e74626, 0x48d54d8b,
+0x05a91f74, 0x68fc0018, 0x1c670c21, 0x5bbc4bca,
+0x866e026a, 0x06e015d6, 0x6f6009e0, 0xe344a9ff,
+0x89dcebf0, 0x0453dae0, 0xd00b4c52, 0x279a3208,
+0x60fdd7a9, 0x9c3f51cb, 0x0629f860, 0x41822573,
+0x008ff6a5, 0x58d53b6c, 0x8f685c8f, 0x0ac0b656,
+0x425706cc, 0x136614c1, 0x89f8e4f6, 0x152c2ae0,
+0xf6072608, 0x80cb1666, 0x49415c36, 0x6afc3a0d,
+0xa9efb36b, 0x21daf7c2, 0xbf11cad0, 0x0f0ebaec,
+0x069cf486, 0x211c7514, 0x6016c072, 0x1b8f4706,
+0x828c69a3, 0x10e0f8db, 0x1913084a, 0xb74418ba,
+0x0bed0537, 0x2f80c98e, 0xe0cd3121, 0xa1840ba0,
+0x7e21087f, 0x0628b109, 0xdea5db35, 0xb01c87f0,
+0x1af03034, 0xbe3f3c04, 0x4146d12f, 0x75044d17,
+0x826b839d, 0x887bbf1a, 0x49db5c17, 0x50c06c06,
+0x3c03bd32, 0xc88fd2f7, 0x391d77b5, 0x062e74f8,
+0x59c6f52a, 0x2c40b01b, 0x832dc14e, 0xf6b5d886,
+0x65a774ec, 0x1c5ea377, 0x8134e929, 0xc43d8f8f,
+0x68e91492, 0x30bba7ff, 0xd681155b, 0xff0f3657,
+0x836826e3, 0xcc611d73, 0x91e810c3, 0x51ccf815,
+0x725a1af0, 0xed4f41e6, 0xe8a319a8, 0x4a105768,
+0x7a9626f7, 0x1614fb1f, 0x78745a24, 0x50d12f09,
+0x7b760153, 0x100a0a1f, 0xefc246c7, 0xa42a688e,
+0x41fa8113, 0x7f9743c7, 0x733f816c, 0x10468b4c,
+0x2dd23539, 0x2046ff03, 0x300872ff, 0x6a716df4,
+0x06e2fb4e, 0xe754adea, 0x0c701534, 0xa5c06356,
+0x75f300da, 0xdf5cd90a, 0x5d50b6a2, 0x7eed9e81,
+0x410e3b54, 0x4c897ddb, 0xf8eb5c31, 0x50eed8b3,
+0x24466085, 0xe6c87667, 0x6fa50220, 0x29bec8df,
+0xe81843e4, 0x906f038a, 0x0616bd6a, 0xdf591feb,
+0x728ace58, 0xe3620db6, 0xf07b17b5, 0x741c056a,
+0xd5e8c6c9, 0xce586d20, 0x76e901c1, 0x042d02c0,
+0x0904465f, 0x6ce8fe06, 0x0878061b, 0x43c914e6,
+0xc80c531c, 0x7ae1c2f3, 0x9020a0de, 0x5397c2ec,
+0x388d76ff, 0x30aedc1b, 0x826912d8, 0x03f2c679,
+0xbbb2e2a4, 0x001c8819, 0xa754fd00, 0x106c75d5,
+0x54c9408f, 0x355b58d8, 0x3e6003d4, 0x8a3f5c41,
+0xf47c1682, 0x74253c06, 0xcee254cd, 0x86bbdd76,
+0x89420288, 0x75214606, 0x150717e2, 0xcd27831c,
+0x29548bc6, 0x8ba0c414, 0x2040b1a9, 0xa377edad,
+0xddc59758, 0x4c46ccb4, 0x87b4d883, 0x0ab8046d,
+0x46f67609, 0x6e8f656e, 0xd70d849f, 0x53297b1b,
+0x1c73b6ec, 0x233cbeb5, 0xcceafbe9, 0xc2b90ef6,
+0x6c228e18, 0x33db7d40, 0x07683cb0, 0xed161162,
+0x1abea607, 0x783c20c8, 0x64fae912, 0xdbcb1208,
+0x4000bccf, 0x21047e74, 0x5a634974, 0xf53a1e89,
+0x8c471788, 0x83a3319e, 0xc8175e15, 0xe2ede017,
+0xb9aadd43, 0xe7721c6f, 0xc41d13e9, 0x6f00e8b2,
+0xc4de3440, 0x89eaeb58, 0x88041e0e, 0xadbb4407,
+0x0abeebdb, 0x06e2188b, 0x88d3390d, 0x35bf7e1b,
+0xeb4f0372, 0x82682aab, 0x3de857bf, 0x47ed1b70,
+0xc7010c22, 0x371c1c3b, 0x02eb2fe1, 0x78ff2077,
+0xc438104d, 0xc3fa5748, 0x3271ca73, 0x9b770a88,
+0x31e322db, 0xc03b268d, 0xebe0721f, 0xb9ffadc1,
+0x852c38a8, 0x893778d2, 0xb9995efb, 0x4c85ee45,
+0xc2832d40, 0xada3c630, 0xa0a1a2de, 0x994f8dea,
+0xf6fd03d9, 0xad286c6e, 0x8801c311, 0xd9c14913,
+0x14e9f177, 0xdd6f556e, 0x2d07c613, 0xc1eb47de,
+0x5620e2f0, 0x4ae562d0, 0xb53dbd9e, 0x74e15b0b,
+0x301d2f0c, 0xd3475832, 0xbe8fc002, 0x880fc94c,
+0xd3d85ae4, 0xb77d481a, 0x808a0ffb, 0xd009978c,
+0x04e98319, 0xe0b9e979, 0xfa86e03e, 0xc60cb968,
+0x40820e8f, 0x462003f7, 0xc70a84e9, 0xc33b0d54,
+0x43640ddb, 0x3b806a1e, 0x0b72cdab, 0x63fd8439,
+0x1d061d18, 0xe9761784, 0x9b64fdae, 0x053d54db,
+0xe9ebedb8, 0x6311ed40, 0x12a878ff, 0xf90c6a27,
+0x02a90ce4, 0x085a1ef5, 0x72535e15, 0x135828cc,
+0x1c0dbc2f, 0x7e481d1b, 0xab3bbbf6, 0x7650be37,
+0x5d8a3a74, 0x47451711, 0x7b7103b0, 0x842f747b,
+0xd3382beb, 0x08d88823, 0xe0a17d9f, 0x4bb2d988,
+0x0dd08820, 0x63d188cb, 0x0f776fe1, 0x0838204a,
+0x4e0375ca, 0xc396c675, 0xc06a2dc1, 0x5fd2045b,
+0x7ab72329, 0xd81e8ee1, 0x8ad389c3, 0x4241025a,
+0xba201062, 0x5423f6f9, 0x231000dd, 0xd689b0a8,
+0xdbefd049, 0x0a9de51a, 0xf02443e1, 0x0f66b65b,
+0x3f5eb0b6, 0x42003a80, 0x801e421a, 0x750bed85,
+0x14a34afa, 0xf46baddc, 0x1027634d, 0x2622744b,
+0xc8fec9b1, 0x4b0d742c, 0xf3390f74, 0xc41ef75f,
+0xeb41c6a5, 0x1c3eedf6, 0x76a836f0, 0x1d1a2ac3,
+0xb78241d8, 0x5aad89df, 0x84c3c3ca, 0x809d1038,
+0xad002e38, 0x09405575, 0x57c33677, 0xf5d86fd3,
+0xffc95133, 0xaef20833, 0xc249d1f7, 0xeec16f6e,
+0x092ac801, 0x73087f48, 0xc35f1ef5, 0xf88ae017,
+0x7e634a3d, 0x7c15bbb5, 0x801174c8, 0x404a9739,
+0xae05740d, 0x321ddee0, 0xc3c829f4, 0xdf1b85e1,
+0xb1107d76, 0xf289271f, 0x38028a26, 0xdfdd8001,
+0xd3f4c860, 0x22434107, 0x7889e175, 0x904e07b1,
+0x9da632b9, 0x19a3b60c, 0x32da8913, 0x37004110,
+0xe72cf053, 0xfaeb789c, 0x621df015, 0x3e6225cd,
+0xb1db96ed, 0x01e3855f, 0x75f238c3, 0xb05c260f,
+0x9e1f152a, 0x8846d75d, 0x7c9c1ee8, 0x22f9ce59,
+0x04c0075e, 0x8521a3c8, 0x265ef006, 0x091d8bde,
+0x7e882dcf, 0xebb6e04f, 0x1e8bdbd0, 0xb018740f,
+0xbac6c767, 0x5a593d5e, 0xb3068938, 0xd1d76337,
+0x8bfc4a2f, 0x05b1195c, 0x03697734, 0x4143774a,
+0xcb6bb113, 0x5b18d605, 0xfe030125, 0x331ceb25,
+0x3b43080e, 0x377dc973, 0x4b11c157, 0x1602165d,
+0x0bf41729, 0xc5efc2a5, 0x75494346, 0x746b5fef,
+0x854d3f78, 0xb731fcd2, 0x7c2c5621, 0xd839017b,
+0x754a4197, 0x675b18f5, 0x37bb4e11, 0x894c6bca,
+0x5ace02d1, 0x576d5b6b, 0x53dfc289, 0xb0550512,
+0x3910c7f5, 0x7dce89e9, 0x9a5bf909, 0x9a880bad,
+0x75e81cfd, 0x46b7ed4e, 0x3b07738a, 0xebe87dee,
+0x811f2fdd, 0xdbebdf18, 0x20d6109c, 0x01428a4a,
+0xe31bfc78, 0xc7443a42, 0xee751608, 0x9ebfdb31,
+0xa722c608, 0x0977eab8, 0x30b704fe, 0x34fb403d,
+0x6c7f3d80, 0xb1d88fd2, 0x3d623d74, 0xc095ff80,
+0x03815fc5, 0xa3ff00f8, 0x55528d54, 0xa8cf0449,
+0x14754cdb, 0x8cc152de, 0x3100027a, 0x80cc1bad,
+0x8554d285, 0x162b9048, 0x06696135, 0xc05e0edc,
+0x4569aedc, 0x430458e8, 0x8026bc1b, 0xf5dc7b0d,
+0xe28440d4, 0x53603823, 0x42e24c75, 0x24ce551b,
+0x72760102, 0xe65bae11, 0x0f21fd3d, 0xbf4282a4,
+0x54e81797, 0xf3eb0eb7, 0xc45c8d27, 0xe8e6343b,
+0xdaadb6c0, 0x8d55b0e8, 0x50812401, 0x3ec7b5a4,
+0xffa4b617, 0x66840e75, 0x758603c7, 0x6c4a97b0,
+0x02438a2a, 0xd8538aeb, 0x09a860bd, 0x1538298f,
+0x4c740f7e, 0x2850487b, 0x82584e8e, 0x156208a0,
+0x3064bf3c, 0x9343b641, 0x841cc004, 0xc2363d8b,
+0x883f05c6, 0x827da23f, 0x00752e66, 0x95ebfdfe,
+0x750e0538, 0x57edebac, 0x530cf603, 0x0c75e91b,
+0x85c6c38f, 0xf52f61d9, 0xfeee2825, 0x896e4ad1,
+0xc84b252c, 0xc80600fe, 0xc8a225b6, 0x2596cf61,
+0xe874638a, 0x2db0e931, 0x7d707600, 0xb2574a3f,
+0x3d25bec1, 0xffffd984, 0x58f75b2c, 0x1cec8901,
+0x5adec953, 0xf3562edf, 0x255b28fd, 0x006a071c,
+0x8a49e283, 0x47b70f18, 0xf828c780, 0x5706046d,
+0x020c8d08, 0x63d92913, 0x66f0b05b, 0x5f067983,
+0x1c040643, 0xf6f74951, 0x348d02ff, 0x80de2902,
+0x8901037f, 0x74090ef5, 0x25063771, 0x63a96d82,
+0xf2da1a14, 0x0aa5d4f5, 0x5174dafa, 0x5d7435df,
+0x29c04740, 0x6c6e07e1, 0x6f151d40, 0x35b88fba,
+0x047a519b, 0x8001bbea, 0x5107c7d8, 0xb577e910,
+0x6f099070, 0x8515275a, 0xd105351a, 0xd897a110,
+0xf2196d00, 0x7c0e6ede, 0xfd0aeb0e, 0x1da9041a,
+0xaa23bac3, 0x06e88bdb, 0x003f3d98, 0x421e4103,
+0x1237db90, 0xb30b01fd, 0x37e00408, 0x4f447a06,
+0x35ff4c37, 0x418e6c9c, 0xa996c229, 0x23c00163,
+0xdd8538e7, 0xeb07065c, 0xfcbc55d1, 0x403c407e,
+0x0ca8a15f, 0x37230243, 0xac95006b, 0x0acb3e0b,
+0xdc602dda, 0x2a0843ab, 0xe0bb3689, 0x066a40ee,
+0x6dcf8379, 0xe87ecb96, 0xfffffaea, 0xa1d91c10,
+0xbeeb1c98, 0x2c3f6407, 0x30392e33, 0x8826b201,
+0x90f7e961, 0x51b0e49b, 0x00bb0f96, 0x46578c0d,
+0x49d73aa1, 0x847b0069, 0xf9fbc23d, 0xe152b9a1,
+0x31e6c3c3, 0x01c60de1, 0xc960a394, 0xbd0ce24d,
+0x366bb543, 0x0392c413, 0x84d00908, 0x0be1ae0b,
+0x2e1ed869, 0xea2c68a1, 0x03ed93d7, 0xa1056a09,
+0x54e8c103, 0x6056df68, 0x880aa033, 0xfd0a5437,
+0x5cf38874, 0x08e2c1e7, 0xdb7c418a, 0x4e0b2aeb,
+0x0d520a03, 0x38add40c, 0x7ce99d54, 0x5d22db45,
+0x0db41724, 0x10b40df2, 0x4d01502c, 0xa1beae9d,
+0xf6a15583, 0x801243ad, 0xc6119896, 0x16bfeba4,
+0x8d585faa, 0x10821a7b, 0x08f06216, 0x5690cb7c,
+0xc085534a, 0xf021c673, 0x0974e6a1, 0x28620d79,
+0x5e034cb8, 0xba0df441, 0xed830b87, 0x030e0508,
+0xbddb140f, 0x1e6b38db, 0x74483b7f, 0x96024337,
+0xd5db3bc2, 0x628fc012, 0x180faed5, 0xe999f4f5,
+0x1aaaeb4e, 0xeb5e2e95, 0x2fb9d6e7, 0x80032517,
+0x362b1b14, 0x36d9eeb8, 0x2108375e, 0x64fac6eb,
+0x758add14, 0x25eef00b, 0xce811e0c, 0xf045d68b,
+0xfa81b947, 0x7c1074ea, 0x4b415e16, 0xa482c2a0,
+0x30ed7d8b, 0x1db489b9, 0x03b4b803, 0xfb58ec71,
+0x05f5ff52, 0x62008390, 0xf82ce0c1, 0x0f0a0f5d,
+0xc2b29388, 0x20b49034, 0xb2b4934c, 0x72711036,
+0x2ace6415, 0x2aa25b1e, 0x7f0a40f3, 0x1a9e3d2c,
+0x1f4e7875, 0x56c85610, 0x369044a1, 0x158df89d,
+0x3b41ba23, 0xac01e975, 0x3ddf641e, 0xfddddc60,
+0x0cd47529, 0x05d2eb03, 0x93cceb02, 0xb7190d60,
+0x93f92ef8, 0x8025ed04, 0x6f577113, 0x60c258dd,
+0x29040d0d, 0xcd55aa10, 0xcc2e8990, 0x00e128e6,
+0x053b5a36, 0xde36d812, 0x02bf2323, 0x0a2c18a3,
+0x226c0700, 0xd4838bae, 0x11b83da8, 0xfe0d040a,
+0x55353e66, 0x75871eb8, 0xc40283da, 0x98488011,
+0x87d87425, 0x158df858, 0x3b031b5a, 0x8e268797,
+0x6e1048b5, 0x82c73e34, 0x1f82a646, 0x78546640,
+0xb622ea59, 0x9482e831, 0x98091415, 0x9110de28,
+0x810cb9b1, 0x289a9cc2, 0xb5509f49, 0x390baaf6,
+0x28749e0c, 0xf8229f9d, 0x002376a5, 0x2818e889,
+0x3ecff7f9, 0x0f0a1390, 0x96c35b10, 0x3436ba81,
+0x748f61e2, 0xaf644954, 0xd87588d7, 0xcdc4f684,
+0x18f1c821, 0x2e08f3a1, 0x0757e2f0, 0xfe532036,
+0x61d0018f, 0x6b394483, 0x0eb103f3, 0xaa225de0,
+0x6cc9828d, 0x6281d880, 0x31eadaea, 0x11e00821,
+0x91151438, 0x92e463b3, 0x70839753, 0x750fb3ec,
+0x013b2f74, 0x72393bd8, 0x20991e05, 0x3323f54a,
+0xc6c5b8c4, 0x7c3f0319, 0xf153f586, 0xa863bd44,
+0xdd199801, 0xcd466114, 0xe3c7f201, 0x69a92c11,
+0x8ff6e7b2, 0x0523c706, 0x5eb9148f, 0x3ab65302,
+0x7711092c, 0x86868b4b, 0x36f69691, 0x69896c55,
+0xc4828626, 0x2821f590, 0x8284c736, 0x183e668a,
+0x02c61d89, 0xfe5a6cd6, 0x51786806, 0x9ceb5edc,
+0x28989750, 0xbd43c180, 0x92adf664, 0xbe41086d,
+0xd698090b, 0x605848e6, 0x3b9eeb9d, 0x69718c66,
+0xa5c711e6, 0x1b110500, 0xb16deb1b, 0x89338b47,
+0x024e401b, 0xdd9c1687, 0xb3fbf5e4, 0x0d1b149c,
+0x40a30540, 0x91183ac4, 0x39e12ec3, 0x914077aa,
+0x77bf460a, 0xa31aa440, 0x741c8cd2, 0x630b520e,
+0x57061e5b, 0x3208ca47, 0x2ab404ab, 0xd8332bfd,
+0xd6602140, 0x418b15d2, 0x09404a22, 0xdb11dc3c,
+0xe2afdea5, 0x465f478b, 0xb5011202, 0xc05ceac7,
+0x8d580419, 0x7518f858, 0x2d2b5eeb, 0x0c192b47,
+0x050e4613, 0x2003060a, 0xdf305958, 0x0e75b8e8,
+0x10560312, 0x8d8f5392, 0xc3520851, 0x7321e2ae,
+0x0e5e6ff3, 0x1c24e4b2, 0x80ebfe23, 0xadf4e003,
+0x0ef64ec5, 0xd089c9ba, 0xa00a0fcb, 0x49056f1d,
+0x08684868, 0x9ecfdf37, 0x89fd1c44, 0xd2ebdc74,
+0xe02c62eb, 0x555dd3a1, 0xc8f1743f, 0x53170916,
+0x10755f8c, 0x80a031fb, 0x5e8b2f5a, 0xefdf860a,
+0x41035017, 0xb8d91574, 0x4eedfab5, 0x0c7e130e,
+0x8a1c698d, 0x05fd81e3, 0xa41fb064, 0xd17ec789,
+0x088f8bc5, 0xcd51d0b6, 0x8b3bc061, 0x9db055fa,
+0x550c86f2, 0x43a2b739, 0xe80c4940, 0x938c1910,
+0x75d0d3aa, 0xc1118076, 0x79e90770, 0x16e0fd2d,
+0x11351a19, 0xd3b802ab, 0x0283a249, 0x05062a58,
+0x3882c104, 0xadf4a88c, 0x6c4563bf, 0xb2548bd3,
+0x9e8dd9f3, 0x1f524c30, 0x07f75a9d, 0xf406c4fd,
+0x86c6cd6d, 0x01230216, 0xd685159a, 0x220306e7,
+0x0583c876, 0x10071a03, 0x44864aa1, 0xa114f231,
+0x71441854, 0xd6258830, 0xac862480, 0x52307c44,
+0x2c13f1f7, 0x8a45b233, 0xfc199452, 0xbb3e799e,
+0x15049a05, 0x017cbf2c, 0x168a5888, 0x24834084,
+0x1e8df46c, 0xecd8c7a4, 0xca317504, 0x1860f07f,
+0xd8892adc, 0xe951a4b4, 0x57b77d76, 0x260647cc,
+0x0abc1e04, 0xc70f9082, 0x8c42d1e1, 0xded042d8,
+0x2dd7807b, 0x6fec4531, 0x997c04b9, 0xd12f25ed,
+0x186f5351, 0x094ac2e3, 0x8e5164e4, 0x776da0f2,
+0x2d46bc04, 0x21a0a0e8, 0x578da92d, 0x3f9809e9,
+0x50992364, 0x54419815, 0x1f1d4270, 0xd07500bf,
+0xb0aa5ce8, 0xe9c46003, 0x11be8033, 0x03a3c3aa,
+0xc6b68dd1, 0x035d4035, 0x40687435, 0xa8f4e037,
+0xfbb13908, 0xb43775dd, 0x20e8c73f, 0x50e50fc9,
+0xee9e48e8, 0x04d9afbe, 0x1396b60f, 0x28100905,
+0x77cac7e8, 0xe6b914fa, 0x54d6297d, 0xc70b5cfa,
+0xdbd0296d, 0x4931a602, 0xcf1973cf, 0xe8b7313a,
+0x6a2cc085, 0x8a0c0c55, 0xc2382247, 0x8dc1a76f,
+0x5b601354, 0x63b71046, 0xc116fc11, 0x164619e9,
+0x76124e03, 0x47145b18, 0xcbc15f14, 0x20985ad8,
+0xc718db56, 0xbb8899be, 0x90840ffc, 0x8f0f0d93,
+0xf57d0131, 0x0808fb6c, 0x7f081d11, 0x896e4a7b,
+0x04da3eaf, 0x287c357f, 0x751d0b63, 0x256e0c15,
+0x5d0b359e, 0x076ddb0c, 0xeb2744c1, 0xb2521aec,
+0x7507e3eb, 0xdc67a017, 0x277474db, 0xad857c04,
+0x068c50b5, 0x68070470, 0x6e6b6796, 0xbff2b81b,
+0x22b78207, 0x796796fb, 0xeca74caf, 0xcd2c9f3b,
+0x0d6dcfdb, 0x0d008988, 0x0a04407f, 0x9b7c3074,
+0x209797b6, 0x0c10740b, 0xce298675, 0x1972e91b,
+0xdc5436f9, 0x670ab3e8, 0x67a01f52, 0x51575ce4,
+0xb6740f3d, 0x34b92b40, 0x0d045904, 0xd6330414,
+0x0f11fb1c, 0x74224285, 0x3b0a2ef4, 0xc8cf233c,
+0x15181023, 0xf639b70d, 0x024eea8d, 0xf7f2190a,
+0xbcfd59fe, 0xa730db9d, 0x8f080142, 0x7420008d,
+0x66cd2e7d, 0x707f04d7, 0x7c147414, 0xd8fed115,
+0x39fcd637, 0x0abdf6a7, 0x0ab25abc, 0xe6b1be79,
+0x4fa7f503, 0x2322a922, 0xedb1cd63, 0x22983825,
+0x0a84f938, 0x462ed8a9, 0x6479f89a, 0x0a6ee966,
+0xcf237d8d, 0x6468637f, 0xdf714e58, 0xec558bb6,
+0x04447f08, 0xe6325c32, 0x333cf2d8, 0x55303b70,
+0xcd66fbfb, 0x9c0a27b1, 0x72511cfa, 0x7bae0a11,
+0x153e1bec, 0x74755106, 0x3e7f043f, 0x977e6cff,
+0x1dfdfc73, 0xfde8fc72, 0x3d167476, 0x36467b4d,
+0xe11ad653, 0x910acdcb, 0xb419e467, 0x1cb799c2,
+0x0abec6fb, 0xd50aac7a, 0xec0aa1d7, 0x030105f2,
+0x11c396d4, 0x052f5137, 0xb62c35f9, 0x97cce803,
+0x6ff725a0, 0xd6ff0e16, 0xf1e8fcfa, 0x8dc85e09,
+0x9a17d56a, 0x80c1832e, 0xd82ba1b1, 0xb857ad54,
+0xc2ea43e5, 0x8149b679, 0x2fc013f4, 0x914da5e2,
+0x37ebeb83, 0xa8e6eb1a, 0x858b3e23, 0xba08e3c1,
+0x7003bb0b, 0x30350d1b, 0x08b86662, 0xbf4030b1,
+0x6962ac9b, 0x02720987, 0x0a88e430, 0xdec899e4,
+0xc35fc4a6, 0x24093d90, 0x99052b0d, 0xf93e8b49,
+0x3d85b362, 0x0a3d4339, 0xf21c8361, 0x890b96e6,
+0xd65ef97b, 0x334c8a0e, 0x3d0bb87f, 0x26c0b9a8,
+0x3b96cd27, 0x9e49908b, 0x916c0c0b, 0x839e4992,
+0xad55300d, 0x5b1444be, 0x49435024, 0xdef513d3,
+0x85c6ac44, 0x1134a3f6, 0x5f90e411, 0x95f83701,
+0x20054a1d, 0x8b128017, 0x837b92c1, 0xfa810853,
+0x7c15573a, 0x7eb76886, 0xe8672c80, 0x54003f1f,
+0xe949e04f, 0x534c90c3, 0xd56e05b8, 0xbb00fb6e,
+0xd329f108, 0x5b07ff50, 0x2cc7398a, 0x811a7725,
+0x32335f3b, 0x9823745f, 0x2362ab41, 0xc6a26149,
+0xe69a205e, 0x75253d83, 0xf51cab60, 0x09b3a479,
+0x6c013ff6, 0x4ad47492, 0x02087dc2, 0x07421a0c,
+0xffdb61d5, 0xc984f87c, 0x7b80c075, 0x33272a08,
+0xc2a36fb1, 0x313d552d, 0x5511a3c1, 0xebf7ea19,
+0xa34068a0, 0xccc0e7c3, 0xc3c258d7, 0x12925069,
+0x044f0fb0, 0xc00a4faf, 0x87608311, 0xc43db140,
+0xa9102786, 0x35ab554d, 0x217aa72c, 0xd2bae99d,
+0x218936e8, 0x032c0e89, 0x9354b5e0, 0xfc2390e8,
+0xe4702d4b, 0x96fdf761, 0xb061e601, 0x1243e6b0,
+0x5600d81c, 0xd8e142e6, 0xb6d83514, 0xc01dc308,
+0xa06d5372, 0xe95fa338, 0x5fa17dcf, 0xba1d3fe2,
+0x3b9aca00, 0xdcc0694c, 0x48521234, 0xf7b00dd5,
+0x8ae967f1, 0xe4b85f02, 0x8cbad6ef, 0xa91d0000,
+0x706c0004, 0xf00e8247, 0x40bff1ae, 0xb901d0a3,
+0x28c4bd05, 0x7fb60a41, 0x68e94fbb, 0x05c71558,
+0x1fb0071b, 0x1144090e, 0x2267a236, 0x16844847,
+0x0874c151, 0xd76c3d4a, 0x07b9470a, 0x3c099e56,
+0x0448cd05, 0xe9d90554, 0x22c11508, 0xc6475727,
+0xe9a09b76, 0xa3217468, 0xbf686664, 0x40c9926e,
+0x0609706c, 0x20e8f540, 0x68207d40, 0xd92cb690,
+0x89f6324d, 0x843d801d, 0x028c0988, 0xec5d35e1,
+0xb73d9a8c, 0x1cc81368, 0xba6ebb05, 0xe8179c04,
+0x82b02aa3, 0x344ec1df, 0xb9282eb9, 0x3bafb1a5,
+0x304cb9ec, 0x74420209, 0x35f23280, 0x31c5cc14,
+0x33af404c, 0xb9444ecc, 0x030918a8, 0xbe464931,
+0x076042bf, 0x602ecb68, 0x466bef54, 0x070958ba,
+0x132e015c, 0x485632a3, 0x3118a042, 0xd09c8368,
+0x80096c4d, 0x25e1b913, 0xe7b3d003, 0x6e680192,
+0x0f64d847, 0x31f4b645, 0x613d59f8, 0xb9222289,
+0x5aafe84f, 0x31d0f0e8, 0xd368c068, 0xf0f8bd43,
+0xe3f62bd0, 0x0975cfa3, 0x41175e99, 0x21b8f7d8,
+0x1e201be3, 0x91363e52, 0xc0e9c311, 0xd1c7096f,
+0x99547398, 0xe0977705, 0xfb1e28cf, 0xf339db53,
+0x5a060372, 0x6eff187c, 0x5aea0d43, 0xe8e22de0,
+0xf3f1be2b, 0xe69f7258, 0xabeee2bf, 0x5a144949,
+0x746285e8, 0xbb510807, 0xeb1e1742, 0x52ed33f0,
+0x51da1bc5, 0x9f037851, 0x548a37b0, 0x00755002,
+0x7445e400, 0x9026a568, 0x3500ff91, 0xec0e2338,
+0x050239ff, 0x001161dc, 0xefbeadde, 0xff025d03,
+0x9195a85f, 0x50203c21, 0x6c434558, 0x746e6569,
+0xff75bf3a, 0x637241fd, 0x00303a68, 0x444e553a,
+0x02320a49, 0x010d3731, 0xec2fbe03, 0x3c2b0cff,
+0x83828180, 0x87868584, 0x0436035f, 0x033d3208,
+0x6b05c580, 0x09b2110e, 0xdf6c812c, 0x5f627303,
+0x2b5fab64, 0xffdb4706, 0x63ca2c27, 0x544146a4,
+0x203a4c41, 0x4b756f4e, 0x7220ffff, 0x2d6c6165,
+0x65646f6d, 0x61747320, 0x215e6b63, 0xdcd90041,
+0x4e03dc6f, 0x612d2b56, 0x746f6e6e, 0xbf762023,
+0x145ccedd, 0x50252124, 0x636f1772, 0xfe736c6f,
+0x446ffb5b, 0x50434844, 0x54465420, 0x696e1604,
+0x69640063, 0x1bdb6b73, 0x6c81b7d4, 0x3170706f,
+0x0b202d20, 0xb6b6e675, 0xda6c6cc6, 0x30ca6666,
+0x6b7f0302, 0x7872fdbd, 0x40726520, 0xca252072,
+0x6c747233, 0xb7323138, 0x39b3edfa, 0x62393307,
+0x35656640, 0x6d863833, 0xb0dbb563, 0x3131166f,
+0x1809312d, 0x5d7e6c65, 0x23e17b6c, 0x74646403,
+0x2e0b6e40, 0x6ec6b436, 0x743039fb, 0x65686478,
+0xa27630e1, 0x8ff6b16b, 0x1d640235, 0x33776e66,
+0x1e333036, 0xb7b07d09, 0x303038e6, 0x656e9c63,
+0x52006f2d, 0xb6f14c54, 0x55078fb5, 0xb375736e,
+0x20397495, 0xbdd65041, 0x22032f6d, 0x22016325,
+0x62613c9f, 0xfb083e14, 0x57ddedb7, 0x69206771,
+0x0c78866e, 0x70746674, 0x886f4c00, 0x6efb7b2d,
+0x40251369, 0xe873253a, 0x122f2f3a, 0xd60217b6,
+0x3f0c0a0f, 0x3f697372, 0x8285c23a, 0x693c0be6,
+0xc2406f42, 0xbab5d6ff, 0x69980a87, 0x7a73656c,
+0x6d203e20, 0xb0d84567, 0x280f07b5, 0x21002968,
+0xa1ed6dbe, 0x3d617f2e, 0x699569d1, 0x5b67616d,
+0x2fef6dc2, 0x49424e28, 0x7b44281f, 0x0ad0002e,
+0x8c2061ff, 0x6d617267, 0x9bcb6820, 0xa142f75b,
+0x62d69855, 0x73b96769, 0xd08b6558, 0xb970b9bd,
+0x5f746983, 0x08f2701d, 0xfdb6bad7, 0x756f6620,
+0x0f1a2ec8, 0x089d3353, 0x11336f77, 0x654d0a10,
+0x2c0040a4, 0xeeb83bd8, 0x28200ab1, 0x12290626,
+0x60e11de6, 0x8c520617, 0x470b7961, 0x50ad3461,
+0x0d776d78, 0x752e450c, 0x76ebd9bd, 0xfc6c2083,
+0x0965db20, 0xb735b62d, 0x25bf6d1b, 0x97d873c9,
+0x6b76de38, 0x726135f3, 0x5735748e, 0x62176237,
+0x6e771647, 0x706d603d, 0x6b5b52ba, 0x62615b16,
+0x6c73380b, 0x90146b6d, 0x06740e74, 0x2f4b6b2d,
+0x7a4e2e18, 0x52f6a265, 0x38ae4346, 0x8cec1663,
+0x19005332, 0xf4926649, 0x284905b6, 0x000a293b,
+0xbdb18c1c, 0x63d3e5d1, 0x64f66965, 0xe87662d5,
+0x7d8c306e, 0x643a756e, 0x61a3ae64, 0xb4b1b473,
+0x2b6a4249, 0x6b76b473, 0x4455b6a5, 0x5e36510c,
+0xdc586d75, 0x06691876, 0x61cfe062, 0xb6d93c35,
+0x5b128c19, 0x70175d07, 0x6dda6963, 0xeceb8634,
+0x002e5d3a, 0x5fb7f0a0, 0x34333284, 0x39b23635,
+0x44434241, 0xe870c545, 0x4f3b66be, 0x5f2f0083,
+0xbdb0ceac, 0xe520f7f0, 0xd633534f, 0xb2f40064,
+0x9a0df6de, 0x2e342e35, 0x18435b33, 0x4d8b7c1f,
+0x24204216, 0x4c5047ef, 0x68eb0e29, 0xa474e92c,
+0x2e1c6594, 0xd1bba998, 0x724416b3, 0x3fb872f7,
+0x1da3dc3a, 0x155cea20, 0xdd3e205c, 0x175a3822,
+0x11784500, 0x53873a73, 0x9f0ec158, 0x6d276f69,
+0xeb6da178, 0x69ace423, 0x2c737172, 0x370de120,
+0x0121129c, 0x5370624d, 0x75642d73, 0x57188fcf,
+0x3f0a78b6, 0x35133543, 0xe10ab58c, 0xb920ef73,
+0x42c6c66f, 0x1249b9e3, 0x40613f6b, 0xc2d817d6,
+0x7f0a8975, 0x9b4d4f52, 0xe1afb5b6, 0x74c36765,
+0x09337884, 0xdbb63c67, 0x350bb368, 0x780a634d,
+0x7468bf0a, 0x770314a5, 0x6db78964, 0x708dda41,
+0x6e74344c, 0x8849866e, 0x36c935d0, 0x7bff1e0a,
+0xf71cec63, 0xa13d2157, 0x1819ac75, 0x67096576,
+0x051b9c0a, 0x6c1ed857, 0xe59c0321, 0xa5488165,
+0x09190549, 0xbae6d76b, 0x6f017c5a, 0x2b677b83,
+0x30361362, 0x3f203e45, 0x06a5d26c, 0x70827292,
+0x0c18cf73, 0xe4b604b2, 0xb2047e3f, 0x11441e64,
+0xd0bb6162, 0x0e45d486, 0x6e679407, 0x82946c52,
+0x2900cb14, 0xb2b65277, 0x666fac37, 0x3f823220,
+0xc618230c, 0xf8d37632, 0x04bdeb66, 0x7bb59dd6,
+0xb83fbf64, 0xde60ad1b, 0x64698fa6, 0xad83e133,
+0x4373666d, 0x52b56f3d, 0xa78586e2, 0x5f7385d6,
+0xd654788e, 0xc60a19d0, 0x6d78d08b, 0x0085ed78,
+0x6f74ecb6, 0x40ff610c, 0xfb0a15ec, 0x088a3ec2,
+0x119c0e07, 0xbf620128, 0xb6c42214, 0x295f63a6,
+0x92c08bb2, 0xea50a92b, 0xb11f8120, 0x405b0229,
+0x78f9ea6e, 0xdee72d79, 0x71e61222, 0x79a16575,
+0xc8112c4d, 0x8d004462, 0xd845b045, 0x67af871a,
+0x2861bb48, 0xad88e898, 0x9f6e7056, 0x9a3db4d8,
+0xf2a07245, 0x79200267, 0x561b0ee1, 0x4fcaa302,
+0x7dce1b0b, 0x48777334, 0xcdc48a76, 0x176a5874,
+0x66374a68, 0x41821966, 0x3dcb1600, 0x008a9fc3,
+0x830f8161, 0x4f4f42a9, 0x20402d36, 0x439a0f02,
+0x6051b5ae, 0x00b3cd91, 0x6ee3bbf6, 0x6c75e02b,
+0x623436b1, 0x524142cf, 0xee6e0335, 0x7838307d,
+0x133c043a, 0x6113736f, 0xb45e2d81, 0x648d6522,
+0x01ee6491, 0x23623a69, 0x64003f58, 0x0b0247c7,
+0x4d70433f, 0x06651855, 0xb15d9f2a, 0x21b810c0,
+0xad523a52, 0x39e0c479, 0x0fe781a0, 0xc360185c,
+0x8a106f0e, 0x19e04172, 0x709c8298, 0x60c37482,
+0x67316aa5, 0xeb58b468, 0xb346d4b0, 0x8ce24276,
+0x02c0dd16, 0x6b75b93f, 0x02d68441, 0x826b36c0,
+0x79d5e9a9, 0x6d82bd61, 0x342ec018, 0x7719b743,
+0x9b266340, 0xa6aa2e6f, 0x7529db06, 0x9c831b57,
+0x9704ccfd, 0x7e81608c, 0xe0003700, 0x47672080,
+0x9f7f07ea, 0xc89307cf, 0x9bd83656, 0x001f9317,
+0x26ceaeba, 0xde670610, 0xf770036b, 0xec6fb1f3,
+0x9b812910, 0x13813907, 0xa3813878, 0xbbbe690f,
+0x13ac8651, 0x111307ac, 0x12b31211, 0xa6f9b2d8,
+0x601500bd, 0x4033c513, 0xdf3627cf, 0x1340f77c,
+0x13d107db, 0x59e5ab06, 0xeea11712, 0x7b7014ea,
+0xf90fdb1f, 0x03ab0707, 0x0d5fbf78, 0x82ba8078,
+0xd0614108, 0xb6803766, 0x6a933c8c, 0xecaf9339,
+0x0517fd95, 0x7777b204, 0x51826313, 0x53dfeff6,
+0x0b960763, 0x003705af, 0xfa0302b1, 0xd80ab0ad,
+0xe8ed0b01, 0x00857b2d, 0x000338cc, 0x819176ca,
+0xb042135b, 0x2a40002b, 0x4507d0fb, 0x0000014f,
+0x00000000, 0xffffff20, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+0xffffffff, 0x72ffffff, 0x31386c74, 0x7a2e3933,
+0x206d6f72, 0x2e342e35, 0x47282033, 0x20294c50,
+0x65687465, 0x6f6f6272, 0x726f2e74, 0xffff0067,
+0100000,
+};
diff -r 5b19839d0365 -r cd51fa91956b tools/firmware/hvmloader/Makefile
--- a/tools/firmware/hvmloader/Makefile Sun Aug 12 12:19:13 2007 -0600
+++ b/tools/firmware/hvmloader/Makefile Sun Aug 12 14:50:02 2007 -0600
@@ -51,12 +51,12 @@ acpi/acpi.a:
acpi/acpi.a:
$(MAKE) -C acpi
-roms.h: ../rombios/BIOS-bochs-latest ../vgabios/VGABIOS-lgpl-latest.bin
../vgabios/VGABIOS-lgpl-latest.cirrus.bin ../vmxassist/vmxassist.bin
../etherboot/eb-rtl8139.zrom
+roms.h: ../rombios/BIOS-bochs-latest ../vgabios/VGABIOS-lgpl-latest.bin
../vgabios/VGABIOS-lgpl-latest.cirrus.bin ../vmxassist/vmxassist.bin
../etherboot/eb-rtl8139.zrom.h
sh ./mkhex rombios ../rombios/BIOS-bochs-latest > roms.h
sh ./mkhex vgabios_stdvga ../vgabios/VGABIOS-lgpl-latest.bin >> roms.h
sh ./mkhex vgabios_cirrusvga ../vgabios/VGABIOS-lgpl-latest.cirrus.bin
>> roms.h
sh ./mkhex vmxassist ../vmxassist/vmxassist.bin >> roms.h
- sh ./mkhex etherboot ../etherboot/eb-rtl8139.zrom >> roms.h
+ cat ../etherboot/eb-rtl8139.zrom.h >> roms.h
.PHONY: clean
clean:
diff -r 5b19839d0365 -r cd51fa91956b tools/libxc/xc_dom_x86.c
--- a/tools/libxc/xc_dom_x86.c Sun Aug 12 12:19:13 2007 -0600
+++ b/tools/libxc/xc_dom_x86.c Sun Aug 12 14:50:02 2007 -0600
@@ -417,6 +417,7 @@ static int start_info_x86_32(struct xc_d
xc_dom_printf("%s: called\n", __FUNCTION__);
+ memset(start_info, 0, sizeof(*start_info));
sprintf(start_info->magic, dom->guest_type);
start_info->nr_pages = dom->total_pages;
start_info->shared_info = shinfo << PAGE_SHIFT_X86;
@@ -455,6 +456,7 @@ static int start_info_x86_64(struct xc_d
xc_dom_printf("%s: called\n", __FUNCTION__);
+ memset(start_info, 0, sizeof(*start_info));
sprintf(start_info->magic, dom->guest_type);
start_info->nr_pages = dom->total_pages;
start_info->shared_info = shinfo << PAGE_SHIFT_X86;
diff -r 5b19839d0365 -r cd51fa91956b tools/pygrub/src/LiloConf.py
--- a/tools/pygrub/src/LiloConf.py Sun Aug 12 12:19:13 2007 -0600
+++ b/tools/pygrub/src/LiloConf.py Sun Aug 12 14:50:02 2007 -0600
@@ -18,12 +18,13 @@ class LiloImage(object):
" initrd: %s\n" %(self.title, self.root, self.kernel,
self.args, self.initrd))
def reset(self, lines, path):
- self._root = self._initrd = self._kernel = self._args = None
+ self._initrd = self._kernel = self._readonly = None
+ self._args = ""
self.title = ""
self.lines = []
self.path = path
+ self.root = ""
map(self.set_from_line, lines)
- self.root = "" # dummy
def set_from_line(self, line, replace = None):
(com, arg) = GrubConf.grub_exact_split(line, 2)
@@ -55,6 +56,23 @@ class LiloImage(object):
return self._initrd
initrd = property(get_initrd, set_initrd)
+ def set_args(self, val):
+ self._args = val
+ def get_args(self):
+ args = self._args
+ if self.root:
+ args += " root=" + self.root
+ if self.readonly:
+ args += " ro"
+ return args
+ args = property(get_args, set_args)
+
+ def set_readonly(self, val):
+ self._readonly = 1
+ def get_readonly(self):
+ return self._readonly
+ readonly = property(get_readonly, set_readonly)
+
# set up command handlers
commands = { "label": "self.title",
"root": "self.root",
@@ -62,7 +80,7 @@ class LiloImage(object):
"image": "self.kernel",
"initrd": "self.initrd",
"append": "self.args",
- "read-only": None,
+ "read-only": "self.readonly",
"chainloader": None,
"module": None}
diff -r 5b19839d0365 -r cd51fa91956b tools/python/xen/util/acmpolicy.py
--- a/tools/python/xen/util/acmpolicy.py Sun Aug 12 12:19:13 2007 -0600
+++ b/tools/python/xen/util/acmpolicy.py Sun Aug 12 14:50:02 2007 -0600
@@ -46,6 +46,9 @@ ACM_POLICY_UNDEFINED = 15
ACM_SCHEMA_FILE = "/etc/xen/acm-security/policies/security_policy.xsd"
+
+ACM_LABEL_UNLABELED = "__UNLABELED__"
+ACM_LABEL_UNLABELED_DISPLAY = "unlabeled"
class ACMPolicy(XSPolicy):
"""
@@ -139,6 +142,21 @@ class ACMPolicy(XSPolicy):
return xsconstants.XSERR_SUCCESS
+ def is_default_policy(self):
+ """
+ Determine whether this is the default policy
+ """
+ default = ['SystemManagement']
+ if self.policy_get_virtualmachinelabel_names() == default and \
+ self.policy_get_bootstrap_vmlabel() == default[0] and \
+ self.policy_get_stetypes_types() == default and \
+ self.policy_get_stes_of_vmlabel(default[0]) == default and \
+ self.policy_get_resourcelabel_names() == [] and \
+ self.policy_get_chwall_types() == default and \
+ self.get_name() == "DEFAULT":
+ return True
+ return False
+
def update(self, xml_new):
"""
Update the policy with the new XML. The hypervisor decides
@@ -153,27 +171,18 @@ class ACMPolicy(XSPolicy):
return -xsconstants.XSERR_XML_PROCESSING, errors
vmlabel_map = acmpol_new.policy_get_vmlabel_translation_map()
+
# An update requires version information in the current
# and new policy. The version number of the current policy
# must be the same as what is in the FromPolicy/Version node
# in the new one and the current policy's name must be the
# same as in FromPolicy/PolicyName
-
- now_vers = acmpol_old.policy_dom_get_hdr_item("Version")
- now_name = acmpol_old.policy_dom_get_hdr_item("PolicyName")
- req_oldvers = acmpol_new.policy_dom_get_frompol_item("Version")
- req_oldname = acmpol_new.policy_dom_get_frompol_item("PolicyName")
-
- if now_vers == "" or \
- now_vers != req_oldvers or \
- now_name != req_oldname:
- log.info("Policy rejected: %s != %s or %s != %s" % \
- (now_vers,req_oldvers,now_name,req_oldname))
- return -xsconstants.XSERR_VERSION_PREVENTS_UPDATE, errors
-
- if not self.isVersionUpdate(acmpol_new):
- log.info("Policy rejected since new version is not an update.")
- return -xsconstants.XSERR_VERSION_PREVENTS_UPDATE, errors
+ # The default policy when it is set skips this step.
+ if not acmpol_new.is_default_policy() and \
+ not acmpol_old.is_default_policy():
+ irc = self.__do_update_version_check(acmpol_new)
+ if irc != xsconstants.XSERR_SUCCESS:
+ return irc, errors
if self.isloaded():
newvmnames = \
@@ -255,6 +264,29 @@ class ACMPolicy(XSPolicy):
self.compile()
return rc, errors
+
+ def __do_update_version_check(self, acmpol_new):
+ acmpol_old = self
+
+ now_vers = acmpol_old.policy_dom_get_hdr_item("Version")
+ now_name = acmpol_old.policy_dom_get_hdr_item("PolicyName")
+ req_oldvers = acmpol_new.policy_dom_get_frompol_item("Version")
+ req_oldname = acmpol_new.policy_dom_get_frompol_item("PolicyName")
+
+ if now_vers == "" or \
+ now_vers != req_oldvers or \
+ now_name != req_oldname:
+ log.info("Policy rejected: %s != %s or %s != %s" % \
+ (now_vers,req_oldvers,now_name,req_oldname))
+ return -xsconstants.XSERR_VERSION_PREVENTS_UPDATE
+
+ if not self.isVersionUpdate(acmpol_new):
+ log.info("Policy rejected since new version is not an update.")
+ return -xsconstants.XSERR_VERSION_PREVENTS_UPDATE
+
+ return xsconstants.XSERR_SUCCESS
+
+
def compareVersions(self, v1, v2):
"""
Compare two policy versions given their tuples of major and
@@ -845,8 +877,7 @@ class ACMPolicy(XSPolicy):
if self.isloaded():
return -xsconstants.XSERR_POLICY_LOADED
files = [ self.get_filename(".map",""),
- self.get_filename(".bin",""),
- self.path_from_policy_name(self.get_name())]
+ self.get_filename(".bin","") ]
for f in files:
try:
os.unlink(f)
@@ -925,11 +956,13 @@ class ACMPolicy(XSPolicy):
return -xsconstants.XSERR_POLICY_INCONSISTENT, "", ""
vms_with_chws = []
- chws_by_vm = {}
+ chws_by_vm = { ACM_LABEL_UNLABELED : [] }
for v in vms:
if v.has_key("chws"):
vms_with_chws.append(v["name"])
chws_by_vm[v["name"]] = v["chws"]
+
+
if bootstrap in vms_with_chws:
vms_with_chws.remove(bootstrap)
vms_with_chws.sort()
@@ -937,18 +970,25 @@ class ACMPolicy(XSPolicy):
else:
vms_with_chws.sort()
+ if ACM_LABEL_UNLABELED in vms_with_chws:
+ vms_with_chws.remove(ACM_LABEL_UNLABELED) ; # @1
+
vms_with_stes = []
- stes_by_vm = {}
+ stes_by_vm = { ACM_LABEL_UNLABELED : [] }
for v in vms:
if v.has_key("stes"):
vms_with_stes.append(v["name"])
stes_by_vm[v["name"]] = v["stes"]
+
if bootstrap in vms_with_stes:
vms_with_stes.remove(bootstrap)
vms_with_stes.sort()
vms_with_stes.insert(0, bootstrap)
else:
vms_with_stes.sort()
+
+ if ACM_LABEL_UNLABELED in vms_with_stes:
+ vms_with_stes.remove(ACM_LABEL_UNLABELED) ; # @2
resnames = self.policy_get_resourcelabel_names()
resnames.sort()
@@ -957,6 +997,9 @@ class ACMPolicy(XSPolicy):
for r in res:
if r.has_key("stes"):
stes_by_res[r["name"]] = r["stes"]
+
+ if ACM_LABEL_UNLABELED in resnames:
+ resnames.remove(ACM_LABEL_UNLABELED)
max_chw_ssids = 1 + len(vms_with_chws)
max_chw_types = 1 + len(vms_with_chws)
@@ -1083,6 +1126,8 @@ class ACMPolicy(XSPolicy):
pr_bin += "\x00"
# Build chinese wall part
+ vms_with_chws.insert(0, ACM_LABEL_UNLABELED)
+
cfses_names = self.policy_get_chwall_cfses_names_sorted()
cfses = self.policy_get_chwall_cfses()
@@ -1105,9 +1150,7 @@ class ACMPolicy(XSPolicy):
chw_running_types_offset,
chw_conf_agg_offset)
chw_bin_body = ""
- # simulate __NULL_LABEL__
- for c in chws:
- chw_bin_body += struct.pack("!h",0)
+
# VMs that are listed and their chinese walls
for v in vms_with_chws:
for c in chws:
@@ -1143,6 +1186,8 @@ class ACMPolicy(XSPolicy):
chw_bin += "\x00"
# Build STE part
+ vms_with_stes.insert(0, ACM_LABEL_UNLABELED) # Took out in @2
+
steformat="!iiiii"
ste_bin = struct.pack(steformat,
ACM_STE_VERSION,
@@ -1152,10 +1197,7 @@ class ACMPolicy(XSPolicy):
struct.calcsize(steformat))
ste_bin_body = ""
if stes:
- # Simulate __NULL_LABEL__
- for s in stes:
- ste_bin_body += struct.pack("!h",0)
- # VMs that are listed and their chinese walls
+ # VMs that are listed and their STE types
for v in vms_with_stes:
unknown_ste |= (set(stes_by_vm[v]) - set(stes))
for s in stes:
diff -r 5b19839d0365 -r cd51fa91956b tools/python/xen/util/security.py
--- a/tools/python/xen/util/security.py Sun Aug 12 12:19:13 2007 -0600
+++ b/tools/python/xen/util/security.py Sun Aug 12 14:50:02 2007 -0600
@@ -146,7 +146,7 @@ def calc_dom_ssidref_from_info(info):
raise VmError("VM label '%s' in wrong format." % seclab)
typ, policyname, vmlabel = seclab.split(":")
if typ != xsconstants.ACM_POLICY_ID:
- raise VmError("Policy type '%s' not supported." % typ)
+ raise VmError("Policy type '%s' must be changed." % typ)
refresh_security_policy()
if active_policy != policyname:
raise VmError("Active policy '%s' different than "
@@ -155,7 +155,7 @@ def calc_dom_ssidref_from_info(info):
ssidref = label2ssidref(vmlabel, policyname, "dom")
return ssidref
else:
- return 0
+ return 0x0
raise VmError("security.calc_dom_ssidref_from_info: info of type '%s'"
"not supported." % type(info))
@@ -231,6 +231,10 @@ def ssidref2label(ssidref_var):
ssidref = ssidref_var
else:
err("Instance type of ssidref not supported (must be of type 'str' or
'int')")
+
+ if ssidref == 0:
+ from xen.util.acmpolicy import ACM_LABEL_UNLABELED
+ return ACM_LABEL_UNLABELED
try:
mapfile_lock()
@@ -498,7 +502,7 @@ def hv_chg_policy(bin_pol, del_array, ch
rc, errors = acm.chgpolicy(bin_pol, del_array, chg_array)
except Exception, e:
pass
- if (len(errors) > 0):
+ if len(errors) > 0:
rc = -xsconstants.XSERR_HV_OP_FAILED
return rc, errors
@@ -781,6 +785,24 @@ def res_security_check_xapi(rlabel, rssi
return rtnval
+def validate_label(label, policyref):
+ """
+ Make sure that this label is part of the currently enforced policy
+ and that it reference the current policy.
+ """
+ rc = xsconstants.XSERR_SUCCESS
+ from xen.xend.XendXSPolicyAdmin import XSPolicyAdminInstance
+ curpol = XSPolicyAdminInstance().get_loaded_policy()
+ if not curpol or curpol.get_name() != policyref:
+ rc = -xsconstants.XSERR_BAD_LABEL
+ else:
+ try:
+ label2ssidref(label, curpol.get_name() , 'res')
+ except:
+ rc = -xsconstants.XSERR_BAD_LABEL
+ return rc
+
+
def set_resource_label_xapi(resource, reslabel_xapi, oldlabel_xapi):
"""Assign a resource label to a resource
@param resource: The name of a resource, i.e., "phy:/dev/hda", or
@@ -805,9 +827,15 @@ def set_resource_label_xapi(resource, re
return -xsconstants.XSERR_BAD_LABEL_FORMAT
otyp, opolicyref, olabel = tmp
# Only ACM is supported
- if otyp != xsconstants.ACM_POLICY_ID:
+ if otyp != xsconstants.ACM_POLICY_ID and \
+ otyp != xsconstants.INVALID_POLICY_PREFIX + \
+ xsconstants.ACM_POLICY_ID:
return -xsconstants.XSERR_WRONG_POLICY_TYPE
+ rc = validate_label(label, policyref)
+ if rc != xsconstants.XSERR_SUCCESS:
+ return rc
return set_resource_label(resource, typ, policyref, label, olabel)
+
def is_resource_in_use(resource):
""" Investigate all running domains whether they use this device """
@@ -867,7 +895,7 @@ def get_domain_resources(dominfo):
resources[typ].append("%s:%s:%s" %
(xsconstants.ACM_POLICY_ID,
active_policy,
- "unlabeled"))
+ ACM_LABEL_UNLABELED))
return resources
@@ -1224,7 +1252,7 @@ def change_acm_policy(bin_pol, del_array
sec_lab, new_seclab = labels
if sec_lab != new_seclab:
log.info("Updating domain %s to new label '%s'." % \
- (new_seclab, sec_lab))
+ (sec_lab, new_seclab))
# This better be working!
dominfo.set_security_label(new_seclab,
sec_lab,
diff -r 5b19839d0365 -r cd51fa91956b tools/python/xen/xend/XendDomainInfo.py
--- a/tools/python/xen/xend/XendDomainInfo.py Sun Aug 12 12:19:13 2007 -0600
+++ b/tools/python/xen/xend/XendDomainInfo.py Sun Aug 12 14:50:02 2007 -0600
@@ -559,18 +559,8 @@ class XendDomainInfo:
self.getDeviceController(devclass).waitForDevices()
def destroyDevice(self, deviceClass, devid, force = False):
- try:
- dev = int(devid)
- except ValueError:
- # devid is not a number but a string containing either device
- # name (e.g. xvda) or device_type/device_id (e.g. vbd/51728)
- dev = type(devid) is str and devid.split('/')[-1] or None
- if dev == None:
- log.debug("Could not find the device %s", devid)
- return None
-
- log.debug("dev = %s", dev)
- return self.getDeviceController(deviceClass).destroyDevice(dev, force)
+ log.debug("dev = %s", devid)
+ return self.getDeviceController(deviceClass).destroyDevice(devid,
force)
def getDeviceSxprs(self, deviceClass):
if self._stateGet() in (DOM_STATE_RUNNING, DOM_STATE_PAUSED):
@@ -1463,8 +1453,6 @@ class XendDomainInfo:
ssidref = 0
if security.on():
ssidref = security.calc_dom_ssidref_from_info(self.info)
- if ssidref == 0:
- raise VmError('VM is not properly labeled.')
if security.has_authorization(ssidref) == False:
raise VmError("VM is not authorized to run.")
diff -r 5b19839d0365 -r cd51fa91956b
tools/python/xen/xend/server/DevController.py
--- a/tools/python/xen/xend/server/DevController.py Sun Aug 12 12:19:13
2007 -0600
+++ b/tools/python/xen/xend/server/DevController.py Sun Aug 12 14:50:02
2007 -0600
@@ -203,27 +203,32 @@ class DevController:
The implementation here simply deletes the appropriate paths from the
store. This may be overridden by subclasses who need to perform other
- tasks on destruction. Further, the implementation here can only
- accept integer device IDs, or values that can be converted to
- integers. Subclasses may accept other values and convert them to
- integers before passing them here.
- """
-
- devid = int(devid)
+ tasks on destruction. The implementation here accepts integer device
+ IDs or paths containg integer deviceIDs, e.g. vfb/0. Subclasses may
+ accept other values and convert them to integers before passing them
+ here.
+ """
+
+ try:
+ dev = int(devid)
+ except ValueError:
+ # Does devid contain devicetype/deviceid?
+ # Propogate exception if unable to find an integer devid
+ dev = int(type(devid) is str and devid.split('/')[-1] or None)
# Modify online status /before/ updating state (latter is watched by
# drivers, so this ordering avoids a race).
- self.writeBackend(devid, 'online', "0")
- self.writeBackend(devid, 'state', str(xenbusState['Closing']))
+ self.writeBackend(dev, 'online', "0")
+ self.writeBackend(dev, 'state', str(xenbusState['Closing']))
if force:
- frontpath = self.frontendPath(devid)
+ frontpath = self.frontendPath(dev)
backpath = xstransact.Read(frontpath, "backend")
if backpath:
xstransact.Remove(backpath)
xstransact.Remove(frontpath)
- self.vm._removeVm("device/%s/%d" % (self.deviceClass, devid))
+ self.vm._removeVm("device/%s/%d" % (self.deviceClass, dev))
def configurations(self):
return map(self.configuration, self.deviceIDs())
diff -r 5b19839d0365 -r cd51fa91956b tools/python/xen/xend/server/blkif.py
--- a/tools/python/xen/xend/server/blkif.py Sun Aug 12 12:19:13 2007 -0600
+++ b/tools/python/xen/xend/server/blkif.py Sun Aug 12 14:50:02 2007 -0600
@@ -73,17 +73,7 @@ class BlkifController(DevController):
back['uuid'] = uuid
if security.on():
- (label, ssidref, policy) = \
- security.get_res_security_details(uname)
- domain_label = self.vm.get_security_label()
- if domain_label:
- rc = security.res_security_check_xapi(label, ssidref, policy,
- domain_label)
- if rc == 0:
- raise VmError("VM's access to block device '%s' denied." %
- uname)
- else:
- raise VmError("VM must have a security label.")
+ self.do_access_control(config, uname)
devid = blkif.blkdev_name_to_number(dev)
if devid is None:
@@ -95,6 +85,21 @@ class BlkifController(DevController):
return (devid, back, front)
+ def do_access_control(self, config, uname):
+ (label, ssidref, policy) = \
+ security.get_res_security_details(uname)
+ domain_label = self.vm.get_security_label()
+ if domain_label:
+ rc = security.res_security_check_xapi(label, ssidref, policy,
+ domain_label)
+ if rc == 0:
+ raise VmError("VM's access to block device '%s' denied" %
+ uname)
+ else:
+ from xen.util.acmpolicy import ACM_LABEL_UNLABELED
+ if label != ACM_LABEL_UNLABELED:
+ raise VmError("VM must have a security label to access "
+ "block device '%s'" % uname)
def reconfigureDevice(self, _, config):
"""@see DevController.reconfigureDevice"""
@@ -149,13 +154,16 @@ class BlkifController(DevController):
def destroyDevice(self, devid, force):
"""@see DevController.destroyDevice"""
- # If we are given a device name, then look up the device ID from it,
- # and destroy that ID instead. If what we are given is an integer,
- # then assume it's a device ID and pass it straight through to our
- # superclass's method.
-
+ # vbd device IDs can be either string or integer. Further, the
+ # following string values are possible:
+ # - devicetype/deviceid (vbd/51728)
+ # - devicetype/devicename (/dev/xvdb)
+ # - devicename (xvdb)
+ # Let our superclass handle integer or devicetype/deviceid forms.
+ # If we are given a device name form, then look up the device ID
+ # from it, and destroy that ID instead.
try:
- DevController.destroyDevice(self, int(devid), force)
+ DevController.destroyDevice(self, devid, force)
except ValueError:
devid_end = type(devid) is str and devid.split('/')[-1] or None
diff -r 5b19839d0365 -r cd51fa91956b tools/python/xen/xm/activatepolicy.py
--- a/tools/python/xen/xm/activatepolicy.py Sun Aug 12 12:19:13 2007 -0600
+++ b/tools/python/xen/xm/activatepolicy.py Sun Aug 12 14:50:02 2007 -0600
@@ -23,7 +23,7 @@ from xen.util import xsconstants
from xen.util import xsconstants
from xml.dom import minidom
from xen.xm.opts import OptionError
-from xen.xm import getpolicy
+from xen.xm import getpolicy, setpolicy
from xen.xm import main as xm_main
from xen.xm.main import server
@@ -38,6 +38,9 @@ def help():
--boot Have the system boot with the policy. Changes the default
title in grub.conf.
--noboot Remove the policy from the default entry in grub.conf.
+ --remove Attempt to remove the current policy by installing the
+ default policy; this works only if no domains are
+ running.
"""
def activate_policy(flags):
@@ -56,6 +59,25 @@ def remove_bootpolicy():
def remove_bootpolicy():
server.xenapi.XSPolicy.rm_xsbootpolicy()
+def install_default_policy():
+ if xm_main.serverType != xm_main.SERVER_XEN_API:
+ raise OptionError('xm needs to be configured to use the xen-api.')
+ xs_type = int(server.xenapi.XSPolicy.get_xstype())
+ if xs_type & xsconstants.XS_POLICY_ACM == 0:
+ raise OptionError('ACM policy type not supported on system.')
+ policystate = server.xenapi.XSPolicy.get_xspolicy()
+ if int(policystate['type']) == 0:
+ print 'No policy is installed.'
+ return
+ if int(policystate['type']) != xsconstants.XS_POLICY_ACM:
+ print "Unknown policy type '%s'." % policystate['type']
+ flags = int(policystate['flags'])
+ if flags & xsconstants.XS_INST_LOAD == 0:
+ print "Default policy is already loaded."
+ return
+ setpolicy.setpolicy(xsconstants.ACM_POLICY_ID, 'default', flags, True,
+ False)
+
def main(argv):
if xm_main.serverType != xm_main.SERVER_XEN_API:
raise OptionError('xm needs to be configured to use the xen-api.')
@@ -69,6 +91,9 @@ def main(argv):
flags |= xsconstants.XS_INST_LOAD
elif '--noboot' == argv[c]:
remove_bootpolicy()
+ elif '--remove' == argv[c]:
+ install_default_policy()
+ return
else:
raise OptionError("Unknown command line option '%s'" % argv[c])
c += 1
diff -r 5b19839d0365 -r cd51fa91956b tools/python/xen/xm/main.py
--- a/tools/python/xen/xm/main.py Sun Aug 12 12:19:13 2007 -0600
+++ b/tools/python/xen/xm/main.py Sun Aug 12 14:50:02 2007 -0600
@@ -25,7 +25,6 @@ import cmd
import cmd
import os
import pprint
-import readline
import shlex
import sys
import re
@@ -51,6 +50,7 @@ from xen.xm import console
from xen.xm import console
from xen.util.xmlrpcclient import ServerProxy
from xen.util.security import ACMError
+from xen.util.acmpolicy import ACM_LABEL_UNLABELED_DISPLAY
import XenAPI
@@ -615,6 +615,7 @@ class Shell(cmd.Cmd):
def preloop(self):
cmd.Cmd.preloop(self)
+ import readline
readline.set_completer_delims(' ')
def default(self, line):
@@ -947,7 +948,7 @@ def xm_label_list(doms):
d = parse_doms_info(dom)
if security.active_policy not in ['INACTIVE', 'NULL', 'DEFAULT']:
if not d['seclabel']:
- d['seclabel'] = 'ERROR'
+ d['seclabel'] = ACM_LABEL_UNLABELED_DISPLAY
elif security.active_policy in ['DEFAULT']:
d['seclabel'] = 'DEFAULT'
else:
diff -r 5b19839d0365 -r cd51fa91956b tools/python/xen/xm/new.py
--- a/tools/python/xen/xm/new.py Sun Aug 12 12:19:13 2007 -0600
+++ b/tools/python/xen/xm/new.py Sun Aug 12 14:50:02 2007 -0600
@@ -75,7 +75,8 @@ def main(argv):
doc = sxp2xml_inst.convert_sxp_to_xml(config)
xenapi_create_inst = xenapi_create()
- vm_refs = xenapi_create_inst.create(document = doc)
+ vm_refs = xenapi_create_inst.create(document = doc,
+ skipdtd=opts.vals.skipdtd)
else:
make_unstarted_domain(opts, config)
diff -r 5b19839d0365 -r cd51fa91956b tools/python/xen/xm/resources.py
--- a/tools/python/xen/xm/resources.py Sun Aug 12 12:19:13 2007 -0600
+++ b/tools/python/xen/xm/resources.py Sun Aug 12 14:50:02 2007 -0600
@@ -58,7 +58,6 @@ def main (argv):
try:
filename = security.res_label_filename
access_control = dictio.dict_read("resources", filename)
- print access_control
except:
raise OptionError("Resource file not found")
diff -r 5b19839d0365 -r cd51fa91956b tools/python/xen/xm/setpolicy.py
--- a/tools/python/xen/xm/setpolicy.py Sun Aug 12 12:19:13 2007 -0600
+++ b/tools/python/xen/xm/setpolicy.py Sun Aug 12 14:50:02 2007 -0600
@@ -24,6 +24,7 @@ import sys
import sys
import string
from xen.util import xsconstants
+from xen.util.acmpolicy import ACMPolicy
from xen.xm.opts import OptionError
from xen.util.security import policy_dir_prefix
from xen.xm import main as xm_main
@@ -40,9 +41,38 @@ def help():
The following options are defined
--load Load the policy immediately
--boot Have the system load the policy during boot
+ --update Automatically adapt the policy so that it will be
+ treated as an update to the current policy
"""
-def setpolicy(policytype, policy_name, flags, overwrite):
+def create_update_xml(xml):
+ """
+ Adapt the new policy's xml header to be a simple type of an
+ update to the currently enforce policy on the remote system.
+ Increases the minor number by '1'.
+ """
+ policystate = server.xenapi.XSPolicy.get_xspolicy()
+ if int(policystate['type']) == 0:
+ return xml
+ curpol = ACMPolicy(xml = policystate['repr'])
+ curpol_version = curpol.get_version()
+ tmp = curpol_version.split('.')
+ if len(tmp) == 2:
+ maj = int(tmp[0])
+ min = int(tmp[1])
+ else:
+ maj = int(tmp)
+ min = 0
+ min += 1
+ newpol_version = ""+str(maj)+"."+str(min)
+
+ newpol = ACMPolicy(xml = xml)
+ newpol.set_frompolicy_name(curpol.get_name())
+ newpol.set_frompolicy_version(curpol.get_version())
+ newpol.set_policy_version(newpol_version)
+ return newpol.toxml()
+
+def setpolicy(policytype, policy_name, flags, overwrite, is_update=False):
if xm_main.serverType != xm_main.SERVER_XEN_API:
raise OptionError('xm needs to be configured to use the xen-api.')
if policytype != xsconstants.ACM_POLICY_ID:
@@ -60,6 +90,9 @@ def setpolicy(policytype, policy_name, f
f.close()
except:
raise OptionError("Not a valid policy file")
+
+ if is_update:
+ xml = create_update_xml(xml)
try:
policystate = server.xenapi.XSPolicy.set_xspolicy(xs_type,
@@ -96,18 +129,21 @@ def main(argv):
policytype = argv[1]
policy_name = argv[2]
+ is_update = False
flags = 0
if '--load' in argv:
flags |= xsconstants.XS_INST_LOAD
if '--boot' in argv:
flags |= xsconstants.XS_INST_BOOT
+ if '--update' in argv:
+ is_update = True
overwrite = True
if '--nooverwrite' in argv:
overwrite = False
- setpolicy(policytype, policy_name, flags, overwrite)
+ setpolicy(policytype, policy_name, flags, overwrite, is_update)
if __name__ == '__main__':
try:
diff -r 5b19839d0365 -r cd51fa91956b tools/security/Makefile
--- a/tools/security/Makefile Sun Aug 12 12:19:13 2007 -0600
+++ b/tools/security/Makefile Sun Aug 12 14:50:02 2007 -0600
@@ -12,13 +12,6 @@ CFLAGS += $(shell xml2-config --cfla
CFLAGS += $(shell xml2-config --cflags )
CFLAGS += $(shell if [[ $(XML2VERSION) < 2.6.20 ]]; then echo ""; else
echo "-DVALIDATE_SCHEMA"; fi )
LDFLAGS += $(shell xml2-config --libs ) # if this does not work, try
-L/usr/lib -lxml2 -lz -lpthread -lm
-
-ifeq ($(ACM_DEFAULT_SECURITY_POLICY),ACM_NULL_POLICY)
-POLICY=null
-endif
-ifeq
($(ACM_DEFAULT_SECURITY_POLICY),ACM_CHINESE_WALL_AND_SIMPLE_TYPE_ENFORCEMENT_POLICY)
-POLICY=chwall_ste
-endif
SRCS_TOOL = secpol_tool.c
OBJS_TOOL := $(patsubst %.c,%.o,$(filter %.c,$(SRCS_TOOL)))
@@ -41,6 +34,7 @@ ACM_SECGEN_CGIDIR = $(ACM_SECGEN_HTMLDIR
ACM_SCHEMA = security_policy.xsd
ACM_EXAMPLES = client_v1 test
+ACM_DEF_POLICIES = default default-ul
ACM_POLICY_SUFFIX = security_policy.xml
ifeq ($(ACM_SECURITY),y)
@@ -61,6 +55,9 @@ install: all $(ACM_CONFIG_FILE)
$(INSTALL_DIR) $(DESTDIR)$(ACM_POLICY_DIR)/example
for i in $(ACM_EXAMPLES); do \
$(INSTALL_DATA) policies/example/$$i-$(ACM_POLICY_SUFFIX)
$(DESTDIR)$(ACM_POLICY_DIR)/example/; \
+ done
+ for i in $(ACM_DEF_POLICIES); do \
+ $(INSTALL_DATA) policies/$$i-$(ACM_POLICY_SUFFIX)
$(DESTDIR)$(ACM_POLICY_DIR); \
done
$(INSTALL_DIR) $(DESTDIR)$(ACM_SCRIPT_DIR)
$(INSTALL_PROG) $(ACM_SCRIPTS) $(DESTDIR)$(ACM_SCRIPT_DIR)
diff -r 5b19839d0365 -r cd51fa91956b
tools/security/policies/default-security_policy.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tools/security/policies/default-security_policy.xml Sun Aug 12
14:50:02 2007 -0600
@@ -0,0 +1,30 @@
+<?xml version="1.0" ?>
+<SecurityPolicyDefinition xmlns="http://www.ibm.com"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.ibm.com ../../security_policy.xsd">
+ <PolicyHeader>
+ <PolicyName>DEFAULT</PolicyName>
+ <Version>1.0</Version>
+ </PolicyHeader>
+ <SimpleTypeEnforcement>
+ <SimpleTypeEnforcementTypes>
+ <Type>SystemManagement</Type>
+ </SimpleTypeEnforcementTypes>
+ </SimpleTypeEnforcement>
+ <ChineseWall>
+ <ChineseWallTypes>
+ <Type>SystemManagement</Type>
+ </ChineseWallTypes>
+ </ChineseWall>
+ <SecurityLabelTemplate>
+ <SubjectLabels bootstrap="SystemManagement">
+ <VirtualMachineLabel>
+ <Name>SystemManagement</Name>
+ <SimpleTypeEnforcementTypes>
+ <Type>SystemManagement</Type>
+ </SimpleTypeEnforcementTypes>
+ <ChineseWallTypes>
+ <Type/>
+ </ChineseWallTypes>
+ </VirtualMachineLabel>
+ </SubjectLabels>
+ </SecurityLabelTemplate>
+</SecurityPolicyDefinition>
diff -r 5b19839d0365 -r cd51fa91956b
tools/security/policies/default-ul-security_policy.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tools/security/policies/default-ul-security_policy.xml Sun Aug 12
14:50:02 2007 -0600
@@ -0,0 +1,41 @@
+<?xml version="1.0" ?>
+<SecurityPolicyDefinition xmlns="http://www.ibm.com"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.ibm.com ../../security_policy.xsd">
+ <PolicyHeader>
+ <PolicyName>DEFAULT-UL</PolicyName>
+ <Version>1.0</Version>
+ </PolicyHeader>
+ <SimpleTypeEnforcement>
+ <SimpleTypeEnforcementTypes>
+ <Type>SystemManagement</Type>
+ <Type>__UNLABELED__</Type>
+ </SimpleTypeEnforcementTypes>
+ </SimpleTypeEnforcement>
+ <ChineseWall>
+ <ChineseWallTypes>
+ <Type>SystemManagement</Type>
+ </ChineseWallTypes>
+ </ChineseWall>
+ <SecurityLabelTemplate>
+ <SubjectLabels bootstrap="SystemManagement">
+ <VirtualMachineLabel>
+ <Name>SystemManagement</Name>
+ <SimpleTypeEnforcementTypes>
+ <Type>SystemManagement</Type>
+ <Type>__UNLABELED__</Type>
+ </SimpleTypeEnforcementTypes>
+ <ChineseWallTypes>
+ <Type/>
+ </ChineseWallTypes>
+ </VirtualMachineLabel>
+ <VirtualMachineLabel>
+ <Name>__UNLABELED__</Name>
+ <SimpleTypeEnforcementTypes>
+ <Type>__UNLABELED__</Type>
+ </SimpleTypeEnforcementTypes>
+ <ChineseWallTypes>
+ <Type/>
+ </ChineseWallTypes>
+ </VirtualMachineLabel>
+ </SubjectLabels>
+ </SecurityLabelTemplate>
+</SecurityPolicyDefinition>
diff -r 5b19839d0365 -r cd51fa91956b tools/security/xensec_ezpolicy
--- a/tools/security/xensec_ezpolicy Sun Aug 12 12:19:13 2007 -0600
+++ b/tools/security/xensec_ezpolicy Sun Aug 12 14:50:02 2007 -0600
@@ -35,6 +35,8 @@ conflict_bmp = None
conflict_bmp = None
realm_icon = None
workload_icon = None
+
+ACM_LABEL_UNLABELED = '__UNLABELED__'
class orgTreeCtrl(wx.TreeCtrl):
@@ -870,7 +872,8 @@ class ezFrame(wx.Frame):
self.realm_menu.Enable(self.ID_ORGDEL, True)
self.realm_menu.Enable(self.ID_ORGEDT, True)
self.realm_menu.Enable(self.ID_ORGADD, True)
- if len(self.orgs.GetSelections()) > 1:
+ if len(self.orgs.GetSelections()) > 1 or \
+ ACM_LABEL_UNLABELED == self.orgs.GetItemText(item):
self.realm_menu.Enable(self.ID_ORGEDT, False)
self.realm_menu.Enable(self.ID_ORGADD, False)
self.PopupMenu(self.realm_menu)
@@ -1622,6 +1625,8 @@ def main():
app = ezApp(0)
if len(sys.argv) in [2]:
app.Load(sys.argv[1])
+ else:
+ dict2org({'orgs' : [[ACM_LABEL_UNLABELED,[]]], 'cons': []})
app.MainLoop()
print "Goodbye"
diff -r 5b19839d0365 -r cd51fa91956b tools/xenstat/libxenstat/src/xenstat.c
--- a/tools/xenstat/libxenstat/src/xenstat.c Sun Aug 12 12:19:13 2007 -0600
+++ b/tools/xenstat/libxenstat/src/xenstat.c Sun Aug 12 14:50:02 2007 -0600
@@ -677,7 +677,7 @@ static void xenstat_prune_domain(xenstat
/* shift entries following specified entry up by one */
if (entry < node->num_domains) {
xenstat_domain *domain = &node->domains[entry];
- memmove(domain,domain+1,node->num_domains-entry);
+ memmove(domain,domain+1,(node->num_domains - entry) *
sizeof(xenstat_domain) );
}
/* zero out original last entry from node -- not
diff -r 5b19839d0365 -r cd51fa91956b tools/xenstore/utils.c
--- a/tools/xenstore/utils.c Sun Aug 12 12:19:13 2007 -0600
+++ b/tools/xenstore/utils.c Sun Aug 12 14:50:02 2007 -0600
@@ -10,18 +10,17 @@
#include <signal.h>
#include "utils.h"
-void xprintf(const char *fmt, ...)
+static void default_xprintf(const char *fmt, ...)
{
va_list args;
-
- if (!stderr)
- return; /* could trace()? */
va_start(args, fmt);
vfprintf(stderr, fmt, args);
va_end(args);
fflush(stderr);
}
+
+void (*xprintf)(const char *fmt, ...) = default_xprintf;
void barf(const char *fmt, ...)
{
diff -r 5b19839d0365 -r cd51fa91956b tools/xenstore/utils.h
--- a/tools/xenstore/utils.h Sun Aug 12 12:19:13 2007 -0600
+++ b/tools/xenstore/utils.h Sun Aug 12 14:50:02 2007 -0600
@@ -24,7 +24,7 @@ void barf(const char *fmt, ...) __attrib
void barf(const char *fmt, ...) __attribute__((noreturn));
void barf_perror(const char *fmt, ...) __attribute__((noreturn));
-void xprintf(const char *fmt, ...);
+void (*xprintf)(const char *fmt, ...);
#define eprintf(_fmt, _args...) xprintf("[ERR] %s" _fmt, __FUNCTION__, ##_args)
diff -r 5b19839d0365 -r cd51fa91956b tools/xenstore/xenstored_core.c
--- a/tools/xenstore/xenstored_core.c Sun Aug 12 12:19:13 2007 -0600
+++ b/tools/xenstore/xenstored_core.c Sun Aug 12 14:50:02 2007 -0600
@@ -1880,14 +1880,14 @@ int main(int argc, char *argv[])
/* close stdin/stdout now we're ready to accept connections */
if (dofork) {
- close(STDIN_FILENO);
- close(STDOUT_FILENO);
- close(STDERR_FILENO);
-
- /* Get ourselves a nice xenstored crash if these are used. */
- stdin = NULL;
- stdout = NULL;
- stderr = NULL;
+ int devnull = open("/dev/null", O_RDWR);
+ if (devnull == -1)
+ barf_perror("Could not open /dev/null\n");
+ close(STDIN_FILENO); dup2(STDIN_FILENO, devnull);
+ close(STDOUT_FILENO); dup2(STDOUT_FILENO, devnull);
+ close(STDERR_FILENO); dup2(STDERR_FILENO, devnull);
+ close(devnull);
+ xprintf = trace;
}
signal(SIGHUP, trigger_reopen_log);
diff -r 5b19839d0365 -r cd51fa91956b
unmodified_drivers/linux-2.6/platform-pci/machine_reboot.c
--- a/unmodified_drivers/linux-2.6/platform-pci/machine_reboot.c Sun Aug
12 12:19:13 2007 -0600
+++ b/unmodified_drivers/linux-2.6/platform-pci/machine_reboot.c Sun Aug
12 14:50:02 2007 -0600
@@ -10,6 +10,12 @@ struct ap_suspend_info {
int do_spin;
atomic_t nr_spinning;
};
+
+/*
+ * Use a rwlock to protect the hypercall page from being executed in AP context
+ * while the BSP is re-initializing it after restore.
+ */
+static DEFINE_RWLOCK(suspend_lock);
/*
* Spinning prevents, for example, APs touching grant table entries while
@@ -27,7 +33,9 @@ static void ap_suspend(void *_info)
while (info->do_spin) {
cpu_relax();
+ read_lock(&suspend_lock);
HYPERVISOR_yield();
+ read_unlock(&suspend_lock);
}
mb();
@@ -43,7 +51,9 @@ static int bp_suspend(void)
suspend_cancelled = HYPERVISOR_shutdown(SHUTDOWN_suspend);
if (!suspend_cancelled) {
+ write_lock(&suspend_lock);
platform_pci_resume();
+ write_unlock(&suspend_lock);
gnttab_resume();
irq_resume();
}
diff -r 5b19839d0365 -r cd51fa91956b xen/acm/acm_chinesewall_hooks.c
--- a/xen/acm/acm_chinesewall_hooks.c Sun Aug 12 12:19:13 2007 -0600
+++ b/xen/acm/acm_chinesewall_hooks.c Sun Aug 12 14:50:02 2007 -0600
@@ -93,6 +93,7 @@ int acm_init_chwall_policy(void)
return ACM_OK;
}
+
static int chwall_init_domain_ssid(void **chwall_ssid, ssidref_t ssidref)
{
struct chwall_ssid *chwall_ssidp = xmalloc(struct chwall_ssid);
@@ -104,10 +105,10 @@ static int chwall_init_domain_ssid(void
chwall_ssidp->chwall_ssidref =
GET_SSIDREF(ACM_CHINESE_WALL_POLICY, ssidref);
- if ( (chwall_ssidp->chwall_ssidref >= chwall_bin_pol.max_ssidrefs)
- || (chwall_ssidp->chwall_ssidref == ACM_DEFAULT_LOCAL_SSID) )
- {
- printkd("%s: ERROR chwall_ssidref(%x) undefined (>max) or unset
(0).\n",
+ if ( chwall_ssidp->chwall_ssidref >= chwall_bin_pol.max_ssidrefs )
+ {
+ printkd("%s: ERROR chwall_ssidref(%x) undefined (>max) or unset "
+ "(0).\n",
__func__, chwall_ssidp->chwall_ssidref);
xfree(chwall_ssidp);
return ACM_INIT_SSID_ERROR;
@@ -117,6 +118,7 @@ static int chwall_init_domain_ssid(void
__func__, chwall_ssidp->chwall_ssidref);
return ACM_OK;
}
+
static void chwall_free_domain_ssid(void *chwall_ssid)
{
@@ -205,7 +207,9 @@ chwall_init_state(struct acm_chwall_poli
read_lock(&ssid_list_rwlock);
- /* go through all domains and adjust policy as if this domain was started
now */
+ /* go through all domains and adjust policy as if this domain was
+ * started now
+ */
for_each_acmssid( rawssid )
{
chwall_ssid =
@@ -220,8 +224,8 @@ chwall_init_state(struct acm_chwall_poli
/* b) check for conflict */
for ( i = 0; i < chwall_buf->chwall_max_types; i++ )
- if (conflict_aggregate_set[i] &&
- ssidrefs[chwall_ssidref * chwall_buf->chwall_max_types + i])
+ if ( conflict_aggregate_set[i] &&
+ ssidrefs[chwall_ssidref * chwall_buf->chwall_max_types + i] )
{
printk("%s: CHINESE WALL CONFLICT in type %02x.\n",
__func__, i);
@@ -231,37 +235,46 @@ chwall_init_state(struct acm_chwall_poli
goto out;
}
+
/* set violation and break out of the loop */
- /* c) adapt conflict aggregate set for this domain (notice conflicts)
*/
+ /* c) adapt conflict aggregate set for this domain
+ * (notice conflicts)
+ */
for ( i = 0; i < chwall_buf->chwall_max_conflictsets; i++ )
{
int common = 0;
/* check if conflict_set_i and ssidref have common types */
for ( j = 0; j < chwall_buf->chwall_max_types; j++ )
- if (conflict_sets[i * chwall_buf->chwall_max_types + j] &&
- ssidrefs[chwall_ssidref *
- chwall_buf->chwall_max_types + j])
+ if ( conflict_sets[i * chwall_buf->chwall_max_types + j] &&
+ ssidrefs[chwall_ssidref *
+ chwall_buf->chwall_max_types + j] )
{
common = 1;
break;
}
- if (common == 0)
+
+ if ( common == 0 )
continue; /* try next conflict set */
- /* now add types of the conflict set to conflict_aggregate_set
(except types in chwall_ssidref) */
+
+ /* now add types of the conflict set to conflict_aggregate_set
+ * (except types in chwall_ssidref)
+ */
for ( j = 0; j < chwall_buf->chwall_max_types; j++ )
- if (conflict_sets[i * chwall_buf->chwall_max_types + j] &&
- !ssidrefs[chwall_ssidref *
- chwall_buf->chwall_max_types + j])
+ if ( conflict_sets[i * chwall_buf->chwall_max_types + j] &&
+ !ssidrefs[chwall_ssidref *
+ chwall_buf->chwall_max_types + j] )
conflict_aggregate_set[j]++;
}
}
out:
read_unlock(&ssid_list_rwlock);
return violation;
- /* returning "violation != 0" means that the currently running set of
domains would
- * not be possible if the new policy had been enforced before starting
them; for chinese
- * wall, this means that the new policy includes at least one conflict set
of which
- * more than one type is currently running */
+ /* returning "violation != 0" means that the currently running set of
+ * domains would not be possible if the new policy had been enforced
+ * before starting them; for chinese wall, this means that the new
+ * policy includes at least one conflict set of which more than one
+ * type is currently running
+ */
}
@@ -348,8 +361,10 @@ static int _chwall_update_policy(u8 *buf
memset(conflict_aggregate_set, 0,
sizeof(domaintype_t) * chwall_buf->chwall_max_types);
- /* 3. now re-calculate the state for the new policy based on running
domains;
- * this can fail if new policy is conflicting with running domains */
+ /* 3. now re-calculate the state for the new policy based on
+ * running domains; this can fail if new policy is conflicting
+ * with running domains
+ */
if ( chwall_init_state(chwall_buf, ssids,
conflict_sets, running_types,
conflict_aggregate_set,
@@ -483,81 +498,27 @@ static int _chwall_pre_domain_create(voi
chwall_ssidref = GET_SSIDREF(ACM_CHINESE_WALL_POLICY, ssidref);
- if (chwall_ssidref == ACM_DEFAULT_LOCAL_SSID)
- {
- printk("%s: ERROR CHWALL SSID is NOT SET but policy enforced.\n",
- __func__);
- return ACM_ACCESS_DENIED; /* catching and indicating config
error */
- }
-
- if (chwall_ssidref >= chwall_bin_pol.max_ssidrefs)
+ if ( chwall_ssidref >= chwall_bin_pol.max_ssidrefs )
{
printk("%s: ERROR chwall_ssidref > max(%x).\n",
__func__, chwall_bin_pol.max_ssidrefs - 1);
return ACM_ACCESS_DENIED;
}
+
/* A: chinese wall check for conflicts */
- for (i = 0; i < chwall_bin_pol.max_types; i++)
- if (chwall_bin_pol.conflict_aggregate_set[i] &&
- chwall_bin_pol.ssidrefs[chwall_ssidref *
- chwall_bin_pol.max_types + i])
+ for ( i = 0; i < chwall_bin_pol.max_types; i++ )
+ if ( chwall_bin_pol.conflict_aggregate_set[i] &&
+ chwall_bin_pol.ssidrefs[chwall_ssidref *
+ chwall_bin_pol.max_types + i] )
{
printk("%s: CHINESE WALL CONFLICT in type %02x.\n", __func__, i);
return ACM_ACCESS_DENIED;
}
/* B: chinese wall conflict set adjustment (so that other
- * other domains simultaneously created are evaluated against this
new set)*/
- for ( i = 0; i < chwall_bin_pol.max_conflictsets; i++ )
- {
- int common = 0;
- /* check if conflict_set_i and ssidref have common types */
- for ( j = 0; j < chwall_bin_pol.max_types; j++ )
- if ( chwall_bin_pol.
- conflict_sets[i * chwall_bin_pol.max_types + j]
- && chwall_bin_pol.ssidrefs[chwall_ssidref *
- chwall_bin_pol.max_types + j] )
- {
- common = 1;
- break;
- }
- if (common == 0)
- continue; /* try next conflict set */
- /* now add types of the conflict set to conflict_aggregate_set (except
types in chwall_ssidref) */
- for ( j = 0; j < chwall_bin_pol.max_types; j++ )
- if ( chwall_bin_pol.
- conflict_sets[i * chwall_bin_pol.max_types + j]
- && !chwall_bin_pol.ssidrefs[chwall_ssidref *
- chwall_bin_pol.max_types + j])
- chwall_bin_pol.conflict_aggregate_set[j]++;
- }
- return ACM_ACCESS_PERMITTED;
-}
-
-
-static void _chwall_post_domain_create(domid_t domid, ssidref_t ssidref)
-{
- int i, j;
- ssidref_t chwall_ssidref;
-
- chwall_ssidref = GET_SSIDREF(ACM_CHINESE_WALL_POLICY, ssidref);
- /* adjust types ref-count for running domains */
- for ( i = 0; i < chwall_bin_pol.max_types; i++ )
- chwall_bin_pol.running_types[i] +=
- chwall_bin_pol.ssidrefs[chwall_ssidref *
- chwall_bin_pol.max_types + i];
- if ( domid )
- return;
-
- /* Xen does not call pre-create hook for DOM0;
- * to consider type conflicts of any domain with DOM0, we need
- * to adjust the conflict_aggregate for DOM0 here the same way it
- * is done for non-DOM0 domains in the pre-hook */
- printkd("%s: adjusting security state for DOM0 (ssidref=%x,
chwall_ssidref=%x).\n",
- __func__, ssidref, chwall_ssidref);
-
- /* chinese wall conflict set adjustment (so that other
- * other domains simultaneously created are evaluated against this
new set)*/
+ * other domains simultaneously created are evaluated against
+ * this new set)
+ */
for ( i = 0; i < chwall_bin_pol.max_conflictsets; i++ )
{
int common = 0;
@@ -578,6 +539,62 @@ static void _chwall_post_domain_create(d
if ( chwall_bin_pol.
conflict_sets[i * chwall_bin_pol.max_types + j]
&& !chwall_bin_pol.ssidrefs[chwall_ssidref *
+ chwall_bin_pol.max_types + j])
+ chwall_bin_pol.conflict_aggregate_set[j]++;
+ }
+ return ACM_ACCESS_PERMITTED;
+}
+
+
+static void _chwall_post_domain_create(domid_t domid, ssidref_t ssidref)
+{
+ int i, j;
+ ssidref_t chwall_ssidref;
+
+ chwall_ssidref = GET_SSIDREF(ACM_CHINESE_WALL_POLICY, ssidref);
+ /* adjust types ref-count for running domains */
+ for ( i = 0; i < chwall_bin_pol.max_types; i++ )
+ chwall_bin_pol.running_types[i] +=
+ chwall_bin_pol.ssidrefs[chwall_ssidref *
+ chwall_bin_pol.max_types + i];
+ if ( domid )
+ return;
+
+ /* Xen does not call pre-create hook for DOM0;
+ * to consider type conflicts of any domain with DOM0, we need
+ * to adjust the conflict_aggregate for DOM0 here the same way it
+ * is done for non-DOM0 domains in the pre-hook */
+ printkd("%s: adjusting security state for DOM0 (ssidref=%x,
chwall_ssidref=%x).\n",
+ __func__, ssidref, chwall_ssidref);
+
+ /* chinese wall conflict set adjustment (so that other
+ * other domains simultaneously created are evaluated against this
new set)*/
+ for ( i = 0; i < chwall_bin_pol.max_conflictsets; i++ )
+ {
+ int common = 0;
+ /* check if conflict_set_i and ssidref have common types */
+ for ( j = 0; j < chwall_bin_pol.max_types; j++ )
+ if ( chwall_bin_pol.
+ conflict_sets[i * chwall_bin_pol.max_types + j]
+ && chwall_bin_pol.ssidrefs[chwall_ssidref *
+ chwall_bin_pol.max_types + j] )
+ {
+ common = 1;
+ break;
+ }
+
+ if ( common == 0 )
+ {
+ /* try next conflict set */
+ continue;
+ }
+
+ /* now add types of the conflict set to conflict_aggregate_set
+ (except types in chwall_ssidref) */
+ for ( j = 0; j < chwall_bin_pol.max_types; j++ )
+ if ( chwall_bin_pol.
+ conflict_sets[i * chwall_bin_pol.max_types + j]
+ && !chwall_bin_pol.ssidrefs[chwall_ssidref *
chwall_bin_pol.max_types + j] )
chwall_bin_pol.conflict_aggregate_set[j]++;
}
@@ -638,9 +655,15 @@ static void chwall_domain_destroy(void *
common = 1;
break;
}
- if (common == 0)
- continue; /* try next conflict set, this one does not
include any type of chwall_ssidref */
- /* now add types of the conflict set to conflict_aggregate_set (except
types in chwall_ssidref) */
+ if ( common == 0 )
+ {
+ /* try next conflict set, this one does not include
+ any type of chwall_ssidref */
+ continue;
+ }
+
+ /* now add types of the conflict set to conflict_aggregate_set
+ (except types in chwall_ssidref) */
for ( j = 0; j < chwall_bin_pol.max_types; j++ )
if ( chwall_bin_pol.
conflict_sets[i * chwall_bin_pol.max_types + j]
diff -r 5b19839d0365 -r cd51fa91956b xen/acm/acm_policy.c
--- a/xen/acm/acm_policy.c Sun Aug 12 12:19:13 2007 -0600
+++ b/xen/acm/acm_policy.c Sun Aug 12 14:50:02 2007 -0600
@@ -710,10 +710,10 @@ acm_change_policy(struct acm_change_poli
goto acm_chg_policy_exit;
}
- if ( copy_from_guest(dels.array,
+ if ( copy_from_guest((u8 *)dels.array,
chgpolicy->del_array,
chgpolicy->delarray_size) ||
- copy_from_guest(ssidmap.array,
+ copy_from_guest((u8 *)ssidmap.array,
chgpolicy->chg_array,
chgpolicy->chgarray_size) ||
copy_from_guest(binpolicy,
@@ -844,7 +844,7 @@ acm_relabel_domains(struct acm_relabel_d
memset(errors.array, 0x0, sizeof(uint32_t) * errors.num_items);
}
- if ( copy_from_guest(relabels.array,
+ if ( copy_from_guest((u8 *)relabels.array,
relabel->relabel_map,
relabel->relabel_map_size) )
{
diff -r 5b19839d0365 -r cd51fa91956b xen/acm/acm_simple_type_enforcement_hooks.c
--- a/xen/acm/acm_simple_type_enforcement_hooks.c Sun Aug 12 12:19:13
2007 -0600
+++ b/xen/acm/acm_simple_type_enforcement_hooks.c Sun Aug 12 14:50:02
2007 -0600
@@ -408,7 +408,7 @@ _ste_update_policy(u8 *buf, u32 buf_size
ste_bin_pol.max_ssidrefs = ste_buf->ste_max_ssidrefs;
ste_bin_pol.ssidrefs = (domaintype_t *)ssidrefsbuf;
- if ( ste_init_state(NULL) )
+ if ( ste_init_state(errors) )
{
/* new policy conflicts with sharing of running domains */
printk("%s: New policy conflicts with running domains. "
diff -r 5b19839d0365 -r cd51fa91956b xen/arch/powerpc/multiboot2.c
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/xen/arch/powerpc/multiboot2.c Sun Aug 12 14:50:02 2007 -0600
@@ -0,0 +1,67 @@
+/*
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * Copyright IBM Corp. 2006, 2007
+ *
+ * Authors: Hollis Blanchard <hollisb@xxxxxxxxxx>
+ */
+
+#include <xen/config.h>
+#include <xen/lib.h>
+#include <xen/multiboot2.h>
+#include <asm/boot.h>
+#include <asm/init.h>
+
+static struct mb2_tag_module *mb2_tag_mod_find(struct mb2_tag_header *tags,
+ const char *type)
+{
+ struct mb2_tag_header *tag;
+
+ for_each_tag(tag, tags) {
+ if (tag->key == MB2_TAG_MODULE) {
+ struct mb2_tag_module *mod = (struct mb2_tag_module *)tag;
+ if (!strcmp((char *)mod->type, type))
+ return mod;
+ }
+ }
+ return NULL;
+}
+
+void parse_multiboot(ulong tags_addr)
+{
+ struct mb2_tag_header *tags = (struct mb2_tag_header *)tags_addr;
+ struct mb2_tag_module *mod;
+
+ if (tags->key != MB2_TAG_START)
+ return;
+
+ mod = mb2_tag_mod_find(tags, "kernel");
+ if (mod) {
+ xen_cmdline = (char *)mod->cmdline;
+ }
+
+ mod = mb2_tag_mod_find(tags, "dom0");
+ if (mod) {
+ dom0_addr = mod->addr;
+ dom0_len = mod->size;
+ dom0_cmdline = (char *)mod->cmdline;
+ }
+
+ mod = mb2_tag_mod_find(tags, "initrd");
+ if (mod) {
+ initrd_start = mod->addr;
+ initrd_len = mod->size;
+ }
+}
diff -r 5b19839d0365 -r cd51fa91956b xen/arch/x86/domain_build.c
--- a/xen/arch/x86/domain_build.c Sun Aug 12 12:19:13 2007 -0600
+++ b/xen/arch/x86/domain_build.c Sun Aug 12 14:50:02 2007 -0600
@@ -316,9 +316,9 @@ int __init construct_dom0(
parms.pae ? ", PAE" : "",
elf_msb(&elf) ? "msb" : "lsb",
elf.pstart, elf.pend);
- if ( parms.bsd_symtab )
+ if ( elf.bsd_symtab_pstart )
printk(" Dom0 symbol map 0x%" PRIx64 " -> 0x%" PRIx64 "\n",
- elf.sstart, elf.send);
+ elf.bsd_symtab_pstart, elf.bsd_symtab_pend);
if ( !compatible )
{
@@ -388,7 +388,7 @@ int __init construct_dom0(
v_start = parms.virt_base;
vkern_start = parms.virt_kstart;
vkern_end = parms.virt_kend;
- vinitrd_start = round_pgup(parms.virt_end);
+ vinitrd_start = round_pgup(vkern_end);
vinitrd_end = vinitrd_start + initrd_len;
vphysmap_start = round_pgup(vinitrd_end);
vphysmap_end = vphysmap_start + (nr_pages * (!is_pv_32on64_domain(d) ?
@@ -798,7 +798,7 @@ int __init construct_dom0(
/* Copy the OS image and free temporary buffer. */
elf.dest = (void*)vkern_start;
- elf_xen_dom_load_binary(&elf, &parms);
+ elf_load_binary(&elf);
if ( UNSET_ADDR != parms.virt_hypercall )
{
diff -r 5b19839d0365 -r cd51fa91956b xen/arch/x86/genapic/Makefile
--- a/xen/arch/x86/genapic/Makefile Sun Aug 12 12:19:13 2007 -0600
+++ b/xen/arch/x86/genapic/Makefile Sun Aug 12 14:50:02 2007 -0600
@@ -1,7 +1,5 @@ obj-y += bigsmp.o
obj-y += bigsmp.o
obj-y += default.o
obj-y += delivery.o
-obj-y += es7000.o
-obj-y += es7000plat.o
obj-y += probe.o
obj-y += summit.o
diff -r 5b19839d0365 -r cd51fa91956b xen/arch/x86/genapic/bigsmp.c
--- a/xen/arch/x86/genapic/bigsmp.c Sun Aug 12 12:19:13 2007 -0600
+++ b/xen/arch/x86/genapic/bigsmp.c Sun Aug 12 14:50:02 2007 -0600
@@ -13,7 +13,7 @@
static int dmi_bigsmp; /* can be set by dmi scanners */
-static __init int hp_ht_bigsmp(struct dmi_system_id *d)
+static __init int force_bigsmp(struct dmi_system_id *d)
{
printk(KERN_NOTICE "%s detected: force use of apic=bigsmp\n", d->ident);
dmi_bigsmp = 1;
@@ -22,15 +22,19 @@ static __init int hp_ht_bigsmp(struct dm
static struct dmi_system_id __initdata bigsmp_dmi_table[] = {
- { hp_ht_bigsmp, "HP ProLiant DL760 G2", {
+ { force_bigsmp, "HP ProLiant DL760 G2", {
DMI_MATCH(DMI_BIOS_VENDOR, "HP"),
DMI_MATCH(DMI_BIOS_VERSION, "P44-"),
}},
- { hp_ht_bigsmp, "HP ProLiant DL740", {
+ { force_bigsmp, "HP ProLiant DL740", {
DMI_MATCH(DMI_BIOS_VENDOR, "HP"),
DMI_MATCH(DMI_BIOS_VERSION, "P47-"),
}},
+ { force_bigsmp, "UNISYS ES7000-ONE", {
+ DMI_MATCH(DMI_PRODUCT_NAME, "ES7000-ONE")
+ }},
+
{ }
};
diff -r 5b19839d0365 -r cd51fa91956b xen/arch/x86/genapic/es7000.c
--- a/xen/arch/x86/genapic/es7000.c Sun Aug 12 12:19:13 2007 -0600
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,27 +0,0 @@
-/*
- * APIC driver for the Unisys ES7000 chipset.
- */
-#include <xen/config.h>
-#include <xen/cpumask.h>
-#include <asm/current.h>
-#include <asm/mpspec.h>
-#include <asm/genapic.h>
-#include <asm/fixmap.h>
-#include <asm/apicdef.h>
-#include <asm/atomic.h>
-#include <xen/kernel.h>
-#include <xen/string.h>
-#include <xen/smp.h>
-#include <xen/init.h>
-#include <asm/mach-es7000/mach_mpparse.h>
-
-static __init int probe_es7000(void)
-{
- /* probed later in mptable/ACPI hooks */
- return 0;
-}
-
-struct genapic apic_es7000 = {
- APIC_INIT("es7000", probe_es7000),
- GENAPIC_PHYS
-};
diff -r 5b19839d0365 -r cd51fa91956b xen/arch/x86/genapic/es7000plat.c
--- a/xen/arch/x86/genapic/es7000plat.c Sun Aug 12 12:19:13 2007 -0600
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,141 +0,0 @@
-/*
- * Written by: Garry Forsgren, Unisys Corporation
- * Natalie Protasevich, Unisys Corporation
- * Modified by: Raj Subrahmanian <raj.subrahmanian@xxxxxxxxxx> Unisys Corp.
- * This file contains the code to configure and interface
- * with Unisys ES7000 series hardware system manager.
- *
- * Copyright (c) 2003 Unisys Corporation. All Rights Reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it would be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write the Free Software Foundation, Inc., 59
- * Temple Place - Suite 330, Boston MA 02111-1307, USA.
- *
- * Contact information: Unisys Corporation, Township Line & Union Meeting
- * Roads-A, Unisys Way, Blue Bell, Pennsylvania, 19424, or:
- *
- * http://www.unisys.com
- */
-
-#include <xen/config.h>
-#include <xen/types.h>
-#include <xen/kernel.h>
-#include <xen/smp.h>
-#include <xen/string.h>
-#include <xen/spinlock.h>
-#include <xen/errno.h>
-#include <xen/init.h>
-#include <xen/acpi.h>
-#include <asm/io.h>
-#include <asm/smp.h>
-#include <asm/apicdef.h>
-
-#define MIP_REG 1
-#define MIP_PSAI_REG 4
-
-struct acpi_table_sdt {
- unsigned long pa;
- unsigned long count;
- struct {
- unsigned long pa;
- enum acpi_table_id id;
- unsigned long size;
- } entry[50];
-};
-
-struct oem_table {
- struct acpi_table_header Header;
- u32 OEMTableAddr;
- u32 OEMTableSize;
-};
-
-int __init
-parse_unisys_oem(char *oemptr)
-{
- int i;
- int success = 0;
- unsigned char type, size;
- char *tp = NULL;
-
- tp = oemptr;
-
- tp += 8;
-
- for (i=0; i <= 6; i++) {
- type = *tp++;
- size = *tp++;
- tp -= 2;
- switch (type) {
- case MIP_REG:
- case MIP_PSAI_REG:
- success++;
- break;
- default:
- break;
- }
- tp += size;
- }
-
- return (success >= 2);
-}
-
-int __init
-find_unisys_acpi_oem_table(unsigned long *oem_addr)
-{
- struct acpi_table_rsdp *rsdp = NULL;
- unsigned long rsdp_phys = 0;
- struct acpi_table_header *header = NULL;
- int i;
- struct acpi_table_sdt sdt = { 0 }; /* initialise sdt.count */
-
- rsdp_phys = acpi_find_rsdp();
- rsdp = __va(rsdp_phys);
- if (rsdp->rsdt_address) {
- struct acpi_table_rsdt *mapped_rsdt = NULL;
- sdt.pa = rsdp->rsdt_address;
-
- header = (struct acpi_table_header *)
- __acpi_map_table(sdt.pa, sizeof(struct
acpi_table_header));
- if (!header)
- return -ENODEV;
-
- sdt.count = (header->length - sizeof(struct acpi_table_header))
>> 3;
- mapped_rsdt = (struct acpi_table_rsdt *)
- __acpi_map_table(sdt.pa, header->length);
- if (!mapped_rsdt)
- return -ENODEV;
-
- header = &mapped_rsdt->header;
-
- for (i = 0; i < sdt.count; i++)
- sdt.entry[i].pa = (unsigned long) mapped_rsdt->entry[i];
- };
- for (i = 0; i < sdt.count; i++) {
-
- header = (struct acpi_table_header *)
- __acpi_map_table(sdt.entry[i].pa,
- sizeof(struct acpi_table_header));
- if (!header)
- continue;
- if (!strncmp((char *) &header->signature, "OEM1", 4)) {
- if (!strncmp((char *) &header->oem_id, "UNISYS", 6)) {
- void *addr;
- struct oem_table *t;
- acpi_table_print(header, sdt.entry[i].pa);
- t = (struct oem_table *)
__acpi_map_table(sdt.entry[i].pa, header->length);
- addr = (void *)
__acpi_map_table(t->OEMTableAddr, t->OEMTableSize);
- *oem_addr = (unsigned long) addr;
- return 0;
- }
- }
- }
- return -1;
-}
diff -r 5b19839d0365 -r cd51fa91956b xen/arch/x86/genapic/probe.c
--- a/xen/arch/x86/genapic/probe.c Sun Aug 12 12:19:13 2007 -0600
+++ b/xen/arch/x86/genapic/probe.c Sun Aug 12 14:50:02 2007 -0600
@@ -16,7 +16,6 @@
extern struct genapic apic_summit;
extern struct genapic apic_bigsmp;
-extern struct genapic apic_es7000;
extern struct genapic apic_default;
struct genapic *genapic;
@@ -24,7 +23,6 @@ struct genapic *apic_probe[] __initdata
struct genapic *apic_probe[] __initdata = {
&apic_summit,
&apic_bigsmp,
- &apic_es7000,
&apic_default, /* must be last */
NULL,
};
diff -r 5b19839d0365 -r cd51fa91956b xen/arch/x86/hvm/irq.c
--- a/xen/arch/x86/hvm/irq.c Sun Aug 12 12:19:13 2007 -0600
+++ b/xen/arch/x86/hvm/irq.c Sun Aug 12 14:50:02 2007 -0600
@@ -395,9 +395,33 @@ static int irq_save_pci(struct domain *d
static int irq_save_pci(struct domain *d, hvm_domain_context_t *h)
{
struct hvm_irq *hvm_irq = &d->arch.hvm_domain.irq;
+ unsigned int asserted, pdev, pintx;
+ int rc;
+
+ spin_lock(&d->arch.hvm_domain.irq_lock);
+
+ pdev = hvm_irq->callback_via.pci.dev;
+ pintx = hvm_irq->callback_via.pci.intx;
+ asserted = (hvm_irq->callback_via_asserted &&
+ (hvm_irq->callback_via_type == HVMIRQ_callback_pci_intx));
+
+ /*
+ * Deassert virtual interrupt via PCI INTx line. The virtual interrupt
+ * status is not save/restored, so the INTx line must be deasserted in
+ * the restore context.
+ */
+ if ( asserted )
+ __hvm_pci_intx_deassert(d, pdev, pintx);
/* Save PCI IRQ lines */
- return ( hvm_save_entry(PCI_IRQ, 0, h, &hvm_irq->pci_intx) );
+ rc = hvm_save_entry(PCI_IRQ, 0, h, &hvm_irq->pci_intx);
+
+ if ( asserted )
+ __hvm_pci_intx_assert(d, pdev, pintx);
+
+ spin_unlock(&d->arch.hvm_domain.irq_lock);
+
+ return rc;
}
static int irq_save_isa(struct domain *d, hvm_domain_context_t *h)
diff -r 5b19839d0365 -r cd51fa91956b xen/arch/x86/hvm/svm/svm.c
--- a/xen/arch/x86/hvm/svm/svm.c Sun Aug 12 12:19:13 2007 -0600
+++ b/xen/arch/x86/hvm/svm/svm.c Sun Aug 12 14:50:02 2007 -0600
@@ -2159,6 +2159,7 @@ static void svm_do_msr_access(
case MSR_K8_MC2_STATUS:
case MSR_K8_MC3_STATUS:
case MSR_K8_MC4_STATUS:
+ case MSR_K8_MC5_STATUS:
/* No point in letting the guest see real MCEs */
msr_content = 0;
break;
diff -r 5b19839d0365 -r cd51fa91956b xen/arch/x86/hvm/vmx/vmx.c
--- a/xen/arch/x86/hvm/vmx/vmx.c Sun Aug 12 12:19:13 2007 -0600
+++ b/xen/arch/x86/hvm/vmx/vmx.c Sun Aug 12 14:50:02 2007 -0600
@@ -2596,6 +2596,7 @@ static int vmx_do_msr_read(struct cpu_us
case MSR_K8_MC2_STATUS:
case MSR_K8_MC3_STATUS:
case MSR_K8_MC4_STATUS:
+ case MSR_K8_MC5_STATUS:
/* No point in letting the guest see real MCEs */
msr_content = 0;
break;
diff -r 5b19839d0365 -r cd51fa91956b xen/arch/x86/mm/hap/guest_walk.c
--- a/xen/arch/x86/mm/hap/guest_walk.c Sun Aug 12 12:19:13 2007 -0600
+++ b/xen/arch/x86/mm/hap/guest_walk.c Sun Aug 12 14:50:02 2007 -0600
@@ -84,7 +84,7 @@ unsigned long hap_gva_to_gfn(GUEST_PAGIN
mfn = get_mfn_from_gpfn(gpfn);
if ( mfn == INVALID_MFN )
{
- HAP_PRINTK("bad pfn=0x%lx from gva=0x%lx at lev%d\n", gpfn, gva,
+ HAP_PRINTK("bad pfn=0x%lx from gva=0x%lx at lev%d\n", gpfn, gva,
lev);
success = 0;
break;
diff -r 5b19839d0365 -r cd51fa91956b xen/arch/x86/mm/hap/hap.c
--- a/xen/arch/x86/mm/hap/hap.c Sun Aug 12 12:19:13 2007 -0600
+++ b/xen/arch/x86/mm/hap/hap.c Sun Aug 12 14:50:02 2007 -0600
@@ -73,7 +73,7 @@ int hap_disable_log_dirty(struct domain
hap_unlock(d);
/* set l1e entries of P2M table with normal mode */
- p2m_set_flags_global(d, __PAGE_HYPERVISOR|_PAGE_USER);
+ p2m_set_flags_global(d, __PAGE_HYPERVISOR|_PAGE_USER);
return 0;
}
@@ -111,7 +111,7 @@ static struct page_info *hap_alloc(struc
static void hap_free(struct domain *d, mfn_t mfn)
{
- struct page_info *pg = mfn_to_page(mfn);
+ struct page_info *pg = mfn_to_page(mfn);
ASSERT(hap_locked_by_me(d));
@@ -128,7 +128,7 @@ static struct page_info *hap_alloc_p2m_p
#if CONFIG_PAGING_LEVELS == 3
/* Under PAE mode, top-level P2M table should be allocated below 4GB space
- * because the size of h_cr3 is only 32-bit. We use alloc_domheap_pages to
+ * because the size of h_cr3 is only 32-bit. We use alloc_domheap_pages to
* force this requirement, and exchange the guaranteed 32-bit-clean
* page for the one we just hap_alloc()ed. */
if ( d->arch.paging.hap.p2m_pages == 0
@@ -166,9 +166,9 @@ void hap_free_p2m_page(struct domain *d,
HAP_ERROR("Odd p2m page count c=%#x t=%"PRtype_info"\n",
pg->count_info, pg->u.inuse.type_info);
pg->count_info = 0;
- /* Free should not decrement domain's total allocation, since
+ /* Free should not decrement domain's total allocation, since
* these pages were allocated without an owner. */
- page_set_owner(pg, NULL);
+ page_set_owner(pg, NULL);
free_domheap_page(pg);
d->arch.paging.hap.p2m_pages--;
ASSERT(d->arch.paging.hap.p2m_pages >= 0);
@@ -221,7 +221,7 @@ hap_set_allocation(struct domain *d, uns
pg->count_info = 0;
free_domheap_page(pg);
}
-
+
/* Check to see if we need to yield and try again */
if ( preempted && hypercall_preempt_check() )
{
@@ -275,7 +275,7 @@ static void hap_install_xen_entries_in_l
l2e = hap_map_domain_page(l2hmfn);
ASSERT(l2e != NULL);
-
+
/* Copy the common Xen mappings from the idle domain */
memcpy(&l2e[L2_PAGETABLE_FIRST_XEN_SLOT & (L2_PAGETABLE_ENTRIES-1)],
&idle_pg_table_l2[L2_PAGETABLE_FIRST_XEN_SLOT],
@@ -318,7 +318,7 @@ static void hap_install_xen_entries_in_l
l2e = hap_map_domain_page(l2mfn);
ASSERT(l2e != NULL);
-
+
/* Copy the common Xen mappings from the idle domain */
memcpy(&l2e[L2_PAGETABLE_FIRST_XEN_SLOT],
&idle_pg_table[L2_PAGETABLE_FIRST_XEN_SLOT],
@@ -362,7 +362,7 @@ static mfn_t hap_make_monitor_table(stru
}
#elif CONFIG_PAGING_LEVELS == 3
{
- mfn_t m3mfn, m2mfn;
+ mfn_t m3mfn, m2mfn;
l3_pgentry_t *l3e;
l2_pgentry_t *l2e;
int i;
@@ -384,8 +384,8 @@ static mfn_t hap_make_monitor_table(stru
l2e = hap_map_domain_page(m2mfn);
for ( i = 0; i < L3_PAGETABLE_ENTRIES; i++ )
l2e[l2_table_offset(LINEAR_PT_VIRT_START) + i] =
- (l3e_get_flags(l3e[i]) & _PAGE_PRESENT)
- ? l2e_from_pfn(l3e_get_pfn(l3e[i]), __PAGE_HYPERVISOR)
+ (l3e_get_flags(l3e[i]) & _PAGE_PRESENT)
+ ? l2e_from_pfn(l3e_get_pfn(l3e[i]), __PAGE_HYPERVISOR)
: l2e_empty();
hap_unmap_domain_page(l2e);
hap_unmap_domain_page(l3e);
@@ -536,7 +536,7 @@ void hap_teardown(struct domain *d)
d->arch.paging.hap.p2m_pages);
ASSERT(d->arch.paging.hap.total_pages == 0);
}
-
+
d->arch.paging.mode &= ~PG_log_dirty;
hap_unlock(d);
@@ -555,7 +555,7 @@ int hap_domctl(struct domain *d, xen_dom
hap_unlock(d);
if ( preempted )
/* Not finished. Set up to re-run the call. */
- rc = hypercall_create_continuation(__HYPERVISOR_domctl, "h",
+ rc = hypercall_create_continuation(__HYPERVISOR_domctl, "h",
u_domctl);
else
/* Finished. Return the new allocation */
@@ -578,11 +578,11 @@ void hap_vcpu_init(struct vcpu *v)
/************************************************/
/* HAP PAGING MODE FUNCTIONS */
/************************************************/
-/*
+/*
* HAP guests can handle page faults (in the guest page tables) without
* needing any action from Xen, so we should not be intercepting them.
*/
-static int hap_page_fault(struct vcpu *v, unsigned long va,
+static int hap_page_fault(struct vcpu *v, unsigned long va,
struct cpu_user_regs *regs)
{
HAP_ERROR("Intercepted a guest #PF (%u:%u) with HAP enabled.\n",
@@ -591,9 +591,9 @@ static int hap_page_fault(struct vcpu *v
return 0;
}
-/*
+/*
* HAP guests can handle invlpg without needing any action from Xen, so
- * should not be intercepting it.
+ * should not be intercepting it.
*/
static int hap_invlpg(struct vcpu *v, unsigned long va)
{
@@ -649,7 +649,7 @@ static void hap_update_paging_modes(stru
}
#if CONFIG_PAGING_LEVELS == 3
-static void p2m_install_entry_in_monitors(struct domain *d, l3_pgentry_t *l3e)
+static void p2m_install_entry_in_monitors(struct domain *d, l3_pgentry_t *l3e)
/* Special case, only used for PAE hosts: update the mapping of the p2m
* table. This is trivial in other paging modes (one top-level entry
* points to the top-level p2m, no maintenance needed), but PAE makes
@@ -660,13 +660,13 @@ static void p2m_install_entry_in_monitor
l2_pgentry_t *ml2e;
struct vcpu *v;
unsigned int index;
-
+
index = ((unsigned long)l3e & ~PAGE_MASK) / sizeof(l3_pgentry_t);
ASSERT(index < MACHPHYS_MBYTES>>1);
-
+
for_each_vcpu ( d, v )
{
- if ( pagetable_get_pfn(v->arch.monitor_table) == 0 )
+ if ( pagetable_get_pfn(v->arch.monitor_table) == 0 )
continue;
ASSERT(paging_mode_external(v->domain));
@@ -689,7 +689,7 @@ static void p2m_install_entry_in_monitor
}
#endif
-static void
+static void
hap_write_p2m_entry(struct vcpu *v, unsigned long gfn, l1_pgentry_t *p,
mfn_t table_mfn, l1_pgentry_t new, unsigned int level)
{
@@ -698,12 +698,12 @@ hap_write_p2m_entry(struct vcpu *v, unsi
safe_write_pte(p, new);
#if CONFIG_PAGING_LEVELS == 3
/* install P2M in monitor table for PAE Xen */
- if ( level == 3 )
+ if ( level == 3 )
/* We have written to the p2m l3: need to sync the per-vcpu
* copies of it in the monitor tables */
p2m_install_entry_in_monitors(v->domain, (l3_pgentry_t *)p);
#endif
-
+
hap_unlock(v->domain);
}
@@ -715,7 +715,7 @@ static unsigned long hap_gva_to_gfn_real
/* Entry points into this mode of the hap code. */
struct paging_mode hap_paging_real_mode = {
- .page_fault = hap_page_fault,
+ .page_fault = hap_page_fault,
.invlpg = hap_invlpg,
.gva_to_gfn = hap_gva_to_gfn_real_mode,
.update_cr3 = hap_update_cr3,
@@ -725,7 +725,7 @@ struct paging_mode hap_paging_real_mode
};
struct paging_mode hap_paging_protected_mode = {
- .page_fault = hap_page_fault,
+ .page_fault = hap_page_fault,
.invlpg = hap_invlpg,
.gva_to_gfn = hap_gva_to_gfn_2level,
.update_cr3 = hap_update_cr3,
@@ -735,7 +735,7 @@ struct paging_mode hap_paging_protected_
};
struct paging_mode hap_paging_pae_mode = {
- .page_fault = hap_page_fault,
+ .page_fault = hap_page_fault,
.invlpg = hap_invlpg,
.gva_to_gfn = hap_gva_to_gfn_3level,
.update_cr3 = hap_update_cr3,
@@ -745,7 +745,7 @@ struct paging_mode hap_paging_pae_mode =
};
struct paging_mode hap_paging_long_mode = {
- .page_fault = hap_page_fault,
+ .page_fault = hap_page_fault,
.invlpg = hap_invlpg,
.gva_to_gfn = hap_gva_to_gfn_4level,
.update_cr3 = hap_update_cr3,
diff -r 5b19839d0365 -r cd51fa91956b xen/arch/x86/mm/p2m.c
--- a/xen/arch/x86/mm/p2m.c Sun Aug 12 12:19:13 2007 -0600
+++ b/xen/arch/x86/mm/p2m.c Sun Aug 12 14:50:02 2007 -0600
@@ -2,12 +2,12 @@
* arch/x86/mm/p2m.c
*
* physical-to-machine mappings for automatically-translated domains.
- *
+ *
* Parts of this code are Copyright (c) 2007 by Advanced Micro Devices.
* Parts of this code are Copyright (c) 2006 by XenSource Inc.
* Parts of this code are Copyright (c) 2006 by Michael A Fetterman
* Parts based on earlier work by Michael A Fetterman, Ian Pratt et al.
- *
+ *
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
@@ -34,7 +34,7 @@
/*
* The P2M lock. This protects all updates to the p2m table.
- * Updates are expected to be safe against concurrent reads,
+ * Updates are expected to be safe against concurrent reads,
* which do *not* require the lock.
*
* Locking discipline: always acquire this lock before the shadow or HAP one
@@ -80,7 +80,7 @@
#define P2M_DEBUG(_f, _a...) \
debugtrace_printk("p2mdebug: %s(): " _f, __func__, ##_a)
#else
-#define P2M_DEBUG(_f, _a...) do { (void)(_f); } while(0)
+#define P2M_DEBUG(_f, _a...) do { (void)(_f); } while(0)
#endif
@@ -119,8 +119,8 @@ p2m_find_entry(void *table, unsigned lon
// Returns 0 on error.
//
static int
-p2m_next_level(struct domain *d, mfn_t *table_mfn, void **table,
- unsigned long *gfn_remainder, unsigned long gfn, u32 shift,
+p2m_next_level(struct domain *d, mfn_t *table_mfn, void **table,
+ unsigned long *gfn_remainder, unsigned long gfn, u32 shift,
u32 max, unsigned long type)
{
l1_pgentry_t *p2m_entry;
@@ -146,7 +146,7 @@ p2m_next_level(struct domain *d, mfn_t *
switch ( type ) {
case PGT_l3_page_table:
- paging_write_p2m_entry(d, gfn,
+ paging_write_p2m_entry(d, gfn,
p2m_entry, *table_mfn, new_entry, 4);
break;
case PGT_l2_page_table:
@@ -154,11 +154,11 @@ p2m_next_level(struct domain *d, mfn_t *
/* for PAE mode, PDPE only has PCD/PWT/P bits available */
new_entry = l1e_from_pfn(mfn_x(page_to_mfn(pg)), _PAGE_PRESENT);
#endif
- paging_write_p2m_entry(d, gfn,
+ paging_write_p2m_entry(d, gfn,
p2m_entry, *table_mfn, new_entry, 3);
break;
case PGT_l1_page_table:
- paging_write_p2m_entry(d, gfn,
+ paging_write_p2m_entry(d, gfn,
p2m_entry, *table_mfn, new_entry, 2);
break;
default:
@@ -216,7 +216,7 @@ set_p2m_entry(struct domain *d, unsigned
ASSERT(p2m_entry);
/* Track the highest gfn for which we have ever had a valid mapping */
- if ( mfn_valid(mfn) && (gfn > d->arch.p2m.max_mapped_pfn) )
+ if ( mfn_valid(mfn) && (gfn > d->arch.p2m.max_mapped_pfn) )
d->arch.p2m.max_mapped_pfn = gfn;
if ( mfn_valid(mfn) )
@@ -229,7 +229,7 @@ set_p2m_entry(struct domain *d, unsigned
/* Success */
rv = 1;
-
+
out:
unmap_domain_page(table);
return rv;
@@ -250,7 +250,7 @@ void p2m_init(struct domain *d)
// controlled by CONFIG_PAGING_LEVELS).
//
// The alloc_page and free_page functions will be used to get memory to
-// build the p2m, and to release it again at the end of day.
+// build the p2m, and to release it again at the end of day.
//
// Returns 0 for success or -errno.
//
@@ -264,7 +264,7 @@ int p2m_alloc_table(struct domain *d,
struct page_info *page, *p2m_top;
unsigned int page_count = 0;
unsigned long gfn;
-
+
p2m_lock(d);
if ( pagetable_get_pfn(d->arch.phys_table) != 0 )
@@ -288,7 +288,7 @@ int p2m_alloc_table(struct domain *d,
list_add_tail(&p2m_top->list, &d->arch.p2m.pages);
p2m_top->count_info = 1;
- p2m_top->u.inuse.type_info =
+ p2m_top->u.inuse.type_info =
#if CONFIG_PAGING_LEVELS == 4
PGT_l4_page_table
#elif CONFIG_PAGING_LEVELS == 3
@@ -301,7 +301,7 @@ int p2m_alloc_table(struct domain *d,
d->arch.phys_table = pagetable_from_mfn(page_to_mfn(p2m_top));
P2M_PRINTK("populating p2m table\n");
-
+
/* Initialise physmap tables for slot zero. Other code assumes this. */
gfn = 0;
mfn = _mfn(INVALID_MFN);
@@ -365,17 +365,17 @@ gfn_to_mfn_foreign(struct domain *d, uns
paddr_t addr = ((paddr_t)gpfn) << PAGE_SHIFT;
l2_pgentry_t *l2e;
l1_pgentry_t *l1e;
-
+
ASSERT(paging_mode_translate(d));
mfn = pagetable_get_mfn(d->arch.phys_table);
- if ( gpfn > d->arch.p2m.max_mapped_pfn )
+ if ( gpfn > d->arch.p2m.max_mapped_pfn )
/* This pfn is higher than the highest the p2m map currently holds */
return _mfn(INVALID_MFN);
#if CONFIG_PAGING_LEVELS >= 4
- {
+ {
l4_pgentry_t *l4e = map_domain_page(mfn_x(mfn));
l4e += l4_table_offset(addr);
if ( (l4e_get_flags(*l4e) & _PAGE_PRESENT) == 0 )
@@ -398,7 +398,7 @@ gfn_to_mfn_foreign(struct domain *d, uns
* the bounds of the p2m. */
l3e += (addr >> L3_PAGETABLE_SHIFT);
#else
- l3e += l3_table_offset(addr);
+ l3e += l3_table_offset(addr);
#endif
if ( (l3e_get_flags(*l3e) & _PAGE_PRESENT) == 0 )
{
@@ -443,18 +443,18 @@ static void audit_p2m(struct domain *d)
mfn_t p2mfn;
unsigned long orphans_d = 0, orphans_i = 0, mpbad = 0, pmbad = 0;
int test_linear;
-
+
if ( !paging_mode_translate(d) )
return;
//P2M_PRINTK("p2m audit starts\n");
- test_linear = ( (d == current->domain)
+ test_linear = ( (d == current->domain)
&& !pagetable_is_null(current->arch.monitor_table) );
if ( test_linear )
- local_flush_tlb();
-
- /* Audit part one: walk the domain's page allocation list, checking
+ local_flush_tlb();
+
+ /* Audit part one: walk the domain's page allocation list, checking
* the m2p entries. */
for ( entry = d->page_list.next;
entry != &d->page_list;
@@ -463,11 +463,11 @@ static void audit_p2m(struct domain *d)
page = list_entry(entry, struct page_info, list);
mfn = mfn_x(page_to_mfn(page));
- // P2M_PRINTK("auditing guest page, mfn=%#lx\n", mfn);
+ // P2M_PRINTK("auditing guest page, mfn=%#lx\n", mfn);
od = page_get_owner(page);
- if ( od != d )
+ if ( od != d )
{
P2M_PRINTK("wrong owner %#lx -> %p(%u) != %p(%u)\n",
mfn, od, (od?od->domain_id:-1), d, d->domain_id);
@@ -475,19 +475,19 @@ static void audit_p2m(struct domain *d)
}
gfn = get_gpfn_from_mfn(mfn);
- if ( gfn == INVALID_M2P_ENTRY )
+ if ( gfn == INVALID_M2P_ENTRY )
{
orphans_i++;
//P2M_PRINTK("orphaned guest page: mfn=%#lx has invalid gfn\n",
- // mfn);
+ // mfn);
continue;
}
- if ( gfn == 0x55555555 )
+ if ( gfn == 0x55555555 )
{
orphans_d++;
- //P2M_PRINTK("orphaned guest page: mfn=%#lx has debug gfn\n",
- // mfn);
+ //P2M_PRINTK("orphaned guest page: mfn=%#lx has debug gfn\n",
+ // mfn);
continue;
}
@@ -503,7 +503,7 @@ static void audit_p2m(struct domain *d)
: -1u));
/* This m2p entry is stale: the domain has another frame in
* this physical slot. No great disaster, but for neatness,
- * blow away the m2p entry. */
+ * blow away the m2p entry. */
set_gpfn_from_mfn(mfn, INVALID_M2P_ENTRY,
__PAGE_HYPERVISOR|_PAGE_USER);
}
@@ -517,9 +517,9 @@ static void audit_p2m(struct domain *d)
}
}
- // P2M_PRINTK("OK: mfn=%#lx, gfn=%#lx, p2mfn=%#lx, lp2mfn=%#lx\n",
- // mfn, gfn, p2mfn, lp2mfn);
- }
+ // P2M_PRINTK("OK: mfn=%#lx, gfn=%#lx, p2mfn=%#lx, lp2mfn=%#lx\n",
+ // mfn, gfn, p2mfn, lp2mfn);
+ }
/* Audit part two: walk the domain's p2m table, checking the entries. */
if ( pagetable_get_pfn(d->arch.phys_table) != 0 )
@@ -527,7 +527,7 @@ static void audit_p2m(struct domain *d)
l2_pgentry_t *l2e;
l1_pgentry_t *l1e;
int i1, i2;
-
+
#if CONFIG_PAGING_LEVELS == 4
l4_pgentry_t *l4e;
l3_pgentry_t *l3e;
@@ -553,8 +553,8 @@ static void audit_p2m(struct domain *d)
}
l3e = map_domain_page(mfn_x(_mfn(l4e_get_pfn(l4e[i4]))));
#endif /* now at levels 3 or 4... */
- for ( i3 = 0;
- i3 < ((CONFIG_PAGING_LEVELS==4) ? L3_PAGETABLE_ENTRIES : 8);
+ for ( i3 = 0;
+ i3 < ((CONFIG_PAGING_LEVELS==4) ? L3_PAGETABLE_ENTRIES : 8);
i3++ )
{
if ( !(l3e_get_flags(l3e[i3]) & _PAGE_PRESENT) )
@@ -572,7 +572,7 @@ static void audit_p2m(struct domain *d)
continue;
}
l1e = map_domain_page(mfn_x(_mfn(l2e_get_pfn(l2e[i2]))));
-
+
for ( i1 = 0; i1 < L1_PAGETABLE_ENTRIES; i1++, gfn++ )
{
if ( !(l1e_get_flags(l1e[i1]) & _PAGE_PRESENT) )
@@ -610,14 +610,14 @@ static void audit_p2m(struct domain *d)
}
//P2M_PRINTK("p2m audit complete\n");
- //if ( orphans_i | orphans_d | mpbad | pmbad )
+ //if ( orphans_i | orphans_d | mpbad | pmbad )
// P2M_PRINTK("p2m audit found %lu orphans (%lu inval %lu debug)\n",
// orphans_i + orphans_d, orphans_i, orphans_d,
- if ( mpbad | pmbad )
+ if ( mpbad | pmbad )
P2M_PRINTK("p2m audit found %lu odd p2m, %lu bad m2p entries\n",
pmbad, mpbad);
}
-#else
+#else
#define audit_p2m(_d) do { (void)(_d); } while(0)
#endif /* P2M_AUDIT */
@@ -645,7 +645,7 @@ guest_physmap_remove_page(struct domain
audit_p2m(d);
p2m_remove_page(d, gfn, mfn);
audit_p2m(d);
- p2m_unlock(d);
+ p2m_unlock(d);
}
void
@@ -683,11 +683,11 @@ guest_physmap_add_page(struct domain *d,
/* This machine frame is already mapped at another physical address */
P2M_DEBUG("aliased! mfn=%#lx, old gfn=%#lx, new gfn=%#lx\n",
mfn, ogfn, gfn);
- if ( mfn_valid(omfn = gfn_to_mfn(d, ogfn)) )
- {
- P2M_DEBUG("old gfn=%#lx -> mfn %#lx\n",
+ if ( mfn_valid(omfn = gfn_to_mfn(d, ogfn)) )
+ {
+ P2M_DEBUG("old gfn=%#lx -> mfn %#lx\n",
ogfn , mfn_x(omfn));
- if ( mfn_x(omfn) == mfn )
+ if ( mfn_x(omfn) == mfn )
p2m_remove_page(d, ogfn, mfn);
}
}
@@ -720,15 +720,15 @@ void p2m_set_flags_global(struct domain
int i4;
#endif /* CONFIG_PAGING_LEVELS == 4 */
#endif /* CONFIG_PAGING_LEVELS >= 3 */
-
+
if ( !paging_mode_translate(d) )
return;
-
+
if ( pagetable_get_pfn(d->arch.phys_table) == 0 )
return;
p2m_lock(d);
-
+
#if CONFIG_PAGING_LEVELS == 4
l4e = map_domain_page(mfn_x(pagetable_get_mfn(d->arch.phys_table)));
#elif CONFIG_PAGING_LEVELS == 3
@@ -739,52 +739,52 @@ void p2m_set_flags_global(struct domain
#if CONFIG_PAGING_LEVELS >= 3
#if CONFIG_PAGING_LEVELS >= 4
- for ( i4 = 0; i4 < L4_PAGETABLE_ENTRIES; i4++ )
- {
- if ( !(l4e_get_flags(l4e[i4]) & _PAGE_PRESENT) )
- {
- continue;
- }
- l3e = map_domain_page(l4e_get_pfn(l4e[i4]));
+ for ( i4 = 0; i4 < L4_PAGETABLE_ENTRIES; i4++ )
+ {
+ if ( !(l4e_get_flags(l4e[i4]) & _PAGE_PRESENT) )
+ {
+ continue;
+ }
+ l3e = map_domain_page(l4e_get_pfn(l4e[i4]));
#endif /* now at levels 3 or 4... */
- for ( i3 = 0;
- i3 < ((CONFIG_PAGING_LEVELS==4) ? L3_PAGETABLE_ENTRIES : 8);
- i3++ )
- {
- if ( !(l3e_get_flags(l3e[i3]) & _PAGE_PRESENT) )
- {
- continue;
- }
- l2e = map_domain_page(l3e_get_pfn(l3e[i3]));
+ for ( i3 = 0;
+ i3 < ((CONFIG_PAGING_LEVELS==4) ? L3_PAGETABLE_ENTRIES : 8);
+ i3++ )
+ {
+ if ( !(l3e_get_flags(l3e[i3]) & _PAGE_PRESENT) )
+ {
+ continue;
+ }
+ l2e = map_domain_page(l3e_get_pfn(l3e[i3]));
#endif /* all levels... */
- for ( i2 = 0; i2 < L2_PAGETABLE_ENTRIES; i2++ )
- {
- if ( !(l2e_get_flags(l2e[i2]) & _PAGE_PRESENT) )
- {
- continue;
- }
+ for ( i2 = 0; i2 < L2_PAGETABLE_ENTRIES; i2++ )
+ {
+ if ( !(l2e_get_flags(l2e[i2]) & _PAGE_PRESENT) )
+ {
+ continue;
+ }
l1mfn = _mfn(l2e_get_pfn(l2e[i2]));
- l1e = map_domain_page(mfn_x(l1mfn));
-
- for ( i1 = 0; i1 < L1_PAGETABLE_ENTRIES; i1++, gfn++ )
- {
- if ( !(l1e_get_flags(l1e[i1]) & _PAGE_PRESENT) )
- continue;
- mfn = l1e_get_pfn(l1e[i1]);
- gfn = get_gpfn_from_mfn(mfn);
- /* create a new 1le entry using l1e_flags */
- l1e_content = l1e_from_pfn(mfn, l1e_flags);
- paging_write_p2m_entry(d, gfn, &l1e[i1],
+ l1e = map_domain_page(mfn_x(l1mfn));
+
+ for ( i1 = 0; i1 < L1_PAGETABLE_ENTRIES; i1++, gfn++ )
+ {
+ if ( !(l1e_get_flags(l1e[i1]) & _PAGE_PRESENT) )
+ continue;
+ mfn = l1e_get_pfn(l1e[i1]);
+ gfn = get_gpfn_from_mfn(mfn);
+ /* create a new 1le entry using l1e_flags */
+ l1e_content = l1e_from_pfn(mfn, l1e_flags);
+ paging_write_p2m_entry(d, gfn, &l1e[i1],
l1mfn, l1e_content, 1);
- }
- unmap_domain_page(l1e);
- }
+ }
+ unmap_domain_page(l1e);
+ }
#if CONFIG_PAGING_LEVELS >= 3
- unmap_domain_page(l2e);
- }
+ unmap_domain_page(l2e);
+ }
#if CONFIG_PAGING_LEVELS >= 4
- unmap_domain_page(l3e);
+ unmap_domain_page(l3e);
}
#endif
#endif
@@ -814,7 +814,7 @@ int p2m_set_flags(struct domain *d, padd
mfn = gfn_to_mfn(d, gfn);
if ( mfn_valid(mfn) )
set_p2m_entry(d, gfn, mfn, l1e_flags);
-
+
p2m_unlock(d);
return 1;
diff -r 5b19839d0365 -r cd51fa91956b xen/arch/x86/mm/paging.c
--- a/xen/arch/x86/mm/paging.c Sun Aug 12 12:19:13 2007 -0600
+++ b/xen/arch/x86/mm/paging.c Sun Aug 12 14:50:02 2007 -0600
@@ -54,10 +54,10 @@ boolean_param("hap", opt_hap_enabled);
#define page_to_mfn(_pg) (_mfn((_pg) - frame_table))
/* The log-dirty lock. This protects the log-dirty bitmap from
- * concurrent accesses (and teardowns, etc).
- *
+ * concurrent accesses (and teardowns, etc).
+ *
* Locking discipline: always acquire shadow or HAP lock before this one.
- *
+ *
* Because mark_dirty is called from a lot of places, the log-dirty lock
* may be acquired with the shadow or HAP locks already held. When the
* log-dirty code makes callbacks into HAP or shadow code to reset
@@ -105,7 +105,7 @@ int paging_alloc_log_dirty_bitmap(struct
d->arch.paging.log_dirty.bitmap_size =
(domain_get_maximum_gpfn(d) + BITS_PER_LONG) & ~(BITS_PER_LONG - 1);
- d->arch.paging.log_dirty.bitmap =
+ d->arch.paging.log_dirty.bitmap =
xmalloc_array(unsigned long,
d->arch.paging.log_dirty.bitmap_size / BITS_PER_LONG);
if ( d->arch.paging.log_dirty.bitmap == NULL )
@@ -152,8 +152,8 @@ int paging_log_dirty_enable(struct domai
log_dirty_unlock(d);
- /* Safe because the domain is paused. */
- ret = d->arch.paging.log_dirty.enable_log_dirty(d);
+ /* Safe because the domain is paused. */
+ ret = d->arch.paging.log_dirty.enable_log_dirty(d);
/* Possibility of leaving the bitmap allocated here but it'll be
* tidied on domain teardown. */
@@ -202,7 +202,7 @@ void paging_mark_dirty(struct domain *d,
pfn = get_gpfn_from_mfn(mfn_x(gmfn));
/*
- * Values with the MSB set denote MFNs that aren't really part of the
+ * Values with the MSB set denote MFNs that aren't really part of the
* domain's pseudo-physical memory map (e.g., the shared info frame).
* Nothing to do here...
*/
@@ -212,11 +212,11 @@ void paging_mark_dirty(struct domain *d,
return;
}
- if ( likely(pfn < d->arch.paging.log_dirty.bitmap_size) )
- {
+ if ( likely(pfn < d->arch.paging.log_dirty.bitmap_size) )
+ {
if ( !__test_and_set_bit(pfn, d->arch.paging.log_dirty.bitmap) )
{
- PAGING_DEBUG(LOGDIRTY,
+ PAGING_DEBUG(LOGDIRTY,
"marked mfn %" PRI_mfn " (pfn=%lx), dom %d\n",
mfn_x(gmfn), pfn, d->domain_id);
d->arch.paging.log_dirty.dirty_count++;
@@ -227,21 +227,21 @@ void paging_mark_dirty(struct domain *d,
PAGING_PRINTK("mark_dirty OOR! "
"mfn=%" PRI_mfn " pfn=%lx max=%x (dom %d)\n"
"owner=%d c=%08x t=%" PRtype_info "\n",
- mfn_x(gmfn),
- pfn,
+ mfn_x(gmfn),
+ pfn,
d->arch.paging.log_dirty.bitmap_size,
d->domain_id,
(page_get_owner(mfn_to_page(gmfn))
? page_get_owner(mfn_to_page(gmfn))->domain_id
: -1),
- mfn_to_page(gmfn)->count_info,
+ mfn_to_page(gmfn)->count_info,
mfn_to_page(gmfn)->u.inuse.type_info);
}
-
- log_dirty_unlock(d);
-}
-
-/* Read a domain's log-dirty bitmap and stats. If the operation is a CLEAN,
+
+ log_dirty_unlock(d);
+}
+
+/* Read a domain's log-dirty bitmap and stats. If the operation is a CLEAN,
* clear the bitmap and stats as well. */
int paging_log_dirty_op(struct domain *d, struct xen_domctl_shadow_op *sc)
{
@@ -252,15 +252,15 @@ int paging_log_dirty_op(struct domain *d
clean = (sc->op == XEN_DOMCTL_SHADOW_OP_CLEAN);
- PAGING_DEBUG(LOGDIRTY, "log-dirty %s: dom %u faults=%u dirty=%u\n",
+ PAGING_DEBUG(LOGDIRTY, "log-dirty %s: dom %u faults=%u dirty=%u\n",
(clean) ? "clean" : "peek",
d->domain_id,
- d->arch.paging.log_dirty.fault_count,
+ d->arch.paging.log_dirty.fault_count,
d->arch.paging.log_dirty.dirty_count);
sc->stats.fault_count = d->arch.paging.log_dirty.fault_count;
sc->stats.dirty_count = d->arch.paging.log_dirty.dirty_count;
-
+
if ( clean )
{
d->arch.paging.log_dirty.fault_count = 0;
@@ -276,7 +276,7 @@ int paging_log_dirty_op(struct domain *d
rv = -EINVAL; /* perhaps should be ENOMEM? */
goto out;
}
-
+
if ( sc->pages > d->arch.paging.log_dirty.bitmap_size )
sc->pages = d->arch.paging.log_dirty.bitmap_size;
@@ -322,11 +322,11 @@ int paging_log_dirty_op(struct domain *d
/* Note that this function takes three function pointers. Callers must supply
- * these functions for log dirty code to call. This function usually is
- * invoked when paging is enabled. Check shadow_enable() and hap_enable() for
+ * these functions for log dirty code to call. This function usually is
+ * invoked when paging is enabled. Check shadow_enable() and hap_enable() for
* reference.
*
- * These function pointers must not be followed with the log-dirty lock held.
+ * These function pointers must not be followed with the log-dirty lock held.
*/
void paging_log_dirty_init(struct domain *d,
int (*enable_log_dirty)(struct domain *d),
@@ -335,7 +335,7 @@ void paging_log_dirty_init(struct domain
{
/* We initialize log dirty lock first */
log_dirty_lock_init(d);
-
+
d->arch.paging.log_dirty.enable_log_dirty = enable_log_dirty;
d->arch.paging.log_dirty.disable_log_dirty = disable_log_dirty;
d->arch.paging.log_dirty.clean_dirty_bitmap = clean_dirty_bitmap;
@@ -387,7 +387,7 @@ int paging_domctl(struct domain *d, xen_
d->domain_id);
return -EINVAL;
}
-
+
if ( unlikely(d->is_dying) )
{
gdprintk(XENLOG_INFO, "Ignoring paging op on dying domain %u\n",
@@ -401,38 +401,38 @@ int paging_domctl(struct domain *d, xen_
d->domain_id);
return -EINVAL;
}
-
+
/* Code to handle log-dirty. Note that some log dirty operations
- * piggy-back on shadow operations. For example, when
+ * piggy-back on shadow operations. For example, when
* XEN_DOMCTL_SHADOW_OP_OFF is called, it first checks whether log dirty
- * mode is enabled. If does, we disables log dirty and continues with
- * shadow code. For this reason, we need to further dispatch domctl
+ * mode is enabled. If does, we disables log dirty and continues with
+ * shadow code. For this reason, we need to further dispatch domctl
* to next-level paging code (shadow or hap).
*/
switch ( sc->op )
{
case XEN_DOMCTL_SHADOW_OP_ENABLE_LOGDIRTY:
- return paging_log_dirty_enable(d);
-
- case XEN_DOMCTL_SHADOW_OP_ENABLE:
+ return paging_log_dirty_enable(d);
+
+ case XEN_DOMCTL_SHADOW_OP_ENABLE:
if ( sc->mode & XEN_DOMCTL_SHADOW_ENABLE_LOG_DIRTY )
return paging_log_dirty_enable(d);
case XEN_DOMCTL_SHADOW_OP_OFF:
if ( paging_mode_log_dirty(d) )
- if ( (rc = paging_log_dirty_disable(d)) != 0 )
+ if ( (rc = paging_log_dirty_disable(d)) != 0 )
return rc;
case XEN_DOMCTL_SHADOW_OP_CLEAN:
case XEN_DOMCTL_SHADOW_OP_PEEK:
- return paging_log_dirty_op(d, sc);
- }
-
+ return paging_log_dirty_op(d, sc);
+ }
+
/* Here, dispatch domctl to the appropriate paging code */
if ( opt_hap_enabled && is_hvm_domain(d) )
- return hap_domctl(d, sc, u_domctl);
- else
- return shadow_domctl(d, sc, u_domctl);
+ return hap_domctl(d, sc, u_domctl);
+ else
+ return shadow_domctl(d, sc, u_domctl);
}
/* Call when destroying a domain */
@@ -492,7 +492,7 @@ void paging_dump_vcpu_info(struct vcpu *
{
if ( paging_mode_enabled(v->domain) )
{
- printk(" paging assistance: ");
+ printk(" paging assistance: ");
if ( paging_mode_shadow(v->domain) )
{
if ( v->arch.paging.mode )
@@ -504,7 +504,7 @@ void paging_dump_vcpu_info(struct vcpu *
printk("not shadowed\n");
}
else if ( paging_mode_hap(v->domain) && v->arch.paging.mode )
- printk("hap, %u levels\n",
+ printk("hap, %u levels\n",
v->arch.paging.mode->guest_levels);
else
printk("none\n");
diff -r 5b19839d0365 -r cd51fa91956b xen/common/compat/grant_table.c
--- a/xen/common/compat/grant_table.c Sun Aug 12 12:19:13 2007 -0600
+++ b/xen/common/compat/grant_table.c Sun Aug 12 14:50:02 2007 -0600
@@ -161,7 +161,7 @@ int compat_grant_table_op(unsigned int c
while ( n-- )
{
guest_handle_add_offset(xfer, -1);
- if ( __copy_field_to_guest(xfer, nat.xfer, status) )
+ if ( __copy_field_to_guest(xfer, nat.xfer + n, status) )
rc = -EFAULT;
}
}
@@ -199,7 +199,7 @@ int compat_grant_table_op(unsigned int c
while ( n-- )
{
guest_handle_add_offset(copy, -1);
- if ( __copy_field_to_guest(copy, nat.copy, status) )
+ if ( __copy_field_to_guest(copy, nat.copy + n, status) )
rc = -EFAULT;
}
}
diff -r 5b19839d0365 -r cd51fa91956b xen/common/libelf/libelf-dominfo.c
--- a/xen/common/libelf/libelf-dominfo.c Sun Aug 12 12:19:13 2007 -0600
+++ b/xen/common/libelf/libelf-dominfo.c Sun Aug 12 14:50:02 2007 -0600
@@ -333,99 +333,6 @@ static int elf_xen_note_check(struct elf
return 0;
}
-
-static void elf_xen_loadsymtab(struct elf_binary *elf,
- struct elf_dom_parms *parms)
-{
- unsigned long maxva, len;
-
- if ( !parms->bsd_symtab )
- return;
-
- /* Calculate the required additional kernel space for the elf image */
-
- /* The absolute base address of the elf image */
- maxva = elf_round_up(elf, parms->virt_kend);
- maxva += sizeof(long); /* Space to store the size of the elf image */
- /* Space for the elf and elf section headers */
- maxva += (elf_uval(elf, elf->ehdr, e_ehsize) +
- elf_shdr_count(elf) * elf_uval(elf, elf->ehdr, e_shentsize));
- maxva = elf_round_up(elf, maxva);
-
- /* Space for the symbol and string tabs */
- len = (unsigned long)elf->send - (unsigned long)elf->sstart;
- maxva = elf_round_up(elf, maxva + len);
-
- /* The address the kernel must expanded to */
- parms->virt_end = maxva;
-}
-
-int elf_xen_dom_load_binary(struct elf_binary *elf,
- struct elf_dom_parms *parms)
-{
- elf_ehdr *sym_ehdr;
- unsigned long shdr, symtab_addr;
- unsigned long maxva, symbase;
- uint8_t i;
- char *p;
-
- elf_load_binary(elf);
-
- if ( !parms->bsd_symtab )
- return 0;
-
-#define elf_hdr_elm(_elf, _hdr, _elm, _val) \
-do { \
- if ( elf_64bit(_elf) ) \
- (_hdr)->e64._elm = _val; \
- else \
- (_hdr)->e32._elm = _val; \
-} while ( 0 )
-
- /* ehdr right after the kernel image (4 byte aligned) */
- symbase = elf_round_up(elf, parms->virt_kend);
- symtab_addr = maxva = symbase + sizeof(long);
-
- /* Set up Elf header. */
- sym_ehdr = (elf_ehdr *)symtab_addr;
- maxva = elf_copy_ehdr(elf, sym_ehdr);
-
- elf_hdr_elm(elf, sym_ehdr, e_phoff, 0);
- elf_hdr_elm(elf, sym_ehdr, e_shoff, elf_uval(elf, elf->ehdr, e_ehsize));
- elf_hdr_elm(elf, sym_ehdr, e_phentsize, 0);
- elf_hdr_elm(elf, sym_ehdr, e_phnum, 0);
-
- /* Copy Elf section headers. */
- shdr = maxva;
- maxva = elf_copy_shdr(elf, (elf_shdr *)shdr);
-
- for ( i = 0; i < elf_shdr_count(elf); i++ )
- {
- uint8_t type;
- unsigned long tmp;
- type = elf_uval(elf, (elf_shdr *)shdr, sh_type);
- if ( (type == SHT_STRTAB) || (type == SHT_SYMTAB) )
- {
- elf_msg(elf, "%s: shdr %i at 0x%p -> 0x%p\n", __func__, i,
- elf_section_start(elf, (elf_shdr *)shdr), (void *)maxva);
- tmp = elf_copy_section(elf, (elf_shdr *)shdr, (void *)maxva);
- /* Mangled to be based on ELF header location. */
- elf_hdr_elm(elf, (elf_shdr *)shdr, sh_offset,
- maxva - symtab_addr);
- maxva = tmp;
- }
- shdr += elf_uval(elf, elf->ehdr, e_shentsize);
- }
-
- /* Write down the actual sym size. */
- p = (char *)symbase;
- *(long *)p = maxva - symtab_addr; /* sym size */
-
-#undef elf_ehdr_elm
-
- return 0;
-}
-
static int elf_xen_addr_calc_check(struct elf_binary *elf,
struct elf_dom_parms *parms)
{
@@ -467,13 +374,16 @@ static int elf_xen_addr_calc_check(struc
parms->virt_offset = parms->virt_base - parms->elf_paddr_offset;
parms->virt_kstart = elf->pstart + parms->virt_offset;
parms->virt_kend = elf->pend + parms->virt_offset;
- parms->virt_end = parms->virt_kend;
if ( parms->virt_entry == UNSET_ADDR )
parms->virt_entry = elf_uval(elf, elf->ehdr, e_entry);
if ( parms->bsd_symtab )
- elf_xen_loadsymtab(elf, parms);
+ {
+ elf_parse_bsdsyms(elf, parms->virt_kend);
+ if ( elf->bsd_symtab_pend )
+ parms->virt_kend = elf->bsd_symtab_pend + parms->virt_offset;
+ }
elf_msg(elf, "%s: addresses:\n", __FUNCTION__);
elf_msg(elf, " virt_base = 0x%" PRIx64 "\n", parms->virt_base);
@@ -481,14 +391,12 @@ static int elf_xen_addr_calc_check(struc
elf_msg(elf, " virt_offset = 0x%" PRIx64 "\n", parms->virt_offset);
elf_msg(elf, " virt_kstart = 0x%" PRIx64 "\n", parms->virt_kstart);
elf_msg(elf, " virt_kend = 0x%" PRIx64 "\n", parms->virt_kend);
- elf_msg(elf, " virt_end = 0x%" PRIx64 "\n", parms->virt_end);
elf_msg(elf, " virt_entry = 0x%" PRIx64 "\n", parms->virt_entry);
if ( (parms->virt_kstart > parms->virt_kend) ||
(parms->virt_entry < parms->virt_kstart) ||
(parms->virt_entry > parms->virt_kend) ||
- (parms->virt_base > parms->virt_kstart) ||
- (parms->virt_kend > parms->virt_end) )
+ (parms->virt_base > parms->virt_kstart) )
{
elf_err(elf, "%s: ERROR: ELF start or entries are out of bounds.\n",
__FUNCTION__);
diff -r 5b19839d0365 -r cd51fa91956b xen/common/libelf/libelf-loader.c
--- a/xen/common/libelf/libelf-loader.c Sun Aug 12 12:19:13 2007 -0600
+++ b/xen/common/libelf/libelf-loader.c Sun Aug 12 14:50:02 2007 -0600
@@ -10,8 +10,6 @@ int elf_init(struct elf_binary *elf, con
{
const elf_shdr *shdr;
uint64_t i, count, section, offset;
- uint64_t low = -1;
- uint64_t high = 0;
if ( !elf_is_elfbinary(image) )
{
@@ -22,13 +20,9 @@ int elf_init(struct elf_binary *elf, con
memset(elf, 0, sizeof(*elf));
elf->image = image;
elf->size = size;
- elf->ehdr = (elf_ehdr *) image;
+ elf->ehdr = (elf_ehdr *)image;
elf->class = elf->ehdr->e32.e_ident[EI_CLASS];
elf->data = elf->ehdr->e32.e_ident[EI_DATA];
-
-#ifdef VERBOSE
- elf_set_verbose(elf);
-#endif
/* Sanity check phdr. */
offset = elf_uval(elf, elf->ehdr, e_phoff) +
@@ -60,43 +54,18 @@ int elf_init(struct elf_binary *elf, con
count = elf_shdr_count(elf);
for ( i = 0; i < count; i++ )
{
- const char *sh_symend, *sh_strend;
-
shdr = elf_shdr_by_index(elf, i);
if ( elf_uval(elf, shdr, sh_type) != SHT_SYMTAB )
continue;
elf->sym_tab = shdr;
- sh_symend = (const char *)elf_section_end(elf, shdr);
shdr = elf_shdr_by_index(elf, elf_uval(elf, shdr, sh_link));
if ( shdr == NULL )
{
elf->sym_tab = NULL;
- sh_symend = 0;
continue;
}
elf->sym_strtab = elf_section_start(elf, shdr);
- sh_strend = (const char *)elf_section_end(elf, shdr);
-
- if ( low > (unsigned long)elf->sym_tab )
- low = (unsigned long)elf->sym_tab;
- if ( low > (unsigned long)shdr )
- low = (unsigned long)shdr;
-
- if ( high < ((unsigned long)sh_symend) )
- high = (unsigned long)sh_symend;
- if ( high < ((unsigned long)sh_strend) )
- high = (unsigned long)sh_strend;
-
- elf_msg(elf, "%s: shdr: sym_tab=%p size=0x%" PRIx64 "\n",
- __FUNCTION__, elf->sym_tab,
- elf_uval(elf, elf->sym_tab, sh_size));
- elf_msg(elf, "%s: shdr: str_tab=%p size=0x%" PRIx64 "\n",
- __FUNCTION__, elf->sym_strtab, elf_uval(elf, shdr, sh_size));
-
- elf->sstart = low;
- elf->send = high;
- elf_msg(elf, "%s: symbol map: 0x%" PRIx64 " -> 0x%" PRIx64 "\n",
- __FUNCTION__, elf->sstart, elf->send);
+ break;
}
return 0;
@@ -114,6 +83,101 @@ void elf_set_verbose(struct elf_binary *
elf->verbose = 1;
}
#endif
+
+/* Calculate the required additional kernel space for the elf image */
+void elf_parse_bsdsyms(struct elf_binary *elf, uint64_t pstart)
+{
+ uint64_t sz;
+ const elf_shdr *shdr;
+ int i, type;
+
+ if ( !elf->sym_tab )
+ return;
+
+ pstart = elf_round_up(elf, pstart);
+
+ /* Space to store the size of the elf image */
+ sz = sizeof(uint32_t);
+
+ /* Space for the elf and elf section headers */
+ sz += (elf_uval(elf, elf->ehdr, e_ehsize) +
+ elf_shdr_count(elf) * elf_uval(elf, elf->ehdr, e_shentsize));
+ sz = elf_round_up(elf, sz);
+
+ /* Space for the symbol and string tables. */
+ for ( i = 0; i < elf_shdr_count(elf); i++ )
+ {
+ shdr = elf_shdr_by_index(elf, i);
+ type = elf_uval(elf, (elf_shdr *)shdr, sh_type);
+ if ( (type == SHT_STRTAB) || (type == SHT_SYMTAB) )
+ sz = elf_round_up(elf, sz + elf_uval(elf, shdr, sh_size));
+ }
+
+ elf->bsd_symtab_pstart = pstart;
+ elf->bsd_symtab_pend = pstart + sz;
+}
+
+static void elf_load_bsdsyms(struct elf_binary *elf)
+{
+ elf_ehdr *sym_ehdr;
+ unsigned long sz;
+ char *maxva, *symbase, *symtab_addr;
+ elf_shdr *shdr;
+ int i, type;
+
+ if ( !elf->bsd_symtab_pstart )
+ return;
+
+#define elf_hdr_elm(_elf, _hdr, _elm, _val) \
+do { \
+ if ( elf_64bit(_elf) ) \
+ (_hdr)->e64._elm = _val; \
+ else \
+ (_hdr)->e32._elm = _val; \
+} while ( 0 )
+
+ symbase = elf_get_ptr(elf, elf->bsd_symtab_pstart);
+ symtab_addr = maxva = symbase + sizeof(uint32_t);
+
+ /* Set up Elf header. */
+ sym_ehdr = (elf_ehdr *)symtab_addr;
+ sz = elf_uval(elf, elf->ehdr, e_ehsize);
+ memcpy(sym_ehdr, elf->ehdr, sz);
+ maxva += sz; /* no round up */
+
+ elf_hdr_elm(elf, sym_ehdr, e_phoff, 0);
+ elf_hdr_elm(elf, sym_ehdr, e_shoff, elf_uval(elf, elf->ehdr, e_ehsize));
+ elf_hdr_elm(elf, sym_ehdr, e_phentsize, 0);
+ elf_hdr_elm(elf, sym_ehdr, e_phnum, 0);
+
+ /* Copy Elf section headers. */
+ shdr = (elf_shdr *)maxva;
+ sz = elf_shdr_count(elf) * elf_uval(elf, elf->ehdr, e_shentsize);
+ memcpy(shdr, elf->image + elf_uval(elf, elf->ehdr, e_shoff), sz);
+ maxva = (char *)(long)elf_round_up(elf, (long)maxva + sz);
+
+ for ( i = 0; i < elf_shdr_count(elf); i++ )
+ {
+ type = elf_uval(elf, shdr, sh_type);
+ if ( (type == SHT_STRTAB) || (type == SHT_SYMTAB) )
+ {
+ elf_msg(elf, "%s: shdr %i at 0x%p -> 0x%p\n", __func__, i,
+ elf_section_start(elf, shdr), maxva);
+ sz = elf_uval(elf, shdr, sh_size);
+ memcpy(maxva, elf_section_start(elf, shdr), sz);
+ /* Mangled to be based on ELF header location. */
+ elf_hdr_elm(elf, shdr, sh_offset, maxva - symtab_addr);
+ maxva = (char *)(long)elf_round_up(elf, (long)maxva + sz);
+ }
+ shdr = (elf_shdr *)((long)shdr +
+ (long)elf_uval(elf, elf->ehdr, e_shentsize));
+ }
+
+ /* Write down the actual sym size. */
+ *(uint32_t *)symbase = maxva - symtab_addr;
+
+#undef elf_ehdr_elm
+}
void elf_parse_binary(struct elf_binary *elf)
{
@@ -165,6 +229,8 @@ void elf_load_binary(struct elf_binary *
memcpy(dest, elf->image + offset, filesz);
memset(dest + filesz, 0, memsz - filesz);
}
+
+ elf_load_bsdsyms(elf);
}
void *elf_get_ptr(struct elf_binary *elf, unsigned long addr)
diff -r 5b19839d0365 -r cd51fa91956b xen/common/libelf/libelf-tools.c
--- a/xen/common/libelf/libelf-tools.c Sun Aug 12 12:19:13 2007 -0600
+++ b/xen/common/libelf/libelf-tools.c Sun Aug 12 14:50:02 2007 -0600
@@ -236,36 +236,6 @@ int elf_phdr_is_loadable(struct elf_bina
uint64_t p_flags = elf_uval(elf, phdr, p_flags);
return ((p_type == PT_LOAD) && (p_flags & (PF_W | PF_X)) != 0);
-}
-
-unsigned long
-elf_copy_ehdr(struct elf_binary *elf, void *dest)
-{
- uint64_t size;
-
- size = elf_uval(elf, elf->ehdr, e_ehsize);
- memcpy(dest, elf->ehdr, size);
- return elf_round_up(elf, (unsigned long)(dest) + size);
-}
-
-unsigned long
-elf_copy_shdr(struct elf_binary *elf, void *dest)
-{
- uint64_t size;
-
- size = elf_shdr_count(elf) * elf_uval(elf, elf->ehdr, e_shentsize);
- memcpy(dest, elf->image + elf_uval(elf, elf->ehdr, e_shoff), size);
- return elf_round_up(elf, (unsigned long)(dest) + size);
-}
-
-unsigned long
-elf_copy_section(struct elf_binary *elf, const elf_shdr *shdr, void *dest)
-{
- uint64_t size;
-
- size = elf_uval(elf, shdr, sh_size);
- memcpy(dest, elf_section_start(elf, shdr), size);
- return elf_round_up(elf, (unsigned long)(dest) + size);
}
/*
diff -r 5b19839d0365 -r cd51fa91956b xen/common/page_alloc.c
--- a/xen/common/page_alloc.c Sun Aug 12 12:19:13 2007 -0600
+++ b/xen/common/page_alloc.c Sun Aug 12 14:50:02 2007 -0600
@@ -91,6 +91,14 @@ custom_param("dma_emergency_pool", parse
#define round_pgdown(_p) ((_p)&PAGE_MASK)
#define round_pgup(_p) (((_p)+(PAGE_SIZE-1))&PAGE_MASK)
+#ifndef NDEBUG
+/* Avoid callers relying on allocations returning zeroed pages. */
+#define scrub_page(p) memset((p), 0xc2, PAGE_SIZE)
+#else
+/* For a production build, clear_page() is the fastest way to scrub. */
+#define scrub_page(p) clear_page(p)
+#endif
+
static DEFINE_SPINLOCK(page_scrub_lock);
LIST_HEAD(page_scrub_list);
static unsigned long scrub_pages;
@@ -618,13 +626,13 @@ void __init scrub_heap_pages(void)
{
p = page_to_virt(mfn_to_page(mfn));
memguard_unguard_range(p, PAGE_SIZE);
- clear_page(p);
+ scrub_page(p);
memguard_guard_range(p, PAGE_SIZE);
}
else
{
p = map_domain_page(mfn);
- clear_page(p);
+ scrub_page(p);
unmap_domain_page(p);
}
}
@@ -1018,7 +1026,7 @@ static void page_scrub_softirq(void)
pg = list_entry(ent, struct page_info, list);
ent = ent->prev;
p = map_domain_page(page_to_mfn(pg));
- clear_page(p);
+ scrub_page(p);
unmap_domain_page(p);
free_heap_pages(pfn_dom_zone_type(page_to_mfn(pg)), pg, 0);
}
diff -r 5b19839d0365 -r cd51fa91956b xen/include/asm-powerpc/boot.h
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/xen/include/asm-powerpc/boot.h Sun Aug 12 14:50:02 2007 -0600
@@ -0,0 +1,46 @@
+/*
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * Copyright IBM Corp. 2007
+ *
+ * Authors: Hollis Blanchard <hollisb@xxxxxxxxxx>
+ */
+
+#ifndef _ASM_BOOT_H
+#define _ASM_BOOT_H
+
+/* a collection of interfaces used during boot. */
+
+extern void boot_of_init(ulong, ulong);
+extern void *boot_of_devtree(void);
+extern void boot_of_serial(void *);
+extern void boot_of_finish(void);
+extern int boot_of_mem_avail(int pos, ulong *startpage, ulong *endpage);
+
+extern void parse_multiboot(ulong tags_addr);
+
+extern void memory_init(void);
+
+extern char *xen_cmdline;
+extern ulong dom0_addr;
+extern ulong dom0_len;
+extern char *dom0_cmdline;
+extern ulong initrd_start;
+extern ulong initrd_len;
+
+/* From linker script. */
+extern char builtin_cmdline[];
+
+#endif
diff -r 5b19839d0365 -r cd51fa91956b xen/include/asm-x86/domain.h
--- a/xen/include/asm-x86/domain.h Sun Aug 12 12:19:13 2007 -0600
+++ b/xen/include/asm-x86/domain.h Sun Aug 12 14:50:02 2007 -0600
@@ -77,10 +77,10 @@ struct shadow_domain {
int locker; /* processor which holds the lock */
const char *locker_function; /* Func that took it */
unsigned int opt_flags; /* runtime tunable optimizations on/off */
- struct list_head pinned_shadows;
+ struct list_head pinned_shadows;
/* Memory allocation */
- struct list_head freelists[SHADOW_MAX_ORDER + 1];
+ struct list_head freelists[SHADOW_MAX_ORDER + 1];
struct list_head p2m_freelist;
unsigned int total_pages; /* number of pages allocated */
unsigned int free_pages; /* number of pages on freelists */
@@ -116,7 +116,7 @@ struct hap_domain {
spinlock_t lock;
int locker;
const char *locker_function;
-
+
struct list_head freelist;
unsigned int total_pages; /* number of pages allocated */
unsigned int free_pages; /* number of pages on freelists */
@@ -131,13 +131,13 @@ struct p2m_domain {
spinlock_t lock;
int locker; /* processor which holds the lock */
const char *locker_function; /* Func that took it */
-
+
/* Pages used to construct the p2m */
struct list_head pages;
/* Functions to call to get or free pages for the p2m */
struct page_info * (*alloc_page )(struct domain *d);
- void (*free_page )(struct domain *d,
+ void (*free_page )(struct domain *d,
struct page_info *pg);
/* Highest guest frame that's ever been mapped in the p2m */
@@ -177,6 +177,7 @@ struct paging_domain {
/* log dirty support */
struct log_dirty_domain log_dirty;
};
+
struct paging_vcpu {
/* Pointers to mode-specific entry points. */
struct paging_mode *mode;
@@ -184,9 +185,9 @@ struct paging_vcpu {
unsigned int translate_enabled:1;
/* HVM guest: last emulate was to a pagetable */
unsigned int last_write_was_pt:1;
- /* Translated guest: virtual TLB */
+ /* Translated guest: virtual TLB */
struct shadow_vtlb *vtlb;
- spinlock_t vtlb_lock;
+ spinlock_t vtlb_lock;
/* paging support extension */
struct shadow_vcpu shadow;
@@ -303,7 +304,7 @@ struct arch_vcpu
* shadow refcounts are in use */
pagetable_t shadow_table[4]; /* (MFN) shadow(s) of guest */
pagetable_t monitor_table; /* (MFN) hypervisor PT (for HVM) */
- unsigned long cr3; /* (MA) value to install in HW CR3
*/
+ unsigned long cr3; /* (MA) value to install in HW CR3 */
/* Current LDT details. */
unsigned long shadow_ldt_mapcnt;
diff -r 5b19839d0365 -r cd51fa91956b xen/include/asm-x86/hap.h
--- a/xen/include/asm-x86/hap.h Sun Aug 12 12:19:13 2007 -0600
+++ b/xen/include/asm-x86/hap.h Sun Aug 12 14:50:02 2007 -0600
@@ -3,7 +3,7 @@
*
* hardware-assisted paging
* Copyright (c) 2007 Advanced Micro Devices (Wei Huang)
- *
+ *
* Parts of this code are Copyright (c) 2006 by XenSource Inc.
* Parts of this code are Copyright (c) 2006 by Michael A Fetterman
* Parts based on earlier work by Michael A Fetterman, Ian Pratt et al.
diff -r 5b19839d0365 -r cd51fa91956b
xen/include/asm-x86/mach-es7000/mach_mpparse.h
--- a/xen/include/asm-x86/mach-es7000/mach_mpparse.h Sun Aug 12 12:19:13
2007 -0600
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,45 +0,0 @@
-#ifndef __ASM_MACH_MPPARSE_H
-#define __ASM_MACH_MPPARSE_H
-
-#include <xen/acpi.h>
-
-extern int parse_unisys_oem(char *oemptr);
-extern int find_unisys_acpi_oem_table(unsigned long *oem_addr);
-
-static inline int mps_oem_check(struct mp_config_table *mpc, char *oem,
- char *productid)
-{
- if (mpc->mpc_oemptr) {
- struct mp_config_oemtable *oem_table =
- (struct mp_config_oemtable *)(long)mpc->mpc_oemptr;
- if (!strncmp(oem, "UNISYS", 6))
- return parse_unisys_oem((char *)oem_table);
- }
- return 0;
-}
-
-static inline int es7000_check_dsdt(void)
-{
- struct acpi_table_header *header = NULL;
- if(!acpi_get_table_header_early(ACPI_DSDT, &header))
- acpi_table_print(header, 0);
- if (!strncmp(header->oem_id, "UNISYS", 6))
- return 1;
- return 0;
-}
-
-/* Hook from generic ACPI tables.c */
-static inline int acpi_madt_oem_check(char *oem_id, char *oem_table_id)
-{
- unsigned long oem_addr;
- if (!find_unisys_acpi_oem_table(&oem_addr)) {
- if (es7000_check_dsdt())
- return parse_unisys_oem((char *)oem_addr);
- else
- return 1;
- }
- return 0;
-}
-
-
-#endif /* __ASM_MACH_MPPARSE_H */
diff -r 5b19839d0365 -r cd51fa91956b xen/include/asm-x86/msr.h
--- a/xen/include/asm-x86/msr.h Sun Aug 12 12:19:13 2007 -0600
+++ b/xen/include/asm-x86/msr.h Sun Aug 12 14:50:02 2007 -0600
@@ -239,6 +239,11 @@ static inline void write_efer(__u64 val)
#define MSR_K8_MC4_STATUS 0x411
#define MSR_K8_MC4_ADDR 0x412
#define MSR_K8_MC4_MISC 0x413
+
+#define MSR_K8_MC5_CTL 0x414
+#define MSR_K8_MC5_STATUS 0x415
+#define MSR_K8_MC5_ADDR 0x416
+#define MSR_K8_MC5_MISC 0x417
/* Pentium IV performance counter MSRs */
#define MSR_P4_BPU_PERFCTR0 0x300
diff -r 5b19839d0365 -r cd51fa91956b xen/include/public/libelf.h
--- a/xen/include/public/libelf.h Sun Aug 12 12:19:13 2007 -0600
+++ b/xen/include/public/libelf.h Sun Aug 12 14:50:02 2007 -0600
@@ -65,11 +65,12 @@ struct elf_binary {
/* loaded to */
char *dest;
- uint64_t sstart;
- uint64_t send;
uint64_t pstart;
uint64_t pend;
uint64_t reloc_offset;
+
+ uint64_t bsd_symtab_pstart;
+ uint64_t bsd_symtab_pend;
#ifndef __XEN__
/* misc */
@@ -150,11 +151,6 @@ int elf_is_elfbinary(const void *image);
int elf_is_elfbinary(const void *image);
int elf_phdr_is_loadable(struct elf_binary *elf, const elf_phdr * phdr);
-unsigned long elf_copy_ehdr(struct elf_binary *elf, void *dest);
-unsigned long elf_copy_shdr(struct elf_binary *elf, void *dest);
-unsigned long elf_copy_section(struct elf_binary *elf,
- const elf_shdr *shdr, void *dest);
-
/* ------------------------------------------------------------------------ */
/* xc_libelf_loader.c */
@@ -170,6 +166,8 @@ void elf_load_binary(struct elf_binary *
void *elf_get_ptr(struct elf_binary *elf, unsigned long addr);
uint64_t elf_lookup_addr(struct elf_binary *elf, const char *symbol);
+
+void elf_parse_bsdsyms(struct elf_binary *elf, uint64_t pstart); /* private */
/* ------------------------------------------------------------------------ */
/* xc_libelf_relocate.c */
@@ -221,8 +219,7 @@ struct elf_dom_parms {
/* calculated */
uint64_t virt_offset;
uint64_t virt_kstart;
- uint64_t virt_kend; /* end of kernel image */
- uint64_t virt_end; /* end of kernel symtab (== virt_kend if none) */
+ uint64_t virt_kend;
};
static inline void elf_xen_feature_set(int nr, uint32_t * addr)
@@ -245,7 +242,4 @@ int elf_xen_parse(struct elf_binary *elf
int elf_xen_parse(struct elf_binary *elf,
struct elf_dom_parms *parms);
-int elf_xen_dom_load_binary(struct elf_binary *elf,
- struct elf_dom_parms *parms);
-
#endif /* __XC_LIBELF__ */
diff -r 5b19839d0365 -r cd51fa91956b xen/include/xen/multiboot2.h
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/xen/include/xen/multiboot2.h Sun Aug 12 14:50:02 2007 -0600
@@ -0,0 +1,99 @@
+/*
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * Copyright IBM Corp. 2006, 2007
+ *
+ * Authors: Hollis Blanchard <hollisb@xxxxxxxxxx>
+ *
+ */
+
+#ifndef _MULTIBOOT2_H_
+#define _MULTIBOOT2_H_
+
+/* How many bytes from the start of the file we search for the header. */
+#define MB2_HEADER_SEARCH 8192
+
+/* The magic field should contain this. */
+#define MB2_HEADER_MAGIC 0xe85250d6
+
+/* Passed from the bootloader to the kernel. */
+#define MB2_BOOTLOADER_MAGIC 0x36d76289
+
+#include <stdint.h>
+
+#define for_each_tag(_tag, _tags) \
+ for ((_tag) = (_tags); \
+ ((_tag)->key != MB2_TAG_END && (_tag)->key != 0); \
+ (_tag) = (void *)(_tag) + (_tag)->len)
+
+typedef uint32_t mb2_word;
+
+struct mb2_header
+{
+ uint32_t magic;
+};
+
+struct mb2_tag_header
+{
+ uint32_t key;
+ uint32_t len;
+};
+
+#define MB2_TAG_START 1
+struct mb2_tag_start
+{
+ struct mb2_tag_header header;
+ mb2_word size; /* Total size of all mb2 tags. */
+};
+
+#define MB2_TAG_NAME 2
+struct mb2_tag_name
+{
+ struct mb2_tag_header header;
+ char name[1];
+};
+
+#define MB2_TAG_MODULE 3
+struct mb2_tag_module
+{
+ struct mb2_tag_header header;
+ mb2_word addr;
+ mb2_word size;
+ unsigned char type[36];
+ unsigned char cmdline[1];
+};
+
+#define MB2_TAG_MEMORY 4
+struct mb2_tag_memory
+{
+ struct mb2_tag_header header;
+ mb2_word addr;
+ mb2_word size;
+ mb2_word type;
+};
+
+#define MB2_TAG_UNUSED 5
+struct mb2_tag_unused
+{
+ struct mb2_tag_header header;
+};
+
+#define MB2_TAG_END 0xffff
+struct mb2_tag_end
+{
+ struct mb2_tag_header header;
+};
+
+#endif
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog
|