diff -urN linux-2.4.21/arch/arm/boot/Makefile linux-2.4.21-h7210/arch/arm/boot/Makefile --- linux-2.4.21/arch/arm/boot/Makefile 2004-06-14 07:53:57.000000000 +0900 +++ linux-2.4.21-h7210/arch/arm/boot/Makefile 2004-06-14 02:46:02.000000000 +0900 @@ -117,6 +117,10 @@ ZRELADDR = 0x20008000 endif +ifeq ($(CONFIG_ARCH_H7210),y) +ZRELADDR = 0x40008000 +endif + # # We now have a PIC decompressor implementation. Decompressors running # from RAM should not define ZTEXTADDR. Decompressors running directly diff -urN linux-2.4.21/arch/arm/config.in linux-2.4.21-h7210/arch/arm/config.in --- linux-2.4.21/arch/arm/config.in 2004-06-14 07:53:58.000000000 +0900 +++ linux-2.4.21-h7210/arch/arm/config.in 2004-06-14 02:51:59.000000000 +0900 @@ -41,6 +41,7 @@ EBSA-110 CONFIG_ARCH_EBSA110 \ Excalibur-ARM CONFIG_ARCH_CAMELOT \ FootBridge CONFIG_ARCH_FOOTBRIDGE \ + SOCA7210 CONFIG_ARCH_H7210 \ Integrator CONFIG_ARCH_INTEGRATOR \ Omaha CONFIG_ARCH_OMAHA \ LinkUp-L7200 CONFIG_ARCH_L7200 \ @@ -288,8 +289,10 @@ # ARM720T if [ "$CONFIG_ARCH_CLPS711X" = "y" -o \ "$CONFIG_ARCH_L7200" = "y" -o \ - "$CONFIG_ARCH_CDB89712" = "y" ]; then - define_bool CONFIG_CPU_ARM720T y + "$CONFIG_ARCH_CDB89712" = "y" -o \ + "$CONFIG_ARCH_H720X" = "y" -o \ + "$CONFIG_ARCH_H7210" = "y" ]; then + define_bool CONFIG_CPU_ARM720T y else if [ "$CONFIG_ARCH_INTEGRATOR" = "y" ]; then bool 'Support ARM720T processor' CONFIG_CPU_ARM720T @@ -362,6 +365,13 @@ define_bool CONFIG_CPU_SA1100 n fi +# HMS30C7210 +if [ "$CONFIG_ARCH_H7210" = "y" ]; then + define_bool CONFIG_CPU_H7210 y +else + define_bool CONFIG_CPU_H7210 n +fi + # Figure out what processor architecture version we should be using. # This defines the compiler instruction set which depends on the machine type. @@ -378,7 +388,8 @@ "$CONFIG_ARCH_INTEGRATOR" = "y" -o "$CONFIG_ARCH_SA1100" = "y" -o \ "$CONFIG_ARCH_L7200" = "y" -o "$CONFIG_ARCH_ANAKIN" = "y" -o \ "$CONFIG_ARCH_CAMELOT" = "y" -o "$CONFIG_ARCH_MX1ADS" = "y" -o \ - "$CONFIG_ARCH_OMAHA" = "y" -o "$CONFIG_ARCH_AT91RM9200" = "y" ]; then + "$CONFIG_ARCH_OMAHA" = "y" -o "$CONFIG_ARCH_AT91RM9200" = "y" -o \ + "$CONFIG_ARCH_H7210" = "y" ]; then define_bool CONFIG_CPU_32v4 y else define_bool CONFIG_CPU_32v4 n diff -urN linux-2.4.21/arch/arm/defconfig linux-2.4.21-h7210/arch/arm/defconfig --- linux-2.4.21/arch/arm/defconfig 2001-05-20 09:43:05.000000000 +0900 +++ linux-2.4.21-h7210/arch/arm/defconfig 2004-06-14 02:11:02.000000000 +0900 @@ -1,11 +1,15 @@ # -# Automatically generated make config: don't edit +# Automatically generated by make menuconfig: don't edit # CONFIG_ARM=y # CONFIG_EISA is not set # CONFIG_SBUS is not set # CONFIG_MCA is not set CONFIG_UID16=y +CONFIG_RWSEM_GENERIC_SPINLOCK=y +# CONFIG_RWSEM_XCHGADD_ALGORITHM is not set +# CONFIG_GENERIC_BUST_SPINLOCK is not set +# CONFIG_GENERIC_ISA_DMA is not set # # Code maturity level options @@ -17,129 +21,176 @@ # Loadable module support # # CONFIG_MODULES is not set +# CONFIG_MODVERSIONS is not set +# CONFIG_KMOD is not set # # System Type # +# CONFIG_ARCH_ANAKIN is not set # CONFIG_ARCH_ARCA5K is not set # CONFIG_ARCH_CLPS7500 is not set +# CONFIG_ARCH_CLPS711X is not set # CONFIG_ARCH_CO285 is not set # CONFIG_ARCH_EBSA110 is not set +# CONFIG_ARCH_CAMELOT is not set # CONFIG_ARCH_FOOTBRIDGE is not set -CONFIG_ARCH_INTEGRATOR=y +# CONFIG_ARCH_H720X is not set +CONFIG_ARCH_H7210=y +# CONFIG_ARCH_INTEGRATOR is not set +# CONFIG_ARCH_OMAHA is not set +# CONFIG_ARCH_L7200 is not set +# CONFIG_ARCH_MX1ADS is not set # CONFIG_ARCH_RPC is not set +# CONFIG_ARCH_RISCSTATION is not set # CONFIG_ARCH_SA1100 is not set -# CONFIG_ARCH_CLPS711X is not set +# CONFIG_ARCH_SHARK is not set +# CONFIG_ARCH_AT91RM9200 is not set # # Archimedes/A5000 Implementations # +# CONFIG_ARCH_ARC is not set +# CONFIG_ARCH_A5K is not set # # Footbridge Implementations # +# CONFIG_ARCH_CATS is not set +# CONFIG_ARCH_PERSONAL_SERVER is not set +# CONFIG_ARCH_EBSA285_ADDIN is not set +# CONFIG_ARCH_EBSA285_HOST is not set +# CONFIG_ARCH_NETWINDER is not set + +# +# Hynix HMS720x Implementations +# +# CONFIG_ARCH_H7201 is not set +# CONFIG_ARCH_H7202 is not set +# CONFIG_ARCH_FU7202 is not set # # SA11x0 Implementations # +# CONFIG_SA1100_ACCELENT is not set +# CONFIG_SA1100_ASSABET is not set +# CONFIG_ASSABET_NEPONSET is not set +# CONFIG_SA1100_ADSAGC is not set +# CONFIG_SA1100_ADSBITSY is not set +# CONFIG_SA1100_ADSBITSYPLUS is not set +# CONFIG_SA1100_BRUTUS is not set +# CONFIG_SA1100_CEP is not set +# CONFIG_SA1100_CERF is not set +# CONFIG_SA1100_H3100 is not set +# CONFIG_SA1100_H3600 is not set +# CONFIG_SA1100_H3800 is not set +# CONFIG_SA1100_H3XXX is not set +# CONFIG_H3600_SLEEVE is not set +# CONFIG_SA1100_EXTENEX1 is not set +# CONFIG_SA1100_FLEXANET is not set +# CONFIG_SA1100_FREEBIRD is not set +# CONFIG_SA1100_FRODO is not set +# CONFIG_SA1100_GRAPHICSCLIENT is not set +# CONFIG_SA1100_GRAPHICSMASTER is not set +# CONFIG_SA1100_HACKKIT is not set +# CONFIG_SA1100_BADGE4 is not set +# CONFIG_SA1100_JORNADA720 is not set +# CONFIG_SA1100_HUW_WEBPANEL is not set +# CONFIG_SA1100_ITSY is not set +# CONFIG_SA1100_LART is not set +# CONFIG_SA1100_NANOENGINE is not set +# CONFIG_SA1100_OMNIMETER is not set +# CONFIG_SA1100_PANGOLIN is not set +# CONFIG_SA1100_PLEB is not set +# CONFIG_SA1100_PT_SYSTEM3 is not set +# CONFIG_SA1100_SHANNON is not set +# CONFIG_SA1100_SHERMAN is not set +# CONFIG_SA1100_SIMPAD is not set +# CONFIG_SA1100_SIMPUTER is not set +# CONFIG_SA1100_PFS168 is not set +# CONFIG_SA1100_VICTOR is not set +# CONFIG_SA1100_XP860 is not set +# CONFIG_SA1100_YOPY is not set +# CONFIG_SA1100_USB is not set +# CONFIG_SA1100_USB_NETLINK is not set +# CONFIG_SA1100_USB_CHAR is not set +# CONFIG_SA1100_SSP is not set + +# +# AT91RM9200 Implementations +# +# CONFIG_ARCH_AT91RM9200DK is not set # # CLPS711X/EP721X Implementations # +# CONFIG_ARCH_AUTCPU12 is not set +# CONFIG_ARCH_CDB89712 is not set +# CONFIG_ARCH_CLEP7312 is not set +# CONFIG_ARCH_EDB7211 is not set +# CONFIG_ARCH_FORTUNET is not set +# CONFIG_ARCH_GUIDEA07 is not set +# CONFIG_ARCH_P720T is not set +# CONFIG_ARCH_EP7211 is not set +# CONFIG_ARCH_EP7212 is not set # CONFIG_ARCH_ACORN is not set # CONFIG_FOOTBRIDGE is not set # CONFIG_FOOTBRIDGE_HOST is not set # CONFIG_FOOTBRIDGE_ADDIN is not set CONFIG_CPU_32=y # CONFIG_CPU_26 is not set - -# -# Processor Type -# +# CONFIG_CPU_ARM610 is not set +# CONFIG_CPU_ARM710 is not set +CONFIG_CPU_ARM720T=y +# CONFIG_CPU_ARM920T is not set +# CONFIG_CPU_ARM922T is not set +# CONFIG_PLD is not set +# CONFIG_CPU_ARM926T is not set +# CONFIG_CPU_ARM1020 is not set +# CONFIG_CPU_ARM1026 is not set +# CONFIG_CPU_SA110 is not set +# CONFIG_CPU_SA1100 is not set +# CONFIG_CPU_H7201 is not set +# CONFIG_CPU_H7202 is not set +CONFIG_CPU_H7210=y +# CONFIG_CPU_32v3 is not set CONFIG_CPU_32v4=y -CONFIG_CPU_ARM720=y -CONFIG_CPU_ARM920=y -CONFIG_CPU_ARM920_CPU_IDLE=y -CONFIG_CPU_ARM920_I_CACHE_ON=y -CONFIG_CPU_ARM920_D_CACHE_ON=y -# CONFIG_CPU_ARM920_WRITETHROUGH is not set +# CONFIG_ARM_THUMB is not set # CONFIG_DISCONTIGMEM is not set # # General setup # -# CONFIG_ANGELBOOT is not set -CONFIG_PCI_INTEGRATOR=y -CONFIG_PCI=y +# CONFIG_PCI is not set # CONFIG_ISA is not set # CONFIG_ISA_DMA is not set -CONFIG_PCI_NAMES=y +# CONFIG_ZBOOT_ROM is not set +CONFIG_ZBOOT_ROM_TEXT=0 +CONFIG_ZBOOT_ROM_BSS=0 # CONFIG_HOTPLUG is not set # CONFIG_PCMCIA is not set CONFIG_NET=y CONFIG_SYSVIPC=y # CONFIG_BSD_PROCESS_ACCT is not set CONFIG_SYSCTL=y -CONFIG_NWFPE=y +CONFIG_FPE_NWFPE=y +# CONFIG_FPE_NWFPE_XP is not set +CONFIG_FPE_FASTFPE=y CONFIG_KCORE_ELF=y # CONFIG_KCORE_AOUT is not set -CONFIG_BINFMT_AOUT=y +# CONFIG_BINFMT_AOUT is not set CONFIG_BINFMT_ELF=y # CONFIG_BINFMT_MISC is not set # CONFIG_PM is not set # CONFIG_ARTHUR is not set CONFIG_CMDLINE="root=1f04 mem=32M" -CONFIG_LEDS=y -CONFIG_LEDS_TIMER=y -CONFIG_LEDS_CPU=y -CONFIG_ALIGNMENT_TRAP=y +# CONFIG_ALIGNMENT_TRAP is not set # # Parallel port support # # CONFIG_PARPORT is not set - -# -# Memory Technology Devices (MTD) -# -CONFIG_MTD=y -# CONFIG_MTD_DOC1000 is not set -# CONFIG_MTD_DOC2000 is not set -# CONFIG_MTD_DOC2001 is not set -# CONFIG_MTD_DOCPROBE is not set -# CONFIG_MTD_SLRAM is not set -# CONFIG_MTD_PMC551 is not set -# CONFIG_MTD_MTDRAM is not set - -# -# MTD drivers for mapped chips -# -CONFIG_MTD_CFI=y -CONFIG_MTD_CFI_INTELEXT=y -# CONFIG_MTD_CFI_AMDSTD is not set -# CONFIG_MTD_JEDEC is not set -# CONFIG_MTD_RAM is not set -# CONFIG_MTD_ROM is not set -# CONFIG_MTD_PHYSMAP is not set - -# -# Drivers for chip mappings -# -# CONFIG_MTD_MIXMEM is not set -# CONFIG_MTD_NORA is not set -# CONFIG_MTD_OCTAGON is not set -# CONFIG_MTD_PNC2000 is not set -# CONFIG_MTD_RPXLITE is not set -# CONFIG_MTD_VMAX is not set - -# -# User modules and translation layers for MTD devices -# -CONFIG_MTD_CHAR=y -CONFIG_MTD_BLOCK=y -# CONFIG_FTL is not set -# CONFIG_NFTL is not set -CONFIG_MTD_ARM=y +# CONFIG_MTD is not set # # Plug and Play configuration @@ -155,40 +206,60 @@ # CONFIG_PARIDE is not set # CONFIG_BLK_CPQ_DA is not set # CONFIG_BLK_CPQ_CISS_DA is not set +# CONFIG_CISS_SCSI_TAPE is not set # CONFIG_BLK_DEV_DAC960 is not set +# CONFIG_BLK_DEV_UMEM is not set # CONFIG_BLK_DEV_LOOP is not set # CONFIG_BLK_DEV_NBD is not set CONFIG_BLK_DEV_RAM=y -CONFIG_BLK_DEV_RAM_SIZE=4096 -# CONFIG_BLK_DEV_INITRD is not set +CONFIG_BLK_DEV_RAM_SIZE=33554 +CONFIG_BLK_DEV_INITRD=y +# CONFIG_BLK_STATS is not set + +# +# Multi-device support (RAID and LVM) +# +# CONFIG_MD is not set +# CONFIG_BLK_DEV_MD is not set +# CONFIG_MD_LINEAR is not set +# CONFIG_MD_RAID0 is not set +# CONFIG_MD_RAID1 is not set +# CONFIG_MD_RAID5 is not set +# CONFIG_MD_MULTIPATH is not set +# CONFIG_BLK_DEV_LVM is not set # # Networking options # # CONFIG_PACKET is not set -# CONFIG_NETLINK is not set +# CONFIG_NETLINK_DEV is not set # CONFIG_NETFILTER is not set # CONFIG_FILTER is not set CONFIG_UNIX=y CONFIG_INET=y -# CONFIG_IP_MULTICAST is not set +CONFIG_IP_MULTICAST=y # CONFIG_IP_ADVANCED_ROUTER is not set CONFIG_IP_PNP=y -CONFIG_IP_PNP_BOOTP=y +CONFIG_IP_PNP_DHCP=y +# CONFIG_IP_PNP_BOOTP is not set # CONFIG_IP_PNP_RARP is not set # CONFIG_NET_IPIP is not set # CONFIG_NET_IPGRE is not set +# CONFIG_IP_MROUTE is not set +# CONFIG_ARPD is not set # CONFIG_INET_ECN is not set # CONFIG_SYN_COOKIES is not set # CONFIG_IPV6 is not set # CONFIG_KHTTPD is not set # CONFIG_ATM is not set +# CONFIG_VLAN_8021Q is not set +# CONFIG_IPX is not set +# CONFIG_ATALK is not set # -# +# Appletalk devices # -# CONFIG_IPX is not set -# CONFIG_ATALK is not set +# CONFIG_DEV_APPLETALK is not set # CONFIG_DECNET is not set # CONFIG_BRIDGE is not set # CONFIG_X25 is not set @@ -206,88 +277,14 @@ # CONFIG_NET_SCHED is not set # -# Network device support -# -CONFIG_NETDEVICES=y - -# -# ARCnet devices +# Network testing # -# CONFIG_ARCNET is not set -# CONFIG_DUMMY is not set -# CONFIG_BONDING is not set -# CONFIG_EQUALIZER is not set -# CONFIG_TUN is not set -# CONFIG_NET_SB1000 is not set - -# -# Ethernet (10 or 100Mbit) -# -CONFIG_NET_ETHERNET=y -# CONFIG_NET_VENDOR_3COM is not set -# CONFIG_LANCE is not set -# CONFIG_NET_VENDOR_SMC is not set -# CONFIG_NET_VENDOR_RACAL is not set -# CONFIG_AT1700 is not set -# CONFIG_DEPCA is not set -# CONFIG_HP100 is not set -# CONFIG_NET_ISA is not set -CONFIG_NET_PCI=y -# CONFIG_PCNET32 is not set -# CONFIG_ADAPTEC_STARFIRE is not set -# CONFIG_APRICOT is not set -# CONFIG_CS89x0 is not set -CONFIG_TULIP=y -# CONFIG_DE4X5 is not set -# CONFIG_DGRS is not set -# CONFIG_DM9102 is not set -CONFIG_EEPRO100=y -CONFIG_EEPRO100_PM=y -# CONFIG_LNE390 is not set -# CONFIG_NATSEMI is not set -# CONFIG_NE2K_PCI is not set -# CONFIG_NE3210 is not set -# CONFIG_ES3210 is not set -# CONFIG_8139TOO is not set -# CONFIG_RTL8129 is not set -# CONFIG_SIS900 is not set -# CONFIG_EPIC100 is not set -# CONFIG_SUNDANCE is not set -# CONFIG_TLAN is not set -# CONFIG_VIA_RHINE is not set -# CONFIG_WINBOND_840 is not set -# CONFIG_HAPPYMEAL is not set -# CONFIG_NET_POCKET is not set - -# -# Ethernet (1000 Mbit) -# -# CONFIG_ACENIC is not set -# CONFIG_HAMACHI is not set -# CONFIG_YELLOWFIN is not set -# CONFIG_SK98LIN is not set -# CONFIG_FDDI is not set -# CONFIG_HIPPI is not set -# CONFIG_PPP is not set -# CONFIG_SLIP is not set - -# -# Wireless LAN (non-hamradio) -# -# CONFIG_NET_RADIO is not set - -# -# Token Ring devices -# -# CONFIG_TR is not set -# CONFIG_NET_FC is not set -# CONFIG_RCPCI is not set -# CONFIG_SHAPER is not set +# CONFIG_NET_PKTGEN is not set # -# Wan interfaces +# Network device support # -# CONFIG_WAN is not set +# CONFIG_NETDEVICES is not set # # Amateur Radio support @@ -300,7 +297,7 @@ # CONFIG_IRDA is not set # -# ATA/IDE/MFM/RLL support +# ATA/ATAPI/MFM/RLL support # # CONFIG_IDE is not set # CONFIG_BLK_DEV_IDE_MODES is not set @@ -312,15 +309,9 @@ # CONFIG_SCSI is not set # -# IEEE 1394 (FireWire) support -# -# CONFIG_IEEE1394 is not set - -# # I2O device support # # CONFIG_I2O is not set -# CONFIG_I2O_PCI is not set # CONFIG_I2O_BLOCK is not set # CONFIG_I2O_LAN is not set # CONFIG_I2O_SCSI is not set @@ -335,6 +326,11 @@ # Input core support # # CONFIG_INPUT is not set +# CONFIG_INPUT_KEYBDEV is not set +# CONFIG_INPUT_MOUSEDEV is not set +# CONFIG_INPUT_JOYDEV is not set +# CONFIG_INPUT_EVDEV is not set +# CONFIG_INPUT_MX1TS is not set # # Character devices @@ -344,9 +340,46 @@ # CONFIG_SERIAL is not set # CONFIG_SERIAL_EXTENDED is not set # CONFIG_SERIAL_NONSTANDARD is not set -CONFIG_SERIAL_AMBA=y -CONFIG_SERIAL_INTEGRATOR=y -CONFIG_SERIAL_AMBA_CONSOLE=y +CONFIG_H7210_MATRIXKBD=y +# CONFIG_H7210_TOUCH is not set +CONFIG_H7210_PRINTER=y +CONFIG_H7210_PRNTYPE1=y +# CONFIG_H7210_PRNTYPE2 is not set +CONFIG_H7210_MSR=y +CONFIG_H7210_MSRTYPE1=y +# CONFIG_H7210_MSRTYPE2 is not set +CONFIG_H7210_BLCD=y + +# +# Serial drivers +# +# CONFIG_SERIAL_ANAKIN is not set +# CONFIG_SERIAL_ANAKIN_CONSOLE is not set +# CONFIG_SERIAL_AMBA is not set +# CONFIG_SERIAL_AMBA_CONSOLE is not set +# CONFIG_SERIAL_CLPS711X is not set +# CONFIG_SERIAL_CLPS711X_CONSOLE is not set +# CONFIG_SERIAL_21285 is not set +# CONFIG_SERIAL_21285_OLD is not set +# CONFIG_SERIAL_21285_CONSOLE is not set +# CONFIG_SERIAL_UART00 is not set +# CONFIG_SERIAL_UART00_CONSOLE is not set +# CONFIG_SERIAL_SA1100 is not set +# CONFIG_SERIAL_SA1100_CONSOLE is not set +# CONFIG_SERIAL_OMAHA is not set +# CONFIG_SERIAL_OMAHA_CONSOLE is not set +# CONFIG_SERIAL_AT91 is not set +# CONFIG_SERIAL_AT91_CONSOLE is not set +CONFIG_SERIAL_8250=y +CONFIG_SERIAL_8250_CONSOLE=y +CONFIG_SERIAL_8250_EXTENDED=y +CONFIG_SERIAL_8250_MANY_PORTS=y +# CONFIG_SERIAL_8250_SHARE_IRQ is not set +# CONFIG_SERIAL_8250_DETECT_IRQ is not set +# CONFIG_SERIAL_8250_MULTIPORT is not set +# CONFIG_SERIAL_8250_HUB6 is not set +CONFIG_SERIAL_CORE=y +CONFIG_SERIAL_CORE_CONSOLE=y CONFIG_UNIX98_PTYS=y CONFIG_UNIX98_PTY_COUNT=256 @@ -356,31 +389,40 @@ # CONFIG_I2C is not set # -# Mice +# L3 serial bus support # -# CONFIG_BUSMOUSE is not set -CONFIG_MOUSE=y -CONFIG_PSMOUSE=y -# CONFIG_82C710_MOUSE is not set -# CONFIG_PC110_PAD is not set +# CONFIG_L3 is not set +# CONFIG_L3_ALGOBIT is not set +# CONFIG_L3_BIT_SA1100_GPIO is not set +# CONFIG_L3_SA1111 is not set +# CONFIG_BIT_SA1100_GPIO is not set # -# Joysticks +# Mice # -# CONFIG_JOYSTICK is not set +# CONFIG_BUSMOUSE is not set +# CONFIG_MOUSE is not set # -# Input core support is needed for joysticks +# Joysticks # +# CONFIG_INPUT_GAMEPORT is not set # CONFIG_QIC02_TAPE is not set +# CONFIG_IPMI_HANDLER is not set +# CONFIG_IPMI_PANIC_EVENT is not set +# CONFIG_IPMI_DEVICE_INTERFACE is not set +# CONFIG_IPMI_KCS is not set +# CONFIG_IPMI_WATCHDOG is not set # # Watchdog Cards # # CONFIG_WATCHDOG is not set -# CONFIG_INTEL_RNG is not set +# CONFIG_SCx200_GPIO is not set +# CONFIG_AMD_PM768 is not set # CONFIG_NVRAM is not set # CONFIG_RTC is not set +# CONFIG_H7210_RTC is not set # CONFIG_DTLK is not set # CONFIG_R3964 is not set # CONFIG_APPLICOM is not set @@ -403,22 +445,37 @@ # CONFIG_QUOTA is not set # CONFIG_AUTOFS_FS is not set # CONFIG_AUTOFS4_FS is not set +# CONFIG_REISERFS_FS is not set +# CONFIG_REISERFS_CHECK is not set +# CONFIG_REISERFS_PROC_INFO is not set # CONFIG_ADFS_FS is not set # CONFIG_ADFS_FS_RW is not set # CONFIG_AFFS_FS is not set # CONFIG_HFS_FS is not set +# CONFIG_BEFS_FS is not set +# CONFIG_BEFS_DEBUG is not set # CONFIG_BFS_FS is not set +# CONFIG_EXT3_FS is not set +# CONFIG_JBD is not set +# CONFIG_JBD_DEBUG is not set # CONFIG_FAT_FS is not set # CONFIG_MSDOS_FS is not set # CONFIG_UMSDOS_FS is not set # CONFIG_VFAT_FS is not set # CONFIG_EFS_FS is not set # CONFIG_JFFS_FS is not set +# CONFIG_JFFS2_FS is not set # CONFIG_CRAMFS is not set -# CONFIG_RAMFS is not set +# CONFIG_TMPFS is not set +CONFIG_RAMFS=y # CONFIG_ISO9660_FS is not set # CONFIG_JOLIET is not set +# CONFIG_ZISOFS is not set +# CONFIG_JFS_FS is not set +# CONFIG_JFS_DEBUG is not set +# CONFIG_JFS_STATISTICS is not set # CONFIG_MINIX_FS is not set +# CONFIG_VXFS_FS is not set # CONFIG_NTFS_FS is not set # CONFIG_NTFS_RW is not set # CONFIG_HPFS_FS is not set @@ -429,10 +486,9 @@ CONFIG_DEVPTS_FS=y # CONFIG_QNX4FS_FS is not set # CONFIG_QNX4FS_RW is not set -CONFIG_ROMFS_FS=y +# CONFIG_ROMFS_FS is not set CONFIG_EXT2_FS=y # CONFIG_SYSV_FS is not set -# CONFIG_SYSV_FS_WRITE is not set # CONFIG_UDF_FS is not set # CONFIG_UDF_RW is not set # CONFIG_UFS_FS is not set @@ -442,13 +498,16 @@ # Network File Systems # # CONFIG_CODA_FS is not set +# CONFIG_INTERMEZZO_FS is not set CONFIG_NFS_FS=y -# CONFIG_NFS_V3 is not set +CONFIG_NFS_V3=y CONFIG_ROOT_NFS=y # CONFIG_NFSD is not set # CONFIG_NFSD_V3 is not set +# CONFIG_NFSD_TCP is not set CONFIG_SUNRPC=y CONFIG_LOCKD=y +CONFIG_LOCKD_V4=y # CONFIG_SMB_FS is not set # CONFIG_NCP_FS is not set # CONFIG_NCPFS_PACKET_SIGNING is not set @@ -457,10 +516,9 @@ # CONFIG_NCPFS_NFS_NS is not set # CONFIG_NCPFS_OS2_NS is not set # CONFIG_NCPFS_SMALLDOS is not set -# CONFIG_NCPFS_MOUNT_SUBDIR is not set -# CONFIG_NCPFS_NDS_DOMAINS is not set # CONFIG_NCPFS_NLS is not set # CONFIG_NCPFS_EXTRAS is not set +# CONFIG_ZISOFS_FS is not set # # Partition Types @@ -472,18 +530,18 @@ # CONFIG_ATARI_PARTITION is not set # CONFIG_MAC_PARTITION is not set # CONFIG_MSDOS_PARTITION is not set +# CONFIG_LDM_PARTITION is not set # CONFIG_SGI_PARTITION is not set # CONFIG_ULTRIX_PARTITION is not set # CONFIG_SUN_PARTITION is not set +# CONFIG_EFI_PARTITION is not set +# CONFIG_SMB_NLS is not set # CONFIG_NLS is not set # # Console drivers # -CONFIG_KMI_KEYB=y -CONFIG_PC_KEYMAP=y -CONFIG_VGA_CONSOLE=y -# CONFIG_FB is not set +# CONFIG_VGA_CONSOLE is not set # # Frame-buffer support @@ -491,9 +549,13 @@ # CONFIG_FB is not set # -# Sound +# Multimedia Capabilities Port drivers # -# CONFIG_SOUND is not set +# CONFIG_MCP is not set +# CONFIG_MCP_SA1100 is not set +# CONFIG_MCP_UCB1200 is not set +# CONFIG_MCP_UCB1200_AUDIO is not set +# CONFIG_MCP_UCB1200_TS is not set # # USB support @@ -501,11 +563,30 @@ # CONFIG_USB is not set # +# Bluetooth support +# +# CONFIG_BLUEZ is not set + +# # Kernel hacking # CONFIG_FRAME_POINTER=y -CONFIG_DEBUG_ERRORS=y CONFIG_DEBUG_USER=y # CONFIG_DEBUG_INFO is not set -CONFIG_MAGIC_SYSRQ=y -CONFIG_DEBUG_LL=y +# CONFIG_NO_PGT_CACHE is not set +# CONFIG_DEBUG_KERNEL is not set +# CONFIG_DEBUG_SLAB is not set +# CONFIG_MAGIC_SYSRQ is not set +# CONFIG_DEBUG_SPINLOCK is not set +# CONFIG_DEBUG_WAITQ is not set +# CONFIG_DEBUG_BUGVERBOSE is not set +# CONFIG_DEBUG_ERRORS is not set +# CONFIG_DEBUG_LL is not set +# CONFIG_DEBUG_DC21285_PORT is not set +# CONFIG_DEBUG_CLPS711X_UART2 is not set + +# +# Library routines +# +CONFIG_ZLIB_INFLATE=y +CONFIG_ZLIB_DEFLATE=y diff -urN linux-2.4.21/arch/arm/kernel/debug-armv.S linux-2.4.21-h7210/arch/arm/kernel/debug-armv.S --- linux-2.4.21/arch/arm/kernel/debug-armv.S 2004-06-14 07:54:00.000000000 +0900 +++ linux-2.4.21-h7210/arch/arm/kernel/debug-armv.S 2004-06-14 02:53:07.000000000 +0900 @@ -470,6 +470,35 @@ +#elif defined(CONFIG_ARCH_H7210) + + .equ io_virt, IO_VIRT + .equ io_phys, IO_PHYS + + .macro addruart,rx + mrc p15, 0, \rx, c1, c0 + tst \rx, #1 @ MMU enabled? + moveq \rx, #io_phys @ physical base address + movne \rx, #io_virt @ virtual address + add \rx, \rx, #0x00055000 @ UART1 + .endm + + .macro senduart,rd,rx + str \rd, [\rx, #0x0] @ UARTDR + + .endm + + .macro waituart,rd,rx +1001: ldr \rd, [\rx, #0x18] @ UARTFLG + tst \rd, #1 << 5 @ UARTFLGUTXFF - 1 when full + bne 1001b + .endm + + .macro busyuart,rd,rx +1001: ldr \rd, [\rx, #0x18] @ UARTFLG + tst \rd, #1 << 3 @ UARTFLGUBUSY - 1 when busy + bne 1001b + .endm #else #error Unknown architecture #endif diff -urN linux-2.4.21/arch/arm/kernel/entry-armv.S linux-2.4.21-h7210/arch/arm/kernel/entry-armv.S --- linux-2.4.21/arch/arm/kernel/entry-armv.S 2004-06-14 07:54:00.000000000 +0900 +++ linux-2.4.21-h7210/arch/arm/kernel/entry-armv.S 2004-06-14 02:53:38.000000000 +0900 @@ -615,6 +615,44 @@ .text .endm +#elif defined(CONFIG_ARCH_H7210) + + .macro disable_fiq + .endm + + .macro get_irqnr_and_base, irqnr, irqstat, base, tmp + mov \base, #0xf0000000 @ base register + orr \base, \base, #0x50000 @ irqbase + ldr \irqstat, [\base, #0x08] @ get interrupt status + + mvn \tmp, #0xe0000000 + + and \irqstat, \irqstat, \tmp @ mask out unused ints + mov \irqnr, #0 + + mov \tmp, #0xff00 + orr \tmp, \tmp, #0xff + tst \irqstat, \tmp + addeq \irqnr, \irqnr, #16 + moveq \irqstat, \irqstat, lsr #16 + tst \irqstat, #255 + addeq \irqnr, \irqnr, #8 + moveq \irqstat, \irqstat, lsr #8 + tst \irqstat, #15 + addeq \irqnr, \irqnr, #4 + moveq \irqstat, \irqstat, lsr #4 + tst \irqstat, #3 + addeq \irqnr, \irqnr, #2 + moveq \irqstat, \irqstat, lsr #2 + tst \irqstat, #1 + addeq \irqnr, \irqnr, #1 + moveq \irqstat, \irqstat, lsr #1 + tst \irqstat, #1 @ bit 0 should be set + .endm + + .macro irq_prio_table + .endm + #else #error Unknown architecture #endif diff -urN linux-2.4.21/arch/arm/kernel/Makefile linux-2.4.21-h7210/arch/arm/kernel/Makefile --- linux-2.4.21/arch/arm/kernel/Makefile 2004-06-14 07:54:00.000000000 +0900 +++ linux-2.4.21-h7210/arch/arm/kernel/Makefile 2004-06-14 02:55:42.000000000 +0900 @@ -45,7 +45,7 @@ $(CONFIG_FOOTBRIDGE) $(CONFIG_ARCH_EBSA110) \ $(CONFIG_ARCH_SA1100) $(CONFIG_ARCH_CAMELOT) \ $(CONFIG_ARCH_MX1ADS) $(CONFIG_ARCH_OMAHA) \ - $(CONFIG_ARCH_AT91RM9200) + $(CONFIG_ARCH_AT91RM9200) $(CONFIG_ARCH_H7210) ifneq ($(findstring y,$(no-irq-arch)),y) obj-y += irq-arch.o diff -urN linux-2.4.21/arch/arm/mach-h7210/arch.c linux-2.4.21-h7210/arch/arm/mach-h7210/arch.c --- linux-2.4.21/arch/arm/mach-h7210/arch.c 1970-01-01 09:00:00.000000000 +0900 +++ linux-2.4.21-h7210/arch/arm/mach-h7210/arch.c 2004-05-24 01:35:38.000000000 +0900 @@ -0,0 +1,61 @@ +/* + * linux/arch/arm/mach-h7210/h7210.c + * + * Copyright ((C) 2004 SungJe Park, Hynix Semiconductor Inc. + * + * Architecture specific stuff for Hynix HMS30C7210 development board + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + */ + +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +extern void genarch_init_irq(void); + +static int __init init_hw_h7210(void) +{ + /* Enable interrupt on portb bit 15 (ethernet) */ + CPU_IO (GPIO_EPOL_VIRT) &= ~(1 << 15); + CPU_IO (GPIO_EEN_VIRT) |= (1 << 15); + return 0; +} +__initcall(init_hw_h7210); + + + +/* Board deoendend defines */ +static struct map_desc h7210_io_desc[] __initdata = { + { IO_VIRT, IO_PHYS, IO_SIZE, DOMAIN_IO, 0, 1, 0, 0 }, + { ETH0_VIRT, ETH0_PHYS, ETH0_SIZE, DOMAIN_IO, 0, 1, 0, 0 }, + LAST_DESC +}; + +/* Initialize io tables */ +void __init h7210_map_io(void) +{ + iotable_init(h7210_io_desc); +} + +MACHINE_START(H7210, "Hynix HMS30C7210") + MAINTAINER(", Hynix Inc.") + BOOT_MEM(0x40000000, 0x80000000, 0xf0000000) + BOOT_PARAMS(0xc0001000) + MAPIO(h7210_map_io) + INITIRQ(h7210_init_irq) +MACHINE_END diff -urN linux-2.4.21/arch/arm/mach-h7210/irq.c linux-2.4.21-h7210/arch/arm/mach-h7210/irq.c --- linux-2.4.21/arch/arm/mach-h7210/irq.c 1970-01-01 09:00:00.000000000 +0900 +++ linux-2.4.21-h7210/arch/arm/mach-h7210/irq.c 2004-05-12 07:02:47.000000000 +0900 @@ -0,0 +1,387 @@ +/* + * linux/arch/arm/mach-h7210/irq.c + * + * Copyright (C) 2004 SungJe Park, Hynix Semiconductor Inc. + * + * Generic IRQ handling for the hynix HMS30C7210 cpu development board + * + * These cpu's have multiplexed irq's. We convert them to unique numbers + * in fixup irq. I found this more conveniant, than providing 6 demux + * handlers. They have seperate mask, mask_ack and unmask functions The + * corresponding global interrupt is unmasked after mask_ack / mask of + * the real interrupt source. This way we make sure, that other + * interrupts on this shared global int are serviced too. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + */ + +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +/* + * mask Global irq's + */ +static void h7210_mask_glbl_irq (unsigned int irq ) +{ + CPU_IO (INTC_ENABLE_VIRT) &= ~(1 << irq); +} + +/* + * unmask Global irq's + */ +static void h7210_unmask_glbl_irq (unsigned int irq ) +{ + CPU_IO (INTC_ENABLE_VIRT) |= (1 << irq); +} + +/* + * mask and ack GPIO irq's + * Ack only for edge triggered int's valid + */ +static void inline mask_and_ack_gpio_irq(u32 reg_base, u32 msk) +{ + CPU_REG (reg_base, GPIO_MASK) &= ~msk; + if ( (CPU_REG (reg_base, GPIO_EDGE) & msk)) + CPU_REG (reg_base, GPIO_CLR) = msk; +} + +/* + * mask GPIO irq's + */ +static void inline mask_gpio_irq(u32 reg_base, u32 msk) +{ + CPU_REG (reg_base, GPIO_MASK) &= ~msk; +} + +/* + * unmask GPIO irq's + */ +static void inline unmask_gpio_irq(u32 reg_base, u32 msk) +{ + CPU_REG (reg_base, GPIO_MASK) |= msk; +} + +/* + * Mask and ack interrupts + */ +static void h7210_mask_and_ack_irq (unsigned int irq ) +{ + u32 mask, base; + + + /* Global IRQ */ + if (irq < IRQ_MUX_GPIOA(0)) { + printk (KERN_WARNING "Global int in mask_and_ack multiplexed irq: %d\n", irq); + h7210_mask_glbl_irq (irq); + return; + } + + /* GPIOA IRQ's */ + if (irq < IRQ_MUX_GPIOB(0)) { + h7210_mask_glbl_irq (IRQ_GPIOA); + base = GPIO_A_VIRT; + mask = 1 << (irq - IRQ_MUX_GPIOA(0)); + mask_and_ack_gpio_irq (base, mask); + h7210_unmask_glbl_irq (IRQ_GPIOA); + return; + } + + /* GPIOB IRQ's */ + if (irq < IRQ_MUX_GPIOC(0)) { + h7210_mask_glbl_irq (IRQ_GPIOB); + base = GPIO_B_VIRT; + mask = 1 << (irq - IRQ_MUX_GPIOB(0)); + mask_and_ack_gpio_irq (base, mask); + h7210_unmask_glbl_irq (IRQ_GPIOB); + return; + } + + /* GPIOC IRQ's */ + if (irq < IRQ_MUX_GPIOD(0)) { + h7210_mask_glbl_irq (IRQ_GPIOC); + base = GPIO_C_VIRT; + mask = 1 << (irq - IRQ_MUX_GPIOC(0)); + mask_and_ack_gpio_irq (base, mask); + h7210_unmask_glbl_irq (IRQ_GPIOC); + return; + } + + /* GPIOD IRQ's */ + if (irq < IRQ_MUX_GPIOE(0)) { + h7210_mask_glbl_irq (IRQ_GPIOD); + base = GPIO_D_VIRT; + mask = 1 << (irq - IRQ_MUX_GPIOD(0)); + mask_and_ack_gpio_irq (base, mask); + h7210_unmask_glbl_irq (IRQ_GPIOD); + return; + } + + /* GPIOE IRQ's */ + if (irq < (NR_IRQS + 1)) { + h7210_mask_glbl_irq (IRQ_GPIOE); + base = GPIO_E_VIRT; + mask = 1 << (irq - IRQ_MUX_GPIOE(0)); + mask_and_ack_gpio_irq (base, mask); + h7210_unmask_glbl_irq (IRQ_GPIOE); + return; + } +} + +/* + * Mask multiplexed interrupts + */ +static void h7210_mask_irq (unsigned int irq ) +{ + u32 mask, base; + + /* Global IRQ */ + if (irq < IRQ_MUX_GPIOA(0)) { + printk (KERN_WARNING "Global int in mask multiplexed irq: %d\n", irq); + h7210_mask_glbl_irq (irq); + return; + } + + /* GPIOA IRQ's */ + if (irq < IRQ_MUX_GPIOB(0)) { + h7210_mask_glbl_irq (IRQ_GPIOA); + base = GPIO_A_VIRT; + mask = 1 << (irq - IRQ_MUX_GPIOA(0)); + mask_gpio_irq (base, mask); + h7210_unmask_glbl_irq (IRQ_GPIOA); + return; + } + + /* GPIOB IRQ's */ + if (irq < IRQ_MUX_GPIOC(0)) { + h7210_mask_glbl_irq (IRQ_GPIOB); + base = GPIO_B_VIRT; + mask = 1 << (irq - IRQ_MUX_GPIOB(0)); + mask_gpio_irq (base, mask); + h7210_unmask_glbl_irq (IRQ_GPIOB); + return; + } + + /* GPIOC IRQ's */ + if (irq < IRQ_MUX_GPIOD(0)) { + h7210_mask_glbl_irq (IRQ_GPIOC); + base = GPIO_C_VIRT; + mask = 1 << (irq - IRQ_MUX_GPIOC(0)); + mask_gpio_irq (base, mask); + h7210_unmask_glbl_irq (IRQ_GPIOC); + return; + } + + /* GPIOD IRQ's */ + if (irq < IRQ_MUX_GPIOE(0)) { + h7210_mask_glbl_irq (IRQ_GPIOD); + base = GPIO_D_VIRT; + mask = 1 << (irq - IRQ_MUX_GPIOD(0)); + mask_gpio_irq (base, mask); + h7210_unmask_glbl_irq (IRQ_GPIOD); + return; + } + + /* GPIOE IRQ's */ + if (irq < (NR_IRQS + 1)) { + h7210_mask_glbl_irq (IRQ_GPIOE); + base = GPIO_E_VIRT; + mask = 1 << (irq - IRQ_MUX_GPIOE(0)); + mask_gpio_irq (base, mask); + h7210_unmask_glbl_irq (IRQ_GPIOE); + return; + } +} + +/* + * Unmask multiplexed interrupts + */ +static void h7210_unmask_irq (unsigned int irq ) +{ + u32 mask, base; + + /* Global IRQ */ + if (irq < IRQ_MUX_GPIOA(0)) { + printk (KERN_WARNING "Global int in unmask multiplexed irq: %d\n", irq); + h7210_unmask_glbl_irq (irq); + return; + } + + /* GPIOA IRQ's */ + if (irq < IRQ_MUX_GPIOB(0)) { + base = GPIO_A_VIRT; + mask = 1 << (irq - IRQ_MUX_GPIOA(0)); + unmask_gpio_irq (base, mask); + return; + } + + /* GPIOB IRQ's */ + if (irq < IRQ_MUX_GPIOC(0)) { + base = GPIO_B_VIRT; + mask = 1 << (irq - IRQ_MUX_GPIOB(0)); + unmask_gpio_irq (base, mask); + return; + } + + /* GPIOC IRQ's */ + if (irq < IRQ_MUX_GPIOD(0)) { + base = GPIO_C_VIRT; + mask = 1 << (irq - IRQ_MUX_GPIOC(0)); + unmask_gpio_irq (base, mask); + return; + } + + /* GPIOD IRQ's */ + if (irq < IRQ_MUX_GPIOE(0)) { + base = GPIO_D_VIRT; + mask = 1 << (irq - IRQ_MUX_GPIOD(0)); + unmask_gpio_irq (base, mask); + return; + } + + /* GPIOE IRQ's */ + if (irq < (NR_IRQS + 1)) { + base = GPIO_E_VIRT; + mask = 1 << (irq - IRQ_MUX_GPIOE(0)); + unmask_gpio_irq (base, mask); + return; + } +} + + +/* + * Check for multiplexed irqs and provide demultiplexing + */ +int fixup_irq (unsigned int irq) +{ + int i, glblirq = irq; + u32 status, statp; + + switch (irq) { + + case IRQ_GPIOA: + irq = IRQ_MUX_GPIOA(0); + statp = GPIO_A_VIRT + GPIO_STAT; + break; + + case IRQ_GPIOB: + irq = IRQ_MUX_GPIOB(0); + statp = GPIO_B_VIRT + GPIO_STAT; + break; + + case IRQ_GPIOC: + irq = IRQ_MUX_GPIOC(0); + statp = GPIO_C_VIRT + GPIO_STAT; + break; + + case IRQ_GPIOD: + irq = IRQ_MUX_GPIOD(0); + statp = GPIO_D_VIRT + GPIO_STAT; + break; + + case IRQ_GPIOE: + irq = IRQ_MUX_GPIOE(0); + statp = GPIO_E_VIRT + GPIO_STAT; + break; + + default: + /* No fixup for non multiplexed irq's */ + return irq; + } + + /* Read corresponding status reg */ + status = CPU_IO (statp); + + /* Find the source of this irq, if none, return an invalid number */ + i = ffs (status); + if (i) + return irq + i - 1; + + /* Should not happen, a global was triggered, but the source is gone */ + + switch (glblirq) { + case IRQ_GPIOA: + h7210_mask_glbl_irq (IRQ_GPIOA); + h7210_unmask_glbl_irq (IRQ_GPIOA); + break; + + case IRQ_GPIOB: + h7210_mask_glbl_irq (IRQ_GPIOB); + h7210_unmask_glbl_irq (IRQ_GPIOB); + break; + + case IRQ_GPIOC: + h7210_mask_glbl_irq (IRQ_GPIOC); + h7210_unmask_glbl_irq (IRQ_GPIOC); + break; + + case IRQ_GPIOD: + h7210_mask_glbl_irq (IRQ_GPIOD); + h7210_unmask_glbl_irq (IRQ_GPIOD); + break; + + case IRQ_GPIOE: + h7210_mask_glbl_irq (IRQ_GPIOE); + h7210_unmask_glbl_irq (IRQ_GPIOE); + break; + + default: + break; + } + // return an invalid one + return NR_IRQS + 1; + +} + + +/* + * Initialize IRQ's, mask all, enable multiplexed irq's + */ +void __init h7210_init_irq (void) +{ + int irq; + + /* Mask global irq's */ + CPU_IO (INTC_ENABLE_VIRT) = 0x0; + + /* Mask all multiplexed irq's */ + mask_gpio_irq (GPIO_A_VIRT, ~0x0); + mask_gpio_irq (GPIO_B_VIRT, ~0x0); + mask_gpio_irq (GPIO_C_VIRT, ~0x0); + mask_gpio_irq (GPIO_D_VIRT, ~0x0); + mask_gpio_irq (GPIO_E_VIRT, ~0x0); + + /* Initialize global IRQ's, fast path */ + + for (irq = 0; irq < NR_GLBL_IRQS; irq++) { + irq_desc[irq].valid = 1; + irq_desc[irq].probe_ok = 1; + irq_desc[irq].mask_ack = h7210_mask_glbl_irq; + irq_desc[irq].mask = h7210_mask_glbl_irq; + irq_desc[irq].unmask = h7210_unmask_glbl_irq; + } + + /* Initialize multiplexed IRQ's, slow path */ + for (; irq < NR_IRQS; irq++) { + irq_desc[irq].valid = 1; + irq_desc[irq].probe_ok = 0; + irq_desc[irq].mask_ack = h7210_mask_and_ack_irq; + irq_desc[irq].mask = h7210_mask_irq; + irq_desc[irq].unmask = h7210_unmask_irq; + } + + /* Enable multiplexed irq's */ + CPU_IO (INTC_ENABLE_VIRT) = IRQ_ENA_MUX; +} diff -urN linux-2.4.21/arch/arm/mach-h7210/Makefile linux-2.4.21-h7210/arch/arm/mach-h7210/Makefile --- linux-2.4.21/arch/arm/mach-h7210/Makefile 1970-01-01 09:00:00.000000000 +0900 +++ linux-2.4.21-h7210/arch/arm/mach-h7210/Makefile 2004-04-07 11:46:24.000000000 +0900 @@ -0,0 +1,21 @@ +# +# Makefile for the linux kernel. +# +# Note! Dependencies are done automagically by 'make dep', which also +# removes any old dependencies. DON'T put your own dependencies here +# unless it's something special (ie not a .c file). + +USE_STANDARD_AS_RULE := true + +O_TARGET := h7210.o + +# Object file lists. + +obj-y := arch.o irq.o time.o +obj-m := +obj-n := +obj- := + +export-objs := + +include $(TOPDIR)/Rules.make diff -urN linux-2.4.21/arch/arm/mach-h7210/time.c linux-2.4.21-h7210/arch/arm/mach-h7210/time.c --- linux-2.4.21/arch/arm/mach-h7210/time.c 1970-01-01 09:00:00.000000000 +0900 +++ linux-2.4.21-h7210/arch/arm/mach-h7210/time.c 2004-01-28 19:36:32.000000000 +0900 @@ -0,0 +1,51 @@ +/* + * linux/arch/arm/mach-h7210/time.c + * + * Copyright (C) 2003 Thomas Gleixner tglx@linutronix.de + * 2003 Robert Schwebel + * 2004 SungJe Park, Hynix Semiconductor Inc. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * 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, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * TODO: Functions for RTC + * + */ +#include +#include +#include +#include + +extern unsigned long (*gettimeoffset)(void); + +/* + * Return usecs since last timer reload + * (timercount * (usecs perjiffie)) / (ticks per jiffie) + */ +static unsigned long h7210_gettimeoffset(void) +{ + return (CPU_IO (TIMER_T0COUNT_VIRT) * tick) / LATCH; +} + +/* + * Setup TIMER0 as system timer + */ +void __init h7210_setup_timer(void) +{ + gettimeoffset = h7210_gettimeoffset; + + CPU_IO (TIMER_T0BASE_VIRT) = LATCH; + CPU_IO (TIMER_T0CTRL_VIRT) = TIMER_CTRL_REPEAT_MODE | TIMER_CTRL_COUNT_ENABLE; + CPU_IO (TIMER_TOPCTRL_VIRT) = TIMER_TOCTRL_TIMER_0_INTR_EN|TIMER_TOCTRL_POWER_DOWN; + +} diff -urN linux-2.4.21/arch/arm/Makefile linux-2.4.21-h7210/arch/arm/Makefile --- linux-2.4.21/arch/arm/Makefile 2004-06-14 07:53:57.000000000 +0900 +++ linux-2.4.21-h7210/arch/arm/Makefile 2004-06-14 02:57:57.000000000 +0900 @@ -164,6 +164,10 @@ MACHINE = omaha endif +ifeq ($(CONFIG_ARCH_H7210),y) +MACHINE = h7210 +endif + export MACHINE PROCESSOR TEXTADDR GZFLAGS CFLAGS_BOOT OBJCOPYFLAGS # Only set INCDIR if its not already defined above diff -urN linux-2.4.21/arch/arm/tools/mach-types linux-2.4.21-h7210/arch/arm/tools/mach-types --- linux-2.4.21/arch/arm/tools/mach-types 2004-06-14 07:54:07.000000000 +0900 +++ linux-2.4.21-h7210/arch/arm/tools/mach-types 2004-01-29 10:01:14.000000000 +0900 @@ -6,7 +6,7 @@ # To add an entry into this database, please see Documentation/arm/README, # or contact rmk@arm.linux.org.uk # -# Last update: Wed Jul 16 16:34:00 2003 +# Last update: Thu Jan 29 01:02:00 2004 # # machine_is_xxx CONFIG_xxxx MACH_TYPE_xxx number # @@ -202,7 +202,7 @@ fester SA1100_FESTER FESTER 191 gpi ARCH_GPI GPI 192 smdk2410 ARCH_SMDK2410 SMDK2410 193 -premium ARCH_PREMIUM PREMIUM 194 +i519 ARCH_I519 I519 194 nexio SA1100_NEXIO NEXIO 195 bitbox SA1100_BITBOX BITBOX 196 g200 SA1100_G200 G200 197 @@ -228,7 +228,7 @@ arnold SA1100_ARNOLD ARNOLD 217 psiboard SA1100_PSIBOARD PSIBOARD 218 jz8028 ARCH_JZ8028 JZ8028 219 -h5400 ARCH_IPAQ3 IPAQ3 220 +h5400 ARCH_H5400 H5400 220 forte SA1100_FORTE FORTE 221 acam SA1100_ACAM ACAM 222 abox SA1100_ABOX ABOX 223 @@ -259,7 +259,7 @@ stork_egg ARCH_STORK_EGG STORK_EGG 248 wismo SA1100_WISMO WISMO 249 ezlinx ARCH_EZLINX EZLINX 250 -at91rm9200 ARCH_AT91 AT91 251 +at91rm9200 ARCH_AT91RM9200 AT91RM9200 251 orion ARCH_ORION ORION 252 neptune ARCH_NEPTUNE NEPTUNE 253 hackkit SA1100_HACKKIT HACKKIT 254 @@ -363,3 +363,93 @@ ixrd425 ARCH_IXRD425 IXRD425 352 iq80315 ARCH_IQ80315 IQ80315 353 nmp7312 ARCH_NMP7312 NMP7312 354 +cx861xx ARCH_CX861XX CX861XX 355 +enp2611 ARCH_ENP2611 ENP2611 356 +xda SA1100_XDA XDA 357 +csir_ims ARCH_CSIR_IMS CSIR_IMS 358 +ixp421_dnaeeth ARCH_IXP421_DNAEETH IXP421_DNAEETH 359 +pocketserv9200 ARCH_POCKETSERV9200 POCKETSERV9200 360 +toto ARCH_TOTO TOTO 361 +s3c2440 ARCH_S3C2440 S3C2440 362 +ks8695p ARCH_KS8695P KS8695P 363 +se4000 ARCH_SE4000 SE4000 364 +quadriceps ARCH_QUADRICEPS QUADRICEPS 365 +bronco ARCH_BRONCO BRONCO 366 +esl_wireless_tab ARCH_ESL_WIRELESS_TABLETESL_WIRELESS_TABLET 367 +esl_sofcomp ARCH_ESL_SOFCOMP ESL_SOFCOMP 368 +s5c7375 ARCH_S5C7375 S5C7375 369 +spearhead ARCH_SPEARHEAD SPEARHEAD 370 +pantera ARCH_PANTERA PANTERA 371 +prayoglite ARCH_PRAYOGLITE PRAYOGLITE 372 +gumstik ARCH_GUMSTIK GUMSTIK 373 +rcube ARCH_RCUBE RCUBE 374 +rea_olv ARCH_REA_OLV REA_OLV 375 +pxa_iphone ARCH_PXA_IPHONE PXA_IPHONE 376 +s3c3410 ARCH_S3C3410 S3C3410 377 +espd_4510b ARCH_ESPD_4510B ESPD_4510B 378 +mp1x ARCH_MP1X MP1X 379 +at91rm9200tb ARCH_AT91RM9200TB AT91RM9200TB 380 +adsvgx ARCH_ADSVGX ADSVGX 381 +omap1610 ARCH_OMAP1610 OMAP1610 382 +pelee ARCH_PELEE PELEE 383 +e7xx ARCH_E7XX E7XX 384 +iq80331 ARCH_IQ80331 IQ80331 385 +versatile_pb ARCH_VERSATILE_PB VERSATILE_PB 387 +kev7a400 MACH_KEV7A400 KEV7A400 388 +lpd7a400 MACH_LPD7A400 LPD7A400 389 +lpd7a404 MACH_LPD7A404 LPD7A404 390 +fujitsu_camelot ARCH_FUJITSU_CAMELOT FUJITSU_CAMELOT 391 +janus2m ARCH_JANUS2M JANUS2M 392 +embtf MACH_EMBTF EMBTF 393 +hpm MACH_HPM HPM 394 +smdk2410tk MACH_SMDK2410TK SMDK2410TK 395 +smdk2410aj MACH_SMDK2410AJ SMDK2410AJ 396 +streetracer MACH_STREETRACER STREETRACER 397 +eframe MACH_EFRAME EFRAME 398 +csb337 MACH_CSB337 CSB337 399 +pxa_lark MACH_PXA_LARK PXA_LARK 400 +pxa_pnp2110 MACH_PNP2110 PNP2110 401 +tcc72x MACH_TCC72X TCC72X 402 +altair MACH_ALTAIR ALTAIR 403 +kc3 MACH_KC3 KC3 404 +sinteftd MACH_SINTEFTD SINTEFTD 405 +mainstone MACH_MAINSTONE MAINSTONE 406 +aday4x MACH_ADAY4X ADAY4X 407 +lite300 MACH_LITE300 LITE300 408 +s5c7376 MACH_S5C7376 S5C7376 409 +mt02 MACH_MT02 MT02 410 +mport3s MACH_MPORT3S MPORT3S 411 +ra_alpha MACH_RA_ALPHA RA_ALPHA 412 +xcep MACH_XCEP XCEP 413 +arcom_mercury MACH_ARCOM_MERCURY ARCOM_MERCURY 414 +stargate MACH_STARGATE STARGATE 415 +armadilloj MACH_ARMADILLOJ ARMADILLOJ 416 +elroy_jack MACH_ELROY_JACK ELROY_JACK 417 +backend MACH_BACKEND BACKEND 418 +s5linbox MACH_S5LINBOX S5LINBOX 419 +nomadik MACH_NOMADIK NOMADIK 420 +ia_cpu_9200 MACH_IA_CPU_9200 IA_CPU_9200 421 +at91_bja1 MACH_AT91_BJA1 AT91_BJA1 422 +corgi MACH_CORGI CORGI 423 +poodle MACH_POODLE POODLE 424 +ten MACH_TEN TEN 425 +roverp5p MACH_ROVERP5P ROVERP5P 426 +sc2700 MACH_SC2700 SC2700 427 +ex_eagle MACH_EX_EAGLE EX_EAGLE 428 +nx_pxa12 MACH_NX_PXA12 NX_PXA12 429 +nx_pxa5 MACH_NX_PXA5 NX_PXA5 430 +blackboard2 MACH_BLACKBOARD2 BLACKBOARD2 431 +i819 MACH_I819 I819 432 +ixmb995e MACH_IXMB995E IXMB995E 433 +skyrider MACH_SKYRIDER SKYRIDER 434 +skyhawk MACH_SKYHAWK SKYHAWK 435 +enterprise MACH_ENTERPRISE ENTERPRISE 436 +dep2410 MACH_DEP2410 DEP2410 437 +armcore MACH_ARMCORE ARMCORE 438 +hobbit MACH_HOBBIT HOBBIT 439 +h7210 MACH_H7210 H7210 440 +pxa_netdcu5 MACH_PXA_NETDCU5 PXA_NETDCU5 441 +acc MACH_ACC ACC 442 +esl_sarva MACH_ESL_SARVA ESL_SARVA 443 +xm250 MACH_XM250 XM250 444 +t6tc1xb MACH_T6TC1XB T6TC1XB 445 diff -urN linux-2.4.21/drivers/char/Config.in linux-2.4.21-h7210/drivers/char/Config.in --- linux-2.4.21/drivers/char/Config.in 2004-06-14 07:54:08.000000000 +0900 +++ linux-2.4.21-h7210/drivers/char/Config.in 2004-06-14 03:19:48.000000000 +0900 @@ -136,6 +136,24 @@ if [ "$CONFIG_ARCH_AT91RM9200" = "y" ]; then tristate 'AT91RM9200 SPI device interface' CONFIG_AT91_SPIDEV fi +if [ "$CONFIG_ARCH_H7210" = "y" ]; then + bool 'Hynix Matrix Keyboard driver' CONFIG_H7210_MATRIXKBD + tristate 'Hynix Touchscreen driver' CONFIG_H7210_TOUCH + dep_bool 'Hynix 7210 Printer support' CONFIG_H7210_PRINTER $CONFIG_ARCH_H7210 + if [ "$CONFIG_H7210_PRINTER" = "y" ]; then + choice 'H7210 Printer Selection' \ + "Dot-Printer CONFIG_H7210_PRNTYPE1 \ + Thermal-Printer CONFIG_H7210_PRNTYPE2" + fi + dep_bool 'Hynix 7210 MSR support' CONFIG_H7210_MSR $CONFIG_ARCH_H7210 + if [ "$CONFIG_H7210_MSR" = "y" ]; then + choice 'H7210 MSR Selection' \ + "GPIO CONFIG_H7210_MSRTYPE1 \ + SSI CONFIG_H7210_MSRTYPE2" + fi + tristate 'Hynix Front panel LCD driver' CONFIG_H7210_BLCD + +fi source drivers/serial/Config.in @@ -281,6 +299,9 @@ if [ "$CONFIG_ARCH_SA1100" = "y" ]; then tristate 'SA1100 Real Time Clock' CONFIG_SA1100_RTC fi +if [ "$CONFIG_ARCH_H7210" = "y" ]; then + tristate 'Hms30c7210 Real Time Clock' CONFIG_H7210_RTC +fi if [ "$CONFIG_ARCH_OMAHA" = "y" ]; then tristate 'Omaha Real Time Clock' CONFIG_OMAHA_RTC fi diff -urN linux-2.4.21/drivers/char/defkeymap-hynix.c linux-2.4.21-h7210/drivers/char/defkeymap-hynix.c --- linux-2.4.21/drivers/char/defkeymap-hynix.c 1970-01-01 09:00:00.000000000 +0900 +++ linux-2.4.21-h7210/drivers/char/defkeymap-hynix.c 2004-01-15 11:37:13.000000000 +0900 @@ -0,0 +1,262 @@ +/* Do not edit this file! It was automatically generated by */ +/* loadkeys --mktable defkeymap.map > defkeymap.c */ + +#include +#include +#include + +u_short plain_map[NR_KEYS] = { + 0xf01b, 0xf100, 0xf101, 0xf102, 0xf103, 0xf104, 0xf105, 0xf106, + 0xf107, 0xf108, 0xf109, 0xf10a, 0xf10b, 0xf200, 0xf209, 0xf205, + 0xf060, 0xf031, 0xf032, 0xf033, 0xf034, 0xf035, 0xf036, 0xf037, + 0xf038, 0xf039, 0xf030, 0xf02d, 0xf03d, 0xf0a3, 0xf07f, 0xf115, + 0xf114, 0xf118, 0xf208, 0xf30d, 0xf30c, 0xf314, 0xf009, 0xfb71, + 0xfb77, 0xfb65, 0xfb72, 0xfb74, 0xfb79, 0xfb75, 0xfb69, 0xfb6f, + 0xfb70, 0xf05b, 0xf05d, 0xf05c, 0xf116, 0xf117, 0xf119, 0xf307, + 0xf308, 0xf309, 0xf30b, 0xf702, 0xfb61, 0xfb73, 0xfb64, 0xfb66, + 0xfb67, 0xfb68, 0xfb6a, 0xfb6b, 0xfb6c, 0xf03b, 0xf027, 0xf201, + 0xf304, 0xf305, 0xf306, 0xf30a, 0xf700, 0xf200, 0xfb7a, 0xfb78, + 0xfb63, 0xfb76, 0xfb62, 0xfb6e, 0xfb6d, 0xf02c, 0xf02e, 0xf02f, + 0xf700, 0xf603, 0xf301, 0xf302, 0xf303, 0xf207, 0xf703, 0xf020, + 0xf701, 0xf702, 0xf601, 0xf600, 0xf602, 0xf300, 0xf310, 0xf30e, + 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, + 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, + 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, +}; + +u_short shift_map[NR_KEYS] = { + 0xf01b, 0xf10a, 0xf10b, 0xf10c, 0xf10d, 0xf10e, 0xf10f, 0xf110, + 0xf111, 0xf112, 0xf113, 0xf10a, 0xf10b, 0xf200, 0xf203, 0xf205, + 0xf07e, 0xf021, 0xf040, 0xf023, 0xf024, 0xf025, 0xf05e, 0xf026, + 0xf02a, 0xf028, 0xf029, 0xf05f, 0xf02b, 0xf0a4, 0xf07f, 0xf115, + 0xf114, 0xf20b, 0xf208, 0xf30d, 0xf30c, 0xf314, 0xf009, 0xfb51, + 0xfb57, 0xfb45, 0xfb52, 0xfb54, 0xfb59, 0xfb55, 0xfb49, 0xfb4f, + 0xfb50, 0xf07b, 0xf07d, 0xf07c, 0xf116, 0xf117, 0xf20a, 0xf307, + 0xf308, 0xf309, 0xf30b, 0xf702, 0xfb41, 0xfb53, 0xfb44, 0xfb46, + 0xfb47, 0xfb48, 0xfb4a, 0xfb4b, 0xfb4c, 0xf03a, 0xf022, 0xf201, + 0xf304, 0xf305, 0xf306, 0xf30a, 0xf700, 0xf200, 0xfb5a, 0xfb58, + 0xfb43, 0xfb56, 0xfb42, 0xfb4e, 0xfb4d, 0xf03c, 0xf03e, 0xf03f, + 0xf700, 0xf603, 0xf301, 0xf302, 0xf303, 0xf207, 0xf703, 0xf020, + 0xf701, 0xf702, 0xf601, 0xf600, 0xf602, 0xf300, 0xf310, 0xf30e, + 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, + 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, + 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, +}; + +u_short altgr_map[NR_KEYS] = { + 0xf200, 0xf50c, 0xf50d, 0xf50e, 0xf50f, 0xf510, 0xf511, 0xf512, + 0xf513, 0xf514, 0xf515, 0xf516, 0xf517, 0xf200, 0xf202, 0xf205, + 0xf200, 0xf200, 0xf040, 0xf200, 0xf024, 0xf200, 0xf200, 0xf07b, + 0xf05b, 0xf05d, 0xf07d, 0xf05c, 0xf200, 0xf200, 0xf200, 0xf115, + 0xf114, 0xf118, 0xf208, 0xf30d, 0xf30c, 0xf314, 0xf200, 0xfb71, + 0xfb77, 0xf918, 0xfb72, 0xfb74, 0xfb79, 0xfb75, 0xfb69, 0xfb6f, + 0xfb70, 0xf200, 0xf07e, 0xf200, 0xf116, 0xf117, 0xf119, 0xf911, + 0xf912, 0xf913, 0xf30b, 0xf702, 0xf914, 0xfb73, 0xf917, 0xf919, + 0xfb67, 0xfb68, 0xfb6a, 0xfb6b, 0xfb6c, 0xf200, 0xf200, 0xf201, + 0xf90e, 0xf90f, 0xf910, 0xf30a, 0xf700, 0xf200, 0xfb7a, 0xfb78, + 0xf916, 0xfb76, 0xf915, 0xfb6e, 0xfb6d, 0xf200, 0xf200, 0xf200, + 0xf700, 0xf603, 0xf90b, 0xf90c, 0xf90d, 0xf207, 0xf703, 0xf200, + 0xf701, 0xf702, 0xf601, 0xf600, 0xf602, 0xf90a, 0xf310, 0xf30e, + 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, + 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, + 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, +}; + +u_short ctrl_map[NR_KEYS] = { + 0xf200, 0xf100, 0xf101, 0xf102, 0xf103, 0xf104, 0xf105, 0xf106, + 0xf107, 0xf108, 0xf109, 0xf10a, 0xf10b, 0xf200, 0xf204, 0xf205, + 0xf200, 0xf200, 0xf000, 0xf01b, 0xf01c, 0xf01d, 0xf01e, 0xf01f, + 0xf07f, 0xf200, 0xf200, 0xf01f, 0xf200, 0xf200, 0xf008, 0xf115, + 0xf114, 0xf118, 0xf208, 0xf30d, 0xf30c, 0xf314, 0xf200, 0xf011, + 0xf017, 0xf005, 0xf012, 0xf014, 0xf019, 0xf015, 0xf009, 0xf00f, + 0xf010, 0xf01b, 0xf01d, 0xf01c, 0xf116, 0xf117, 0xf119, 0xf307, + 0xf308, 0xf309, 0xf30b, 0xf702, 0xf001, 0xf013, 0xf004, 0xf006, + 0xf007, 0xf008, 0xf00a, 0xf00b, 0xf00c, 0xf200, 0xf007, 0xf201, + 0xf304, 0xf305, 0xf306, 0xf30a, 0xf700, 0xf200, 0xf01a, 0xf018, + 0xf003, 0xf016, 0xf002, 0xf00e, 0xf00d, 0xf200, 0xf20e, 0xf07f, + 0xf700, 0xf603, 0xf301, 0xf302, 0xf303, 0xf207, 0xf703, 0xf000, + 0xf701, 0xf702, 0xf601, 0xf600, 0xf602, 0xf300, 0xf310, 0xf30e, + 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, + 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, + 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, +}; + +u_short shift_ctrl_map[NR_KEYS] = { + 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, + 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf209, 0xf205, + 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, + 0xf200, 0xf200, 0xf200, 0xf01f, 0xf200, 0xf200, 0xf200, 0xf115, + 0xf114, 0xf118, 0xf208, 0xf30d, 0xf30c, 0xf314, 0xf200, 0xf011, + 0xf017, 0xf005, 0xf012, 0xf014, 0xf019, 0xf015, 0xf009, 0xf00f, + 0xf010, 0xf200, 0xf200, 0xf200, 0xf116, 0xf117, 0xf119, 0xf307, + 0xf308, 0xf309, 0xf30b, 0xf702, 0xf001, 0xf013, 0xf004, 0xf006, + 0xf007, 0xf008, 0xf00a, 0xf00b, 0xf00c, 0xf200, 0xf200, 0xf201, + 0xf304, 0xf305, 0xf306, 0xf30a, 0xf700, 0xf200, 0xf01a, 0xf018, + 0xf003, 0xf016, 0xf002, 0xf00e, 0xf00d, 0xf200, 0xf200, 0xf200, + 0xf700, 0xf603, 0xf301, 0xf302, 0xf303, 0xf207, 0xf703, 0xf200, + 0xf701, 0xf702, 0xf601, 0xf600, 0xf602, 0xf300, 0xf310, 0xf30e, + 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, + 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, + 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, +}; + +u_short alt_map[NR_KEYS] = { + 0xf81b, 0xf500, 0xf501, 0xf502, 0xf503, 0xf504, 0xf505, 0xf506, + 0xf507, 0xf508, 0xf509, 0xf50a, 0xf50b, 0xf200, 0xf209, 0xf205, + 0xf860, 0xf831, 0xf832, 0xf833, 0xf834, 0xf835, 0xf836, 0xf837, + 0xf838, 0xf839, 0xf830, 0xf82d, 0xf83d, 0xf8a3, 0xf87f, 0xf115, + 0xf114, 0xf118, 0xf208, 0xf30d, 0xf30c, 0xf314, 0xf809, 0xf871, + 0xf877, 0xf865, 0xf872, 0xf874, 0xf879, 0xf875, 0xf869, 0xf86f, + 0xf870, 0xf85b, 0xf85d, 0xf85c, 0xf116, 0xf117, 0xf119, 0xf907, + 0xf908, 0xf909, 0xf30b, 0xf702, 0xf861, 0xf873, 0xf864, 0xf866, + 0xf867, 0xf868, 0xf86a, 0xf86b, 0xf86c, 0xf83b, 0xf827, 0xf80d, + 0xf904, 0xf905, 0xf906, 0xf30a, 0xf700, 0xf200, 0xf87a, 0xf878, + 0xf863, 0xf876, 0xf862, 0xf86e, 0xf86d, 0xf82c, 0xf82e, 0xf82f, + 0xf700, 0xf603, 0xf901, 0xf902, 0xf903, 0xf207, 0xf703, 0xf820, + 0xf701, 0xf702, 0xf210, 0xf600, 0xf211, 0xf900, 0xf310, 0xf30e, + 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, + 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, + 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, +}; + +u_short ctrl_alt_map[NR_KEYS] = { + 0xf200, 0xf500, 0xf501, 0xf502, 0xf503, 0xf504, 0xf505, 0xf506, + 0xf507, 0xf508, 0xf509, 0xf50a, 0xf50b, 0xf200, 0xf209, 0xf205, + 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, + 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf115, + 0xf114, 0xf118, 0xf208, 0xf30d, 0xf30c, 0xf314, 0xf200, 0xf811, + 0xf817, 0xf805, 0xf812, 0xf814, 0xf819, 0xf815, 0xf809, 0xf80f, + 0xf810, 0xf200, 0xf200, 0xf200, 0xf20c, 0xf117, 0xf119, 0xf307, + 0xf308, 0xf309, 0xf30b, 0xf702, 0xf801, 0xf813, 0xf804, 0xf806, + 0xf807, 0xf808, 0xf80a, 0xf80b, 0xf80c, 0xf200, 0xf200, 0xf201, + 0xf304, 0xf305, 0xf306, 0xf30a, 0xf700, 0xf200, 0xf81a, 0xf818, + 0xf803, 0xf816, 0xf802, 0xf80e, 0xf80d, 0xf200, 0xf200, 0xf200, + 0xf700, 0xf603, 0xf301, 0xf302, 0xf303, 0xf207, 0xf703, 0xf200, + 0xf701, 0xf702, 0xf601, 0xf600, 0xf602, 0xf300, 0xf20c, 0xf30e, + 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, + 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, + 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, +}; + +ushort *key_maps[MAX_NR_KEYMAPS] = { + plain_map, shift_map, altgr_map, 0, + ctrl_map, shift_ctrl_map, 0, 0, + alt_map, 0, 0, 0, + ctrl_alt_map, 0 +}; + +unsigned int keymap_count = 7; + +/* + * Philosophy: most people do not define more strings, but they who do + * often want quite a lot of string space. So, we statically allocate + * the default and allocate dynamically in chunks of 512 bytes. + */ + +char func_buf[] = { + '\033', '[', '[', 'A', 0, + '\033', '[', '[', 'B', 0, + '\033', '[', '[', 'C', 0, + '\033', '[', '[', 'D', 0, + '\033', '[', '[', 'E', 0, + '\033', '[', '1', '7', '~', 0, + '\033', '[', '1', '8', '~', 0, + '\033', '[', '1', '9', '~', 0, + '\033', '[', '2', '0', '~', 0, + '\033', '[', '2', '1', '~', 0, + '\033', '[', '2', '3', '~', 0, + '\033', '[', '2', '4', '~', 0, + '\033', '[', '2', '5', '~', 0, + '\033', '[', '2', '6', '~', 0, + '\033', '[', '2', '8', '~', 0, + '\033', '[', '2', '9', '~', 0, + '\033', '[', '3', '1', '~', 0, + '\033', '[', '3', '2', '~', 0, + '\033', '[', '3', '3', '~', 0, + '\033', '[', '3', '4', '~', 0, + '\033', '[', '1', '~', 0, + '\033', '[', '2', '~', 0, + '\033', '[', '3', '~', 0, + '\033', '[', '4', '~', 0, + '\033', '[', '5', '~', 0, + '\033', '[', '6', '~', 0, + '\033', '[', 'M', 0, + '\033', '[', 'P', 0, +}; + +char *funcbufptr = func_buf; +int funcbufsize = sizeof(func_buf); +int funcbufleft = 0; /* space left */ + +char *func_table[MAX_NR_FUNC] = { + func_buf + 0, + func_buf + 5, + func_buf + 10, + func_buf + 15, + func_buf + 20, + func_buf + 25, + func_buf + 31, + func_buf + 37, + func_buf + 43, + func_buf + 49, + func_buf + 55, + func_buf + 61, + func_buf + 67, + func_buf + 73, + func_buf + 79, + func_buf + 85, + func_buf + 91, + func_buf + 97, + func_buf + 103, + func_buf + 109, + func_buf + 115, + func_buf + 120, + func_buf + 125, + func_buf + 130, + func_buf + 135, + func_buf + 140, + func_buf + 145, + 0, + 0, + func_buf + 149, + 0, +}; + +struct kbdiacr accent_table[MAX_DIACR] = { + {'`', 'A', '\300'}, {'`', 'a', '\340'}, + {'\'', 'A', '\301'}, {'\'', 'a', '\341'}, + {'^', 'A', '\302'}, {'^', 'a', '\342'}, + {'~', 'A', '\303'}, {'~', 'a', '\343'}, + {'"', 'A', '\304'}, {'"', 'a', '\344'}, + {'O', 'A', '\305'}, {'o', 'a', '\345'}, + {'0', 'A', '\305'}, {'0', 'a', '\345'}, + {'A', 'A', '\305'}, {'a', 'a', '\345'}, + {'A', 'E', '\306'}, {'a', 'e', '\346'}, + {',', 'C', '\307'}, {',', 'c', '\347'}, + {'`', 'E', '\310'}, {'`', 'e', '\350'}, + {'\'', 'E', '\311'}, {'\'', 'e', '\351'}, + {'^', 'E', '\312'}, {'^', 'e', '\352'}, + {'"', 'E', '\313'}, {'"', 'e', '\353'}, + {'`', 'I', '\314'}, {'`', 'i', '\354'}, + {'\'', 'I', '\315'}, {'\'', 'i', '\355'}, + {'^', 'I', '\316'}, {'^', 'i', '\356'}, + {'"', 'I', '\317'}, {'"', 'i', '\357'}, + {'-', 'D', '\320'}, {'-', 'd', '\360'}, + {'~', 'N', '\321'}, {'~', 'n', '\361'}, + {'`', 'O', '\322'}, {'`', 'o', '\362'}, + {'\'', 'O', '\323'}, {'\'', 'o', '\363'}, + {'^', 'O', '\324'}, {'^', 'o', '\364'}, + {'~', 'O', '\325'}, {'~', 'o', '\365'}, + {'"', 'O', '\326'}, {'"', 'o', '\366'}, + {'/', 'O', '\330'}, {'/', 'o', '\370'}, + {'`', 'U', '\331'}, {'`', 'u', '\371'}, + {'\'', 'U', '\332'}, {'\'', 'u', '\372'}, + {'^', 'U', '\333'}, {'^', 'u', '\373'}, + {'"', 'U', '\334'}, {'"', 'u', '\374'}, + {'\'', 'Y', '\335'}, {'\'', 'y', '\375'}, + {'T', 'H', '\336'}, {'t', 'h', '\376'}, + {'s', 's', '\337'}, {'"', 'y', '\377'}, + {'s', 'z', '\337'}, {'i', 'j', '\377'}, +}; + +unsigned int accent_table_size = 68; diff -urN linux-2.4.21/drivers/char/defkeymap-hynix.map linux-2.4.21-h7210/drivers/char/defkeymap-hynix.map --- linux-2.4.21/drivers/char/defkeymap-hynix.map 1970-01-01 09:00:00.000000000 +0900 +++ linux-2.4.21-h7210/drivers/char/defkeymap-hynix.map 2004-01-15 11:37:13.000000000 +0900 @@ -0,0 +1,356 @@ +# Default kernel keymap for Acorn machines. This uses 7 modifier combinations. +keymaps 0-2,4-5,8,12 +# Change the above line into +# keymaps 0-2,4-6,8,12 +# in case you want the entries +# altgr control keycode 52 = Boot +# altgr control keycode 102 = Boot +# below. +# +# In fact AltGr is used very little, and one more keymap can +# be saved by mapping AltGr to Alt (and adapting a few entries): +# keycode 96 = Alt +# +keycode 0 = Escape + shift keycode 0 = Escape + alt keycode 0 = Meta_Escape +keycode 1 = F1 F11 Console_13 + control keycode 1 = F1 + alt keycode 1 = Console_1 + control alt keycode 1 = Console_1 +keycode 2 = F2 F12 Console_14 + control keycode 2 = F2 + alt keycode 2 = Console_2 + control alt keycode 2 = Console_2 +keycode 3 = F3 F13 Console_15 + control keycode 3 = F3 + alt keycode 3 = Console_3 + control alt keycode 3 = Console_3 +keycode 4 = F4 F14 Console_16 + control keycode 4 = F4 + alt keycode 4 = Console_4 + control alt keycode 4 = Console_4 +keycode 5 = F5 F15 Console_17 + control keycode 5 = F5 + alt keycode 5 = Console_5 + control alt keycode 5 = Console_5 +keycode 6 = F6 F16 Console_18 + control keycode 6 = F6 + alt keycode 6 = Console_6 + control alt keycode 6 = Console_6 +keycode 7 = F7 F17 Console_19 + control keycode 7 = F7 + alt keycode 7 = Console_7 + control alt keycode 7 = Console_7 +keycode 8 = F8 F18 Console_20 + control keycode 8 = F8 + alt keycode 8 = Console_8 + control alt keycode 8 = Console_8 +keycode 9 = F9 F19 Console_21 + control keycode 9 = F9 + alt keycode 9 = Console_9 + control alt keycode 9 = Console_9 +keycode 10 = F10 F20 Console_22 + control keycode 10 = F10 + alt keycode 10 = Console_10 + control alt keycode 10 = Console_10 +keycode 11 = F11 F11 Console_23 + control keycode 11 = F11 + alt keycode 11 = Console_11 + control alt keycode 11 = Console_11 +keycode 12 = F12 F12 Console_24 + control keycode 12 = F12 + alt keycode 12 = Console_12 + control alt keycode 12 = Console_12 +keycode 13 = +keycode 14 = Scroll_Lock + shift keycode 14 = Show_Memory + altgr keycode 14 = Show_Registers + control keycode 14 = Show_State + alt keycode 14 = Scroll_Lock +keycode 15 = Break +keycode 16 = grave asciitilde + alt keycode 16 = Meta_grave +keycode 17 = one exclam + alt keycode 17 = Meta_one +keycode 18 = two at at + control keycode 18 = nul + alt keycode 18 = Meta_two +keycode 19 = three numbersign + control keycode 19 = Escape + alt keycode 19 = Meta_three +keycode 20 = four dollar dollar + control keycode 20 = Control_backslash + alt keycode 20 = Meta_four +keycode 21 = five percent + control keycode 21 = Control_bracketright + alt keycode 21 = Meta_five +keycode 22 = six asciicircum + control keycode 22 = Control_asciicircum + alt keycode 22 = Meta_six +keycode 23 = seven ampersand braceleft + control keycode 23 = Control_underscore + alt keycode 23 = Meta_seven +keycode 24 = eight asterisk bracketleft + control keycode 24 = Delete + alt keycode 24 = Meta_eight +keycode 25 = nine parenleft bracketright + alt keycode 25 = Meta_nine +keycode 26 = zero parenright braceright + alt keycode 26 = Meta_zero +keycode 27 = minus underscore backslash + control keycode 27 = Control_underscore + shift control keycode 27 = Control_underscore + alt keycode 27 = Meta_minus +keycode 28 = equal plus + alt keycode 28 = Meta_equal +keycode 29 = sterling currency + alt keycode 29 = 0x08a3 +keycode 30 = Delete Delete + control keycode 30 = BackSpace + alt keycode 30 = Meta_Delete +keycode 31 = Insert +keycode 32 = Find +keycode 33 = Prior + shift keycode 33 = Scroll_Backward +keycode 34 = Num_Lock +keycode 35 = KP_Divide +keycode 36 = KP_Multiply +keycode 37 = 0x0314 +keycode 38 = Tab Tab + alt keycode 38 = Meta_Tab +keycode 39 = q +keycode 40 = w +keycode 41 = e + altgr keycode 41 = Hex_E +keycode 42 = r +keycode 43 = t +keycode 44 = y +keycode 45 = u +keycode 46 = i +keycode 47 = o +keycode 48 = p +keycode 49 = bracketleft braceleft + control keycode 49 = Escape + alt keycode 49 = Meta_bracketleft +keycode 50 = bracketright braceright asciitilde + control keycode 50 = Control_bracketright + alt keycode 50 = Meta_bracketright +keycode 51 = backslash bar + control keycode 51 = Control_backslash + alt keycode 51 = Meta_backslash +keycode 52 = Remove +# altgr control keycode 52 = Boot + control alt keycode 52 = Boot +keycode 53 = Select +keycode 54 = Next + shift keycode 54 = Scroll_Forward +keycode 55 = KP_7 + altgr keycode 55 = Hex_7 + alt keycode 55 = Ascii_7 +keycode 56 = KP_8 + altgr keycode 56 = Hex_8 + alt keycode 56 = Ascii_8 +keycode 57 = KP_9 + altgr keycode 57 = Hex_9 + alt keycode 57 = Ascii_9 +keycode 58 = KP_Subtract +keycode 59 = Control +keycode 60 = a + altgr keycode 60 = Hex_A +keycode 61 = s +keycode 62 = d + altgr keycode 62 = Hex_D +keycode 63 = f + altgr keycode 63 = Hex_F +keycode 64 = g +keycode 65 = h +keycode 66 = j +keycode 67 = k +keycode 68 = l +keycode 69 = semicolon colon + alt keycode 69 = Meta_semicolon +keycode 70 = apostrophe quotedbl + control keycode 70 = Control_g + alt keycode 70 = Meta_apostrophe +keycode 71 = Return + alt keycode 71 = Meta_Control_m +keycode 72 = KP_4 + altgr keycode 72 = Hex_4 + alt keycode 72 = Ascii_4 +keycode 73 = KP_5 + altgr keycode 73 = Hex_5 + alt keycode 73 = Ascii_5 +keycode 74 = KP_6 + altgr keycode 74 = Hex_6 + alt keycode 74 = Ascii_6 +keycode 75 = KP_Add +keycode 76 = Shift +keycode 77 = +keycode 78 = z +keycode 79 = x +keycode 80 = c + altgr keycode 80 = Hex_C +keycode 81 = v +keycode 82 = b + altgr keycode 82 = Hex_B +keycode 83 = n +keycode 84 = m +keycode 85 = comma less + alt keycode 85 = Meta_comma +keycode 86 = period greater + control keycode 86 = Compose + alt keycode 86 = Meta_period +keycode 87 = slash question + control keycode 87 = Delete + alt keycode 87 = Meta_slash +keycode 88 = Shift +keycode 89 = Up +keycode 90 = KP_1 + altgr keycode 90 = Hex_1 + alt keycode 90 = Ascii_1 +keycode 91 = KP_2 + altgr keycode 91 = Hex_2 + alt keycode 91 = Ascii_2 +keycode 92 = KP_3 + altgr keycode 92 = Hex_3 + alt keycode 92 = Ascii_3 +keycode 93 = Caps_Lock +keycode 94 = Alt +keycode 95 = space space + control keycode 95 = nul + alt keycode 95 = Meta_space +keycode 96 = AltGr +keycode 97 = Control +keycode 98 = Left + alt keycode 98 = Decr_Console +keycode 99 = Down +keycode 100 = Right + alt keycode 100 = Incr_Console +keycode 101 = KP_0 + altgr keycode 101 = Hex_0 + alt keycode 101 = Ascii_0 +keycode 102 = KP_Period +# altgr control keycode 102 = Boot + control alt keycode 102 = Boot +keycode 103 = KP_Enter +keycode 104 = +keycode 105 = +keycode 106 = +keycode 107 = +keycode 108 = +keycode 109 = +keycode 110 = +keycode 111 = +keycode 112 = +keycode 113 = +keycode 114 = +keycode 115 = +keycode 116 = +keycode 117 = +keycode 118 = +keycode 119 = +keycode 120 = +keycode 121 = +keycode 122 = +keycode 123 = +keycode 124 = +keycode 125 = +keycode 126 = +keycode 127 = +string F1 = "\033[[A" +string F2 = "\033[[B" +string F3 = "\033[[C" +string F4 = "\033[[D" +string F5 = "\033[[E" +string F6 = "\033[17~" +string F7 = "\033[18~" +string F8 = "\033[19~" +string F9 = "\033[20~" +string F10 = "\033[21~" +string F11 = "\033[23~" +string F12 = "\033[24~" +string F13 = "\033[25~" +string F14 = "\033[26~" +string F15 = "\033[28~" +string F16 = "\033[29~" +string F17 = "\033[31~" +string F18 = "\033[32~" +string F19 = "\033[33~" +string F20 = "\033[34~" +string Find = "\033[1~" +string Insert = "\033[2~" +string Remove = "\033[3~" +string Select = "\033[4~" +string Prior = "\033[5~" +string Next = "\033[6~" +string Macro = "\033[M" +string Pause = "\033[P" +compose '`' 'A' to 'À' +compose '`' 'a' to 'à' +compose '\'' 'A' to 'Á' +compose '\'' 'a' to 'á' +compose '^' 'A' to 'Â' +compose '^' 'a' to 'â' +compose '~' 'A' to 'Ã' +compose '~' 'a' to 'ã' +compose '"' 'A' to 'Ä' +compose '"' 'a' to 'ä' +compose 'O' 'A' to 'Å' +compose 'o' 'a' to 'å' +compose '0' 'A' to 'Å' +compose '0' 'a' to 'å' +compose 'A' 'A' to 'Å' +compose 'a' 'a' to 'å' +compose 'A' 'E' to 'Æ' +compose 'a' 'e' to 'æ' +compose ',' 'C' to 'Ç' +compose ',' 'c' to 'ç' +compose '`' 'E' to 'È' +compose '`' 'e' to 'è' +compose '\'' 'E' to 'É' +compose '\'' 'e' to 'é' +compose '^' 'E' to 'Ê' +compose '^' 'e' to 'ê' +compose '"' 'E' to 'Ë' +compose '"' 'e' to 'ë' +compose '`' 'I' to 'Ì' +compose '`' 'i' to 'ì' +compose '\'' 'I' to 'Í' +compose '\'' 'i' to 'í' +compose '^' 'I' to 'Î' +compose '^' 'i' to 'î' +compose '"' 'I' to 'Ï' +compose '"' 'i' to 'ï' +compose '-' 'D' to 'Ð' +compose '-' 'd' to 'ð' +compose '~' 'N' to 'Ñ' +compose '~' 'n' to 'ñ' +compose '`' 'O' to 'Ò' +compose '`' 'o' to 'ò' +compose '\'' 'O' to 'Ó' +compose '\'' 'o' to 'ó' +compose '^' 'O' to 'Ô' +compose '^' 'o' to 'ô' +compose '~' 'O' to 'Õ' +compose '~' 'o' to 'õ' +compose '"' 'O' to 'Ö' +compose '"' 'o' to 'ö' +compose '/' 'O' to 'Ø' +compose '/' 'o' to 'ø' +compose '`' 'U' to 'Ù' +compose '`' 'u' to 'ù' +compose '\'' 'U' to 'Ú' +compose '\'' 'u' to 'ú' +compose '^' 'U' to 'Û' +compose '^' 'u' to 'û' +compose '"' 'U' to 'Ü' +compose '"' 'u' to 'ü' +compose '\'' 'Y' to 'Ý' +compose '\'' 'y' to 'ý' +compose 'T' 'H' to 'Þ' +compose 't' 'h' to 'þ' +compose 's' 's' to 'ß' +compose '"' 'y' to 'ÿ' +compose 's' 'z' to 'ß' +compose 'i' 'j' to 'ÿ' diff -urN linux-2.4.21/drivers/char/engfont.c linux-2.4.21-h7210/drivers/char/engfont.c --- linux-2.4.21/drivers/char/engfont.c 1970-01-01 09:00:00.000000000 +0900 +++ linux-2.4.21-h7210/drivers/char/engfont.c 2004-06-01 00:00:24.000000000 +0900 @@ -0,0 +1,774 @@ +const unsigned char _EngDos[256*16] ={ +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7E, 0x81, 0x81, 0x99, 0xBD, 0x81, 0x81, 0xA5, 0x81, 0x7E, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7E, 0xFF, 0xFF, 0xE7, 0xC3, 0xFF, 0xFF, 0xDB, 0xFF, 0x7E, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x10, 0x38, 0x7C, 0xFE, 0xFE, 0xFE, 0xFE, 0x6C, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x38, 0x7C, 0xFE, 0x7C, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x3C, 0x18, 0x99, 0xE7, 0xE7, 0xE7, 0x3C, 0x3C, 0x18, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x3C, 0x18, 0x18, 0x7E, 0xFF, 0xFF, 0x7E, 0x3C, 0x18, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x3C, 0x18, 0x18, 0x7E, 0xFF, 0xFF, 0x7E, 0x3C, 0x18, 0x00, 0x00, 0x00, +0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE7, 0xC3, 0xC3, 0xE7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0xC0, 0xE6, 0xE7, 0x67, 0x63, 0x63, 0x63, 0x63, 0x7F, 0x63, 0x7F, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0xDB, 0x3C, 0xE7, 0x3C, 0xDB, 0x18, 0x18, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x80, 0xC0, 0xE0, 0xF0, 0xF8, 0xFE, 0xF8, 0xF0, 0xE0, 0xC0, 0x80, 0x00, +0x00, 0x00, 0x00, 0x00, 0x02, 0x06, 0x0E, 0x1E, 0x3E, 0xFE, 0x3E, 0x1E, 0x0E, 0x06, 0x02, 0x00, +0x00, 0x00, 0x00, 0x00, 0x18, 0x3C, 0x7E, 0x18, 0x18, 0x18, 0x18, 0x7E, 0x3C, 0x18, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x7B, 0xDB, 0xDB, 0xDB, 0x7F, 0x00, 0x00, +0x00, 0x00, 0x00, 0x7C, 0xC6, 0x0C, 0x38, 0x6C, 0xC6, 0xC6, 0x6C, 0x38, 0x60, 0xC6, 0x7C, 0x00, +0x00, 0x00, 0x00, 0x00, 0xFE, 0xFE, 0xFE, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x7E, 0x18, 0x3C, 0x7E, 0x18, 0x18, 0x18, 0x18, 0x7E, 0x3C, 0x18, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x7E, 0x3C, 0x18, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x18, 0x3C, 0x7E, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x0C, 0xFE, 0x0C, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x60, 0xFE, 0x60, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x60, 0xFE, 0x60, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x60, 0xFE, 0x60, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x60, 0xFE, 0x60, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x60, 0xFE, 0x60, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x18, 0x18, 0x18, 0x3C, 0x3C, 0x3C, 0x18, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x66, 0x66, 0x66, 0x00, +0x00, 0x00, 0x00, 0x00, 0x6C, 0x6C, 0xFE, 0x6C, 0x6C, 0x6C, 0xFE, 0x6C, 0x6C, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x18, 0x18, 0x7C, 0xC6, 0x86, 0x06, 0x7C, 0xC0, 0xC2, 0xC6, 0x7C, 0x18, 0x18, +0x00, 0x00, 0x00, 0x00, 0x86, 0xC6, 0x60, 0x30, 0x18, 0x0C, 0xC6, 0xC2, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x76, 0xCC, 0xCC, 0xCC, 0xDC, 0x76, 0x38, 0x6C, 0x6C, 0x38, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x30, 0x30, 0x30, 0x00, +0x00, 0x00, 0x00, 0x00, 0x0C, 0x18, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x18, 0x0C, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x30, 0x18, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x18, 0x30, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x3C, 0xFF, 0x3C, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x7E, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x30, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x80, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x02, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7C, 0xC6, 0xC6, 0xC6, 0xD6, 0xD6, 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7E, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x78, 0x38, 0x18, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0xFE, 0xC6, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0xC6, 0x7C, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7C, 0xC6, 0x06, 0x06, 0x06, 0x3C, 0x06, 0x06, 0xC6, 0x7C, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x1E, 0x0C, 0x0C, 0x0C, 0xFE, 0xCC, 0x6C, 0x3C, 0x1C, 0x0C, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7C, 0xC6, 0x06, 0x06, 0x0E, 0xFC, 0xC0, 0xC0, 0xC0, 0xFE, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7C, 0xC6, 0xC6, 0xC6, 0xC6, 0xFC, 0xC0, 0xC0, 0x60, 0x38, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x30, 0x30, 0x30, 0x30, 0x18, 0x0C, 0x06, 0x06, 0xC6, 0xFE, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7C, 0xC6, 0xC6, 0xC6, 0xC6, 0x7C, 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x78, 0x0C, 0x06, 0x06, 0x06, 0x7E, 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x30, 0x18, 0x18, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x06, 0x0C, 0x18, 0x30, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x0C, 0x18, 0x30, 0x60, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x18, 0x18, 0x18, 0x0C, 0xC6, 0xC6, 0x7C, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7C, 0xC0, 0xDC, 0xDE, 0xDE, 0xDE, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0xC6, 0xC6, 0xC6, 0xC6, 0xFE, 0xC6, 0xC6, 0x6C, 0x38, 0x10, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0xFC, 0x66, 0x66, 0x66, 0x66, 0x7C, 0x66, 0x66, 0x66, 0xFC, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x3C, 0x66, 0xC2, 0xC0, 0xC0, 0xC0, 0xC0, 0xC2, 0x66, 0x3C, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0xF8, 0x6C, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x6C, 0xF8, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0xFE, 0x66, 0x62, 0x60, 0x68, 0x78, 0x68, 0x62, 0x66, 0xFE, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0xF0, 0x60, 0x60, 0x60, 0x68, 0x78, 0x68, 0x62, 0x66, 0xFE, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x3A, 0x66, 0xC6, 0xC6, 0xDE, 0xC0, 0xC0, 0xC2, 0x66, 0x3C, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xFE, 0xC6, 0xC6, 0xC6, 0xC6, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x3C, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3C, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x78, 0xCC, 0xCC, 0xCC, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x1E, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0xE6, 0x66, 0x66, 0x6C, 0x78, 0x78, 0x6C, 0x6C, 0x66, 0xE6, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0xFE, 0x66, 0x62, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0xF0, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xD6, 0xFE, 0xFE, 0xEE, 0xC6, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0xC6, 0xC6, 0xC6, 0xC6, 0xCE, 0xDE, 0xFE, 0xF6, 0xE6, 0xC6, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x38, 0x6C, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x6C, 0x38, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0xF0, 0x60, 0x60, 0x60, 0x60, 0x7C, 0x66, 0x66, 0x66, 0xFC, 0x00, 0x00, +0x00, 0x00, 0x0E, 0x0C, 0x7C, 0xDE, 0xD6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0xE6, 0x66, 0x66, 0x66, 0x6C, 0x7C, 0x66, 0x66, 0x66, 0xFC, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7C, 0xC6, 0xC6, 0x06, 0x0C, 0x38, 0x60, 0xC6, 0xC6, 0x7C, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x3C, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x5A, 0x7E, 0x7E, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7C, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x10, 0x38, 0x6C, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x6C, 0x6C, 0xFE, 0xD6, 0xD6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0xC6, 0xC6, 0x6C, 0x6C, 0x38, 0x38, 0x6C, 0x6C, 0xC6, 0xC6, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x3C, 0x18, 0x18, 0x18, 0x18, 0x3C, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0xFE, 0xC6, 0xC2, 0x60, 0x30, 0x18, 0x0C, 0x86, 0xC6, 0xFE, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x3C, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x3C, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x02, 0x06, 0x0E, 0x1C, 0x38, 0x70, 0xE0, 0xC0, 0x80, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x3C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x3C, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC6, 0x6C, 0x38, 0x10, +0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x30, 0x30, +0x00, 0x00, 0x00, 0x00, 0x76, 0xCC, 0xCC, 0xCC, 0x7C, 0x0C, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0xDC, 0x66, 0x66, 0x66, 0x66, 0x6C, 0x78, 0x60, 0x60, 0xE0, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7C, 0xC6, 0xC0, 0xC0, 0xC0, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x76, 0xCC, 0xCC, 0xCC, 0xCC, 0x6C, 0x3C, 0x0C, 0x0C, 0x1C, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7C, 0xC6, 0xC0, 0xC0, 0xFE, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0xF0, 0x60, 0x60, 0x60, 0x60, 0xF0, 0x60, 0x64, 0x6C, 0x38, 0x00, 0x00, +0x00, 0x78, 0xCC, 0x0C, 0x7C, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0x76, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0xE6, 0x66, 0x66, 0x66, 0x66, 0x76, 0x6C, 0x60, 0x60, 0xE0, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x3C, 0x18, 0x18, 0x18, 0x18, 0x18, 0x38, 0x00, 0x18, 0x18, 0x00, 0x00, +0x00, 0x3C, 0x66, 0x66, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x0E, 0x00, 0x06, 0x06, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0xE6, 0x66, 0x6C, 0x78, 0x78, 0x6C, 0x66, 0x60, 0x60, 0xE0, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x3C, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x38, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xFE, 0xEC, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0xDC, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7C, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0xF0, 0x60, 0x60, 0x7C, 0x66, 0x66, 0x66, 0x66, 0x66, 0xDC, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x1E, 0x0C, 0x0C, 0x7C, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0x76, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0xF0, 0x60, 0x60, 0x60, 0x62, 0x76, 0xDC, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7C, 0xC6, 0x0C, 0x38, 0x60, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x1C, 0x36, 0x30, 0x30, 0x30, 0x30, 0xFC, 0x30, 0x30, 0x10, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x76, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x18, 0x3C, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x6C, 0xFE, 0xD6, 0xD6, 0xC6, 0xC6, 0xC6, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0xC6, 0x6C, 0x38, 0x38, 0x38, 0x6C, 0xC6, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0xF8, 0x0C, 0x06, 0x7E, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0xFE, 0xC6, 0x60, 0x30, 0x18, 0xCC, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x0E, 0x18, 0x18, 0x18, 0x18, 0x70, 0x18, 0x18, 0x18, 0x0E, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x70, 0x18, 0x18, 0x18, 0x18, 0x0E, 0x18, 0x18, 0x18, 0x70, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xDC, 0x76, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xC6, 0xC6, 0xC6, 0x6C, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x7C, 0x06, 0x0C, 0x3C, 0x66, 0xC2, 0xC0, 0xC0, 0xC0, 0xC2, 0x66, 0x3C, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x76, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0x00, 0xCC, 0xCC, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7C, 0xC6, 0xC0, 0xC0, 0xFE, 0xC6, 0x7C, 0x00, 0x30, 0x18, 0x0C, 0x00, +0x00, 0x00, 0x00, 0x00, 0x76, 0xCC, 0xCC, 0xCC, 0x7C, 0x0C, 0x78, 0x00, 0x6C, 0x38, 0x10, 0x00, +0x00, 0x00, 0x00, 0x00, 0x76, 0xCC, 0xCC, 0xCC, 0x7C, 0x0C, 0x78, 0x00, 0xCC, 0xCC, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x76, 0xCC, 0xCC, 0xCC, 0x7C, 0x0C, 0x78, 0x00, 0x18, 0x30, 0x60, 0x00, +0x00, 0x00, 0x00, 0x00, 0x76, 0xCC, 0xCC, 0xCC, 0x7C, 0x0C, 0x78, 0x00, 0x38, 0x6C, 0x38, 0x00, +0x00, 0x00, 0x00, 0x3C, 0x06, 0x0C, 0x3C, 0x66, 0x60, 0x60, 0x66, 0x3C, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7C, 0xC6, 0xC0, 0xC0, 0xFE, 0xC6, 0x7C, 0x00, 0x6C, 0x38, 0x10, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7C, 0xC6, 0xC0, 0xC0, 0xFE, 0xC6, 0x7C, 0x00, 0xC6, 0xC6, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7C, 0xC6, 0xC0, 0xC0, 0xFE, 0xC6, 0x7C, 0x00, 0x18, 0x30, 0x60, 0x00, +0x00, 0x00, 0x00, 0x00, 0x3C, 0x18, 0x18, 0x18, 0x18, 0x18, 0x38, 0x00, 0x66, 0x66, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x3C, 0x18, 0x18, 0x18, 0x18, 0x18, 0x38, 0x00, 0x66, 0x3C, 0x18, 0x00, +0x00, 0x00, 0x00, 0x00, 0x3C, 0x18, 0x18, 0x18, 0x18, 0x18, 0x38, 0x00, 0x18, 0x30, 0x60, 0x00, +0x00, 0x00, 0x00, 0x00, 0xC6, 0xC6, 0xC6, 0xFE, 0xC6, 0xC6, 0x6C, 0x38, 0x10, 0xC6, 0xC6, 0x00, +0x00, 0x00, 0x00, 0x00, 0xC6, 0xC6, 0xC6, 0xFE, 0xC6, 0xC6, 0x6C, 0x38, 0x00, 0x38, 0x6C, 0x38, +0x00, 0x00, 0x00, 0x00, 0xFE, 0x66, 0x60, 0x60, 0x7C, 0x60, 0x66, 0xFE, 0x00, 0x60, 0x30, 0x18, +0x00, 0x00, 0x00, 0x00, 0x6E, 0xD8, 0xD8, 0x7E, 0x36, 0x76, 0xCC, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0xCE, 0xCC, 0xCC, 0xCC, 0xCC, 0xFE, 0xCC, 0xCC, 0x6C, 0x3E, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7C, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x6C, 0x38, 0x10, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7C, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0xC6, 0xC6, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7C, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x18, 0x30, 0x60, 0x00, +0x00, 0x00, 0x00, 0x00, 0x76, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0x00, 0xCC, 0x78, 0x30, 0x00, +0x00, 0x00, 0x00, 0x00, 0x76, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0x00, 0x18, 0x30, 0x60, 0x00, +0x00, 0x78, 0x0C, 0x06, 0x7E, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x00, 0xC6, 0xC6, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x38, 0x6C, 0xC6, 0xC6, 0xC6, 0xC6, 0x6C, 0x38, 0x00, 0xC6, 0xC6, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7C, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x00, 0xC6, 0xC6, 0x00, +0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x3C, 0x66, 0x60, 0x60, 0x60, 0x66, 0x3C, 0x18, 0x18, 0x00, +0x00, 0x00, 0x00, 0x00, 0xFC, 0xE6, 0x60, 0x60, 0x60, 0x60, 0xF0, 0x60, 0x64, 0x6C, 0x38, 0x00, +0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x7E, 0x18, 0x7E, 0x18, 0x3C, 0x66, 0x66, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0xC6, 0xCC, 0xCC, 0xCC, 0xDE, 0xCC, 0xC4, 0xF8, 0xCC, 0xCC, 0xF8, 0x00, +0x00, 0x00, 0x70, 0xD8, 0x18, 0x18, 0x18, 0x18, 0x18, 0x7E, 0x18, 0x18, 0x18, 0x1B, 0x0E, 0x00, +0x00, 0x00, 0x00, 0x00, 0x76, 0xCC, 0xCC, 0xCC, 0x7C, 0x0C, 0x78, 0x00, 0x60, 0x30, 0x18, 0x00, +0x00, 0x00, 0x00, 0x00, 0x3C, 0x18, 0x18, 0x18, 0x18, 0x18, 0x38, 0x00, 0x30, 0x18, 0x0C, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7C, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x60, 0x30, 0x18, 0x00, +0x00, 0x00, 0x00, 0x00, 0x76, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0x00, 0x60, 0x30, 0x18, 0x00, +0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0xDC, 0x00, 0xDC, 0x76, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0xC6, 0xC6, 0xC6, 0xCE, 0xDE, 0xFE, 0xF6, 0xE6, 0xC6, 0x00, 0xDC, 0x76, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x3E, 0x6C, 0x6C, 0x3C, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0x00, 0x38, 0x6C, 0x6C, 0x38, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7C, 0xC6, 0xC6, 0xC0, 0x60, 0x30, 0x30, 0x00, 0x30, 0x30, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xC0, 0xC0, 0xC0, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x06, 0x06, 0x06, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x1F, 0x0C, 0x06, 0x93, 0xCE, 0x60, 0x30, 0x18, 0xCC, 0xC6, 0xC2, 0xC0, 0xC0, 0x00, +0x00, 0x00, 0x0F, 0x06, 0x3F, 0x9A, 0xCE, 0x66, 0x30, 0x18, 0xCC, 0xC6, 0xC2, 0xC0, 0xC0, 0x00, +0x00, 0x00, 0x00, 0x00, 0x18, 0x3C, 0x3C, 0x3C, 0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0x66, 0xCC, 0x66, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xCC, 0x66, 0x33, 0x66, 0xCC, 0x00, 0x00, 0x00, 0x00, 0x00, +0x44, 0x11, 0x44, 0x11, 0x44, 0x11, 0x44, 0x11, 0x44, 0x11, 0x44, 0x11, 0x44, 0x11, 0x44, 0x11, +0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x55, +0x77, 0xDD, 0x77, 0xDD, 0x77, 0xDD, 0x77, 0xDD, 0x77, 0xDD, 0x77, 0xDD, 0x77, 0xDD, 0x77, 0xDD, +0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, +0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xF8, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, +0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xF8, 0x18, 0xF8, 0x18, 0x18, 0x18, 0x18, 0x18, +0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0xF6, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, +0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xF8, 0x18, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, +0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0xF6, 0x06, 0xF6, 0x36, 0x36, 0x36, 0x36, 0x36, +0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, +0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0xF6, 0x06, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x06, 0xF6, 0x36, 0x36, 0x36, 0x36, 0x36, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x18, 0xF8, 0x18, 0x18, 0x18, 0x18, 0x18, +0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, +0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1F, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xFF, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, +0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1F, 0x18, 0x1F, 0x18, 0x18, 0x18, 0x18, 0x18, +0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x37, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x30, 0x37, 0x36, 0x36, 0x36, 0x36, 0x36, +0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x37, 0x30, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xF7, 0x36, 0x36, 0x36, 0x36, 0x36, +0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0xF7, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, +0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x37, 0x30, 0x37, 0x36, 0x36, 0x36, 0x36, 0x36, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, +0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0xF7, 0x00, 0xF7, 0x36, 0x36, 0x36, 0x36, 0x36, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x18, 0x18, 0x18, 0x18, 0x18, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, +0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, +0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x18, 0x1F, 0x18, 0x18, 0x18, 0x18, 0x18, +0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1F, 0x18, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, +0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0xFF, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, +0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xFF, 0x18, 0xFF, 0x18, 0x18, 0x18, 0x18, 0x18, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, +0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, +0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, +0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, +0x00, 0x00, 0x00, 0x00, 0x76, 0xDC, 0xD8, 0xD8, 0xD8, 0xDC, 0x76, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0xCE, 0xC3, 0xC3, 0xC3, 0xC6, 0xDC, 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC6, 0xC6, 0xFE, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0xFE, 0x80, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0xFE, 0xC6, 0x60, 0x30, 0x18, 0x30, 0x60, 0xC6, 0xFE, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x70, 0xD8, 0xD8, 0xD8, 0xD8, 0xD8, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0xC0, 0x60, 0x60, 0x7C, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xDC, 0x76, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7E, 0x18, 0x3C, 0x66, 0x66, 0x66, 0x3C, 0x18, 0x7E, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x38, 0x6C, 0xC6, 0xC6, 0xFE, 0xC6, 0xC6, 0x6C, 0x38, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0xEE, 0x6C, 0x6C, 0x6C, 0x6C, 0xC6, 0xC6, 0xC6, 0x6C, 0x38, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x3C, 0x66, 0x66, 0x66, 0x66, 0x3E, 0x0C, 0x18, 0x30, 0x1E, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0xDB, 0xDB, 0xDB, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0xC0, 0x60, 0x7E, 0xF3, 0xDB, 0xCF, 0x7E, 0x06, 0x03, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x1C, 0x30, 0x60, 0x60, 0x60, 0x7C, 0x60, 0x60, 0x30, 0x1C, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x18, 0x18, 0x7E, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x30, 0x18, 0x0C, 0x06, 0x0C, 0x18, 0x30, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x0C, 0x18, 0x30, 0x60, 0x30, 0x18, 0x0C, 0x00, 0x00, 0x00, +0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1B, 0x1B, 0x0E, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x70, 0xD8, 0xD8, 0xD8, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, +0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x7E, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xDC, 0x76, 0x00, 0xDC, 0x76, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x6C, 0x6C, 0x38, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x1C, 0x3C, 0x6C, 0x6C, 0xEC, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0F, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0xD8, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xC8, 0x60, 0x30, 0x98, 0x70, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0x7C, 0x7C, 0x7C, 0x7C, 0x7C, 0x7C, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 +}; +const unsigned char _EngFixed[256*16] = { +0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x18, 0x18, 0x3C, 0x3C, 0x3C, 0x18, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x36, 0x36, 0x7F, 0x36, 0x36, 0x36, 0x7F, 0x36, 0x36, 0x00, 0x00, 0x00, +0x00, 0x00, 0x18, 0x18, 0x3C, 0x66, 0x06, 0x0C, 0x18, 0x30, 0x60, 0x66, 0x3C, 0x18, 0x18, 0x00, +0x00, 0x00, 0x00, 0x0E, 0x1B, 0x5B, 0x6E, 0x30, 0x18, 0x0C, 0x76, 0xDA, 0xD8, 0x70, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x3B, 0x66, 0x66, 0x6F, 0x60, 0x38, 0x6C, 0x6C, 0x38, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, +0x00, 0x00, 0x0C, 0x18, 0x18, 0x30, 0x30, 0x30, 0x30, 0x30, 0x18, 0x18, 0x0C, 0x00, 0x00, 0x00, +0x00, 0x00, 0x30, 0x18, 0x18, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x18, 0x18, 0x30, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x1C, 0x7F, 0x1C, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x7E, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x18, 0x0C, 0x1C, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x1C, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x60, 0x60, 0x30, 0x30, 0x18, 0x18, 0x0C, 0x0C, 0x06, 0x06, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x3C, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3C, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x7C, 0x1C, 0x0C, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7E, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x66, 0x66, 0x3C, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x3C, 0x66, 0x66, 0x06, 0x1C, 0x06, 0x66, 0x66, 0x3C, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x06, 0x06, 0x7F, 0x66, 0x36, 0x36, 0x36, 0x30, 0x30, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x78, 0x0C, 0x06, 0x06, 0x7C, 0x60, 0x60, 0x60, 0x7E, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x3C, 0x66, 0x66, 0x66, 0x66, 0x7C, 0x30, 0x18, 0x1C, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x30, 0x30, 0x30, 0x18, 0x18, 0x0C, 0x0C, 0x06, 0x7E, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x3C, 0x66, 0x66, 0x6E, 0x3C, 0x76, 0x66, 0x66, 0x3C, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x38, 0x18, 0x0C, 0x3E, 0x66, 0x66, 0x66, 0x66, 0x3C, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x1C, 0x1C, 0x00, 0x00, 0x00, 0x1C, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x18, 0x0C, 0x1C, 0x1C, 0x00, 0x00, 0x00, 0x1C, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x06, 0x0C, 0x18, 0x30, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x0C, 0x18, 0x30, 0x60, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x18, 0x18, 0x0C, 0x66, 0x66, 0x3C, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7F, 0xC0, 0xCF, 0xDB, 0xDB, 0xCF, 0xC3, 0xC3, 0x7E, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x66, 0x7E, 0x66, 0x66, 0x66, 0x3C, 0x18, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7C, 0x66, 0x66, 0x66, 0x7C, 0x66, 0x66, 0x66, 0x7C, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x3C, 0x66, 0x66, 0x60, 0x60, 0x60, 0x66, 0x66, 0x3C, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x78, 0x6C, 0x66, 0x66, 0x66, 0x66, 0x66, 0x6C, 0x78, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7E, 0x60, 0x60, 0x60, 0x7C, 0x60, 0x60, 0x60, 0x7E, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x60, 0x60, 0x60, 0x60, 0x7C, 0x60, 0x60, 0x60, 0x7E, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x3E, 0x66, 0x66, 0x6E, 0x60, 0x60, 0x66, 0x66, 0x3C, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x7E, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x3C, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3C, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x3C, 0x66, 0x66, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x6C, 0x6C, 0x78, 0x6C, 0x6C, 0x66, 0x66, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7E, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x63, 0x63, 0x63, 0x6B, 0x6B, 0x6B, 0x77, 0x63, 0x63, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x63, 0x63, 0x63, 0x67, 0x6F, 0x7B, 0x73, 0x63, 0x63, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x3C, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3C, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x60, 0x60, 0x60, 0x60, 0x7C, 0x66, 0x66, 0x66, 0x7C, 0x00, 0x00, 0x00, +0x00, 0x00, 0x06, 0x0C, 0x3C, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3C, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x66, 0x6C, 0x7C, 0x66, 0x66, 0x66, 0x7C, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x3C, 0x66, 0x06, 0x0C, 0x18, 0x30, 0x60, 0x66, 0x3C, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x7E, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x3C, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x18, 0x3C, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x36, 0x36, 0x36, 0x6B, 0x6B, 0x6B, 0x63, 0x63, 0x63, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x66, 0x2C, 0x18, 0x18, 0x34, 0x66, 0x66, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x3C, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7E, 0x60, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x06, 0x7E, 0x00, 0x00, 0x00, +0x00, 0x3C, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x3C, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x06, 0x06, 0x0C, 0x0C, 0x18, 0x18, 0x30, 0x30, 0x60, 0x60, 0x00, 0x00, 0x00, +0x00, 0x3C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x3C, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x3C, 0x18, 0x00, +0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x18, 0x38, 0x00, +0x00, 0x00, 0x00, 0x00, 0x3E, 0x66, 0x66, 0x3E, 0x06, 0x06, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7C, 0x66, 0x66, 0x66, 0x66, 0x66, 0x7C, 0x60, 0x60, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x3C, 0x66, 0x60, 0x60, 0x60, 0x66, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x3E, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3E, 0x06, 0x06, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x3C, 0x60, 0x60, 0x7E, 0x66, 0x66, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x30, 0x30, 0x30, 0x30, 0x7E, 0x30, 0x30, 0x30, 0x1E, 0x00, 0x00, 0x00, +0x00, 0x7C, 0x06, 0x06, 0x3E, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3E, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x7C, 0x60, 0x60, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7E, 0x18, 0x18, 0x18, 0x18, 0x18, 0x78, 0x00, 0x18, 0x18, 0x00, 0x00, +0x00, 0x78, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x3C, 0x00, 0x0C, 0x0C, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x6C, 0x78, 0x6C, 0x66, 0x66, 0x60, 0x60, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7E, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x78, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x63, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x7C, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x3C, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x60, 0x60, 0x60, 0x7C, 0x66, 0x66, 0x66, 0x66, 0x66, 0x7C, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x06, 0x06, 0x06, 0x3E, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3E, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x60, 0x60, 0x60, 0x60, 0x70, 0x6E, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7C, 0x06, 0x06, 0x3C, 0x60, 0x60, 0x3E, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x1E, 0x30, 0x30, 0x30, 0x30, 0x30, 0x7E, 0x30, 0x30, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x3E, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x18, 0x3C, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x36, 0x36, 0x6B, 0x6B, 0x6B, 0x6B, 0x63, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x3C, 0x18, 0x3C, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0xF0, 0x18, 0x0C, 0x3C, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7E, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x0C, 0x18, 0x18, 0x18, 0x30, 0x60, 0x30, 0x18, 0x18, 0x18, 0x0C, 0x00, 0x00, 0x00, +0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, +0x00, 0x00, 0x30, 0x18, 0x18, 0x18, 0x0C, 0x06, 0x0C, 0x18, 0x18, 0x18, 0x30, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8E, 0xDB, 0x71, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0xFF, 0xFF, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x6C, 0x6C, 0x6C, 0x38, 0x00, 0x00, /* ø */ +0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x00, 0x00, 0x00, +0x00, 0xF0, 0x18, 0x0C, 0x3C, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x66, 0x66, 0x00, 0x00 +}; +const unsigned char _EngLCD[256*10] ={ +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x20, 0x00, 0x00, 0x20, 0x20, 0x20, 0x20, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0x50, 0x50, 0x00, +0x00, 0x00, 0x50, 0x50, 0xF8, 0x50, 0xF8, 0x50, 0x50, 0x00, +0x00, 0x00, 0x20, 0xF0, 0x28, 0x70, 0xA0, 0x78, 0x20, 0x00, +0x00, 0x00, 0x18, 0x98, 0x40, 0x20, 0x10, 0xC8, 0xC0, 0x00, +0x00, 0x00, 0x68, 0x90, 0xA8, 0x40, 0xA0, 0x90, 0x60, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x20, 0x60, 0x00, +0x00, 0x00, 0x10, 0x20, 0x40, 0x40, 0x40, 0x20, 0x10, 0x00, +0x00, 0x00, 0x40, 0x20, 0x10, 0x10, 0x10, 0x20, 0x40, 0x00, +0x00, 0x00, 0x00, 0x20, 0xA8, 0x70, 0xA8, 0x20, 0x00, 0x00, +0x00, 0x00, 0x00, 0x20, 0x20, 0xF8, 0x20, 0x20, 0x00, 0x00, +0x00, 0x40, 0x20, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x00, 0x00, +0x00, 0x60, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x80, 0x40, 0x20, 0x10, 0x08, 0x00, 0x00, +0x00, 0x00, 0x70, 0x88, 0x88, 0x88, 0x88, 0x88, 0x70, 0x00, +0x00, 0x00, 0x70, 0x20, 0x20, 0x20, 0x20, 0x60, 0x20, 0x00, +0x00, 0x00, 0xF8, 0x40, 0x20, 0x10, 0x08, 0x88, 0x70, 0x00, +0x00, 0x00, 0x70, 0x88, 0x08, 0x10, 0x20, 0x10, 0xF8, 0x00, +0x00, 0x00, 0x10, 0x10, 0xF8, 0x90, 0x50, 0x30, 0x10, 0x00, +0x00, 0x00, 0x70, 0x88, 0x08, 0x08, 0xF0, 0x80, 0xF8, 0x00, +0x00, 0x00, 0x70, 0x88, 0x88, 0xF0, 0x80, 0x40, 0x30, 0x00, +0x00, 0x00, 0x40, 0x40, 0x40, 0x20, 0x10, 0x08, 0xF8, 0x00, +0x00, 0x00, 0x70, 0x88, 0x88, 0x70, 0x88, 0x88, 0x70, 0x00, +0x00, 0x00, 0x60, 0x10, 0x08, 0x78, 0x88, 0x88, 0x70, 0x00, +0x00, 0x00, 0x00, 0x60, 0x60, 0x00, 0x60, 0x60, 0x00, 0x00, +0x00, 0x00, 0x40, 0x20, 0x60, 0x00, 0x60, 0x60, 0x00, 0x00, +0x00, 0x00, 0x10, 0x20, 0x40, 0x80, 0x40, 0x20, 0x10, 0x00, +0x00, 0x00, 0x00, 0x00, 0xF8, 0x00, 0xF8, 0x00, 0x00, 0x00, +0x00, 0x00, 0x40, 0x20, 0x10, 0x08, 0x10, 0x20, 0x40, 0x00, +0x00, 0x00, 0x20, 0x00, 0x20, 0x10, 0x08, 0x88, 0x70, 0x00, +0x00, 0x00, 0x70, 0xA8, 0xA8, 0x68, 0x08, 0x88, 0x70, 0x00, +0x00, 0x00, 0x88, 0x88, 0xF8, 0x88, 0x88, 0x88, 0x70, 0x00, +0x00, 0x00, 0xF0, 0x88, 0x88, 0xF0, 0x88, 0x88, 0xF0, 0x00, +0x00, 0x00, 0x70, 0x88, 0x80, 0x80, 0x80, 0x88, 0x70, 0x00, +0x00, 0x00, 0xE0, 0x90, 0x88, 0x88, 0x88, 0x90, 0xE0, 0x00, +0x00, 0x00, 0xF8, 0x80, 0x80, 0xF0, 0x80, 0x80, 0xF8, 0x00, +0x00, 0x00, 0x80, 0x80, 0x80, 0xF0, 0x80, 0x80, 0xF8, 0x00, +0x00, 0x00, 0x78, 0x88, 0x88, 0xB8, 0x80, 0x88, 0x70, 0x00, +0x00, 0x00, 0x88, 0x88, 0x88, 0xF8, 0x88, 0x88, 0x88, 0x00, +0x00, 0x00, 0x70, 0x20, 0x20, 0x20, 0x20, 0x20, 0x70, 0x00, +0x00, 0x00, 0x60, 0x90, 0x10, 0x10, 0x10, 0x10, 0x38, 0x00, +0x00, 0x00, 0x88, 0x90, 0xA0, 0xC0, 0xA0, 0x90, 0x88, 0x00, +0x00, 0x00, 0xF8, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, +0x00, 0x00, 0x88, 0x88, 0x88, 0xA8, 0xA8, 0xD8, 0x88, 0x00, +0x00, 0x00, 0x88, 0x88, 0x98, 0xA8, 0xC8, 0x88, 0x88, 0x00, +0x00, 0x00, 0x70, 0x88, 0x88, 0x88, 0x88, 0x88, 0x70, 0x00, +0x00, 0x00, 0x80, 0x80, 0x80, 0xF0, 0x88, 0x88, 0xF0, 0x00, +0x00, 0x00, 0x68, 0x90, 0xA8, 0x88, 0x88, 0x88, 0x70, 0x00, +0x00, 0x00, 0x88, 0x90, 0xA0, 0xF0, 0x88, 0x88, 0xF0, 0x00, +0x00, 0x00, 0xF0, 0x08, 0x08, 0x70, 0x80, 0x80, 0x78, 0x00, +0x00, 0x00, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0xF8, 0x00, +0x00, 0x00, 0x70, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x00, +0x00, 0x00, 0x20, 0x50, 0x88, 0x88, 0x88, 0x88, 0x88, 0x00, +0x00, 0x00, 0x50, 0xA8, 0xA8, 0xA8, 0x88, 0x88, 0x88, 0x00, +0x00, 0x00, 0x88, 0x88, 0x50, 0x20, 0x50, 0x88, 0x88, 0x00, +0x00, 0x00, 0x20, 0x20, 0x20, 0x50, 0x88, 0x88, 0x88, 0x00, +0x00, 0x00, 0xF8, 0x80, 0x40, 0x20, 0x10, 0x08, 0xF8, 0x00, +0x00, 0x00, 0x70, 0x40, 0x40, 0x40, 0x40, 0x40, 0x70, 0x00, +0x00, 0x00, 0x20, 0x20, 0xF8, 0x20, 0xF8, 0x50, 0x88, 0x00, +0x00, 0x00, 0x70, 0x10, 0x10, 0x10, 0x10, 0x10, 0x70, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x50, 0x20, 0x00, +0x00, 0x00, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x20, 0x40, 0x00, +0x00, 0x00, 0x78, 0x88, 0x78, 0x08, 0x70, 0x00, 0x00, 0x00, +0x00, 0x00, 0xF0, 0x88, 0x88, 0xC8, 0xB0, 0x80, 0x80, 0x00, +0x00, 0x00, 0x70, 0x88, 0x80, 0x80, 0x70, 0x00, 0x00, 0x00, +0x00, 0x00, 0x78, 0x88, 0x88, 0x98, 0x68, 0x08, 0x08, 0x00, +0x00, 0x00, 0x70, 0x80, 0xF8, 0x88, 0x70, 0x00, 0x00, 0x00, +0x00, 0x00, 0x40, 0x40, 0x40, 0xE0, 0x40, 0x48, 0x30, 0x00, +0x00, 0x00, 0x70, 0x08, 0x78, 0x88, 0x88, 0x78, 0x00, 0x00, +0x00, 0x00, 0x88, 0x88, 0x88, 0xC8, 0xB0, 0x80, 0x80, 0x00, +0x00, 0x00, 0x70, 0x20, 0x20, 0x20, 0x60, 0x00, 0x20, 0x00, +0x00, 0x00, 0x60, 0x90, 0x10, 0x10, 0x30, 0x00, 0x10, 0x00, +0x00, 0x00, 0x90, 0xA0, 0xC0, 0xA0, 0x90, 0x80, 0x80, 0x00, +0x00, 0x00, 0x70, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x00, +0x00, 0x00, 0xA8, 0xA8, 0xA8, 0xA8, 0xD0, 0x00, 0x00, 0x00, +0x00, 0x00, 0x88, 0x88, 0x88, 0xC8, 0xB0, 0x00, 0x00, 0x00, +0x00, 0x00, 0x70, 0x88, 0x88, 0x88, 0x70, 0x00, 0x00, 0x00, +0x00, 0x00, 0x80, 0x80, 0xF0, 0x88, 0xF0, 0x00, 0x00, 0x00, +0x00, 0x00, 0x08, 0x08, 0x78, 0x98, 0x68, 0x00, 0x00, 0x00, +0x00, 0x00, 0x80, 0x80, 0x80, 0xC8, 0xB8, 0x00, 0x00, 0x00, +0x00, 0x00, 0xF0, 0x08, 0x70, 0x80, 0x70, 0x00, 0x00, 0x00, +0x00, 0x00, 0x30, 0x48, 0x40, 0x40, 0xE0, 0x40, 0x40, 0x00, +0x00, 0x00, 0x68, 0x98, 0x88, 0x88, 0x88, 0x00, 0x00, 0x00, +0x00, 0x00, 0x20, 0x50, 0x88, 0x88, 0x88, 0x00, 0x00, 0x00, +0x00, 0x00, 0x50, 0xA8, 0xA8, 0x88, 0x88, 0x00, 0x00, 0x00, +0x00, 0x00, 0x88, 0x50, 0x20, 0x50, 0x88, 0x00, 0x00, 0x00, +0x00, 0x00, 0x70, 0x08, 0x78, 0x88, 0x88, 0x00, 0x00, 0x00, +0x00, 0x00, 0xF8, 0x40, 0x20, 0x10, 0xF8, 0x00, 0x00, 0x00, +0x00, 0x00, 0x10, 0x20, 0x20, 0x40, 0x20, 0x20, 0x10, 0x00, +0x00, 0x00, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, +0x00, 0x00, 0x40, 0x20, 0x20, 0x10, 0x20, 0x20, 0x40, 0x00, +0x00, 0x00, 0x00, 0x20, 0x10, 0xF8, 0x10, 0x20, 0x00, 0x00, +0x00, 0x00, 0x00, 0x20, 0x40, 0xF8, 0x40, 0x20, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0xE0, 0xA0, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x20, 0x20, 0x38, 0x00, +0x00, 0x00, 0xE0, 0x20, 0x20, 0x20, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x20, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x20, 0x10, 0x08, 0xF8, 0x08, 0xF8, 0x00, 0x00, +0x00, 0x00, 0x40, 0x20, 0x30, 0x08, 0xF8, 0x00, 0x00, 0x00, +0x00, 0x00, 0x20, 0xA0, 0x60, 0x20, 0x10, 0x00, 0x00, 0x00, +0x00, 0x00, 0x30, 0x08, 0x88, 0xF8, 0x20, 0x00, 0x00, 0x00, +0x00, 0x00, 0xF8, 0x20, 0x20, 0xF8, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x90, 0x50, 0x30, 0xF8, 0x10, 0x00, 0x00, 0x00, +0x00, 0x00, 0x40, 0x50, 0x48, 0xF8, 0x40, 0x00, 0x00, 0x00, +0x00, 0x00, 0xF8, 0x10, 0x10, 0x70, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0xF0, 0x10, 0xF0, 0x10, 0xF0, 0x00, 0x00, 0x00, +0x00, 0x00, 0x30, 0x08, 0xA8, 0xA8, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x40, 0x20, 0x20, 0x38, 0x28, 0x08, 0xF8, 0x00, +0x00, 0x00, 0x20, 0x20, 0xA0, 0x60, 0x20, 0x10, 0x08, 0x00, +0x00, 0x00, 0x20, 0x10, 0x08, 0x88, 0x88, 0xF8, 0x20, 0x00, +0x00, 0x00, 0xF8, 0x20, 0x20, 0x20, 0x20, 0xF8, 0x00, 0x00, +0x00, 0x00, 0x10, 0x90, 0x50, 0x30, 0x10, 0xF8, 0x10, 0x00, +0x00, 0x00, 0x90, 0x48, 0x48, 0x48, 0x48, 0xF8, 0x40, 0x00, +0x00, 0x00, 0x20, 0x20, 0x20, 0xF8, 0x20, 0xF8, 0x20, 0x00, +0x00, 0x00, 0x60, 0x10, 0x08, 0x88, 0x48, 0x78, 0x00, 0x00, +0x00, 0x00, 0x20, 0x10, 0x10, 0x10, 0x90, 0x78, 0x40, 0x00, +0x00, 0x00, 0xF8, 0x08, 0x08, 0x08, 0x08, 0xF8, 0x00, 0x00, +0x00, 0x00, 0x40, 0x20, 0x10, 0x50, 0x50, 0xF8, 0x50, 0x00, +0x00, 0x00, 0xE0, 0x10, 0x08, 0xC8, 0x08, 0xC0, 0x00, 0x00, +0x00, 0x00, 0x88, 0x50, 0x20, 0x10, 0x08, 0xF8, 0x00, 0x00, +0x00, 0x00, 0x38, 0x40, 0x40, 0x50, 0x48, 0xF8, 0x40, 0x00, +0x00, 0x00, 0x60, 0x10, 0x08, 0x48, 0x88, 0x88, 0x00, 0x00, +0x00, 0x00, 0x60, 0x10, 0x18, 0xA8, 0x48, 0x78, 0x00, 0x00, +0x00, 0x00, 0x40, 0x20, 0x20, 0xF8, 0x20, 0xE0, 0x10, 0x00, +0x00, 0x00, 0x20, 0x10, 0x08, 0xA8, 0xA8, 0xA8, 0x00, 0x00, +0x00, 0x00, 0x40, 0x20, 0x20, 0x20, 0xF8, 0x00, 0x70, 0x00, +0x00, 0x00, 0x40, 0x40, 0x50, 0x60, 0x40, 0x40, 0x40, 0x00, +0x00, 0x00, 0x80, 0x40, 0x20, 0x20, 0xF8, 0x20, 0x20, 0x00, +0x00, 0x00, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, +0x00, 0x00, 0x80, 0x50, 0x20, 0x50, 0x08, 0xF8, 0x00, 0x00, +0x00, 0x00, 0x20, 0xA8, 0x70, 0x20, 0x10, 0xF8, 0x20, 0x00, +0x00, 0x00, 0x40, 0x20, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00, +0x00, 0x00, 0x88, 0x88, 0x88, 0x88, 0x10, 0x20, 0x00, 0x00, +0x00, 0x00, 0x78, 0x80, 0x80, 0x80, 0xF8, 0x80, 0x80, 0x00, +0x00, 0x00, 0x60, 0x10, 0x08, 0x08, 0x08, 0xF8, 0x00, 0x00, +0x00, 0x00, 0x00, 0x08, 0x08, 0x10, 0xA0, 0x40, 0x00, 0x00, +0x00, 0x00, 0x20, 0xA8, 0xA8, 0x20, 0x20, 0xF8, 0x20, 0x00, +0x00, 0x00, 0x10, 0x20, 0x50, 0x08, 0x08, 0xF8, 0x00, 0x00, +0x00, 0x00, 0x08, 0x70, 0x00, 0x70, 0x00, 0x70, 0x00, 0x00, +0x00, 0x00, 0x08, 0xF8, 0x88, 0x80, 0x40, 0x20, 0x00, 0x00, +0x00, 0x00, 0x80, 0x50, 0x20, 0x50, 0x08, 0x08, 0x00, 0x00, +0x00, 0x00, 0x38, 0x40, 0x40, 0xF8, 0x40, 0xF8, 0x00, 0x00, +0x00, 0x00, 0x40, 0x40, 0x50, 0x48, 0xF8, 0x40, 0x40, 0x00, +0x00, 0x00, 0xF8, 0x10, 0x10, 0x10, 0x10, 0x70, 0x00, 0x00, +0x00, 0x00, 0xF8, 0x08, 0x08, 0xF8, 0x08, 0xF8, 0x00, 0x00, +0x00, 0x00, 0x20, 0x10, 0x08, 0x08, 0xF8, 0x00, 0x70, 0x00, +0x00, 0x00, 0x40, 0x20, 0x10, 0x90, 0x90, 0x90, 0x90, 0x00, +0x00, 0x00, 0xB0, 0xA8, 0xA8, 0xA0, 0xA0, 0x20, 0x00, 0x00, +0x00, 0x00, 0xC0, 0xA0, 0x90, 0x88, 0x80, 0x80, 0x00, 0x00, +0x00, 0x00, 0xF8, 0x88, 0x88, 0x88, 0x88, 0xF8, 0x00, 0x00, +0x00, 0x00, 0x20, 0x10, 0x08, 0x88, 0x88, 0xF8, 0x00, 0x00, +0x00, 0x00, 0xE0, 0x10, 0x08, 0x08, 0x00, 0xC0, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x90, 0x20, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xA0, 0xE0, 0x00, +0x00, 0x00, 0x00, 0x68, 0x90, 0x90, 0xA8, 0x48, 0x00, 0x00, +0x00, 0x00, 0x78, 0x88, 0x78, 0x08, 0x70, 0x00, 0x50, 0x00, +0x80, 0x80, 0x80, 0xF0, 0x88, 0xF0, 0x88, 0x70, 0x00, 0x00, +0x00, 0x00, 0x70, 0x88, 0x60, 0x80, 0x70, 0x00, 0x00, 0x00, +0x80, 0x80, 0x80, 0xE8, 0x98, 0x88, 0x88, 0x88, 0x00, 0x00, +0x00, 0x00, 0x70, 0x88, 0x90, 0xA0, 0x78, 0x00, 0x00, 0x00, +0x80, 0x80, 0x80, 0xF0, 0x88, 0x88, 0x48, 0x30, 0x00, 0x00, +0x70, 0x08, 0x08, 0x78, 0x88, 0x88, 0x88, 0x78, 0x00, 0x00, +0x00, 0x00, 0x40, 0xA0, 0x20, 0x20, 0x38, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0xD0, 0x10, 0x00, 0x00, +0x60, 0x90, 0x10, 0x10, 0x10, 0x10, 0x10, 0x30, 0x00, 0x10, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA0, 0x40, 0xA0, 0x00, +0x00, 0x00, 0x20, 0x70, 0xA8, 0xA0, 0x70, 0x20, 0x00, 0x00, +0x00, 0x00, 0x78, 0x40, 0xE0, 0x40, 0xE0, 0x40, 0x40, 0x00, +0x00, 0x00, 0x88, 0x88, 0x88, 0xC8, 0xB0, 0x00, 0x70, 0x00, +0x00, 0x00, 0x70, 0x88, 0x88, 0x88, 0x70, 0x00, 0x50, 0x00, +0x80, 0x80, 0x80, 0xF0, 0x88, 0x88, 0xC8, 0xB0, 0x00, 0x00, +0x08, 0x08, 0x08, 0x78, 0x88, 0x88, 0x98, 0x68, 0x00, 0x00, +0x00, 0x00, 0x70, 0x88, 0x88, 0xF8, 0x88, 0x70, 0x00, 0x00, +0x00, 0x00, 0x00, 0xD0, 0xA8, 0x58, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0xD8, 0x50, 0x88, 0x88, 0x70, 0x00, 0x00, 0x00, +0x00, 0x00, 0x68, 0x98, 0x88, 0x88, 0x88, 0x00, 0x50, 0x00, +0x00, 0x00, 0xF8, 0x80, 0x40, 0x20, 0x40, 0x80, 0xF8, 0x00, +0x00, 0x00, 0x98, 0x50, 0x50, 0x50, 0xF8, 0x00, 0x00, 0x00, +0x00, 0x00, 0x88, 0x50, 0x20, 0x50, 0x88, 0x00, 0xF8, 0x00, +0x70, 0x08, 0x08, 0x78, 0x88, 0x88, 0x88, 0x88, 0x00, 0x00, +0x00, 0x00, 0x20, 0x20, 0xF8, 0x20, 0xF0, 0x08, 0x00, 0x00, +0x00, 0x00, 0x00, 0x88, 0x48, 0x78, 0x40, 0xF8, 0x00, 0x00, +0x00, 0x00, 0x88, 0x88, 0xF8, 0xA8, 0xF8, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x20, 0x00, 0xF8, 0x00, 0x20, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8 +}; \ No newline at end of file diff -urN linux-2.4.21/drivers/char/h7210_buslcd.c linux-2.4.21-h7210/drivers/char/h7210_buslcd.c --- linux-2.4.21/drivers/char/h7210_buslcd.c 1970-01-01 09:00:00.000000000 +0900 +++ linux-2.4.21-h7210/drivers/char/h7210_buslcd.c 2004-06-10 11:27:09.000000000 +0900 @@ -0,0 +1,421 @@ +/* + * linux/drivers/char/h7210_buslcd.c + * + * Copyright (C) 2004 Byunghwan Jun, Hynix Semiconductor Inc. + * + * 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, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * Bus lcd driver for Hynix h7210 evaluation board +*/ + + +#include +#include + +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include + + +#define LCD_CTRL_BASE 0x02c00000 + +#define LCD_IOCTL_MAGIC 250 +#define LCD_PUTS _IO(LCD_IOCTL_MAGIC,1) +#define LCD_CLEAR _IO(LCD_IOCTL_MAGIC,0) +#define LCD_BLOCK _IO(LCD_IOCTL_MAGIC,2) + +#define DPRINTK(fmt, args...) printk("%s: " fmt, __FUNCTION__ , ## args) +#define DEVICE_NAME "lcd" +#define MAJOR_NUM 250 + +static int s_nMajor ; +static int hms7210_ctrl_base; +static int s_bDeviceOpen = 1; + +#define hms7210_data_base hms7210_ctrl_base+0x2 + +#define COPY(A,B) for(loop=0;loop<32;loop++) *(B+loop)=*(A+loop); +#define OR(A,B) for(loop=0;loop<32;loop++) *(B+loop)|=*(A+loop); + +/* EngFont.c */ +extern const unsigned char _EngDos[256*16]; +extern const unsigned char _EngFixed[256*16]; +extern const unsigned char _EngLCD[256*10]; + +/* HanFont.c */ +extern const unsigned char _HanSoft[(8*20+4*22+4*28)*32]; +extern const unsigned char _HanGodic[(8*20+4*22+4*28)*32]; +extern const unsigned char _HanMyungJo[(8*20+4*22+4*28)*32]; + +typedef struct tagFontHeader{ + const unsigned char Width; + const unsigned char Height; + const unsigned char Size; + const unsigned char *pFont; +}FontHeader; + +const unsigned char CheckBit[8]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01}; +const unsigned char _first[]={0,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19 }; +const unsigned char _middle[]={ 0,0,0,1,2,3,4,5,0,0,6,7,8,9,10,11,0,0,12,13,14,15,16,17,0,0,18,19,20,21 }; +const unsigned char _last[]={ 0,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,0,17,18,19,20,21,22,23,24,25,26,27 }; +const unsigned char cho[]={0,0,0,0,0,0,0,0,0,1,3,3,3,1,2,4,4,4,2,1,3,0 }; +const unsigned char cho2[]={0,5,5,5,5,5,5,5,5,6,7,7,7,6,6,7,7,7,6,6,7,5}; +const unsigned char jong[]={0,0,2,0,2,1,2,1,2,3,0,2,1,3,3,1,2,1,3,3,1,1}; + +/* Korean & English Font */ +FontHeader EngFont[3]={ + {8,16,16,_EngDos}, + {8,16,16,_EngFixed}, + {6,10,10,_EngLCD} +}; +FontHeader HanFont[3]={ + {16,16,32,_HanSoft}, + {16,16,32,_HanGodic}, + {16,16,32,_HanMyungJo} +}; + +const FontHeader *pEngFont,*pHanFont; +unsigned short CurrentX,CurrentY; + +struct lcd_puts { + unsigned short x; + unsigned short y; +// unsigned char str[16]; + unsigned char *str; +}; + + +/* + * Function Prototypes + */ +static int lcd_open(struct inode *inode, struct file *file); +static int lcd_release(struct inode *inode, struct file *file); +ssize_t lcd_write(struct file *file, const char *buffer, size_t length, loff_t *offset); +static int lcd_ioctl(struct inode *inodep, struct file *file, unsigned int cmd, unsigned long arg); +static void ag12864g_init(void); +static void ag12864g_clear(void); +static void ag12864g_block(void); + +void LcdDisplayXYSet(int iCol, int iRow); +void MoveTo(unsigned short x,unsigned short y); +void InitFont(void); +static void engcode(unsigned char ch,unsigned char *buffer); +void PutEnglishChar(unsigned char ch); +static void hancode(unsigned charcode,unsigned char *buffer); +static void _16x16(/*unsigned short x,unsigned short y,*/unsigned char *image); +void PutKoreanChar(unsigned char *str); +void PutString(unsigned char *str); + +/* + * Device Operations + */ + +static int lcd_open(struct inode *inode, struct file *file) +{ + if (s_bDeviceOpen) { + /*return -EBUSY; */ + } + ++s_bDeviceOpen; + MOD_INC_USE_COUNT; + + return 0; +} + +static int lcd_release(struct inode *inode, struct file *file) +{ + if (!s_bDeviceOpen) { + DPRINTK(DEVICE_NAME " : Device has not opened\n"); + return -EINVAL; + } + --s_bDeviceOpen; + MOD_DEC_USE_COUNT; + return 0; +} + +ssize_t lcd_write(struct file *file, const char *buffer, size_t length, loff_t *offset) +{ + return -ENOSYS; /* not implemented */ +} + +int lcd_ioctl(struct inode *inodep, struct file *file, unsigned int cmd, unsigned long arg) +{ + + switch (cmd) { + case LCD_PUTS:{ + struct lcd_puts data; + if(copy_from_user(&data, (struct lcd_puts *)arg, + sizeof(struct lcd_puts))) + return -EFAULT; + printk("lcd_ioctl LCD_PUTS\n"); + MoveTo(data.x, data.y); + PutString(data.str); + break; + } + case LCD_CLEAR:{ + printk("lcd_ioctl LCD_CLEAR\n"); + ag12864g_clear(); + break; + } + case LCD_BLOCK:{ + ag12864g_block(); + break; + } + default: + DPRINTK(DEVICE_NAME" ioctl : unknown command\n"); + return -EINVAL; + } + return 0; +} + +/*-------------------------------------------------------------------------*/ + +void LcdDisplayXYSet(int iCol, int iRow) +{ + CPU_IOB(hms7210_ctrl_base)= (unsigned char)(0xb0|(iRow & 0x0f)); + CPU_IOB(hms7210_ctrl_base)= (unsigned char)(0x10|((iCol>>4) & 0x0f)); + CPU_IOB(hms7210_ctrl_base)= (unsigned char)(0x00|((iCol) & 0x0f)); +} + +static void ag12864g_block(void) +{ + int i, j; + for(i=0;i < 8;i++){ + LcdDisplayXYSet(0,i); + for(j=0; j<128; j++){ + CPU_IOB(hms7210_data_base)= 0xff; + } + } +} +static void ag12864g_clear(void) +{ + int i, j; + for(i=0;i < 8;i++){ + LcdDisplayXYSet(0,i); + for(j=0; j<128; j++){ + CPU_IOB(hms7210_data_base)= 0x00; + } + } + +} + +void MoveTo(unsigned short x,unsigned short y) +{ + CurrentX=x; + CurrentY=y; +} + +void InitFont(void) +{ + pEngFont=&EngFont[1]; + pHanFont=&HanFont[2]; // HanSoft, HanGodic, HanMJ + CurrentX=0; + CurrentY=0; +} + +static void engcode(unsigned char ch,unsigned char *buffer) +{ + unsigned char i; + + for(i=pEngFont->Size;i>0;i--){ + buffer[16-i]=pEngFont->pFont[(ch*pEngFont->Size)+i]; + } +} + +/* Korean & English Font */ +void PutEnglishChar(unsigned char ch) +{ + unsigned char temp[16]; + unsigned char temp1[16]; + unsigned int i,j; + + engcode(ch,temp); + + for (j=0;j<8;j++){ + temp1[j]=0;temp1[j+8]=0; + for (i=0;i<8;i++){ + temp1[j]>>=1;temp1[j+8]>>=1; + if (temp[i]&CheckBit[j]) temp1[j]|=0x80; + if (temp[i+8]&CheckBit[j]) temp1[j+8]|=0x80; + } + } + + LcdDisplayXYSet(CurrentY,CurrentX); + for (j=0; j<8; j++) { + CPU_IOB(hms7210_data_base)= temp1[j]; + } + LcdDisplayXYSet(CurrentY,CurrentX+1); + for (j=8; j<16; j++) { + CPU_IOB(hms7210_data_base)= temp1[j]; + } + CurrentY+=8; +} + +static void hancode(unsigned charcode,unsigned char *buffer) +{ + unsigned first,middle,last,loop; + unsigned offset; + + first=_first[(charcode>>10)&31]; + middle=_middle[(charcode>>5)&31]; + last=_last[(charcode)&31]; + + if(last==0){ + offset=cho[middle]*640; /* ¸ñÞ÷ */ + offset+=first*32; + COPY(pHanFont->pFont+offset,buffer); + + if(first==1||first==24) offset=5120; /* ˆaÞ÷ */ + else offset=5120+704; + offset+=middle*32; + OR(pHanFont->pFont+offset,buffer); + }else{ + offset=cho2[middle]*640; /* ¸ñÞ÷ */ + offset+=first*32; + COPY(pHanFont->pFont+offset,buffer); + + if(first==1||first==24) offset=5120+704*2; /* ˆaÞ÷ */ + else offset=5120+704*3; + offset+=middle*32; + OR(pHanFont->pFont+offset,buffer); + + offset=5120+2816+jong[middle]*896; /* ¢›Þ÷ */ + offset+=last*32; + OR(pHanFont->pFont+offset,buffer); + } +} + +static void _16x16(/*unsigned short x,unsigned short y,*/unsigned char *image) +{ + unsigned char i,j; + unsigned int data; + unsigned char temp[32]; + unsigned char temp1[32]; + + for(i=0;i<16;i++){ + data=0; + data=image[i*2];data<<=8; + data|=image[i*2+1]; + temp[i*2+1]=data&0X00FF; + temp[i*2]=(data>>8)&0X00FF; + } + + for (j=0;j<8;j++){ + temp1[j]=0;temp1[j+8]=0;temp1[j+16]=0;temp1[j+24]=0; + for (i=0;i<8;i++){ + temp1[j]>>=1;temp1[j+8]>>=1;temp1[j+16]>>=1;temp1[j+24]>>=1; + if (temp[i*2]&CheckBit[j]) temp1[j+0]|=0x80; + if (temp[i*2+1]&CheckBit[j]) temp1[j+8]|=0x80; + if (temp[i*2+16]&CheckBit[j]) temp1[j+16]|=0x80; + if (temp[i*2+1+16]&CheckBit[j]) temp1[j+24]|=0x80; + } + } + + LcdDisplayXYSet(CurrentY,CurrentX); + for (j=0; j<16; j++) { + CPU_IOB(hms7210_data_base)= temp1[j]; + } + LcdDisplayXYSet(CurrentY,CurrentX+1); + for (j=16; j<32; j++) { + CPU_IOB(hms7210_data_base)= temp1[j]; + } + CurrentY+=16; +} + +void PutKoreanChar(unsigned char *str) +{ + unsigned charcode; + unsigned char temp[32]; + + charcode=*str++; + charcode*=256; + charcode|=*str; + hancode(charcode,temp); + _16x16(temp); +} + +void PutString(unsigned char *str) +{ + while(*str){ + if(*str>=128) + PutKoreanChar(str++); + else + PutEnglishChar(*str); + str++; + } +} +/*---------------------------------------------------------------------------*/ +static struct file_operations lcd_fops = { + write: lcd_write, + ioctl: lcd_ioctl, + open: lcd_open, + release: lcd_release +}; + +static void ag12864g_init(void) +{ + + CPU_IO(BANK2_REG_VIRT) = 0x1; // RCS busw 16 + hms7210_ctrl_base=(unsigned long)ioremap(LCD_CTRL_BASE,0x20); + + CPU_IOB(hms7210_ctrl_base) = 0xE2; + + CPU_IOB(hms7210_ctrl_base) = 0xA0;// ADC Select + CPU_IOB(hms7210_ctrl_base) = 0xC8;// COmmon Output Mode Select + CPU_IOB(hms7210_ctrl_base) = 0xA2;// LCD Bias 1/9 + CPU_IOB(hms7210_ctrl_base) = 0x2F;// power control Set v + CPU_IOB(hms7210_ctrl_base) = 0x24;// V5 Voltage Set + CPU_IOB(hms7210_ctrl_base) = 0x81;// Electronic Volume Mode Set + CPU_IOB(hms7210_ctrl_base) = 0x25;// Electronic Volume Value Set + CPU_IOB(hms7210_ctrl_base) = 0x40;// Display Line Start 0x40+start(6digit) + CPU_IOB(hms7210_ctrl_base) = 0x10;// Column Address Set Upper Bits + CPU_IOB(hms7210_ctrl_base) = 0x00;// Column Address Set Lower Bits + CPU_IOB(hms7210_ctrl_base) = 0xAF;// display On + + DPRINTK(DEVICE_NAME " : lcd init \n"); + +} + +static int __init lcd_init(void) +{ + if ((s_nMajor = register_chrdev(MAJOR_NUM, DEVICE_NAME, &lcd_fops)) < 0) { + DPRINTK(DEVICE_NAME " : Device registration failed (%d)\n", s_nMajor); + return s_nMajor; + } + InitFont(); + ag12864g_init(); + ag12864g_clear(); + + MoveTo(0,0); + PutString("LCD INIT"); + + return 0; +} + +void cleanup_module(void) +{ + unregister_chrdev(MAJOR_NUM, DEVICE_NAME); +} + +module_init(lcd_init); +module_exit(cleanup_module); diff -urN linux-2.4.21/drivers/char/h7210_keyb.c linux-2.4.21-h7210/drivers/char/h7210_keyb.c --- linux-2.4.21/drivers/char/h7210_keyb.c 1970-01-01 09:00:00.000000000 +0900 +++ linux-2.4.21-h7210/drivers/char/h7210_keyb.c 2004-06-08 02:59:35.000000000 +0900 @@ -0,0 +1,321 @@ +/* + * linux/drivers/char/h7210_keyb.c + * + * Copyright (C) 2000 Jungjun Kim, Hynix Semiconductor Inc. + * + * 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, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * Evaluation board driver for matrix keyboards on Hynix h7210 devices. + * + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define DPRINTK(fmt, args...) printk("%s: " fmt, __FUNCTION__ , ## args) + +#define DEVICE_NAME "mkey" +#define MAJOR_NUM 150 + +#define KEY_IOCTL_MAGIC 150 +#define KEY_GETNUM _IO(KEY_IOCTL_MAGIC,0) + +#define MAX_KEYB_ROW 6 +#define MAX_KEYB_COL 6 + +#define MAX_EMPTY_SCANS 10 +#define KEY_BUFF_SIZE 2 +#define KEY_MAXBUFF_SIZE 4 + +static int s_nMajor ; +static int s_bDeviceOpen = 1; +static char *keydatap; +unsigned char keydata_count; + +unsigned char s_scancode[MAX_KEYB_COL][MAX_KEYB_ROW] = { + {0x20, 0x21, 0x22, 0x23, 0x24, 0x25}, + {0x30, 0x31, 0x32, 0x33, 0x34, 0x35}, + {0x40, 0x41, 0x42, 0x43, 0x44, 0x45}, + {0x50, 0x51, 0x52, 0x53, 0x54, 0x55}, + {0x00, 0x01, 0x02, 0x03, 0x04, 0x05}, + {0x10, 0x11, 0x12, 0x13, 0x14, 0x15}, +}; + +/* Debounced column scan results */ +static union { + u8 colb[MAX_KEYB_COL]; + u32 colw[(MAX_KEYB_COL >> 2)]; +}kbd_buf; + +/* compare buffer for changed scan results (columns) */ +static unsigned char prev_colb[MAX_KEYB_COL]; + + +/* + * Function Prototypes + */ +static int key_open(struct inode *inode, struct file *file); +static int key_release(struct inode *inode, struct file *file); +static int key_ioctl(struct inode *inodep, struct file *file, unsigned int cmd, unsigned long arg); + + +/* + * Device Operations + */ + +static int key_open(struct inode *inode, struct file *file) +{ + if (s_bDeviceOpen) { + /*return -EBUSY; */ + } + ++s_bDeviceOpen; + MOD_INC_USE_COUNT; + + return 0; +} + +static int key_release(struct inode *inode, struct file *file) +{ + if (!s_bDeviceOpen) { + DPRINTK(DEVICE_NAME " : Device has not opened\n"); + return -EINVAL; + } + --s_bDeviceOpen; + MOD_DEC_USE_COUNT; + return 0; +} + + +ssize_t key_read(struct file *flip, char *buff, size_t count, loff_t *loff) +{ + char c; + const char *data; + data = buff; + c = keydatap; + + keydata_count --; + put_user (c, (char *)(data)); + return 0; +} + +int key_ioctl(struct inode *inodep, struct file *file, unsigned int cmd, unsigned long arg) +{ + int ret = 0; + switch (cmd) { + case KEY_GETNUM:{ + ret = keydata_count; + break; + } + default: + DPRINTK(DEVICE_NAME" ioctl : unknown command\n"); + return -EINVAL; + } + return ret; +} + +/*-------------------------------------------------------------------------*/ +static inline void kbd_enable (void) +{ + CPU_IO(KBD_KBCR_VIRT) |= (KBD_KBCR_SCAN_ENABLE|KBD_KBCR_NPOWER_DOWN_OFF); + +} + +/* Disable keyboard driver */ +static inline void kbd_disable (void) +{ + CPU_IO(KBD_KBCR_VIRT) &= ~(KBD_KBCR_SCAN_ENABLE|KBD_KBCR_NPOWER_DOWN_OFF); +} + +/* Set keyboard clock */ +static inline void kbd_setclk (u32 clk) +{ + CPU_IO(KBD_KBCR_VIRT) &= ~KBD_KBCR_CLK_SEL_MASK; + CPU_IO(KBD_KBCR_VIRT) |= clk; +} + +static struct file_operations key_fops = { + ioctl: key_ioctl, + open: key_open, + read: key_read, + release: key_release +}; + +/* + * Process keycodes + */ + +static void handle_keyevent (void) +{ + int i, j; + char up_flag; + /* walk through the columns */ + for (i = 0; i < MAX_KEYB_COL; i++) { + /* xor with previous column data */ + u8 bit = prev_colb[i] ^ kbd_buf.colb[i]; + /* Check for a change in this column */ + if (!bit) + continue; + + /* Scan the rows */ + for (j = 0; j < MAX_KEYB_ROW; j++) { + /* exclude unchanged and invalid keycodes */ + if (!(bit & (1 << j)) || (s_scancode[i][j] == 0xff)) + continue; + /* set the up / down event */ + + up_flag= (kbd_buf.colb[i] & (1 << j)) ? 0 : 0200; + if (!up_flag){ + keydata_count ++; + keydatap = s_scancode[i][j]; + printk ("kbd: 0x%x \n ",s_scancode[i][j]); + } + } + /* Save it for next time */ + prev_colb[i] = kbd_buf.colb[i]; + + /* schedule generic keyboard tasklet for processing */ + tasklet_schedule (&keyboard_tasklet); + } +} + +/* Static buffers for debouncing and keyboard scan disable */ +static int kbd_released; +static int debounce_buf[2]; + +/* + * Keyboard interrupt + */ +static void kbd_interrupt (int irq, void *dev_id, struct pt_regs *regs) +{ + int status, i; + /* Read status register */ + status = CPU_IO(KBD_KBSR_VIRT); + CPU_IO(KBD_KBSR_VIRT) = status; + + /* keyboard buffer full interrupt ? */ + if (status & KBD_KBSR_INTR_FULL) { + u32 buf[2], tmp[2]; + /* Read the scan buffers */ + buf[0] = CPU_IO(KBD_KBVR0_VIRT); + buf[1] = CPU_IO(KBD_KBVR1_VIRT); + + /* All keys released ? */ + if (!(buf[0] | buf[1])) { + /* If enough empty scans happend, switch off the scanner */ + if (++kbd_released > MAX_EMPTY_SCANS) { + kbd_disable (); + kbd_released = 0; + debounce_buf[0] = debounce_buf[1] = 0; + return; + } + } else + kbd_released = 0; + + /* 2 stage debouncing */ + for (i = 0; i < 2; i++) { + /* Debounce keys, get changed keys */ + tmp[i] = debounce_buf[i] ^ buf[i]; + /* Keep bits, which have changed since last scan */ + kbd_buf.colw[i] &= tmp[i]; + /* Set valid bits */ + kbd_buf.colw[i] |= (~tmp[i]&buf[i]); + /* Move actual to debounce buffer */ + debounce_buf[i] = buf[i]; + } + /* Process result */ + handle_keyevent (); + } else { + /* If a key is pressed reenable scanning */ + if (status & KBD_KBSR_WAKEUP_DIS) + kbd_enable (); + } +} + +static void key_initrd(void) +{ + /* Configure Port A */ + CPU_IO(GPIO_AEN_VIRT) = 0; + CPU_IO(GPIO_ADIR_VIRT) = 0; + + /* Configure keyboard controller regs */ + CPU_IO(KBD_KBVR0_VIRT) = 0; + CPU_IO(KBD_KBVR1_VIRT) = 0; + CPU_IO(KBD_KBCR_VIRT) = 0; + + /* Read status reg */ + CPU_IO(KBD_KBSR_VIRT); + + /* Disable keyboard driver */ + kbd_disable (); + /* Set keyboard clock to 7kHz */ + kbd_setclk (KBD_KBCR_CLK_SEL_PCLK_DIV_512); + /* Enable keyboard driver */ + kbd_enable (); + + /* Get keyboard interrupt */ + if (request_irq (IRQ_KBD, kbd_interrupt, 0, "keyboard", NULL) != 0) + panic ("Request of keyboard irq failed\n"); + +} + +static int __init key_init(void) +{ + if ((s_nMajor = register_chrdev(MAJOR_NUM, DEVICE_NAME, &key_fops)) < 0) { + DPRINTK(DEVICE_NAME " : Device registration failed (%d)\n", s_nMajor); + return s_nMajor; + } + keydatap = (unsigned char *)kmalloc(KEY_MAXBUFF_SIZE, GFP_KERNEL); + + if (!keydatap) { + printk ("Unable to allocate data buffer.\n"); + } + + printk (KERN_INFO "Hynix keyboard driver initialized\n"); + + key_initrd(); + + return 0; +} + +void cleanup_key_module(void) +{ + unregister_chrdev(MAJOR_NUM, DEVICE_NAME); + kfree(keydatap); +} + +module_init(key_init); +module_exit(cleanup_key_module); diff -urN linux-2.4.21/drivers/char/h7210_msrgpio.c linux-2.4.21-h7210/drivers/char/h7210_msrgpio.c --- linux-2.4.21/drivers/char/h7210_msrgpio.c 1970-01-01 09:00:00.000000000 +0900 +++ linux-2.4.21-h7210/drivers/char/h7210_msrgpio.c 2004-06-04 18:39:39.000000000 +0900 @@ -0,0 +1,436 @@ +/* + * linux/drivers/char/h7210_prndot.c + * + * Copyright (C) 2004 Hynix semiconductor Inc. + * + * maded by yoonseok seo (e-mail:yoonseok.seo@hynix.com + * 5.31.2004 + */ + + +#include // +#include + +#include +#include // Define MOD_INC_USE_COUNT, MOD_DEC_USE_COUNT, MOD_IN_USE +#include +#include /* kmalloc() */ + +#include +#include +#include +#include /* get_user, copy_to_user */ +#include +#include +#include +#include +#include +//#include "msr.h" +#include +#include +#include + +#define _INLINE_ inline + + + +#define putb(a, v) (*(volatile unsigned char *)(a) = (v)) +#define putw(a, v) (*(volatile unsigned short *)(a) = (v)) +#define putdw(a, v) (*(volatile unsigned long *)(a) = (v)) + +#define getb(a) (*(volatile unsigned char *)(a)) +#define getw(a) (*(volatile unsigned short *)(a)) +#define getdw(a) (*(volatile unsigned long *)(a)) + + +#define REMOVED 0x0 +#define INSERTED 0x01 + +#define MAXBUFFLINE 10 + +#define CPD2INT 0x06 +#define RCP2INT 0x07 + +#define CPD2 0x40 +#define RCP2 0x80 +#define RDD2 0x10 + + +#define FLUSH 0x01 +#define GETNUM 0x02 + + +#define MSR_TRACK2_BUFF_SIZE 40 +#define MSR_TRACK2_MAXBUFF_SIZE 60 +#ifdef TRACK3_EN +#define MSR_TRACK3_BUFF_SIZE 79 +#define MSR_TRACK3_MAVBUFF_SIZE 100 +#endif + +//static wait_queue_head_t msr_queue; // Sync. for Read Operation & Interrupt Handler + + +unsigned char *track2data_buff; // Track2 Data Buff + +unsigned char track2bitcount; // BCD³»ÀÇ Bit Count +unsigned char *track2datap; // Track2 Data Buff Point +unsigned char ok_starttrack2 = 0; // ¾ÕºÎºÐ NULL code skipÇϱâ À§ÇÔ. +unsigned int track2bcdcount=0; // ¹ÞÀº BCD COUNT + +unsigned int track2bcdcntarray[MAXBUFFLINE]; + +unsigned char track2rxpoint, track2txpoint; +unsigned char track2datacount; + +spinlock_t msr_flag = SPIN_LOCK_UNLOCKED; + + +unsigned char cardstatus = REMOVED; + + +unsigned char BCD[16] = { + 0x10, 0x01, 0x02, 0x13, 0x04, 0x15, 0x16, 0x07, + 0x08, 0x19, 0x1a, 0x0b, 0x1c, 0x0d, 0x0e, 0x1f}; + + + + + +static wait_queue_head_t msr_queue; // Sync. for Read Operation & Interrupt Handler + + + +/*************************************************** + Card Detect Interrupt routin +****************************************************/ +static void msrCDInterrupt(int irq, void *dev_id, struct pt_regs *regs) +{ + if(cardstatus == REMOVED) // card inserted + { + putw(GPIO_EMASK_VIRT, (getw(GPIO_EMASK_VIRT) | RCP2)); //track2 clk interrupt enable + putw(GPIO_EPOL_VIRT, (getw(GPIO_EPOL_VIRT) & ~CPD2)); // set Card detect High Active ==> interrupt when card removed + cardstatus = INSERTED; + track2bitcount = 0; + track2datap = (unsigned char*)(track2data_buff + track2rxpoint * MSR_TRACK2_MAXBUFF_SIZE); + *track2datap = 0x0; + ok_starttrack2 = 0; + track2bcdcount = 0; + } + else // card removed + { + putw(GPIO_EMASK_VIRT, (getw(GPIO_EMASK_VIRT) & ~(CPD2|RCP2))); //track2 Clk interrupt disable + putw(GPIO_EPOL_VIRT, (getw(GPIO_EPOL_VIRT) | CPD2)); // set Card detect Low Active ==> interrupt when card inserted + cardstatus = REMOVED; + + spin_lock(&msr_flag); + track2datacount++; + spin_unlock(&msr_flag); + + track2bcdcntarray[track2rxpoint] = track2bcdcount; + track2rxpoint++; + if(track2rxpoint >= MAXBUFFLINE) + track2rxpoint = 0; +// if(track2datacount == 1) +// wake_up_interruptible(&msr_queue); // Send Message for Card Data Read end + + } + return; +} + +/*************************************************** + Track2 Clock Interrutp routin +****************************************************/ +static void msrTR2Interrupt(int irq, void *dev_id, struct pt_regs *regs) +{ + *track2datap >>= 1; + if(!(getw(GPIO_EDATA_VIRT) & RDD2)) + { + *track2datap |= 0x10; + ok_starttrack2 = 1; + } + else if(ok_starttrack2== 0) return; + + track2bitcount++; + if(track2bitcount > 4) + { + track2datap++; + *track2datap = 0x0; + track2bitcount = 0; + track2bcdcount++; + } + return; +} + +//----------------------------------------------------- + +static int checkDevice(struct inode *pInode) +{ + int minor; + kdev_t dev = pInode->i_rdev; + if (MAJOR(dev) != MSR_MAJOR) { + printk("checkDevice bad major = %d\n", MAJOR(dev)); + return -1; + } + minor = MINOR(dev); + if (minor >= 256) { + printk("checkDevice bad minor = %d\n", minor); + return -1; + } + return minor; +} +//---------------------------------------------------------------------- + +int msr_open(struct inode *inode, struct file *filp) +{ + int minor; + int ch; + if ((minor = checkDevice(inode)) == -1) // Check Device Driver + { + return -ENODEV; + } + ch = (int)filp->private_data; + MOD_INC_USE_COUNT; + return 0; +} +//----------------------------------------------------------------- +ssize_t msr_write(struct file *filp, unsigned char *buff, size_t count, loff_t *loff) +{ + return 0; +} + +//----------------------------------------------------------------------------------- +ssize_t msr_read(struct file *flip, char *buff, size_t count, loff_t *loff) +{ + int i; + unsigned char tmpch,crcch; + unsigned char *track2data_p; + unsigned int track2bcd_count; + + printk("msr_read \n"); +// putw(GPIO_ECLR_VIRT, CPD2); // Card Detect Interrupt clear(bit0) +// putw(GPIO_EMASK_VIRT, (getw(GPIO_EMASK_VIRT) | CPD2)); // Card Detect Interrupt enable(bit0) + +/* + printk("(getw(GPIO_EMASK_VIRT)= 0x%x \n",getw(GPIO_EMASK_VIRT)); + printk("(getw(GPIO_EEDGE_VIRT)= 0x%x \n",getw(GPIO_EEDGE_VIRT)); + printk("(getw(GPIO_EPOL_VIRT) = 0x%x \n",getw(GPIO_EPOL_VIRT)); + printk("(getw(GPIO_EDIR_VIRT) = 0x%x \n",getw(GPIO_EDIR_VIRT)); + printk("(getw(GPIO_EEN_VIRT) = 0x%x \n",getw(GPIO_EEN_VIRT)); +*/ +// if(track2datacount <= 0) +// interruptible_sleep_on(&msr_queue); // wait for card read end + + printk(" txpoint %d rxpoint %d datacount %d\n",track2txpoint,track2rxpoint,track2datacount); + track2data_p =(unsigned char*)(track2data_buff + track2txpoint * MSR_TRACK2_MAXBUFF_SIZE); + track2bcd_count = track2bcdcntarray[track2txpoint]; + track2txpoint++; + if(track2txpoint >= MAXBUFFLINE) + track2txpoint = 0; + + spin_lock(&msr_flag); + track2datacount--; + spin_unlock(&msr_flag); + + if(track2bcd_count < MSR_TRACK2_BUFF_SIZE) + { + printk(" count error "); + return 1; + } + track2bcd_count = MSR_TRACK2_BUFF_SIZE; +/********************************************************************** + Check End Code(0x1f) +***********************************************************************/ + + if(*(track2data_p + MSR_TRACK2_BUFF_SIZE-2) != 0x1f) + { + printk(" end code error"); + return 1; + } +/* + for(i=0;iprivate_data; + + MOD_DEC_USE_COUNT; + return 0; +} + +//---------------------------------------------------------------------- +/* register the device module as a character device driver*/ +// Device Operations +struct file_operations msr_fops = +{ + open: msr_open, + read: msr_read, + release: msr_close, + ioctl: msr_ioctl, + write: msr_write, +}; + +static int __init msr_init(void) +{ + int err = 0; + int result=0; + + printk("msr_init\n"); + + result = register_chrdev(MSR_MAJOR, "msr", &msr_fops); + if (result < 0) { + printk("msr: unable to get major %d\n", MSR_MAJOR); + return -EIO; + } + + track2data_buff = (unsigned char *)kmalloc(MSR_TRACK2_MAXBUFF_SIZE*MAXBUFFLINE, GFP_KERNEL); + if (!track2data_buff) { + printk ("Unable to allocate msr data buffer for HMS7202.\n"); + err = -ENOMEM; + goto out_fail1; + } + + putw(GPIO_EEN_VIRT, (getw(GPIO_EEN_VIRT) | (CPD2|RCP2|RDD2))); // bit 0,2,3 enable + putw(GPIO_EMASK_VIRT, (getw(GPIO_EMASK_VIRT) & ~0x0d0)); //~(CPD2|RCP2|RDD2)); //bit0, bit2, bit3 + putw(GPIO_EEDGE_VIRT, (getw(GPIO_EEDGE_VIRT) | (CPD2|RCP2))); //bit0, bit2 + putw(GPIO_EPOL_VIRT, (getw(GPIO_EPOL_VIRT) | (CPD2|RCP2))); // bit0 bit2 Active Low + putw(GPIO_EDIR_VIRT, (getw(GPIO_EDIR_VIRT) | (CPD2|RCP2|RDD2))); // bit 0,2, 3 input mode + putw(GPIO_ECLR_VIRT, (getw(GPIO_ECLR_VIRT) |(CPD2|RCP2|RDD2))); // bit 0, 2, 3 clear + + printk("(getdw( INTC_ENABLE_VIRT) = 0x%x \n",getdw( INTC_ENABLE_VIRT)); + printk("(getw(GPIO_EMASK_VIRT)= 0x%x \n",getw(GPIO_EMASK_VIRT)); + + + result = request_irq(IRQ_MUX_GPIOE(CPD2INT), msrCDInterrupt, SA_INTERRUPT, "msr", NULL); + if (result) { + printk("Couldn't request msr CD IRQ.\n"); + free_irq(IRQ_MUX_GPIOE(CPD2INT), "msr"); + err = -ENOMEM; + goto out_fail3; + } + result = request_irq(IRQ_MUX_GPIOE(RCP2INT), msrTR2Interrupt, SA_INTERRUPT, "msr", NULL); + if (result) { + printk("Couldn't request msr Track2 IRQ.\n"); + free_irq(IRQ_MUX_GPIOE(RCP2INT), "msr"); + err = -ENOMEM; + goto out_fail3; + } + + putw(GPIO_EMASK_VIRT, (getw(GPIO_EMASK_VIRT) & ~(CPD2|RCP2|RDD2))); //bit0, bit2, bit3 + putw(GPIO_ECLR_VIRT, CPD2); // Card Detect Interrupt clear(bit0) + putw(GPIO_EMASK_VIRT, (getw(GPIO_EMASK_VIRT) | CPD2)); // Card Detect Interrupt enable(bit0) + + track2rxpoint=0; + track2txpoint=0; + track2datacount = 0; + + + printk("(getw(GPIO_EMASK_VIRT)= 0x%x \n",getw(GPIO_EMASK_VIRT)); + printk("(getw(GPIO_EEDGE_VIRT)= 0x%x \n",getw(GPIO_EEDGE_VIRT)); + printk("(getw(GPIO_EPOL_VIRT) = 0x%x \n",getw(GPIO_EPOL_VIRT)); + printk("(getw(GPIO_EDIR_VIRT) = 0x%x \n",getw(GPIO_EDIR_VIRT)); + printk("(getw(GPIO_EEN_VIRT) = 0x%x \n",getw(GPIO_EEN_VIRT)); + printk("(getw(GPIO_ESTAT_VIRT) = 0x%x \n",getw(GPIO_ESTAT_VIRT)); + + + + + + + init_waitqueue_head(&msr_queue); + printk("msr Init: initialization\n"); + return 0; + +out_fail3: + kfree(track2data_buff); +out_fail1: + MOD_DEC_USE_COUNT; + return err; +} +//---------------------------------------------------------------------- +static void __exit msr_exit(void) +{ + + free_irq(IRQ_MUX_GPIOE(CPD2INT), "msr"); + free_irq(IRQ_MUX_GPIOE(RCP2INT), "msr"); + kfree(track2data_buff); + + printk("msr driver exit\n"); +} +//---------------------------------------------------------------------- +module_init(msr_init); +module_exit(msr_exit); +MODULE_DESCRIPTION("msr driver"); +MODULE_AUTHOR("yoonseok seo"); +MODULE_LICENSE("GPL"); + diff -urN linux-2.4.21/drivers/char/h7210_msrssi.c linux-2.4.21-h7210/drivers/char/h7210_msrssi.c --- linux-2.4.21/drivers/char/h7210_msrssi.c 1970-01-01 09:00:00.000000000 +0900 +++ linux-2.4.21-h7210/drivers/char/h7210_msrssi.c 2004-05-17 15:57:34.000000000 +0900 @@ -0,0 +1,452 @@ +#include +#include + +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +// 8 Bits Read/Write +#define _inb(addr) (*(volatile unsigned char *)(addr)) +#define _outb(addr, data) ((*(volatile unsigned char *)(addr)) = (data)) + +#define MAXBUFFLINE 10 + +#define FLUSH 0x01 +#define GETNUM 0x02 + +#define TIMEOUT 0x7f +#define MSR_TRACK2_BUFF_SIZE 40 +#define MSR_TRACK2_MAXBUFF_SIZE 60 + +unsigned char *pRxbuff; +unsigned char *pCardData; + +unsigned char *pBuff; + +enum { + INT_NO, + INT_RORIS, + INT_TIS, + INT_RIS + }; + +volatile int intstatus = INT_NO; +unsigned char *Rxbuff; +unsigned char *CardData; +int timeoutflag; +int buffcnt; +int firstdataflag; + +int rpbuffcnt; +int wpbuffcnt; +int datanumcnt; +int entrybuffcnt[MAXBUFFLINE]; + + +unsigned char BCD[16] = { + 0x10, 0x01, 0x02, 0x13, 0x04, 0x15, 0x16, 0x07, + 0x08, 0x19, 0x1a, 0x0b, 0x1c, 0x0d, 0x0e, 0x1f}; + +unsigned char BitMask[8]={ + 0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01 +}; + +spinlock_t msr_flag = SPIN_LOCK_UNLOCKED; +static wait_queue_head_t msr_queue; + +static int convert(unsigned char *pp,int num) +{ + int i; + int j; + int k; + int cnt = 0; + + memset(pCardData, 0, MSR_TRACK2_MAXBUFF_SIZE); + + j = 0; + while(1){ + if ((*(pp + cnt) & BitMask[j]) != BitMask[j]){ + j++; + if (j==8) return 0; + } + else break; + } + + k = 0; + while (cnt <= num){ + for (i=0;i<5;i++){ + *(pCardData + k) = *(pCardData + k) >> 1; + if (*(pp + cnt) & BitMask[j]) + *(pCardData + k) = *(pCardData + k) | 0x10; + + j++; + if (j==8) { + j=0; + cnt++; + } + } + k++; + } + + printk("convert function!!!\n"); + for (i=0;i<40;i++){ + if((i%10) == 0) printk("\n"); + printk("0x%02x ",*(pCardData+i)); + } + + return 1; +} +/*************************************************** + Track2 Clock Interrutp routin +****************************************************/ +static void msrTR2Interrupt(int irq, void *dev_id, struct pt_regs *regs) +{ + unsigned char status; + unsigned char rxintcnt; + unsigned char rxdata; + int i; + + status = _inb(SPI1_SSPIIR_VIRT) & 0x07; + + if (status & SPI_SSPIIR_RORIS) { + intstatus = INT_RORIS; + _outb(SPI1_SSPICR_VIRT,SPI_SSPIIR_RORIS); + timeoutflag = 1; + wake_up_interruptible(&msr_queue); + } + else if (status & SPI_SSPIIR_TIS){ + intstatus = INT_TIS; + _outb(SPI1_SSPICR_VIRT,SPI_SSPIIR_TIS); + timeoutflag = 1; + wake_up_interruptible(&msr_queue); + } + else if (status & SPI_SSPIIR_RIS){ + intstatus = INT_RIS; + _outb(SPI1_SSPICR_VIRT,SPI_SSPIIR_RIS); + + rxintcnt = _inb(SPI1_SSPFENT_VIRT) & 0x0f; + for (i=0;i MAXBUFFLINE) + rpbuffcnt = 0; + + spin_lock(&msr_flag); + datanumcnt++; + spin_unlock(&msr_flag); + + pBuff = (unsigned char*)(pRxbuff + rpbuffcnt * MSR_TRACK2_MAXBUFF_SIZE); + + done = 1; + _outb(SPI1_SSPCR1_VIRT,_inb(SPI1_SSPCR1_VIRT) | SPI_SSPCR1_SSE); + printk("kernel_thread_msrssi : rpbuffcnt[%d] datanumcnt[%d]\n",rpbuffcnt,datanumcnt); + printk("exit thread \n"); + } +} + +//----------------------------------------------------------------- +ssize_t msr_write(struct file *filp, unsigned char *buff, size_t count, loff_t *loff) +{ + return 0; +} + +//----------------------------------------------------------------------------------- +ssize_t msr_read(struct file *flip, char *buff, size_t count, loff_t *loff) +{ + int i; + unsigned char tmpch,crcch; + unsigned char *ptempdata; + int tempbuffcnt; + +//////////////////////////////////////////////////////////////////////////////////////// + printk("MSR read!!\n"); + printk("rp[%d] wp[%d] datanum[%d]\n",rpbuffcnt,wpbuffcnt,datanumcnt); + ptempdata = (unsigned char*)(pRxbuff + wpbuffcnt * MSR_TRACK2_MAXBUFF_SIZE); + tempbuffcnt = entrybuffcnt[wpbuffcnt]; + wpbuffcnt++; + if (wpbuffcnt > MAXBUFFLINE) + wpbuffcnt = 0; + + spin_lock(&msr_flag); + datanumcnt--; + spin_unlock(&msr_flag); + + if(tempbuffcnt < 25){ + printk(" count error\n"); + return 1; + } + + if (!convert(ptempdata,tempbuffcnt)){ + printk("MSR receive Error!!\n"); + return 1; + } + +/********************************************************************** + Parity and CRC Check +***********************************************************************/ + crcch = 0x0; + for(i=0;ii_rdev; + + if (MAJOR(dev) != MSR_MAJOR) { + printk("checkDevice bad major = %d\n", MAJOR(dev)); + return -ENODEV; + } + + minor = MINOR(dev); + if (minor >= 256) { + printk("checkDevice bad minor = %d\n", minor); + return -ENODEV; + } + else if (minor == -1){ + return -ENODEV; + } + + MOD_INC_USE_COUNT; + + return 0; +} + +static int msr_close(struct inode *inode, struct file *filp) +{ + MOD_DEC_USE_COUNT; + + return 0; +} +//---------------------------------------------------------------------- +// register the device module as a character device driver +// Device Operations +struct file_operations msr_fops = +{ + open: msr_open, + read: msr_read, + release: msr_close, + ioctl: msr_ioctl, + write: msr_write, +}; + +static int __init msr_init(void) +{ + int err; + int result; + + result = register_chrdev(MSR_MAJOR, "msr", &msr_fops); + if (result < 0) { + printk("gen_ts: unable to get major %d\n", MSR_MAJOR); + return -EIO; + } + + pRxbuff = (unsigned char *)kmalloc(MSR_TRACK2_MAXBUFF_SIZE*MAXBUFFLINE, GFP_KERNEL); + if (!pRxbuff) { + printk ("Unable to allocate msr data buffer[Rxbuff] for HMS30C7210.\n"); + err = -ENOMEM; + goto out_fail1; + } + + pCardData = (unsigned char *)kmalloc(MSR_TRACK2_MAXBUFF_SIZE, GFP_KERNEL); + if (!pCardData) { + printk ("Unable to allocate msr data buffer[CardData] for HMS30C7210.\n"); + err = -ENOMEM; + goto out_fail2; + } + + result = request_irq(IRQ_SPI1, msrTR2Interrupt, SA_INTERRUPT, "msr", NULL); + if (result) { + printk("Couldn't request msr Track2 IRQ.\n"); + err = -ENODEV; + goto out_fail3; + } + + _outb(SPI1_SSPCR0_VIRT,(SPI_SSPCR0_GSEL|SPI_SSPCR0_SPO|SPI_SSPCR0_MS)); + _outb(SPI1_SSPCR1_VIRT,(SPI_SSPCR1_SSE|SPI_SSPCR1_RORIE|SPI_SSPCR1_RIE)); + _outb(SPI1_SSPIENT_VIRT,0xf8); //TX NO intr, RX 8 + + kernel_thread(kernel_thread_msrssi, NULL, CLONE_FS | CLONE_FILES | CLONE_SIGHAND); + + rpbuffcnt = 0; + wpbuffcnt = 0; + datanumcnt = 0; + + return 0; + +out_fail3: + kfree(pCardData); +out_fail2: + kfree(pRxbuff); +out_fail1: + return err; +} + +//---------------------------------------------------------------------- +static void __exit msr_exit(void) +{ + _outb(SPI1_SSPCR1_VIRT,0x0); + free_irq(IRQ_SPI1, "msr"); + kfree(pCardData); + kfree(pRxbuff); + unregister_chrdev(MSR_MAJOR,"msr"); + + printk("msr driver exit\n"); +} +//---------------------------------------------------------------------- +module_init(msr_init); +module_exit(msr_exit); + +MODULE_DESCRIPTION("msr driver using ssi hms30c7210"); +MODULE_AUTHOR("yoonseom seo"); +MODULE_LICENSE("GPL"); + diff -urN linux-2.4.21/drivers/char/h7210_prndot.c linux-2.4.21-h7210/drivers/char/h7210_prndot.c --- linux-2.4.21/drivers/char/h7210_prndot.c 1970-01-01 09:00:00.000000000 +0900 +++ linux-2.4.21-h7210/drivers/char/h7210_prndot.c 2004-06-09 18:29:15.000000000 +0900 @@ -0,0 +1,456 @@ +/* + * linux/drivers/char/h7210_prndot.c + * + * Copyright (C) 2004 Hynix semiconductor Inc. + * + * maded by yoonseok seo (e-mail:yoonseok.seo@hynix.com + * 5.31.2004 + */ +#include // +#include + +#include +#include // Define MOD_INC_USE_COUNT, MOD_DEC_USE_COUNT, MOD_IN_USE +#include +#include /* kmalloc() */ +#include +#include +#include +#include /* get_user, copy_to_user */ +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +#define _outb(a, v) (*(volatile unsigned char *)(a) = (v)) +#define _outw(a, v) (*(volatile unsigned short *)(a) = (v)) +#define _outdw(a, v) (*(volatile unsigned long *)(a) = (v)) + +#define _inb(a) (*(volatile unsigned char *)(a)) +#define _inw(a) (*(volatile unsigned short *)(a)) +#define _indw(a) (*(volatile unsigned long *)(a)) + + +// STEP Motor definition +#define CSTEPA_PC12 0x1000 // ½ºÅܸðÅÍ A »ó +#define CSTEPB_PC13 0x2000 // ½ºÅܸðÅÍ B »ó +#define STEPEN_PC14 0x4000 // ½ºÅܸðÅÍ¿¡ 24V Àΰ¡ 1:ON, 0:OFF +#define CSTEP_MASK (CSTEPA_PC12|CSTEPB_PC13) +#define MTRDRV_PC8 0x0100 // DC ¸ðÅÍ¿¡ µ¿ÀÛ 1:ON, 0:OFF +#define HOME_PC10 0x0400 // ȨÀÇ À§Ä¡¸¦ ã´Â´Ù. ÇØ´çºñÆ®°¡ 0ÀÌ¸é Æ÷Åä¼¾¼­¿¡ °É·Á ÀÖÀ½ +#define PESEN_PC11 0x0800 // ÇØ´çºñÆ®°¡ 0À̸é NO Paper, ÇØ´çºñÆ®°¡ 1À̸é OK Paper ÀÖÀ½ +#define ENCODER_PC9 0x0200 // ¿£ÄÚ´õ ÀÔ·Â ³×°ÅƼºê ¿§Áö¿¡¼­ ÀÎÅÍ·´Æ® °É¸®°Ô »ç¿ë + +#define DPOWER_PC15 0x8000 + +#define PRTCLK 0x02800000 // ½ºÅܸðÅÍ¿¡ ½ÅÈ£¸¦ ÁÖ·Á¸é Ç×»ó Ŭ·°À» ÁÖ¾î¾ß ÇÑ´Ù. +#define PRTDATA 0x02400000 + + + + +// ½ºÅܸðÅÍ ½ÅÈ£ Àü´ÞÀ» À§ÇÑ Å¬·° »ý¼º +#define PTRCLK do { *PrnClkBase = 0x0;}while(0) + +#define PRNPOWERON do { _outw(GPIO_CDATA_VIRT,_inw(GPIO_CDATA_VIRT)|DPOWER_PC15);}while(0) +#define PRNPOWEROFF do { _outw(GPIO_CDATA_VIRT,_inw(GPIO_CDATA_VIRT) & ~DPOWER_PC15);}while(0) +// ½ºÅܸðÅÍ¿¡ ON/OFF »ç¿ëÇÏÁö ¾ÊÀ» ¶§ Ç×»ó OFF·Î ¸¸µç´Ù. +#define STEPEN do { _outw(GPIO_CDATA_VIRT,_inw(GPIO_CDATA_VIRT)|STEPEN_PC14);PTRCLK;}while(0) +#define STEPDIS do { _outw(GPIO_CDATA_VIRT,_inw(GPIO_CDATA_VIRT)&~STEPEN_PC14);PTRCLK;}while(0) + +// DC Motor µ¿ÀÛ ON/OFF +#define DCMTRON do { _outw(GPIO_CDATA_VIRT,_inw(GPIO_CDATA_VIRT)|MTRDRV_PC8);}while(0) +#define DCMTROFF do { _outw(GPIO_CDATA_VIRT,_inw(GPIO_CDATA_VIRT)&~MTRDRV_PC8);}while(0) + +// Timer1 ON/OFF +#define TIMER_ON do { _outw(TIMER_TOPCTRL_VIRT,_inw(TIMER_TOPCTRL_VIRT) |TIMER_TOCTRL_POWER_DOWN);}while(0) // Timer ON +#define TIMER_OFF do { _outw(TIMER_TOPCTRL_VIRT,_inw(TIMER_TOPCTRL_VIRT) & ~TIMER_TOCTRL_POWER_DOWN);}while(0) // Timer OFF + +// Timer1 ¸®¼Â +#define RST_TIMER1 do { _outw(TIMER_T1CTRL_VIRT,_inw(TIMER_T1CTRL_VIRT) | TIMER_CTRL_RESET); _outw(TIMER_T1CTRL_VIRT,0);}while(0) + +// Timer1 ÀÎÅÍ·´Æ® µ¿ÀÛ ON/OFF +#define INTR_TIMER1EN do { _outw(TIMER_TOPCTRL_VIRT,_inw(TIMER_TOPCTRL_VIRT) |TIMER_TOCTRL_TIMER_1_INTR_EN);}while(0) // Timer1 intr enable +#define INTR_TIMER1DIS do { _outw(TIMER_TOPCTRL_VIRT,_inw(TIMER_TOPCTRL_VIRT) & ~TIMER_TOCTRL_TIMER_1_INTR_EN);}while(0) // Timer1 intr enable + +// Timer1 µ¿ÀÛ ON/OFF +#define START_TIMER1 do { _outw(TIMER_T1CTRL_VIRT,_inw(TIMER_T1CTRL_VIRT) |TIMER_CTRL_COUNT_ENABLE);}while(0) +#define STOP_TIMER1 do { _outw(TIMER_T1CTRL_VIRT,_inw(TIMER_T1CTRL_VIRT) & ~TIMER_CTRL_COUNT_ENABLE);}while(0) + +// Timer1 Áֱ⠼³Á¤ +#define SETPERIOD_TIMER1(p) do { _outw(TIMER_T1BASE_VIRT,(p));}while(0) + +#define CLEARTIME1_INT do{_outw(TIMER_T1STAT_VIRT, TIMER_STAT_ST);}while(0) + +// Timer1 Ä«¿îÅÍ Å¬¸®¾î +#define CLR_TIMER1 do { _outw(TIMER_T1COUNT_VIRT,0);}while(0) + +#define FLUSH 0x01 +#define GETNUM 0x02 +#define MAXLINE 60 // buffer line +#define PRNMAXLIN 24 + + +// Function definition +void One_Step(int); // ½ºÅܸðÅÍ¿¡ 1»ó ½Ç¸®°Ô ÇÑ´Ù. +static void GpioCIrqHandler(int irq, void *dev_id, struct pt_regs *regs); // ¿Õº¹À¸·Î ÂïÈ÷°Ô ÇÏ´Â ¿¹Á¦¿¡ »ç¿ëµÈ ¿£ÄÚ´õ ÀÎÅÍ·´Æ® ÇÔ¼ö +static void Timer1_IntrHandler1(int irq, void *dev_id, struct pt_regs *regs); // Áֱ⠰è»êÀ» À§ÇÑ Å¸ÀÌ¸Ó ÀÎÅÍ·´Æ® + +// ½ºÅܸðÅÍ¿¡ »óÀ» ¸¸µé±â À§ÇÑ Å×À̺í +unsigned int STEP[4] = {0,CSTEPA_PC12,CSTEPA_PC12|CSTEPB_PC13,CSTEPB_PC13}; + + + +spinlock_t prn_flag = SPIN_LOCK_UNLOCKED; +wait_queue_head_t prnwait; + +// ÇÁ¸°ÅÍ·Î ½Ç¸± µ¥ÀÌ´õ ¹øÁö +int printlines = 0; +volatile unsigned char headline; +volatile unsigned char tailline; +volatile unsigned char curline; +volatile unsigned char startprn = 0; +volatile unsigned short *PrnBase; +volatile unsigned short *PrnClkBase; +static int count; +static int stepflag; +static int stepcount; +static char Time1Flag = 0; + +unsigned short Tmpclk; + +struct PrintData{ + unsigned short PrintBuffer[360]; + unsigned char LineFeed; + unsigned char Line; +} *Pdata[MAXLINE]; + +volatile unsigned short *PdataBuff; + +void GoHome(void) +{ + DCMTRON; + while(_inw(GPIO_CDATA_VIRT) & HOME_PC10); + DCMTROFF; +} + +void One_Step(int cw) +{ + static int num=0; + + _outw(GPIO_CDATA_VIRT,_inw(GPIO_CDATA_VIRT)&~CSTEP_MASK); + _outw(GPIO_CDATA_VIRT,_inw(GPIO_CDATA_VIRT)|STEP[num]); + PTRCLK; + + if (cw == 0){ + num ++; + if (num > 4) num = 0; + } + else { + num--; + if (num < 0) num = 3; + } +} +static void Timer1_IntrHandler1(int irq, void *dev_id, struct pt_regs *regs) +{ + CLEARTIME1_INT; + STOP_TIMER1; + stepflag = 0; + Time1Flag = 1; + *PrnBase = 0x0; + +} + +static void GpioCIrqHandler(int irq, void *dev_id, struct pt_regs *regs) +{ + if ((_inw(GPIO_CDATA_VIRT) & HOME_PC10) == HOME_PC10) count++; + + if ((count >= 10) && (count < 361)){ + RST_TIMER1; + *PrnBase=*PdataBuff++; + START_TIMER1; + + stepflag = stepcount = 0; + STEPEN; + } + else if ((count >= 361) && (count < 452) ){ + if ((stepflag == 0) && (count > 375) && (stepcount < 12)){ + stepflag = 1; + stepcount++; + One_Step(1); + SETPERIOD_TIMER1(0x1fff);//(0x1a30); + RST_TIMER1; + START_TIMER1; + } + if (stepcount >= 12) +// SETPERIOD_TIMER1(0x3da); // 340usec + SETPERIOD_TIMER1(0x3e0); + if(count == 361) + { + tailline++; + if(tailline >= MAXLINE) + tailline = 0; + PdataBuff = Pdata[tailline]->PrintBuffer; + } + + } + else if ((count >= 452) && (count < 803) ){ + STEPDIS; + RST_TIMER1; + *PrnBase=*PdataBuff++; + START_TIMER1; + } + else { + + } + _outw(GPIO_CCLR_VIRT,ENCODER_PC9); // clear interrupt source + +} + +static int prndrv_open(struct inode *inode, struct file *filp) +{ + printlines = 0; + headline = 0; + tailline = 0; + startprn = 0; + curline = 0; + return 0; +} + +ssize_t prndrv_read(struct file *filp, char *buff, size_t count, loff_t *loff) +{ + return 0; +} + + +static ssize_t prndrv_write(struct file *filp, const char *buff, size_t count, loff_t *loff) +{ + + copy_from_user(Pdata[headline], buff, sizeof(struct PrintData)); + headline++; + if(headline >= MAXLINE) + headline = 0; + spin_lock(&prn_flag); + printlines++; + spin_unlock(&prn_flag); + if(printlines == 2 && startprn == 0) + wake_up_interruptible(&prnwait); + + return 0; +} +static int prndrv_ioctl(struct inode *inode, struct file *filp, unsigned int cmd, unsigned long arg) +{ + int ret ; + + ret = 0; + switch(cmd) + { + case FLUSH: + printk("FLUSH\n"); + printlines = 0; + headline = 0; + tailline = 0; + startprn = 0; + curline = 0; + ret = 0; + break; + case GETNUM: + ret = printlines; + break; + default: + printk(" prndrv_ioctl error\n"); + break; + } + return ret; +} + +static int prndrv_close(struct inode *inode, struct file *filp) +{ + return 0; +} + + + +int prndrv_excute(void *unused) +{ + + int i; + init_waitqueue_head(&prnwait); + + while(1) + { + + if(startprn ==0 ) + { + interruptible_sleep_on (&prnwait); + startprn = 1; + } + GoHome(); + PdataBuff = (volatile unsigned short *)(Pdata[tailline]->PrintBuffer); + STEPEN; + for (i=0;i<12;i++){ + One_Step(1); + SETPERIOD_TIMER1(0x1fff);//(0x1a30); + RST_TIMER1; + START_TIMER1; + Time1Flag = 0; + while(Time1Flag == 0); + } + STEPDIS; + SETPERIOD_TIMER1(0x3e0); + count = 0; + _outw(GPIO_CMASK_VIRT,_inw(GPIO_CMASK_VIRT) | ENCODER_PC9); // interrupt enable + DCMTRON; + while((_inw(GPIO_CDATA_VIRT) & HOME_PC10) == 0); + while(1){ + if ((_inw(GPIO_CDATA_VIRT) & HOME_PC10) == 0) break; + } + DCMTROFF; + _outw(GPIO_CMASK_VIRT,_inw(GPIO_CMASK_VIRT) & ~ENCODER_PC9); // interrupt disable + spin_lock(&prn_flag); + if(printlines > 0) + printlines-=2; + if(printlines < 2) + startprn = 0; + spin_unlock(&prn_flag); + } +} + +//---------------------------------------------------------------------- +/* register the device module as a character device driver*/ +// Device Operations +static struct file_operations prndrv_fops = +{ + open: prndrv_open, + read: prndrv_read, + release: prndrv_close, + ioctl: prndrv_ioctl, + write: prndrv_write +}; + +#define PRN_MAJOR 28 + +static int __init prndrv_init(void) +{ + int err = 0; + int i; + int result=0; + + printk("prndrv_init\n"); + result = register_chrdev(PRN_MAJOR, "prndrv", &prndrv_fops); + if (result < 0) { + printk("PrnDrv: unable to get major %d\n", PRN_MAJOR); + return -EIO; + } + /* map physical adress */ + PrnBase=(unsigned short *)ioremap_nocache(PRTDATA,SZ_1K); +// PrnBase=(unsigned short *)ioremap(PRTDATA,SZ_1K); + if(!PrnBase){ + printk("PrnDrv:Ioremap PrnBase failed\n"); + err = -EIO; + goto out_fail; + } + printk("PrnBase 0x%08lx -> 0x%p \n",PRTDATA,PrnBase); + + PrnClkBase=(unsigned short *)ioremap_nocache(PRTCLK,SZ_1K); +// PrnClkBase=(unsigned short *)ioremap(PRTCLK,SZ_1K); + if(!PrnClkBase){ + printk("PrnDrv:Ioremap PrnClkBase failed\n"); + err = -EIO; + goto out_fail; + } + printk("PrnClkBase 0x%08lx -> 0x%p \n",PRTCLK,PrnClkBase); + +// _outw(MEMCFG1, _inw(MEMCFG1) & ~0x03); +// _outw(MEMCFG1, _inw(MEMCFG1) | 0x01); + _outw(BANK2_REG_VIRT, _inw(BANK2_REG_VIRT) & ~0x03); + _outw(BANK2_REG_VIRT, _inw(BANK2_REG_VIRT) | 0x01); +// _outw(MEMCFG3, _inw(MEMCFG3) & ~0x03); +// _outw(MEMCFG3, _inw(MEMCFG3) | 0x01); + + + PRNPOWERON; + *PrnBase = 0x0; + +// PortC Setting + _outw(GPIO_CDIR_VIRT, (_inw(GPIO_CDIR_VIRT) & ~0x0000ff00)); // PC DDR + _outw(GPIO_CDIR_VIRT, (_inw(GPIO_CDIR_VIRT) | 0x00000e00)); // PC DDR + _outw(GPIO_CDATA_VIRT,(_inw(GPIO_CDATA_VIRT) & ~0x0000ff00)); // PC DATA init value == 0 +// setting for encoder signal + _outw(GPIO_CMASK_VIRT,_inw(GPIO_CMASK_VIRT) & ~ENCODER_PC9); // interrupt disable + _outw(GPIO_CEDGE_VIRT, _inw(GPIO_CEDGE_VIRT) | ENCODER_PC9); // edge mode enable + _outw(GPIO_CPOL_VIRT,_inw(GPIO_CPOL_VIRT) | ENCODER_PC9); // active low mode + _outw(GPIO_CCLR_VIRT,ENCODER_PC9); // clear interrupt source + _outw(GPIO_CEN_VIRT, (_inw(GPIO_CEN_VIRT) | 0x0000ff00)); // PE Enable + + PTRCLK; +// Timer1 Setting + TIMER_ON; + STOP_TIMER1; + RST_TIMER1; +// SETPERIOD_TIMER1(0x3da); // ~~340usec + SETPERIOD_TIMER1(0x3e0); // ~~340usec + INTR_TIMER1EN; + CLR_TIMER1; + *PrnBase = 0x0; + + if (request_irq(IRQ_MUX_GPIOC(9), GpioCIrqHandler, SA_INTERRUPT, "prn_gpe_irq", NULL)) + { + printk(KERN_ERR "PrnDrv: unable to get IRQ%d\n",IRQ_GPIOC); + goto fail_irq0; + } + if (request_irq(IRQ_TIMER1, Timer1_IntrHandler1, SA_INTERRUPT, "prn_time_irq", NULL)) + { + printk(KERN_ERR "PrnDrv: unable to get IRQ%d\n",IRQ_TIMER1); + goto fail_irq1; + } + + kernel_thread(prndrv_excute, NULL, CLONE_FS | CLONE_FILES | CLONE_SIGHAND); + + Pdata[0] = (struct PrintData *)kmalloc(sizeof (struct PrintData)*MAXLINE, GFP_KERNEL); + if (!Pdata[0]) + { + printk(KERN_ERR "PrnDrv: unable to malloc\n"); + goto fail_irq2; + } + + for(i=1; i +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifndef BCD_TO_BIN +#define BCD_TO_BIN(val) ((val)=((val)&15) + ((val)>>4)*10) +#endif + +#ifndef BIN_TO_BCD +#define BIN_TO_BCD(val) ((val)=(((val)/10)<<4) + (val)%10) +#endif + + +#define DRIVER_VERSION "1.00" + +#define RTC_IS_OPEN 0x01 /* means /dev/rtc is in use */ + +#define READRTC 0 +#define READALM 1 + +/* Those are the bits from a classic RTC we want to mimic */ +#define RTC_IRQF 0x80 /* any of the following 3 is active */ +#define RTC_PF 0x40 +#define RTC_AF 0x20 +#define RTC_UF 0x10 + +// 8 Bits Read/Write +#define _inb(addr) (*(volatile unsigned char *)(addr)) +#define _outb(addr, data) ((*(volatile unsigned char *)(addr)) = (data)) + +static unsigned long rtc_status = 0; +static unsigned long rtc_irq_data; +static unsigned long rtc_freq = 1; + +static struct fasync_struct *rtc_async_queue; +static DECLARE_WAIT_QUEUE_HEAD(rtc_wait); + +extern spinlock_t rtc_lock; + +static void protect_enable(void) +{ + _outb(RTC_PROTCTRL_VIRT,0x01); + _outb(RTC_PROTECT1_VIRT,0xaa); + _outb(RTC_PROTECT2_VIRT,0x48); + _outb(RTC_PROTECT3_VIRT,0x61); + _outb(RTC_PROTECTLAST_VIRT,0x99); +} + +static void protect_disable(void) +{ + _outb(RTC_PROTCTRL_VIRT,0x00); +} + +/* + * Converts seconds since 1970-01-01 00:00:00 to Gregorian date. + */ + +static void settime(unsigned char flag, struct rtc_time *tval) +{ + BIN_TO_BCD(tval->tm_year); + BIN_TO_BCD(tval->tm_mon); + BIN_TO_BCD(tval->tm_mday); + BIN_TO_BCD(tval->tm_hour); + BIN_TO_BCD(tval->tm_min); + BIN_TO_BCD(tval->tm_sec); + BIN_TO_BCD(tval->tm_wday); + + if (flag==READRTC){ + protect_enable(); + + _outb(RTC_RTCTRL_VIRT,_inb(RTC_RTCTRL_VIRT) | RTC_RTCTRL_RTCEN); + + _outb(RTC_RTCYER_VIRT,tval->tm_year); + _outb(RTC_RTCMON_VIRT,tval->tm_mon); + _outb(RTC_RTCDAY_VIRT,tval->tm_mday); + _outb(RTC_RTCHOR_VIRT,tval->tm_hour); + _outb(RTC_RTCMIN_VIRT,tval->tm_min); + _outb(RTC_RTCSEC_VIRT,tval->tm_sec); + + _outb(RTC_RTCTRL_VIRT,_inb(RTC_RTCTRL_VIRT) & ~RTC_RTCTRL_RTCEN); + + protect_disable(); + } + else { + protect_enable(); + + _outb(RTC_ALYER_VIRT,tval->tm_year); + _outb(RTC_ALMON_VIRT,tval->tm_mon); + _outb(RTC_ALDAY_VIRT,tval->tm_mday); + _outb(RTC_ALHOR_VIRT,tval->tm_hour); + _outb(RTC_ALMIN_VIRT,tval->tm_min); + _outb(RTC_ALSEC_VIRT,tval->tm_sec); + _outb(RTC_ALWEK_VIRT,tval->tm_wday); + + protect_disable(); + } +} + +static void decodetime (unsigned long t, struct rtc_time *tval) +{ + if (t==READRTC){ + tval->tm_year = _inb(RTC_RTCYER_VIRT); + tval->tm_mon = _inb(RTC_RTCMON_VIRT); + tval->tm_mday = _inb(RTC_RTCDAY_VIRT); + tval->tm_hour = _inb(RTC_RTCHOR_VIRT); + tval->tm_min = _inb(RTC_RTCMIN_VIRT); + tval->tm_sec = _inb(RTC_RTCSEC_VIRT); + tval->tm_wday = _inb(RTC_RTCWEK_VIRT); + + _outb(RTC_RTCSTAT_VIRT,RTC_RTCSTAT_READ_FLAG); + } + else { + tval->tm_year = _inb(RTC_ALYER_VIRT); + tval->tm_mon = _inb(RTC_ALMON_VIRT); + tval->tm_mday = _inb(RTC_ALDAY_VIRT); + tval->tm_hour = _inb(RTC_ALHOR_VIRT); + tval->tm_min = _inb(RTC_ALMIN_VIRT); + tval->tm_sec = _inb(RTC_ALSEC_VIRT); + tval->tm_wday = _inb(RTC_ALWEK_VIRT); + } + BCD_TO_BIN(tval->tm_year); + BCD_TO_BIN(tval->tm_mon); + BCD_TO_BIN(tval->tm_mday); + BCD_TO_BIN(tval->tm_hour); + BCD_TO_BIN(tval->tm_min); + BCD_TO_BIN(tval->tm_sec); + BCD_TO_BIN(tval->tm_wday); +} + +static void rtc_interrupt(int irq, void *dev_id, struct pt_regs *regs) +{ + unsigned char rtsr; + + rtsr = _inb(RTC_RTCSTAT_VIRT); + + spin_lock_irq (&rtc_lock); + + if(rtsr & RTC_RTCSTAT_ALM_FLAG){ + rtc_irq_data |= (RTC_AF|RTC_IRQF); + _outb(RTC_RTCSTAT_VIRT,RTC_RTCSTAT_ALM_FLAG); + protect_enable(); + _outb(RTC_ALCTRL_VIRT,_inb(RTC_ALCTRL_VIRT) & ~RTC_ALCTRL_ALEN); + protect_disable(); + } + + rtc_irq_data += 0x100; + spin_unlock_irq (&rtc_lock); + + /* wake up waiting process */ + wake_up_interruptible(&rtc_wait); + kill_fasync (&rtc_async_queue, SIGIO, POLL_IN); +} + +static void tick_interrupt(int irq, void *dev_id, struct pt_regs *regs) +{ + unsigned char rtsr; + + rtsr = _inb(RTC_RTCSTAT_VIRT); + + spin_lock_irq (&rtc_lock); + + if(rtsr & RTC_RTCSTAT_TICK_FLAG){ + rtc_irq_data |= (RTC_PF|RTC_IRQF); + _outb(RTC_RTCSTAT_VIRT,RTC_RTCSTAT_TICK_FLAG); + } + + rtc_irq_data += 0x100; + spin_unlock_irq (&rtc_lock); + + /* wake up waiting process */ + wake_up_interruptible(&rtc_wait); + kill_fasync (&rtc_async_queue, SIGIO, POLL_IN); +} + +static int rtc_fasync (int fd, struct file *filp, int on) +{ + return fasync_helper (fd, filp, on, &rtc_async_queue); +} + +static unsigned int rtc_poll(struct file *file, poll_table *wait) +{ + unsigned long l; + + poll_wait (file, &rtc_wait, wait); + + spin_lock_irq (&rtc_lock); + l = rtc_irq_data; + spin_unlock_irq (&rtc_lock); + + if (l != 0) + return (POLLIN | POLLRDNORM); + + return 0; +} + +static loff_t rtc_llseek(struct file *file, loff_t offset, int origin) +{ + return -ESPIPE; +} + +ssize_t rtc_read(struct file *file, char *buf, size_t count, loff_t *ppos) +{ + DECLARE_WAITQUEUE(wait, current); + unsigned long data; + ssize_t retval; + + if (count < sizeof(unsigned long)) + return -EINVAL; + + add_wait_queue(&rtc_wait, &wait); + set_current_state(TASK_INTERRUPTIBLE); + for (;;) { + spin_lock_irq (&rtc_lock); + data = rtc_irq_data; + if (data != 0) { + rtc_irq_data = 0; + break; + } + spin_unlock_irq (&rtc_lock); + + if (file->f_flags & O_NONBLOCK) { + retval = -EAGAIN; + goto out; + } + + if (signal_pending(current)) { + retval = -ERESTARTSYS; + goto out; + } + + schedule(); + } + + spin_unlock_irq (&rtc_lock); + + data -= 0x100; /* the first IRQ wasn't actually missed */ + + retval = put_user(data, (unsigned long *)buf); + if (!retval) + retval = sizeof(unsigned long); + +out: + set_current_state(TASK_RUNNING); + remove_wait_queue(&rtc_wait, &wait); + return retval; +} + +static int rtc_ioctl(struct inode *inode, struct file *file, + unsigned int cmd, unsigned long arg) +{ + struct rtc_time tm; + + switch (cmd) { + case RTC_AIE_OFF: + spin_lock_irq(&rtc_lock); + protect_enable(); + _outb(RTC_RTCTRL_VIRT,_inb(RTC_RTCTRL_VIRT) & ~RTC_RTCTRL_INTEN); + _outb(RTC_ALCTRL_VIRT,_inb(RTC_ALCTRL_VIRT) & ~RTC_ALCTRL_ALEN); + _outb(RTC_ALCTRL_VIRT,_inb(RTC_ALCTRL_VIRT) & ~0x7f); + protect_disable(); + rtc_irq_data = 0; + spin_unlock_irq(&rtc_lock); + return 0; + case RTC_AIE_ON: + spin_lock_irq(&rtc_lock); + protect_enable(); + _outb(RTC_RTCTRL_VIRT,_inb(RTC_RTCTRL_VIRT) | RTC_RTCTRL_INTEN); + _outb(RTC_ALCTRL_VIRT,_inb(RTC_ALCTRL_VIRT) | RTC_ALCTRL_ALEN); + _outb(RTC_ALCTRL_VIRT,_inb(RTC_ALCTRL_VIRT) | (unsigned char)(arg)); + protect_disable(); + rtc_irq_data = 0; + spin_unlock_irq(&rtc_lock); + return 0; + case RTC_UIE_OFF: + return -EINVAL; + case RTC_UIE_ON: + return -EINVAL; + case RTC_PIE_OFF: + spin_lock_irq(&rtc_lock); + protect_enable(); + _outb(RTC_TICTRL_VIRT,_inb(RTC_TICTRL_VIRT) & ~(RTC_TICTRL_TINTEN | RTC_TICTRL_CNTEN_ON)); + protect_disable(); + rtc_irq_data = 0; + spin_unlock_irq(&rtc_lock); + return 0; + case RTC_PIE_ON: + spin_lock_irq(&rtc_lock); + protect_enable(); + _outb(RTC_TICTRL_VIRT,_inb(RTC_TICTRL_VIRT) | RTC_TICTRL_CNTRESET_ON); + _outb(RTC_TICTRL_VIRT,_inb(RTC_TICTRL_VIRT) & ~RTC_TICTRL_CNTRESET_ON); + _outb(RTC_TICTRL_VIRT,_inb(RTC_TICTRL_VIRT) | (RTC_TICTRL_TINTEN | RTC_TICTRL_CNTEN_ON)); + protect_disable(); + rtc_irq_data = 0; + spin_unlock_irq(&rtc_lock); + return 0; + case RTC_ALM_READ: + decodetime(READALM, &tm); + break; + case RTC_ALM_SET: + if (copy_from_user (&tm, (struct rtc_time*)arg, sizeof (tm))) + return -EFAULT; + settime(READALM, &tm); + return 0; + case RTC_RD_TIME: + decodetime (READRTC, &tm); + break; + case RTC_SET_TIME: + if (!capable(CAP_SYS_TIME)) + return -EACCES; + if (copy_from_user (&tm, (struct rtc_time*)arg, sizeof (tm))) + return -EFAULT; + settime(READRTC, &tm); + return 0; + case RTC_IRQP_READ: + return put_user(rtc_freq, (unsigned long *)arg); + case RTC_IRQP_SET: + if (arg != rtc_freq) + return -EINVAL; + return 0; + case RTC_EPOCH_READ: + return put_user (2000, (unsigned long *)arg); + default: + return -EINVAL; + } + return copy_to_user ((void *)arg, &tm, sizeof (tm)) ? -EFAULT : 0; +} + +static int rtc_open(struct inode *inode, struct file *file) +{ + spin_lock_irq (&rtc_lock); + + if (rtc_status & RTC_IS_OPEN) + goto goto_busy; + + rtc_status |= RTC_IS_OPEN; + rtc_irq_data = 0; + + spin_unlock_irq (&rtc_lock); + return 0; + +goto_busy: + spin_unlock_irq (&rtc_lock); + return -EBUSY; +} + +static int rtc_release(struct inode *inode, struct file *file) +{ + spin_lock_irq (&rtc_lock); + + protect_enable(); + + _outb(RTC_TICTRL_VIRT,_inb(RTC_TICTRL_VIRT) & ~(RTC_TICTRL_TINTEN | RTC_TICTRL_CNTEN_ON)); + _outb(RTC_ALCTRL_VIRT,_inb(RTC_ALCTRL_VIRT) & ~RTC_ALCTRL_ALEN); + + _outb(RTC_RTCSTAT_VIRT,(RTC_RTCSTAT_TICK_FLAG | RTC_RTCSTAT_ALM_FLAG)); + + protect_disable(); + + spin_unlock_irq (&rtc_lock); + + if (file->f_flags & FASYNC) { + rtc_fasync(-1, file, 0); + } + + rtc_status = 0; + + spin_lock_irq (&rtc_lock); + rtc_irq_data = 0; + spin_unlock_irq (&rtc_lock); + + return 0; +} + +static struct file_operations rtc_fops = { + owner: THIS_MODULE, + llseek: rtc_llseek, + read: rtc_read, + poll: rtc_poll, + ioctl: rtc_ioctl, + open: rtc_open, + release: rtc_release, + fasync: rtc_fasync, +}; + +static struct miscdevice h7210rtc_miscdev = { + RTC_MINOR, + "rtc", + &rtc_fops +}; + +static int rtc_read_proc(char *page, char **start, off_t off, int count, int *eof, void *data) +{ + char *p = page; + int len; + struct rtc_time tm; + + decodetime(READRTC, &tm); + p += sprintf(p, "rtc_time\t: %02d:%02d:%02d\n" + "rtc_date\t: %04d-%02d-%02d\n" + "rtc_epoch\t: %04d\n", + tm.tm_hour, tm.tm_min, tm.tm_sec, + tm.tm_year + 2000, tm.tm_mon, tm.tm_mday, 2000); + decodetime(READALM, &tm); + p += sprintf(p, "alrm_time\t: %02d:%02d:%02d\n" + "alrm_date\t: %04d-%02d-%02d\n", + tm.tm_hour, tm.tm_min, tm.tm_sec, + tm.tm_year + 2000, tm.tm_mon, tm.tm_mday); + p += sprintf(p, "periodic_freq\t: %ld\n", rtc_freq); + + len = (p - page) - off; + if (len < 0) + len = 0; + + *eof = (len <= count) ? 1 : 0; + *start = page + off; + + return len; +} + +static int __init rtc_init(void) +{ + int ret; + + misc_register (&h7210rtc_miscdev); + create_proc_read_entry ("driver/rtc", 0, 0, rtc_read_proc, NULL); + + ret = request_irq (IRQ_TICK, tick_interrupt, SA_INTERRUPT, "rtc 1Hz", NULL); + if (ret) { + printk (KERN_ERR "rtc: IRQ %d already in use.\n", IRQ_TICK); + goto IRQ_RTC1Hz_failed; + } + ret = request_irq (IRQ_RTC, rtc_interrupt, SA_INTERRUPT, "rtc Alarm", NULL); + if (ret) { + printk(KERN_ERR "rtc: IRQ %d already in use.\n", IRQ_RTC); + goto IRQ_RTCAlrm_failed; + } + + printk (KERN_INFO "HMS30C7210 Real Time Clock driver v" DRIVER_VERSION "\n"); + + // Initialize STAT register for Gate-level simulation + _outb(RTC_RTCSTAT_VIRT,(RTC_RTCSTAT_TICK_FLAG|RTC_RTCSTAT_READ_FLAG|RTC_RTCSTAT_ALM_FLAG)); + + protect_enable(); + + if (_inb(RTC_RTCTRL_VIRT) & 0x01) { // check RTC OFF?? + _outb(RTC_RTCTRLRESET_VIRT,RTC_RTCTRLRESET_CTRLRESET); + _outb(RTC_RTCTRLRESET_VIRT,0x00); + + // Clear RTC counter register reset bit [1-->0] + _outb(RTC_RTCTRL_VIRT,_inb(RTC_RTCTRL_VIRT) | RTC_RTCTRL_RESET); + _outb(RTC_RTCTRL_VIRT,_inb(RTC_RTCTRL_VIRT) & ~RTC_RTCTRL_RESET); + + _outb(RTC_RTCTRL_VIRT,_inb(RTC_RTCTRL_VIRT) & 0xfe); // start RTC + } + + _outb(RTC_TICTRL_VIRT,RTC_TICTRL_CNTRESET_ON); + _outb(RTC_TICTRL_VIRT,0x00); + + _outb(RTC_TIBASE_VIRT,0xff); + _outb(RTC_TICTRL_VIRT,RTC_TICTRL_CNTREPEAT_ON); + + protect_disable(); + + return 0; + +IRQ_RTCAlrm_failed: + free_irq (IRQ_TICK, NULL); +IRQ_RTC1Hz_failed: + remove_proc_entry ("driver/rtc", NULL); + misc_deregister (&h7210rtc_miscdev); + return ret; +} + +static void __exit rtc_exit(void) +{ + free_irq (IRQ_RTC, NULL); + free_irq (IRQ_TICK, NULL); + remove_proc_entry ("driver/rtc", NULL); + misc_deregister (&h7210rtc_miscdev); +} + +module_init(rtc_init); +module_exit(rtc_exit); + +MODULE_AUTHOR("Nils Faerber "); +MODULE_DESCRIPTION("HMS30C7210 Realtime Clock Driver (RTC)"); +EXPORT_NO_SYMBOLS; diff -urN linux-2.4.21/drivers/char/h7210_ts.c linux-2.4.21-h7210/drivers/char/h7210_ts.c --- linux-2.4.21/drivers/char/h7210_ts.c 1970-01-01 09:00:00.000000000 +0900 +++ linux-2.4.21-h7210/drivers/char/h7210_ts.c 2004-06-07 00:54:32.000000000 +0900 @@ -0,0 +1,603 @@ +/* + * linux/drivers/char/h7210_ts.c + * + * Copyright (C) 2004 Byunghwan Jun, Hynix Semiconductor Inc. + * + * 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, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * Touch screen driver for Hynix h7210 evaluation board +*/ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define INCBUF(x,mod) ( (++x) & ( mod - 1) ) +#define DEV_IRQ_ID "h7210-ts" + +static int tsRead(TS_DEV *); +static int tsInit(void); + +static void h7210_ts_pendata_int(int irq, void *dev_id, struct pt_regs *regs); +static void h7210_ts_touch_int(int irq, void *dev_id, struct pt_regs *regs); + +static int h7210_ts_open(void); +static void h7210_ts_close(void); + +int gMajor = TS_MAJOR; + +static TS_DEV tsDev; +static TS_RET tsRet = {0,0,0,0}; + +static ssize_t gen_ts_read(struct file * , char * , size_t , loff_t * l); +static unsigned int gen_ts_poll(struct file * filp, struct poll_table_struct * wait); +static int gen_ts_ioctl(struct inode * inode, struct file *filp, unsigned int cmd , unsigned long arg); +static int gen_ts_open(struct inode * inode, struct file * filp); + +static ssize_t gen_ts_read(struct file * filp, char * buf, size_t count, loff_t * l) +{ + + int nonBlocking = filp->f_flags & O_NONBLOCK; + + int ret; + TS_DEV *pTsDev = &tsDev; + + if(!nonBlocking) goto next_read; + + ret = -EINVAL; + + if( pTsDev->head != pTsDev->tail ) { + ret = tsRead(pTsDev); + if(ret > 0) + __copy_to_user(buf,(char *)&tsRet, ret); + } + + return ret; + +next_read: + if( pTsDev->head != pTsDev->tail ) { + int rcount; + rcount = tsRead(pTsDev); + + if(rcount > 0) + { + __copy_to_user(buf,(char *)&tsRet, rcount); + } + return rcount; + } + else { + interruptible_sleep_on(&pTsDev->waiterq); + goto next_read; + } +} + + +static unsigned int gen_ts_poll(struct file * filp, struct poll_table_struct *wait) +{ + + TS_DEV *pdev= &tsDev; + + poll_wait(filp, &pdev->waiterq, wait); + + return (pdev->head == pdev->tail) ? 0 : (POLLIN | POLLRDNORM); +} + + +static int gen_ts_ioctl(struct inode * inode, struct file *filp, + unsigned int cmd , unsigned long arg) +{ + TS_DEV *pdev = &tsDev; + + switch(cmd) { + case TS_GET_MODE: + arg = pdev->mode; + break; + case TS_SET_MODE: + pdev->mode = arg; + break; + case TS_GET_RATE: + arg = pdev->rate; + break; + case TS_GET_CAL: + __copy_to_user((char *)arg, (char *)&pdev->cal, sizeof(TS_CAL) ); + break; + case TS_SET_CAL: + __copy_from_user((char *)&pdev->cal, (char *)arg, sizeof(TS_CAL) ); + break; + + default: + printk("IOCTL: unknowncmd %04x\n",cmd); + return -EINVAL; + } + return 0; +} + +static int gen_ts_open(struct inode * inode, struct file * filp) +{ + tsDev.tail = tsDev.head; + + return h7210_ts_open(); +} + +static int gen_ts_close(struct inode * inode, struct file * filp) +{ + h7210_ts_close(); + return 0; +} + +struct file_operations adc_fops = { + read: gen_ts_read, + poll: gen_ts_poll, + ioctl: gen_ts_ioctl, + open: gen_ts_open, + release: gen_ts_close, +}; + +void process_ts_input(unsigned int x, unsigned int y, int down) +{ + TS_DEV * pTsDev = &tsDev; + unsigned head = pTsDev->head; + unsigned tail = pTsDev->tail; + + pTsDev->events[head].x = x; + pTsDev->events[head].y = y; + pTsDev->events[head].pressure = down; + + pTsDev->head = head = INCBUF(head,MAX_TS_EVENTS); + if(pTsDev->head == tail) { + pTsDev->tail = tail = INCBUF(tail,MAX_TS_EVENTS); + pTsDev->overflow ++; + } + + wake_up_interruptible(&pTsDev->waiterq); +} + +#define X_JITTER 1 +#define Y_JITTER 1 +static int tsRead(TS_DEV *pev) +{ + static unsigned int xprev=0; + static unsigned int yprev=0; + static signed int xlast_diff=0; + static signed int ylast_diff=0; + static signed int filter_pos_count = 0; + + TS_CAL *cal = &pev->cal; + TS_EVENT raw = pev->events[pev->tail]; + TS_RET * fmt = &tsRet; + + if(pev->mode == TS_NORMAL_MODE) { + /* Raw Data */ + fmt->x = raw.x; + fmt->y = raw.y; + fmt->pressure = raw.pressure; + pev->tail=INCBUF(pev->tail,MAX_TS_EVENTS); + return sizeof(TS_RET); + } + + /* Preprocessed data */ + if (raw.pressure != 0) { + int x, y; + int dx,dy; + + x = ( cal->a * raw.x + cal->b * raw.y + cal->c)/cal->s; + y = ( cal->e * raw.x + cal->f * raw.y + cal->g)/cal->s; + + fmt->pressure = 1; + + if(filter_pos_count == 0) { + filter_pos_count++; + /* store xprev, and yprev, but return as if new position */ + xprev = x; + yprev = y; + fmt->x = fmt->y = fmt->pressure = 0; /* PEN UP */ + pev->tail=INCBUF(pev->tail,MAX_TS_EVENTS); + return sizeof(TS_RET); /* success */ + } + + dx = x - xprev; + dy = y - yprev; + if (filter_pos_count == 1) { + filter_pos_count++; + /* store xlast_diff, and ylast_diff, but return as if new */ + xlast_diff = dx; + ylast_diff = dy; + fmt->x = fmt->y = fmt->pressure = 0; /* PEN UP */ + pev->tail=INCBUF(pev->tail,MAX_TS_EVENTS); + return sizeof(TS_RET); /* success */ + } + + /* have a prev, and a diff */ + /* MAGIC NUMBER 81 = sqr(distance filter JUMP)*/ + if (( + ((dx - xlast_diff)*(dx - xlast_diff)) + + ((dy - ylast_diff)*(dy - ylast_diff))) > 81) { + /* possible jump, lets assume so, fix by setting pen up */ + /* Also, so can continue, need to reget xtrap info, so + * reset filter_pos_count as well */ + filter_pos_count = fmt->x = fmt->y = fmt->pressure = 0; + pev->tail=INCBUF(pev->tail,MAX_TS_EVENTS); + return sizeof(TS_RET); /* success */ + } + /* stable over last three positions, can process this */ + xlast_diff = dx; + ylast_diff = dy; + + /* get abs for dx and dy */ + dx = ((dx < 0) ? -dx : dx); + dy = ((dy < 0) ? -dy : dy); + + if( dx > X_JITTER ) + xprev = fmt->x = x; + else + fmt->x = xprev; + + if( dy > Y_JITTER ) + yprev = fmt->y = y; + else + fmt->y = yprev; + } else { + /* pen really up */ + filter_pos_count = fmt->x = fmt->y = fmt->pressure = 0; + } + + pev->tail=INCBUF(pev->tail,MAX_TS_EVENTS); + + return sizeof(TS_RET); +} + + +static int tsInit() +{ + TS_DEV *pTsDev = &tsDev; + + pTsDev->penStatus=PEN_UP; + + /* default calibration */ + pTsDev->cal.a = 12; + pTsDev->cal.b = 16; + pTsDev->cal.c = 0; + pTsDev->cal.e = 0; + pTsDev->cal.f = 16; + pTsDev->cal.g = 0; + pTsDev->cal.s = 0; + + pTsDev->overflow = 0; + pTsDev->head = 0; + pTsDev->tail = 0; + pTsDev->mode = TS_RAW_MODE; + + init_waitqueue_head (&pTsDev->waiterq); + + return 0; +} + +/* enable pen touch function */ +static inline void h7210_ts_enable_pen_touch(void) +{ + unsigned long flags; + local_irq_save(flags); + CPU_REG(PEN_GPIO,GPIO_DATA) |= PEN_ENA_BIT; + local_irq_restore(flags); +} + +/* disable pen touch function */ +static inline void h7210_ts_disable_pen_touch(void) +{ + unsigned long flags; + local_irq_save(flags); + CPU_REG(PEN_GPIO,GPIO_DATA) &= ~PEN_ENA_BIT; + local_irq_restore(flags); +} + +/* enable int */ +static inline void h7210_ts_enable_pen_down_interrupt(void) +{ + h7210_ts_enable_pen_touch(); + enable_irq(IRQ_PEN); +} + +/* disable int */ +static inline void h7210_ts_disable_pen_down_interrupt(void) +{ + h7210_ts_disable_pen_touch(); + disable_irq(IRQ_PEN); +} + +/* Shut down ADC, disable touch functions */ +static inline void h7210_ts_reset(void) +{ + unsigned long flags; + local_irq_save(flags); + CPU_IO(ADC_ADCCR_VIRT) = 0x0; + CPU_IO(ADC_ADCTPCR_VIRT) &= ~(ADC_ADCTPCR_TINTMSK | ADC_ADCTPCR_TPEN); + local_irq_restore(flags); +} + +/* Enable sampling interrupt */ +static void h7210_ts_enable_adc_int(void) +{ + unsigned long flags; + local_irq_save(flags); + CPU_IO(ADC_ADCTPCR_VIRT) |= ADC_ADCTPCR_TINTMSK | ADC_ADCTPCR_TPEN; + local_irq_restore(flags); +} + +/* Disable sampling interrupt*/ +static void h7210_ts_disable_adc_int(void) +{ + unsigned long flags; + local_irq_save(flags); + CPU_IO(ADC_ADCTPCR_VIRT) &= ~(ADC_ADCTPCR_TINTMSK | ADC_ADCTPCR_TPEN); + local_irq_restore(flags); +} + +/* Enable sampling */ +static void h7210_ts_enable_adc(void) +{ + unsigned long flags; + local_irq_save(flags); + CPU_IO(ADC_ADCCR_VIRT) &= ~ADC_ADCCR_ADCPD; + CPU_IO(ADC_ADCTPCR_VIRT) |= ADC_ADCTPCR_TPEN | ADC_ADCTPCR_TINTMSK; + local_irq_restore(flags); +} + +/* Disable sampling */ +static void h7210_ts_disable_adc(void) +{ + unsigned long flags; + local_irq_save(flags); + CPU_IO(ADC_ADCCR_VIRT) |= ADC_ADCCR_ADCPD; + CPU_IO(ADC_ADCTPCR_VIRT) &= ~(ADC_ADCTPCR_TPEN | ADC_ADCTPCR_TINTMSK); + local_irq_restore(flags); +} + +/* Request interrupts */ +static inline int h7210_ts_enable_irqs(void) +{ + int result; + + result = request_irq(IRQ_ADC, h7210_ts_pendata_int, SA_INTERRUPT, DEV_IRQ_ID, DEV_IRQ_ID); + if (result) { + printk("Couldn't request touch data IRQ.\n"); + return result; + } + + result = request_irq(IRQ_PEN, h7210_ts_touch_int, SA_INTERRUPT, DEV_IRQ_ID, DEV_IRQ_ID); + if (result) { + printk("Couldn't request pen touch IRQ.\n"); + free_irq(IRQ_ADC, DEV_IRQ_ID); + return result; + } + + return result; +} + +/* Free interrupts */ +static inline int h7210_ts_disable_irqs(void) +{ + free_irq(IRQ_ADC, DEV_IRQ_ID); + free_irq(IRQ_PEN, DEV_IRQ_ID); + return 0; +} + +/* + * Handle the touch interrupt, generated when the pen is pressed/ + * released. Switch to the opposite interrupt by changing the + * polarity of the GPIO pin + */ +static void h7210_ts_touch_int(int irq, void *dev_id, struct pt_regs *regs) +{ + CPU_REG(PEN_GPIO,GPIO_CLR) |= PEN_INT_BIT; + /* Enable driver outputs */ + CPU_IO(ADC_ADCTPCR_VIRT) &= ~ ADC_ADCTPCR_TRATE_MASK; + h7210_ts_disable_pen_down_interrupt(); + h7210_ts_enable_adc(); +} + +/* Filter the adc-values, remove the peak and build average*/ +static u32 h7210_ts_filter_vals(u32 *x) +{ + u32 avg = x[0], tavg; + int i, min = 0, max = 0;; + + /* Find min / max, build total average*/ + for (i = 1; i < 4; i++) { + if (x[i] > x[max]) + max = i; + if (x[i] < x[min]) + min = i; + avg += x[i]; + } + tavg = avg / 4; + /* Remove the peak value */ + if ((x[max] - tavg) > (tavg - x[min])) + avg -= x[max]; + else + avg -= x[min]; + + return avg / 3; +} + +/* + * Handle the pen data ready interrupt, generated when pen data is + * available + */ +static void h7210_ts_pendata_int(int irq, void *dev_id, struct pt_regs *regs) +{ + static u32 pen_x, pen_y; + u32 val, x[4], y[4], pressed = 1; + volatile u32 *p = (u32 *)(ADC_ADCTPXDR0_VIRT); + + /* Check, if this is a touch interrupt */ + if (!(CPU_IO(ADC_ADCISR_VIRT) & ADC_ADCISR_INTTP)){ + return; + } + /* Acknowledge the int */ + CPU_IO(ADC_ADCISR_VIRT) = ADC_ADCISR_INTTP; + + /* Read adc values */ + val = p[0]; + x[0] = val & 0x3FF; x[1] = (val >> 16) & 0x3FF; + val = p[1]; + x[2] = val & 0x3FF; x[3] = (val >> 16) & 0x3FF; + val = p[2]; + y[0] = val & 0x3FF; y[1] = (val >> 16) & 0x3FF; + val = p[3]; + y[2] = val & 0x3FF; y[3] = (val >> 16) & 0x3FF; + + /* Disable interrupt during pen down detection */ + h7210_ts_disable_adc_int(); + + /* Enable touch detection */ + h7210_ts_enable_pen_touch(); + /* let it settle */ + udelay(10); + + /* Read status */ + if (CPU_REG(PEN_GPIO,GPIO_DATA) & PEN_INT_BIT) { + /* Pen is up, stop adc and enable pen down interrupt */ + h7210_ts_disable_adc(); + h7210_ts_enable_pen_down_interrupt(); + pressed = 0; + } else { + /* Pen is down, disable pen touch and reenable adc */ + h7210_ts_disable_pen_touch(); + pen_x = h7210_ts_filter_vals(x); + pen_y = h7210_ts_filter_vals(y); + h7210_ts_enable_adc_int(); + } + + /* Deliver current event */ + process_ts_input(pen_x, pen_y, pressed); +} + +/* Startup, init hardware, if first user */ +static int h7210_ts_startup(void) +{ + int ret = 0; + unsigned long flags; + + /* Stop ADC */ + h7210_ts_reset(); + + /* Initialize port pins */ + local_irq_save(flags); + /* Set pen down detection as output */ + CPU_REG(PEN_GPIO,GPIO_EN) |= PEN_ENA_BIT; // 8 + CPU_REG(PEN_GPIO,GPIO_DIR) &= ~PEN_ENA_BIT; // 8 + + /* Initialize interrupt pin */ + CPU_REG(PEN_GPIO,GPIO_EN) |= PEN_INT_BIT; // 9 + CPU_REG(PEN_GPIO,GPIO_DIR) |= PEN_INT_BIT; // 9 + CPU_REG(PEN_GPIO,GPIO_EDGE) |= PEN_INT_BIT; // 9 + CPU_REG(PEN_GPIO,GPIO_POL) |= PEN_INT_BIT; // 9 + CPU_REG(PEN_GPIO,GPIO_CLR) |= PEN_INT_BIT; // 9 + CPU_REG(PEN_GPIO,GPIO_MASK) |= PEN_INT_BIT; // 9 + + /* Enable pen down interrupt */ + h7210_ts_enable_pen_down_interrupt(); + + /* Initialize ADC converter */ +// CPU_IO(ADC_ADCCR_VIRT) |= ADC_ADCCR_WAIT | ADC_ADCCR_ADCPD; + /* Clear ADC Interrupt status */ + CPU_IO(ADC_ADCISR_VIRT) |= ADC_ADCISR_INTTP; + /* Enable driver outputs */ +// CPU_IO(ADC_ADCTPCR_VIRT) &= ~ ADC_ADCTPCR_TRATE_MASK; + + local_irq_restore(flags); + + return ret; +} + +/* Shutdown, if all users have left */ +static void h7210_ts_shutdown(void) +{ + h7210_ts_reset(); + h7210_ts_disable_pen_down_interrupt(); + h7210_ts_disable_adc(); +} + +/* Open device, start up, if this is the first user */ +static int h7210_ts_open(void) +{ + return h7210_ts_startup(); +} + +/* Open device, shut down, if this is the last user */ +static void h7210_ts_close(void) +{ + h7210_ts_shutdown(); +} + + +/* Initialization. */ +static int __init h7210_ts_init(void) +{ + int ret = 0; + + ret = register_chrdev(gMajor, "ts", &adc_fops); + if (ret < 0) { + printk("gen_ts: unable to get major %d\n", gMajor); + return -EIO; + } + + h7210_ts_open(); + + tsInit(); + + ret = h7210_ts_enable_irqs(); + if (!ret) { +// disable_irq(IRQ_PEN); + printk("H7210 touch pad ver 0.0.1 \n "); + } + + return ret; +} + +/* Cleanup */ +static void __exit h7210_ts_exit(void) +{ + h7210_ts_shutdown(); + h7210_ts_reset(); + h7210_ts_disable_irqs(); + unregister_chrdev(gMajor, "ts"); +} + + +module_init(h7210_ts_init); +module_exit(h7210_ts_exit); + +MODULE_AUTHOR("Byunghwan Jun (Byunghwna.jun@hynix.com"); +MODULE_DESCRIPTION("h7210 touchscreen driver"); +MODULE_LICENSE("GPL"); diff -urN linux-2.4.21/drivers/char/hanfont.c linux-2.4.21-h7210/drivers/char/hanfont.c --- linux-2.4.21/drivers/char/hanfont.c 1970-01-01 09:00:00.000000000 +0900 +++ linux-2.4.21-h7210/drivers/char/hanfont.c 2004-06-01 00:00:24.000000000 +0900 @@ -0,0 +1,1808 @@ + const unsigned char _HanSoft[(8*20+4*22+4*28)*32]= +{ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,124, 0, 14, 0, 6, 0, 6, 0, 12, 0, 12, 0, + 12, 0, 24, 0, 24, 0, 48, 0, 96, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,126, 0, 31, 0, 27, 0, 27, 0, 27, 0, 27, 0, + 54, 0, 54, 0, 54, 0,108, 0,108, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 96, 0, 96, 0, 96, 0, 96, 0, 96, 0, 96, 0, + 96, 0, 96, 0, 96, 0, 97,128, 62, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,127, 0, 96, 0, 96, 0, 96, 0, 96, 0, 96, 0, + 96, 0, 96, 0, 96, 0, 99, 0, 60, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,127,128,108, 0,108, 0,108, 0,108, 0,108, 0, + 108, 0,108, 0,108, 0,109,128, 62, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,126, 0, 3, 0, 3, 0, 3, 0, 3, 0, 62, 0, + 96, 0, 96, 0, 96, 0, 99, 0, 60, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,127, 0, 99, 0, 99, 0, 99, 0, 99, 0, 99, 0, + 99, 0, 99, 0, 99, 0,103, 0, 60, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 99, 0, 99, 0, 99, 0, 99, 0, 99, 0,127, 0, + 99, 0, 99, 0, 99, 0,103, 0, 60, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,109,128,109,128,109,128,109,128,109,128,127,128, + 109,128,109,128,109,128,111,128, 62, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 12, 0, 30, 0, 63, 0, 51, 0, 51, 0, 51, 0, + 97,128, 97,128, 97,128, 97,128, 97,128, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 54, 0,111, 0,111, 0,111, 0,111, 0,111, 0, + 217,128,217,128,217,128,217,128,217,128, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 30, 0, 51, 0, 97,128, 97,128, 97,128, 97,128, + 97,128, 97,128, 97,128, 51, 0, 30, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,126, 0, 7, 0, 6, 0, 6, 0, 14, 0, 28, 0, + 30, 0, 51, 0, 51, 0, 97,128, 97,128, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,255, 0, 25,128, 25,128, 59,128, 55, 0, 54, 0, + 62, 0,111, 0,111, 0,217,128,217,128, 0, 0, 0, 0, 0, 0, + 0, 0, 24, 0,126, 0, 7, 0, 6, 0, 6, 0, 14, 0, 28, 0, + 30, 0, 51, 0, 51, 0, 97,128, 97,128, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,124, 0, 14, 0, 6, 0, 6, 0, 12, 0,124, 0, + 12, 0, 24, 0, 24, 0, 48, 0, 96, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 63, 0, 96, 0, 96, 0, 96, 0, 96, 0,126, 0, + 96, 0, 96, 0, 96, 0, 99, 0, 60, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,127, 0, 54, 0, 54, 0, 54, 0, 54, 0, 54, 0, + 54, 0, 54, 0, 54, 0, 55, 0,124, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 12, 0,127,128, 0, 0, 30, 0, 51, 0, 97,128, 97,128, + 97,128, 97,128, 97,128, 51, 0, 30, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 63,248, 0, 28, 0, 12, 0, 12, 0, 12, 0, 12, + 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,124,248, 6, 12, 6, 12, 6, 12, 6, 12, 6, 12, + 6, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 48, 0, 48, 0, 48, 0, 48, 0, 48, 0, 48, 28, + 31,224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 63,252, 48, 0, 48, 0, 48, 0, 48, 0, 48, 28, + 31,224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 62,252, 48,192, 48,192, 48,192, 48,192, 48,204, + 30,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 63,248, 0, 12, 0, 12, 31,248, 48, 0, 48, 28, + 31,224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 63,252, 48, 12, 48, 12, 48, 12, 48, 12, 48, 60, + 31,224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 48, 12, 48, 12, 48, 12, 63,252, 48, 12, 48, 60, + 31,224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 49,140, 49,140, 49,140, 63,252, 49,140, 49,188, + 31,224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 3,192, 14,112, 24, 24, 48, 12, 48, 12, 48, 12, + 48, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 14,240, 25,152, 25,152, 51, 12, 51, 12, 51, 12, + 51, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 15,240, 24, 24, 48, 12, 48, 12, 48, 12, 24, 24, + 15,240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 63,224, 0, 48, 0,240, 3,224, 14,112, 24, 24, + 48, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 63,224, 3, 48, 3,112, 7,224, 13,240, 27, 24, + 54, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 3, 0, 63,224, 0, 48, 0,240, 3,224, 14,112, 24, 24, + 48, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 63,248, 0, 28, 0, 12, 31,252, 0, 12, 0, 12, + 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 63,252, 48, 0, 48, 0, 63,248, 48, 0, 48, 28, + 31,224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 63,252, 12, 48, 12, 48, 12, 48, 12, 48, 12, 60, + 63,224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 3,192, 63,252, 15,240, 56, 28, 48, 12, 56, 28, + 15,240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 63,248, 0, 28, 0, 12, 0, 12, 0, 12, 0, 12, + 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,124,248, 6, 12, 6, 12, 6, 12, 6, 12, 6, 12, + 6, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 48, 0, 48, 0, 48, 0, 48, 12, 31,240, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 63,252, 48, 0, 48, 0, 48, 12, 31,240, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 62,252, 48,192, 48,192, 48,204, 30,112, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 63,248, 0, 12, 31,248, 48, 0, 31,252, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 63,252, 48, 12, 48, 12, 48, 28, 31,240, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 48, 12, 48, 12, 63,252, 48, 28, 31,240, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 49,140, 49,140, 63,252, 49,156, 31,240, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 3,192, 14,112, 24, 24, 48, 12, 48, 12, 48, 12, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 14,240, 25,152, 25,152, 51, 12, 51, 12, 51, 12, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 15,240, 24, 24, 48, 12, 48, 12, 24, 24, 15,240, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 63,224, 0, 48, 0,240, 3,224, 14,112, 56, 28, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 63,224, 3, 48, 3,112, 7,224, 13,240, 59, 28, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 3, 0, 63,224, 0, 48, 0,240, 3,224, 14,112, 56, 28, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 63,248, 0, 28, 0, 12, 31,252, 0, 12, 0, 12, + 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 63,252, 48, 0, 63,252, 48, 0, 31,252, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 63,252, 12, 48, 12, 48, 12, 52, 63,248, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1,128, 63,252, 15,240, 56, 28, 48, 12, 56, 28, 15,240, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,127, 0, 3,128, 1,128, 1,128, 1,128, 1,128, + 1,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,127, 0, 25,128, 25,128, 25,128, 25,128, 25,128, + 25,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 96, 0, 96, 0, 96, 0, 96, 0, 96, 0, 97,128, + 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,127,128, 96, 0, 96, 0, 96, 0, 96, 0, 97,128, + 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,119,128,102, 0,102, 0,102, 0,102, 0,102,128, + 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,127, 0, 1,128, 1,128, 63, 0, 96, 0, 97,128, + 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,127,128, 97,128, 97,128, 97,128, 97,128, 99,128, + 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 97,128, 97,128, 97,128,127,128, 97,128, 99,128, + 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,109,128,109,128,109,128,127,128,109,128,111,128, + 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 30, 0, 51, 0, 51, 0, 97,128, 97,128, 97,128, + 97,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 54, 0,111, 0,111, 0,217,128,217,128,217,128, + 217,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 30, 0, 51, 0, 97,128, 97,128, 97,128, 51, 0, + 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,126, 0, 3, 0, 6, 0, 12, 0, 30, 0, 51, 0, + 97,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,127, 0, 27,128, 27, 0, 31, 0, 31, 0, 61,128, + 108,192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 24, 0,126, 0, 3, 0, 6, 0, 12, 0, 30, 0, 51, 0, + 97,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,127, 0, 3,128, 1,128, 63,128, 1,128, 1,128, + 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,127,128, 96, 0, 96, 0,127, 0, 96, 0, 97,128, + 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,127,128, 51, 0, 51, 0, 51, 0, 51, 0, 51,128, + 126, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 12, 0,127,128, 30, 0, 51, 0, 97,128, 97,128, 51, 0, + 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,127, 0, 3,128, 1,128, 1,128, 1,128, 1,128, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,119, 0, 25,128, 25,128, 25,128, 25,128, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 96, 0, 96, 0, 96, 0, 97,128, 62, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,127,128, 96, 0, 96, 0, 97,128, 62, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,119,128,102, 0,102, 0,102,128, 51, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,127, 0, 1,128, 63, 0, 96, 0, 63,128, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,127,128, 97,128, 97,128, 99,128, 62, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 97,128, 97,128,127,128, 99,128, 62, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,109,128,109,128,127,128,109,128, 62, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 30, 0, 51, 0, 97,128, 97,128, 97,128, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 54, 0,111, 0,217,128,217,128,217,128, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 30, 0,115,128, 97,128,115,128, 30, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,126, 0, 7, 0, 30, 0, 51, 0, 97,128, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,127, 0, 27,128, 27, 0, 63,128,108,192, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 24, 0,126, 0, 7, 0, 30, 0, 51, 0, 97,128, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,127, 0, 3,128,127,128, 1,128, 1,128, 1,128, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,127,128, 96, 0,127,128, 96, 0, 63,128, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,127,128, 51, 0, 51, 0, 51, 0,127,128, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 12, 0,127,128, 63, 0, 97,128, 97,128, 63, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,127, 0, 3,128, 1,128, 1,128, 1,128, 1,128, 1,128, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,127, 0, 25,128, 25,128, 25,128, 25,128, 25,128, 25,128, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 96, 0, 96, 0, 96, 0, 96, 0, 96, 0, 97,128, 62, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,127,128, 96, 0, 96, 0, 96, 0, 96, 0, 97,128, 62, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,119,128,102, 0,102, 0,102, 0,102, 0,102,128, 51, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,127, 0, 1,128, 1,128, 63, 0, 96, 0, 97,128, 62, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,127,128, 97,128, 97,128, 97,128, 97,128, 99,128, 62, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 97,128, 97,128, 97,128,127,128, 97,128, 99,128, 62, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,109,128,109,128,109,128,127,128,109,128,111,128, 62, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 30, 0, 51, 0, 51, 0, 97,128, 97,128, 97,128, 97,128, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 54, 0,111, 0,111, 0,217,128,217,128,217,128,217,128, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 30, 0, 51, 0, 97,128, 97,128, 97,128, 51, 0, 30, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,126, 0, 3, 0, 6, 0, 12, 0, 30, 0, 51, 0, 97,128, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,127, 0, 27,128, 27, 0, 31, 0, 31, 0, 61,128, + 108,192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 24, 0,126, 0, 3, 0, 6, 0, 12, 0, 30, 0, 51, 0, 97,128, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,126, 0, 7, 0, 3, 0, 63, 0, 6, 0, 28, 0,112, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,127,128, 96, 0, 96, 0,127,128, 96, 0, 97,128, 62, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,127,128, 51, 0, 51, 0, 51, 0, 51, 0, 51,128,126, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 12, 0,127,128, 30, 0,115,128, 97,128,115,128, 30, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 63,248, 0, 28, 0, 12, 0, 12, 0, 12, 0, 12, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 62,248, 3, 12, 3, 12, 3, 12, 3, 12, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 48, 0, 48, 0, 48, 0, 48, 28, 31,224, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 63,252, 48, 0, 48, 0, 48, 28, 31,224, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 62,252, 48,192, 48,192, 48,204, 30,240, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 63,248, 0, 12, 31,248, 48, 0, 31,252, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 63,252, 48, 12, 48, 12, 48, 60, 31,224, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 48, 12, 48, 12, 63,252, 48, 60, 31,224, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 49,140, 49,140, 63,252, 49,156, 31,240, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 7,224, 28, 56, 48, 12, 48, 12, 48, 12, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 14,240, 25,152, 51, 12, 51, 12, 51, 12, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 15,240, 56, 28, 48, 12, 56, 28, 15,240, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 63,240, 0,120, 3,224, 14,112, 48, 12, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 63,240, 6,120, 14, 48, 30,120, 51,204, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 3, 0, 63,240, 0,120, 3,224, 14,112, 48, 12, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 63,240, 0, 28, 31,252, 0, 12, 0, 12, 0, 12, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 63,252, 48, 0, 63,252, 48, 0, 31,252, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 63,252, 12, 48, 12, 48, 12, 60, 63,224, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 7,224, 63,252, 31,248, 48, 12, 31,248, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,127, 0, 3,128, 1,128, 1,128, 1,128, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,127, 0, 25,128, 25,128, 25,128, 25,128, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 96, 0, 96, 0, 97,128, 62, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 63,128, 48, 0, 49,128, 30, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,119,128,102, 0,102, 0, 51,128, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,127, 0, 1,128, 63, 0, 96, 0, 63,128, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,127,128, 97,128, 99,128, 62, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 97,128,127,128, 99,128, 62, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,109,128,127,128,109,128, 62, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 30, 0, 51, 0, 97,128, 97,128, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 54, 0,111, 0,217,128,217,128, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 30, 0,115,128, 97,128,115,128, 30, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,127, 0, 15,128, 59, 0, 97,128, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,127, 0, 27,128, 59, 0,109,128, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 12, 0,127, 0, 15,128, 59, 0, 97,128, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,127, 0, 3,128, 63,128, 1,128, 3, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,127,128, 96, 0,127,128, 96, 0, 63,128, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,127,128, 51, 0, 51, 0,127,128, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 12, 0,127,128, 63, 0, 97,128, 63, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,/// + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 24, 0, 24, 0, 24, 0, 24, 0, 24, 0, 24, 0, 31, + 0, 24, 0, 24, 0, 24, 0, 24, 0, 24, 0, 24, 0, 0, 0, 0, + 0, 0, 0, 54, 0, 54, 0, 54, 0, 54, 0, 54, 0, 54, 0, 62, + 0, 54, 0, 54, 0, 54, 0, 54, 0, 54, 0, 54, 0, 0, 0, 0, + 0, 0, 0, 24, 0, 24, 0, 24, 0, 24, 0, 31, 0, 24, 0, 24, + 0, 24, 0, 31, 0, 24, 0, 24, 0, 24, 0, 24, 0, 0, 0, 0, + 0, 0, 0, 54, 0, 54, 0, 54, 0, 54, 0, 62, 0, 54, 0, 54, + 0, 54, 0, 62, 0, 54, 0, 54, 0, 54, 0, 54, 0, 0, 0, 0, + 0, 0, 0, 12, 0, 12, 0, 12, 0, 12, 0, 12, 0, 12, 0,124, + 0, 12, 0, 12, 0, 12, 0, 12, 0, 12, 0, 12, 0, 0, 0, 0, + 0, 0, 0, 54, 0, 54, 0, 54, 0, 54, 0, 54, 0, 54, 0,246, + 0, 54, 0, 54, 0, 54, 0, 54, 0, 54, 0, 54, 0, 0, 0, 0, + 0, 0, 0, 12, 0, 12, 0, 12, 0, 12, 0,124, 0, 12, 0, 12, + 0, 12, 0,124, 0, 12, 0, 12, 0, 12, 0, 12, 0, 0, 0, 0, + 0, 0, 0, 54, 0, 54, 0, 54, 0, 54, 0,246, 0, 54, 0, 54, + 0, 54, 0,246, 0, 54, 0, 54, 0, 54, 0, 54, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,128, + 1,128, 1,128, 1,128, 1,128,127,254, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 24, 0, 24, 0, 24, 0, 24, 0, 24, 0, 24, 12, 31, + 12, 24, 12, 24, 12, 24, 12, 24,127,248, 0, 24, 0, 0, 0, 0, + 0, 0, 0, 54, 0, 54, 0, 54, 0, 54, 0, 54, 0, 54, 12, 62, + 12, 54, 12, 54, 12, 54, 12, 54,127,246, 0, 54, 0, 0, 0, 0, + 0, 0, 0, 12, 0, 12, 0, 12, 0, 12, 0, 12, 0, 12, 12, 12, + 12, 12, 12, 12, 12, 12, 12, 12,127,252, 0, 12, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 96, + 6, 96, 6, 96, 6, 96, 6, 96,127,254, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,127,254, 1,128, 1,128, 1,128, 1,128, 0, 0, 0, 0, + 0, 0, 0, 12, 0, 12, 0, 12, 0, 12, 0, 12, 0, 12, 0, 12, + 127,252, 12, 12, 12,252, 12, 12, 12, 12, 12, 12, 0, 0, 0, 0, + 0, 0, 0, 54, 0, 54, 0, 54, 0, 54, 0, 54, 0, 54, 0, 54, + 127,246, 12, 54, 12,246, 12, 54, 12, 54, 12, 54, 0, 0, 0, 0, + 0, 0, 0, 12, 0, 12, 0, 12, 0, 12, 0, 12, 0, 12, 0, 12, + 127,252, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,127,254, 12, 48, 12, 48, 12, 48, 12, 48, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,127,254, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 12, 0, 12, 0, 12, 0, 12, 0, 12, 0, 12, 0, 12, + 0, 12, 0, 12, 0, 12, 0, 12,127,252, 0, 12, 0, 0, 0, 0, + 0, 0, 0, 12, 0, 12, 0, 12, 0, 12, 0, 12, 0, 12, 0, 12, + 0, 12, 0, 12, 0, 12, 0, 12, 0, 12, 0, 12, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 24, 0, 24, 0, 24, 0, 24, 0, 24, 0, 24, 0, 31, + 0, 24, 0, 24, 0, 24, 0, 24, 0, 24, 0, 24, 0, 0, 0, 0, + 0, 0, 0, 54, 0, 54, 0, 54, 0, 54, 0, 54, 0, 54, 0, 62, + 0, 54, 0, 54, 0, 54, 0, 54, 0, 54, 0, 54, 0, 0, 0, 0, + 0, 0, 0, 24, 0, 24, 0, 24, 0, 24, 0, 31, 0, 24, 0, 24, + 0, 24, 0, 31, 0, 24, 0, 24, 0, 24, 0, 24, 0, 0, 0, 0, + 0, 0, 0, 54, 0, 54, 0, 54, 0, 54, 0, 62, 0, 54, 0, 54, + 0, 54, 0, 62, 0, 54, 0, 54, 0, 54, 0, 54, 0, 0, 0, 0, + 0, 0, 0, 12, 0, 12, 0, 12, 0, 12, 0, 12, 0, 12, 0,124, + 0, 12, 0, 12, 0, 12, 0, 12, 0, 12, 0, 12, 0, 0, 0, 0, + 0, 0, 0, 54, 0, 54, 0, 54, 0, 54, 0, 54, 0, 54, 0,246, + 0, 54, 0, 54, 0, 54, 0, 54, 0, 54, 0, 54, 0, 0, 0, 0, + 0, 0, 0, 12, 0, 12, 0, 12, 0, 12, 0,124, 0, 12, 0, 12, + 0, 12, 0,124, 0, 12, 0, 12, 0, 12, 0, 12, 0, 0, 0, 0, + 0, 0, 0, 54, 0, 54, 0, 54, 0, 54, 0,246, 0, 54, 0, 54, + 0, 54, 0,246, 0, 54, 0, 54, 0, 54, 0, 54, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1,128, 1,128, 1,128,127,254, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 24, 0, 24, 0, 24, 0, 24, 0, 24, 0, 24, 0, 31, + 0, 24, 12, 24, 12, 24, 12, 24,127,248, 0, 24, 0, 0, 0, 0, + 0, 0, 0, 54, 0, 54, 0, 54, 0, 54, 0, 54, 0, 54, 0, 62, + 0, 54, 12, 54, 12, 54, 12, 54,127,246, 0, 54, 0, 0, 0, 0, + 0, 0, 0, 12, 0, 12, 0, 12, 0, 12, 0, 12, 0, 12, 0, 12, + 0, 12, 12, 12, 12, 12, 12, 12,127,252, 0, 12, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 12, 48, 12, 48, 12, 48,127,254, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,127,254, 1,128, 1,128, 1,128, 1,128, 0, 0, 0, 0, + 0, 0, 0, 12, 0, 12, 0, 12, 0, 12, 0, 12, 0, 12, 0, 12, + 127,252, 12, 12, 12,252, 12, 12, 12, 12, 12, 12, 0, 0, 0, 0, + 0, 0, 0, 54, 0, 54, 0, 54, 0, 54, 0, 54, 0, 54, 0, 54, + 127,246, 12, 54, 12,246, 12, 54, 12, 54, 12, 54, 0, 0, 0, 0, + 0, 0, 0, 12, 0, 12, 0, 12, 0, 12, 0, 12, 0, 12, 0, 12, + 127,252, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,127,254, 12, 48, 12, 48, 12, 48, 12, 48, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,127,254, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 12, 0, 12, 0, 12, 0, 12, 0, 12, 0, 12, 0, 12, + 0, 12, 0, 12, 0, 12, 0, 12,127,252, 0, 12, 0, 0, 0, 0, + 0, 0, 0, 12, 0, 12, 0, 12, 0, 12, 0, 12, 0, 12, 0, 12, + 0, 12, 0, 12, 0, 12, 0, 12, 0, 12, 0, 12, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 24, 0, 24, 0, 24, 0, 31, 0, 24, 0, 24, 0, 24, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 54, 0, 54, 0, 54, 0, 62, 0, 54, 0, 54, 0, 54, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 24, 0, 24, 0, 31, 0, 24, 0, 31, 0, 24, 0, 24, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 54, 0, 54, 0, 62, 0, 54, 0, 62, 0, 54, 0, 54, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 12, 0, 12, 0, 12, 0,124, 0, 12, 0, 12, 0, 12, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 54, 0, 54, 0, 54, 0,246, 0, 54, 0, 54, 0, 54, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 12, 0, 12, 0,124, 0, 12, 0,124, 0, 12, 0, 12, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 54, 0, 54, 0,246, 0, 54, 0,246, 0, 54, 0, 54, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1,128, 1,128, 1,128,127,254, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 24, 0, 24, 0, 24, 0, 31, 12, 24, 12, 24,127,248, + 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 54, 0, 54, 0, 54, 0, 62, 12, 54, 12, 54,127,246, + 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 12, 0, 12, 0, 12, 0, 12, 6, 12, 6, 12,127,252, + 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 6, 96, 6, 96, 6, 96,127,254, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,127,254, + 1,128, 1,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 12, 0, 12, 0, 12, 0, 12, 0, 12,127,252, 12,124, + 12, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 54, 0, 54, 0, 54, 0, 54, 0, 54,127,246, 12,246, + 12, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 12, 0, 12, 0, 12, 0, 12, 0, 12,127,252, 12, 12, + 12, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,127,254, + 12, 48, 12, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,127,254, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 12, 0, 12, 0, 12, 0, 12, 0, 12, 0, 12,127,252, + 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 12, 0, 12, 0, 12, 0, 12, 0, 12, 0, 12, 0, 12, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 24, 0, 24, 0, 24, 0, 31, 0, 24, 0, 24, 0, 24, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 54, 0, 54, 0, 54, 0, 62, 0, 54, 0, 54, 0, 54, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 24, 0, 24, 0, 31, 0, 24, 0, 31, 0, 24, 0, 24, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 54, 0, 54, 0, 62, 0, 54, 0, 62, 0, 54, 0, 54, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 12, 0, 12, 0, 12, 0,124, 0, 12, 0, 12, 0, 12, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 54, 0, 54, 0, 54, 0,246, 0, 54, 0, 54, 0, 54, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 12, 0, 12, 0,124, 0, 12, 0,124, 0, 12, 0, 12, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 54, 0, 54, 0,246, 0, 54, 0,246, 0, 54, 0, 54, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,128, 1,128,127,254, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 24, 0, 24, 0, 24, 0, 31, 12, 24, 12, 24,127,248, + 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 54, 0, 54, 0, 54, 0, 62, 12, 54, 12, 54,127,246, + 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 12, 0, 12, 0, 12, 0, 12, 12, 12, 12, 12,127,252, + 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 48, 12, 48,127,254, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,127,254, + 1,128, 1,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 12, 0, 12, 0, 12, 0, 12, 0, 12,127,252, 12,124, + 12, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 54, 0, 54, 0, 54, 0, 54, 0, 54,127,246, 12,246, + 12, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 12, 0, 12, 0, 12, 0, 12, 0, 12,127,252, 12, 12, + 12, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,127,254, + 12, 48, 12, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,127,254, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 12, 0, 12, 0, 12, 0, 12, 0, 12, 0, 12,127,252, + 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 12, 0, 12, 0, 12, 0, 12, 0, 12, 0, 12, 0, 12, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 63,240, 0, 56, 0, 24, 0, 24, 0, 24, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 63,240, 3, 24, 3, 24, 3, 24, 3, 24, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 62, 24, 3, 60, 3,102, 3,102, 3,102, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 48, 0, 48, 0, 48, 0, 48, 24, 31,224, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 49,240, 48, 56, 48, 96, 48,240, 31,152, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 48, 96, 49,248, 48,240, 49,152, 30,240, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 63,248, 48, 0, 48, 0, 48, 24, 31,224, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 63,240, 0, 24, 31,240, 48, 0, 31,248, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 60,240, 6, 24, 28, 24, 48, 24, 30, 24, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 60,248, 6,216, 28,216, 48,216, 30,120, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 60,216, 6,216, 28,248, 48,216, 30,120, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 60, 48, 6,120, 28,204, 48,204, 30,204, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 60,248, 6,192, 28,248, 48,192, 30,120, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 63,248, 7,176, 29,176, 49,176, 31,248, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 60, 96, 7,248, 28,240, 49,152, 30,240, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 63,248, 48, 24, 48, 24, 48, 56, 31,224, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 48, 24, 48, 24, 63,248, 48, 56, 31,224, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 54, 48, 54,120, 62,204, 54,236, 30,204, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 7,128, 28,224, 48, 48, 96, 24, 96, 24, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 14,240, 25,152, 51, 12, 51, 12, 51, 12, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 15,224, 56, 56, 48, 24, 56, 56, 15,224, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,127,192, 3,224, 7,128, 28,224, 96, 24, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 6, 0,127,192, 3,224, 7,128, 28,224, 96, 24, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 63,240, 0, 56, 31,248, 0, 24, 0, 24, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 63,248, 48, 0, 63,248, 48, 0, 31,248, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 63,248, 12, 96, 12, 96, 12,120, 63,224, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 3,128, 63,248, 31,240, 48, 24, 48, 24, 31,240, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 63,248, 0, 28, 0, 12, 0, 12, 0, 12, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 62,248, 3, 12, 3, 12, 3, 12, 3, 12, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 62, 24, 3, 60, 3,102, 3,102, 3,102, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 48, 0, 48, 0, 48, 0, 48, 12, 31,240, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 48,248, 48, 28, 48, 48, 48,120, 31,204, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 48,112, 49,252, 48,248, 49,140, 30,248, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 63,252, 48, 0, 48, 0, 48, 12, 31,240, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 63,248, 0, 12, 31,248, 48, 0, 31,252, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 62,120, 3, 12, 30, 12, 48, 12, 31, 12, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 60,252, 6,204, 28,204, 48,204, 30,124, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 60,204, 6,204, 28,252, 48,204, 30,124, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 62, 24, 3, 60, 30,102, 48,102, 31,102, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 62,124, 3, 96, 30,124, 48, 96, 31, 60, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 63,252, 6,216, 28,216, 48,216, 31,252, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 62, 48, 3,252, 30,120, 48,204, 31,120, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 63,252, 48, 12, 48, 12, 48, 28, 31,240, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 48, 12, 48, 12, 63,252, 48, 28, 31,240, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 51, 24, 51, 60, 63,102, 51,102, 31,102, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 3,192, 14,112, 24, 24, 48, 12, 48, 12, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 6,112, 29,220, 51, 6, 51, 6, 51, 6, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 15,240, 56, 28, 48, 12, 56, 28, 15,240, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 63,240, 0,248, 3,192, 14,112, 48, 12, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 3, 0, 63,240, 0,248, 3,192, 14,112, 48, 12, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 63,248, 0, 28, 31,252, 0, 12, 0, 12, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 63,252, 48, 0, 63,248, 48, 0, 31,252, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 63,252, 12, 48, 12, 48, 12, 60, 63,240, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 3,192, 63,252, 31,248, 48, 12, 31,248, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 63,252, 0, 14, 0, 6, 0, 6, 0, 6, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 62,252, 3, 6, 3, 6, 3, 6, 3, 6, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 62, 24, 3, 60, 3,102, 3,102, 3,102, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 48, 0, 48, 0, 48, 0, 48, 6, 31,248, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 48,124, 48, 14, 48, 24, 48, 60, 31,102, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 48, 56, 48,254, 48,124, 48,198, 31,124, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 63,254, 48, 0, 48, 0, 48, 6, 31,248, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 63,252, 0, 6, 31,252, 48, 0, 31,254, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 62,124, 3, 6, 30, 6, 48, 6, 31, 6, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 62,126, 3,102, 30,102, 48,102, 31, 62, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 62,102, 3,102, 30,126, 48,102, 31, 62, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 62, 24, 3, 60, 30,102, 48,102, 31,102, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 62,126, 3, 96, 30,126, 48, 96, 31, 62, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 63,254, 3,108, 30,108, 48,108, 31,254, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 62, 56, 3,254, 30,124, 48,198, 31,124, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 63,254, 48, 6, 48, 6, 48, 14, 31,248, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 48, 6, 48, 6, 63,254, 48, 14, 31,248, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 51, 24, 51, 60, 63,102, 51,102, 31,230, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 3,224, 14, 56, 24, 12, 48, 6, 48, 6, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 6,112, 29,220, 51, 6, 51, 6, 51, 6, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 15,248, 56, 14, 48, 6, 56, 14, 15,248, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 63,240, 0,248, 3, 96, 14, 56, 56, 14, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1,128, 63,240, 0,248, 3, 96, 14, 56, 56, 14, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 63,252, 0, 14, 31,254, 0, 6, 0, 6, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 63,254, 48, 0, 63,254, 48, 0, 31,254, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 63,254, 12, 24, 12, 24, 12, 30, 63,248, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 3,224, 63,254, 31,252, 48, 6, 31,252, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 63,248, 0, 28, 0, 12, 0, 12, 0, 12, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 62,248, 3, 12, 3, 12, 3, 12, 3, 12, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 62, 48, 3,120, 3,204, 3,204, 3,204, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 48, 0, 48, 0, 48, 0, 48, 12, 31,240, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 48,248, 48, 28, 48, 48, 48,120, 31,204, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 48,112, 49,252, 48,248, 49,140, 30,248, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 63,252, 48, 0, 48, 0, 48, 12, 31,240, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 63,248, 0, 12, 31,248, 48, 0, 31,252, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 62,248, 3, 12, 30, 12, 48, 12, 31, 12, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 60,252, 6,204, 28,204, 48,204, 30,124, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 60,204, 6,204, 28,252, 48,204, 30,124, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 62, 48, 3,120, 30,204, 48,204, 31,204, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 62,124, 3, 96, 30,124, 48, 96, 31, 60, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 63,252, 6,216, 28,216, 48,216, 31,252, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 62, 48, 3,252, 30,120, 48,204, 31,120, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 63,252, 48, 12, 48, 12, 48, 28, 31,240, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 48, 12, 48, 12, 63,252, 48, 28, 31,240, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 51, 48, 51,120, 63,204, 51,204, 31,204, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 3,192, 14,112, 24, 24, 48, 12, 48, 12, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 6, 96, 29,248, 51, 12, 51, 12, 51, 12, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 15,240, 56, 28, 48, 12, 56, 28, 15,240, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 63,224, 0,240, 3,192, 14,112, 48, 12, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 3, 0, 63,224, 0,240, 3,192, 14,112, 48, 12, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 63,248, 0, 28, 31,252, 0, 12, 0, 12, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 63,252, 48, 0, 63,252, 48, 0, 31,252, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 63,252, 12, 48, 12, 48, 12, 60, 63,240, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 3,192, 63,252, 31,248, 48, 12, 31,248, 0, 0, 0, 0 +}; + +const unsigned char _HanGodic[(8*20+4*22+4*28)*32] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,126, 0, 6, 0, 6, 0, 6, 0, 12, 0, 12, 0, + 12, 0, 24, 0, 24, 0, 48, 0, 96, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,127, 0, 27, 0, 27, 0, 27, 0, 27, 0, 27, 0, + 54, 0, 54, 0, 54, 0,108, 0,108, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 96, 0, 96, 0, 96, 0, 96, 0, 96, 0, 96, 0, + 96, 0, 96, 0, 96, 0, 96, 0,127,128, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,127, 0, 96, 0, 96, 0, 96, 0, 96, 0, 96, 0, + 96, 0, 96, 0, 96, 0, 96, 0,127, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,127,128,108, 0,108, 0,108, 0,108, 0,108, 0, + 108, 0,108, 0,108, 0,108, 0,127,128, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,127, 0, 3, 0, 3, 0, 3, 0, 3, 0,127, 0, + 96, 0, 96, 0, 96, 0, 96, 0,127, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,127, 0, 99, 0, 99, 0, 99, 0, 99, 0, 99, 0, + 99, 0, 99, 0, 99, 0, 99, 0,127, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 99, 0, 99, 0, 99, 0, 99, 0, 99, 0,127, 0, + 99, 0, 99, 0, 99, 0, 99, 0,127, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,109,128,109,128,109,128,109,128,109,128,127,128, + 109,128,109,128,109,128,109,128,127,128, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 12, 0, 12, 0, 12, 0, 12, 0, 12, 0, 30, 0, + 30, 0, 51, 0, 51, 0, 97,128, 97,128, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 54, 0, 54, 0, 54, 0, 54, 0, 54, 0, 54, 0, + 111, 0,111, 0,217,128,217,128,217,128, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 30, 0, 51, 0, 97,128, 97,128, 97,128, 97,128, + 97,128, 97,128, 97,128, 51, 0, 30, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,127,128, 12, 0, 12, 0, 12, 0, 12, 0, 30, 0, + 30, 0, 51, 0, 51, 0, 97,128, 97,128, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,255,128, 54, 0, 54, 0, 54, 0, 54, 0, 54, 0, + 54, 0,111, 0,111, 0,217,128,217,128, 0, 0, 0, 0, 0, 0, + 0, 0, 12, 0,127,128, 12, 0, 12, 0, 12, 0, 30, 0, 30, 0, + 30, 0, 51, 0, 51, 0, 97,128, 97,128, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,126, 0, 6, 0, 6, 0, 6, 0, 12, 0,124, 0, + 12, 0, 24, 0, 24, 0, 48, 0, 96, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,127, 0, 96, 0, 96, 0, 96, 0, 96, 0,126, 0, + 96, 0, 96, 0, 96, 0, 96, 0,127, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,127, 0, 54, 0, 54, 0, 54, 0, 54, 0, 54, 0, + 54, 0, 54, 0, 54, 0, 54, 0,127, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 12, 0,127,128, 0, 0, 30, 0, 51, 0, 97,128, 97,128, + 97,128, 97,128, 97,128, 51, 0, 30, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 63,252, 0, 12, 0, 12, 0, 12, 0, 12, 0, 12, + 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 62,124, 6, 12, 6, 12, 6, 12, 6, 12, 6, 12, + 6, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 48, 0, 48, 0, 48, 0, 48, 0, 48, 0, 48, 0, + 63,252, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 63,252, 48, 0, 48, 0, 48, 0, 48, 0, 48, 0, + 63,252, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 62,252, 48,192, 48,192, 48,192, 48,192, 48,192, + 62,252, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 63,252, 0, 12, 0, 12, 63,252, 48, 0, 48, 0, + 63,252, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 63,252, 48, 12, 48, 12, 48, 12, 48, 12, 48, 12, + 63,252, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 48, 12, 48, 12, 48, 12, 63,252, 48, 12, 48, 12, + 63,252, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 49,140, 49,140, 49,140, 63,252, 49,140, 49,140, + 63,252, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1,128, 3,192, 6, 96, 12, 48, 24, 24, 48, 12, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 6, 96, 6, 96, 6, 96, 6, 96, 15,240, 25,152, + 51, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 15,240, 24, 24, 48, 12, 48, 12, 48, 12, 24, 24, + 15,240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 63,252, 1,128, 3,192, 6, 96, 12, 48, 24, 24, + 48, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 63,252, 6, 96, 6, 96, 6, 96, 15,240, 25,152, + 51, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1,128, 63,252, 3,192, 6, 96, 12, 48, 24, 24, + 48, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 63,252, 0, 12, 0, 12, 31,252, 0, 12, 0, 12, + 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 63,252, 48, 0, 48, 0, 63,248, 48, 0, 48, 0, + 63,252, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 63,252, 12, 48, 12, 48, 12, 48, 12, 48, 12, 48, + 63,252, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 3,192, 63,252, 15,240, 56, 28, 48, 12, 56, 28, + 15,240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 63,252, 0, 12, 0, 12, 0, 12, 0, 12, 0, 12, + 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 62,124, 6, 12, 6, 12, 6, 12, 6, 12, 6, 12, + 6, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 48, 0, 48, 0, 48, 0, 48, 0, 63,252, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 63,252, 48, 0, 48, 0, 48, 0, 63,252, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 62,252, 48,192, 48,192, 48,192, 62,252, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 63,252, 0, 12, 63,252, 48, 0, 63,252, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 63,252, 48, 12, 48, 12, 48, 12, 63,252, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 48, 12, 48, 12, 63,252, 48, 12, 63,252, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 49,140, 49,140, 63,252, 49,140, 63,252, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1,128, 3,192, 6, 96, 12, 48, 24, 24, 48, 12, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 6, 96, 6, 96, 6, 96, 15,240, 25,152, 51, 12, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 15,240, 24, 24, 48, 12, 48, 12, 24, 24, 15,240, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 63,252, 3,192, 6, 96, 12, 48, 24, 24, 48, 12, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 63,252, 6, 96, 6, 96, 15,240, 25,152, 51, 12, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1,128, 63,252, 3,192, 6, 96, 12, 48, 24, 24, 48, 12, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 63,252, 0, 12, 0, 12, 63,252, 0, 12, 0, 12, + 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 63,252, 48, 0, 63,252, 48, 0, 63,252, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 63,252, 12, 48, 12, 48, 12, 48, 63,252, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1,128, 63,252, 15,240, 56, 28, 48, 12, 56, 28, 15,240, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,127,128, 1,128, 1,128, 1,128, 1,128, 1,128, + 1,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,123,128, 25,128, 25,128, 25,128, 25,128, 25,128, + 25,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 96, 0, 96, 0, 96, 0, 96, 0, 96, 0, 96, 0, + 127,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,127,128, 96, 0, 96, 0, 96, 0, 96, 0, 96, 0, + 127,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,119,128,102, 0,102, 0,102, 0,102, 0,102, 0, + 119,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,127,128, 1,128, 1,128,127,128, 96, 0, 96, 0, + 127,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,127,128, 97,128, 97,128, 97,128, 97,128, 97,128, + 127,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 97,128, 97,128, 97,128,127,128, 97,128, 97,128, + 127,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,109,128,109,128,109,128,127,128,109,128,109,128, + 127,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 12, 0, 12, 0, 12, 0, 12, 0, 30, 0, 51, 0, + 97,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 54, 0, 54, 0, 54, 0, 54, 0, 62, 0,111, 0, + 217,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 30, 0, 51, 0, 97,128, 97,128, 97,128, 51, 0, + 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,127,128, 12, 0, 12, 0, 12, 0, 30, 0, 51, 0, + 97,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,127,128, 27, 0, 27, 0, 27, 0, 27, 0, 63,128, + 108,192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 12, 0,127,128, 12, 0, 12, 0, 30, 0, 51, 0, + 97,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,127,128, 1,128, 1,128,127,128, 1,128, 1,128, + 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,127,128, 96, 0, 96, 0,127, 0, 96, 0, 96, 0, + 127,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,127,128, 51, 0, 51, 0, 51, 0, 51, 0, 51, 0, + 127,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 12, 0,127,128, 30, 0, 51, 0, 97,128, 97,128, 51, 0, + 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,127,128, 1,128, 1,128, 1,128, 1,128, 1,128, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,123,128, 25,128, 25,128, 25,128, 25,128, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 96, 0, 96, 0, 96, 0, 96, 0,127,128, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,127,128, 96, 0, 96, 0, 96, 0,127,128, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,119,128,102, 0,102, 0,102, 0,119,128, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,127,128, 1,128,127,128, 96, 0,127,128, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,127,128, 97,128, 97,128, 97,128,127,128, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 97,128, 97,128,127,128, 97,128,127,128, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,109,128,109,128,127,128,109,128,127,128, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 12, 0, 12, 0, 30, 0, 51, 0, 97,128, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 54, 0, 54, 0, 62, 0,111, 0,217,128, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 30, 0,115,128, 97,128,115,128, 30, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,127,128, 12, 0, 30, 0, 51, 0, 97,128, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,127,128, 27, 0, 27, 0, 63,128,108,192, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 12, 0,127,128, 12, 0, 30, 0, 51, 0, 97,128, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,127,128, 1,128,127,128, 1,128, 1,128, 1,128, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,127,128, 96, 0,127,128, 96, 0,127,128, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,127,128, 51, 0, 51, 0, 51, 0,127,128, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 12, 0,127,128, 63, 0, 97,128, 97,128, 63, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,126, 0, 6, 0, 6, 0, 12, 0, 12, 0, 24, 0, 96, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,127,128, 25,128, 25,128, 25,128, 25,128, 51, 0,102, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 96, 0, 96, 0, 96, 0, 96, 0, 96, 0, 96, 0,127,128, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,127,128, 96, 0, 96, 0, 96, 0, 96, 0, 96, 0,127,128, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,119,128,102, 0,102, 0,102, 0,102, 0,102, 0,119,128, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,127,128, 1,128, 1,128,127,128, 96, 0, 96, 0,127,128, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,127,128, 97,128, 97,128, 97,128, 97,128, 97,128,127,128, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 97,128, 97,128, 97,128,127,128, 97,128, 97,128,127,128, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,109,128,109,128,109,128,127,128,109,128,109,128,127,128, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 12, 0, 12, 0, 12, 0, 12, 0, 30, 0, 51, 0, 97,128, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 54, 0, 54, 0, 54, 0, 54, 0, 62, 0,111, 0,217,128, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 30, 0, 51, 0, 97,128, 97,128, 97,128, 51, 0, 30, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,127,128, 12, 0, 12, 0, 12, 0, 30, 0, 51, 0, 97,128, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,127,192, 27, 0, 27, 0, 27, 0, 27, 0, 63,128,108,192, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 12, 0,127,128, 12, 0, 12, 0, 30, 0, 51, 0, 97,128, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,127, 0, 3, 0, 3, 0,127, 0, 6, 0, 28, 0,112, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,127,128, 96, 0, 96, 0,127,128, 96, 0, 96, 0,127,128, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,127,128, 51, 0, 51, 0, 51, 0, 51, 0, 51, 0,127,128, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 12, 0,127,128, 30, 0,115,128, 97,128,115,128, 30, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 63,252, 0, 12, 0, 12, 0, 12, 0, 12, 0, 12, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 63,124, 3, 12, 3, 12, 3, 12, 3, 12, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 48, 0, 48, 0, 48, 0, 48, 0, 63,252, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 63,252, 48, 0, 48, 0, 48, 0, 63,252, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 62,252, 48,192, 48,192, 48,192, 62,252, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 63,252, 0, 12, 63,252, 48, 0, 63,252, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 63,252, 48, 12, 48, 12, 48, 12, 63,252, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 48, 12, 48, 12, 63,252, 48, 12, 63,252, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 49,140, 49,140, 63,252, 49,140, 63,252, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1,128, 1,128, 3,192, 14,112, 48, 12, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 12, 48, 12, 48, 12, 48, 30,120, 51,204, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 15,240, 56, 28, 48, 12, 56, 28, 15,240, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 63,252, 1,128, 3,192, 14,112, 48, 12, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 63,252, 12, 48, 12, 48, 30,120, 51,204, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1,128, 63,252, 3,192, 14,112, 48, 12, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 63,252, 0, 12, 63,252, 0, 12, 0, 12, 0, 12, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 63,252, 48, 0, 63,252, 48, 0, 63,252, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 63,252, 12, 48, 12, 48, 12, 48, 63,252, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 7,224, 63,252, 31,248, 48, 12, 31,248, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,127,128, 1,128, 1,128, 1,128, 1,128, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,127,128, 25,128, 25,128, 25,128, 25,128, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 96, 0, 96, 0, 96, 0,127,128, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 63,128, 48, 0, 48, 0, 63,128, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,119,128,102, 0,102, 0,119,128, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,127,128, 1,128,127,128, 96, 0,127,128, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,127,128, 97,128, 97,128,127,128, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 97,128,127,128, 97,128,127,128, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,109,128,127,128,109,128,127,128, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 12, 0, 30, 0, 51, 0, 97,128, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 54, 0, 62, 0,111, 0,217,128, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 30, 0,115,128, 97,128,115,128, 30, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,127,128, 30, 0, 51, 0, 97,128, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,127,128, 51, 0, 51, 0,109,128, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 12, 0,127,128, 30, 0, 51, 0, 97,128, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,127,128, 1,128,127,128, 1,128, 3, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,127,128, 96, 0,127,128, 96, 0,127,128, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,127,128, 51, 0, 51, 0,127,128, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 12, 0,127,128, 63, 0, 97,128, 63, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 24, 0, 24, 0, 24, 0, 24, 0, 24, 0, 24, 0, 31, + 0, 24, 0, 24, 0, 24, 0, 24, 0, 24, 0, 24, 0, 0, 0, 0, + 0, 0, 0, 54, 0, 54, 0, 54, 0, 54, 0, 54, 0, 54, 0, 62, + 0, 54, 0, 54, 0, 54, 0, 54, 0, 54, 0, 54, 0, 0, 0, 0, + 0, 0, 0, 24, 0, 24, 0, 24, 0, 24, 0, 31, 0, 24, 0, 24, + 0, 24, 0, 31, 0, 24, 0, 24, 0, 24, 0, 24, 0, 0, 0, 0, + 0, 0, 0, 54, 0, 54, 0, 54, 0, 54, 0, 62, 0, 54, 0, 54, + 0, 54, 0, 62, 0, 54, 0, 54, 0, 54, 0, 54, 0, 0, 0, 0, + 0, 0, 0, 12, 0, 12, 0, 12, 0, 12, 0, 12, 0, 12, 0,124, + 0, 12, 0, 12, 0, 12, 0, 12, 0, 12, 0, 12, 0, 0, 0, 0, + 0, 0, 0, 54, 0, 54, 0, 54, 0, 54, 0, 54, 0, 54, 0,246, + 0, 54, 0, 54, 0, 54, 0, 54, 0, 54, 0, 54, 0, 0, 0, 0, + 0, 0, 0, 12, 0, 12, 0, 12, 0, 12, 0,124, 0, 12, 0, 12, + 0, 12, 0,124, 0, 12, 0, 12, 0, 12, 0, 12, 0, 0, 0, 0, + 0, 0, 0, 54, 0, 54, 0, 54, 0, 54, 0,246, 0, 54, 0, 54, + 0, 54, 0,246, 0, 54, 0, 54, 0, 54, 0, 54, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,128, + 1,128, 1,128, 1,128, 1,128,127,254, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 24, 0, 24, 0, 24, 0, 24, 0, 24, 0, 24, 12, 31, + 12, 24, 12, 24, 12, 24, 12, 24,127,248, 0, 24, 0, 0, 0, 0, + 0, 0, 0, 54, 0, 54, 0, 54, 0, 54, 0, 54, 0, 54, 12, 62, + 12, 54, 12, 54, 12, 54, 12, 54,127,246, 0, 54, 0, 0, 0, 0, + 0, 0, 0, 12, 0, 12, 0, 12, 0, 12, 0, 12, 0, 12, 12, 12, + 12, 12, 12, 12, 12, 12, 12, 12,127,252, 0, 12, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 96, + 6, 96, 6, 96, 6, 96, 6, 96,127,254, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,127,254, 1,128, 1,128, 1,128, 1,128, 0, 0, 0, 0, + 0, 0, 0, 12, 0, 12, 0, 12, 0, 12, 0, 12, 0, 12, 0, 12, + 127,252, 12, 12, 12,252, 12, 12, 12, 12, 12, 12, 0, 0, 0, 0, + 0, 0, 0, 54, 0, 54, 0, 54, 0, 54, 0, 54, 0, 54, 0, 54, + 127,246, 12, 54, 12,246, 12, 54, 12, 54, 12, 54, 0, 0, 0, 0, + 0, 0, 0, 12, 0, 12, 0, 12, 0, 12, 0, 12, 0, 12, 0, 12, + 127,252, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,127,254, 12, 48, 12, 48, 12, 48, 12, 48, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,127,254, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 12, 0, 12, 0, 12, 0, 12, 0, 12, 0, 12, 0, 12, + 0, 12, 0, 12, 0, 12, 0, 12,127,252, 0, 12, 0, 0, 0, 0, + 0, 0, 0, 12, 0, 12, 0, 12, 0, 12, 0, 12, 0, 12, 0, 12, + 0, 12, 0, 12, 0, 12, 0, 12, 0, 12, 0, 12, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 24, 0, 24, 0, 24, 0, 24, 0, 24, 0, 24, 0, 31, + 0, 24, 0, 24, 0, 24, 0, 24, 0, 24, 0, 24, 0, 0, 0, 0, + 0, 0, 0, 54, 0, 54, 0, 54, 0, 54, 0, 54, 0, 54, 0, 62, + 0, 54, 0, 54, 0, 54, 0, 54, 0, 54, 0, 54, 0, 0, 0, 0, + 0, 0, 0, 24, 0, 24, 0, 24, 0, 24, 0, 31, 0, 24, 0, 24, + 0, 24, 0, 31, 0, 24, 0, 24, 0, 24, 0, 24, 0, 0, 0, 0, + 0, 0, 0, 54, 0, 54, 0, 54, 0, 54, 0, 62, 0, 54, 0, 54, + 0, 54, 0, 62, 0, 54, 0, 54, 0, 54, 0, 54, 0, 0, 0, 0, + 0, 0, 0, 12, 0, 12, 0, 12, 0, 12, 0, 12, 0, 12, 0,124, + 0, 12, 0, 12, 0, 12, 0, 12, 0, 12, 0, 12, 0, 0, 0, 0, + 0, 0, 0, 54, 0, 54, 0, 54, 0, 54, 0, 54, 0, 54, 0,246, + 0, 54, 0, 54, 0, 54, 0, 54, 0, 54, 0, 54, 0, 0, 0, 0, + 0, 0, 0, 12, 0, 12, 0, 12, 0, 12, 0,124, 0, 12, 0, 12, + 0, 12, 0,124, 0, 12, 0, 12, 0, 12, 0, 12, 0, 0, 0, 0, + 0, 0, 0, 54, 0, 54, 0, 54, 0, 54, 0,246, 0, 54, 0, 54, + 0, 54, 0,246, 0, 54, 0, 54, 0, 54, 0, 54, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1,128, 1,128, 1,128,127,254, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 24, 0, 24, 0, 24, 0, 24, 0, 24, 0, 24, 0, 31, + 0, 24, 12, 24, 12, 24, 12, 24,127,248, 0, 24, 0, 0, 0, 0, + 0, 0, 0, 54, 0, 54, 0, 54, 0, 54, 0, 54, 0, 54, 0, 62, + 0, 54, 12, 54, 12, 54, 12, 54,127,246, 0, 54, 0, 0, 0, 0, + 0, 0, 0, 12, 0, 12, 0, 12, 0, 12, 0, 12, 0, 12, 0, 12, + 0, 12, 12, 12, 12, 12, 12, 12,127,252, 0, 12, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 12, 48, 12, 48, 12, 48,127,254, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,127,254, 1,128, 1,128, 1,128, 1,128, 0, 0, 0, 0, + 0, 0, 0, 12, 0, 12, 0, 12, 0, 12, 0, 12, 0, 12, 0, 12, + 127,252, 12, 12, 12,252, 12, 12, 12, 12, 12, 12, 0, 0, 0, 0, + 0, 0, 0, 54, 0, 54, 0, 54, 0, 54, 0, 54, 0, 54, 0, 54, + 127,246, 12, 54, 12,246, 12, 54, 12, 54, 12, 54, 0, 0, 0, 0, + 0, 0, 0, 12, 0, 12, 0, 12, 0, 12, 0, 12, 0, 12, 0, 12, + 127,252, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,127,254, 12, 48, 12, 48, 12, 48, 12, 48, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,127,254, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 12, 0, 12, 0, 12, 0, 12, 0, 12, 0, 12, 0, 12, + 0, 12, 0, 12, 0, 12, 0, 12,127,252, 0, 12, 0, 0, 0, 0, + 0, 0, 0, 12, 0, 12, 0, 12, 0, 12, 0, 12, 0, 12, 0, 12, + 0, 12, 0, 12, 0, 12, 0, 12, 0, 12, 0, 12, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 24, 0, 24, 0, 24, 0, 31, 0, 24, 0, 24, 0, 24, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 54, 0, 54, 0, 54, 0, 62, 0, 54, 0, 54, 0, 54, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 24, 0, 24, 0, 31, 0, 24, 0, 31, 0, 24, 0, 24, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 54, 0, 54, 0, 62, 0, 54, 0, 62, 0, 54, 0, 54, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 12, 0, 12, 0, 12, 0,124, 0, 12, 0, 12, 0, 12, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 54, 0, 54, 0, 54, 0,246, 0, 54, 0, 54, 0, 54, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 12, 0, 12, 0,124, 0, 12, 0,124, 0, 12, 0, 12, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 54, 0, 54, 0,246, 0, 54, 0,246, 0, 54, 0, 54, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1,128, 1,128, 1,128,127,254, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 24, 0, 24, 0, 24, 0, 31, 12, 24, 12, 24,127,248, + 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 54, 0, 54, 0, 54, 0, 62, 12, 54, 12, 54,127,246, + 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 12, 0, 12, 0, 12, 0, 12, 6, 12, 6, 12,127,252, + 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 6, 96, 6, 96, 6, 96,127,254, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,127,254, + 1,128, 1,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 12, 0, 12, 0, 12, 0, 12, 0, 12,127,252, 12,124, + 12, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 54, 0, 54, 0, 54, 0, 54, 0, 54,127,246, 12,246, + 12, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 12, 0, 12, 0, 12, 0, 12, 0, 12,127,252, 12, 12, + 12, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,127,254, + 12, 48, 12, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,127,254, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 12, 0, 12, 0, 12, 0, 12, 0, 12, 0, 12,127,252, + 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 12, 0, 12, 0, 12, 0, 12, 0, 12, 0, 12, 0, 12, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 24, 0, 24, 0, 24, 0, 31, 0, 24, 0, 24, 0, 24, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 54, 0, 54, 0, 54, 0, 62, 0, 54, 0, 54, 0, 54, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 24, 0, 24, 0, 31, 0, 24, 0, 31, 0, 24, 0, 24, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 54, 0, 54, 0, 62, 0, 54, 0, 62, 0, 54, 0, 54, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 12, 0, 12, 0, 12, 0,124, 0, 12, 0, 12, 0, 12, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 54, 0, 54, 0, 54, 0,246, 0, 54, 0, 54, 0, 54, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 12, 0, 12, 0,124, 0, 12, 0,124, 0, 12, 0, 12, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 54, 0, 54, 0,246, 0, 54, 0,246, 0, 54, 0, 54, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,128, 1,128,127,254, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 24, 0, 24, 0, 24, 0, 31, 12, 24, 12, 24,127,248, + 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 54, 0, 54, 0, 54, 0, 62, 12, 54, 12, 54,127,246, + 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 12, 0, 12, 0, 12, 0, 12, 12, 12, 12, 12,127,252, + 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 48, 12, 48,127,254, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,127,254, + 1,128, 1,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 12, 0, 12, 0, 12, 0, 12, 0, 12,127,252, 12,124, + 12, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 54, 0, 54, 0, 54, 0, 54, 0, 54,127,246, 12,246, + 12, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 12, 0, 12, 0, 12, 0, 12, 0, 12,127,252, 12, 12, + 12, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,127,254, + 12, 48, 12, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,127,254, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 12, 0, 12, 0, 12, 0, 12, 0, 12, 0, 12,127,252, + 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 12, 0, 12, 0, 12, 0, 12, 0, 12, 0, 12, 0, 12, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 63,248, 0, 24, 0, 24, 0, 24, 0, 24, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 63,248, 3, 24, 3, 24, 3, 24, 3, 24, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 63, 24, 3, 24, 3, 24, 3, 60, 3,102, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 48, 0, 48, 0, 48, 0, 48, 0, 63,248, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 49,248, 48, 96, 48, 96, 48,240, 63,152, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 48, 96, 49,248, 48,240, 49,152, 62,240, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 63,248, 48, 0, 48, 0, 48, 0, 63,248, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 63,248, 0, 24, 63,248, 48, 0, 63,248, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 62,248, 6, 24, 62, 24, 48, 24, 62, 24, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 62,248, 6,216, 62,216, 48,216, 62,248, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 62,216, 6,216, 62,248, 48,216, 62,248, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 62, 48, 6, 48, 62, 48, 48,120, 62,204, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 62,248, 6,192, 62,248, 48,192, 62,248, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 63,248, 7,176, 63,176, 49,176, 63,248, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 62, 96, 7,248, 62,240, 49,152, 62,240, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 63,248, 48, 24, 48, 24, 48, 24, 63,248, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 48, 24, 48, 24, 63,248, 48, 24, 63,248, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 54, 48, 54, 48, 62, 48, 54,120, 62,204, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 3, 0, 3, 0, 7,128, 28,224, 96, 24, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 12, 48, 12, 48, 12, 48, 30,120, 51,204, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 15,224, 56, 56, 48, 24, 56, 56, 15,224, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,127,248, 3, 0, 7,128, 28,224, 96, 24, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 3, 0,127,248, 3, 0, 7,128, 28,224, 96, 24, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 63,248, 0, 24, 63,248, 0, 24, 0, 24, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 63,248, 48, 0, 63,248, 48, 0, 63,248, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 63,248, 12, 96, 12, 96, 12, 96, 63,248, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 3,128, 63,248, 31,240, 48, 24, 48, 24, 31,240, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 63,252, 0, 12, 0, 12, 0, 12, 0, 12, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 63,124, 3, 12, 3, 12, 3, 12, 3, 12, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 63, 24, 3, 24, 3, 24, 3, 60, 3,102, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 48, 0, 48, 0, 48, 0, 48, 0, 63,252, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 48,252, 48, 48, 48, 48, 48,120, 63,204, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 48,112, 49,252, 48,248, 49,140, 62,248, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 63,252, 48, 0, 48, 0, 48, 0, 63,252, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 63,252, 0, 12, 63,252, 48, 0, 63,252, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 63,124, 3, 12, 63, 12, 48, 12, 63, 12, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 62,252, 6,204, 62,204, 48,204, 62,252, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 62,204, 6,204, 62,252, 48,204, 62,252, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 63, 24, 3, 24, 63, 24, 48, 60, 63,102, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 63,124, 3, 96, 63,124, 48, 96, 63,124, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 63,252, 6,216, 62,216, 48,216, 63,252, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 63, 48, 3,252, 63,120, 48,204, 63,120, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 63,252, 48, 12, 48, 12, 48, 12, 63,252, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 48, 12, 48, 12, 63,252, 48, 12, 63,252, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 51, 24, 51, 24, 63, 24, 51, 60, 63,102, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1,128, 1,128, 3,192, 14,112, 48, 12, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 12, 24, 12, 24, 12, 24, 30, 60, 51,102, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 15,240, 56, 28, 48, 12, 56, 28, 15,240, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 63,252, 1,128, 3,192, 14,112, 48, 12, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 3,192, 63,252, 3,192, 14,112, 48, 12, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 63,252, 0, 12, 63,252, 0, 12, 0, 12, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 63,252, 48, 0, 63,248, 48, 0, 63,252, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 63,252, 12, 48, 12, 48, 12, 48, 63,252, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 3,192, 63,252, 31,248, 48, 12, 31,248, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 63,254, 0, 6, 0, 6, 0, 6, 0, 6, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 63,126, 3, 6, 3, 6, 3, 6, 3, 6, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 63, 24, 3, 24, 3, 24, 3, 60, 3,102, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 48, 0, 48, 0, 48, 0, 48, 0, 63,254, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 48,126, 48, 24, 48, 24, 48, 60, 63,102, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 48, 56, 48,254, 48,124, 48,198, 63,124, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 63,254, 48, 0, 48, 0, 48, 0, 63,254, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 63,254, 0, 6, 63,254, 48, 0, 63,254, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 63,126, 3, 6, 63, 6, 48, 6, 63, 6, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 63,126, 3,102, 63,102, 48,102, 63,126, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 63,102, 3,102, 63,126, 48,102, 63,126, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 63, 24, 3, 24, 63, 24, 48, 60, 63,102, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 63,126, 3, 96, 63,126, 48, 96, 63,126, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 63,254, 3,108, 63,108, 48,108, 63,254, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 63, 56, 3,254, 63,124, 48,198, 63,124, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 63,254, 48, 6, 48, 6, 48, 6, 63,254, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 48, 6, 48, 6, 63,254, 48, 6, 63,254, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 51, 24, 51, 24, 63, 24, 51, 60, 63,230, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1,192, 1,192, 3, 96, 14, 56, 56, 14, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 12, 24, 12, 24, 12, 24, 30, 60, 51,102, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 15,248, 56, 14, 48, 6, 56, 14, 15,248, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 63,254, 1,192, 3, 96, 14, 56, 56, 14, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1,192, 63,254, 3, 96, 14, 56, 56, 14, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 63,254, 0, 6, 63,254, 0, 6, 0, 6, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 63,254, 48, 0, 63,254, 48, 0, 63,254, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 63,254, 12, 24, 12, 24, 12, 24, 63,254, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 3,224, 63,254, 31,252, 48, 6, 31,252, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 63,252, 0, 12, 0, 12, 0, 12, 0, 12, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 63,252, 3, 12, 3, 12, 3, 12, 3, 12, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 63, 48, 3, 48, 3, 48, 3,120, 3,204, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 48, 0, 48, 0, 48, 0, 48, 0, 63,252, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 48,252, 48, 48, 48, 48, 48,120, 63,204, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 48,112, 49,252, 48,248, 49,140, 62,248, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 63,252, 48, 0, 48, 0, 48, 0, 63,252, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 63,252, 0, 12, 63,252, 48, 0, 63,252, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 63,252, 3, 12, 63, 12, 48, 12, 63, 12, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 62,252, 6,204, 62,204, 48,204, 62,252, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 62,204, 6,204, 62,252, 48,204, 62,252, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 63, 48, 3, 48, 63, 48, 48,120, 63,204, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 63,124, 3, 96, 63,124, 48, 96, 63,124, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 63,252, 6,216, 62,216, 48,216, 63,252, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 63, 48, 3,252, 63,120, 48,204, 63,120, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 63,252, 48, 12, 48, 12, 48, 12, 63,252, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 48, 12, 48, 12, 63,252, 48, 12, 63,252, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 51, 48, 51, 48, 63, 48, 51,120, 63,204, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1,128, 1,128, 3,192, 14,112, 48, 12, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 12, 48, 12, 48, 12, 48, 30,120, 51,204, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 15,240, 56, 28, 48, 12, 56, 28, 15,240, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 63,252, 1,128, 3,192, 14,112, 48, 12, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1,128, 63,252, 3,192, 14,112, 48, 12, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 63,252, 0, 12, 63,252, 0, 12, 0, 12, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 63,252, 48, 0, 63,252, 48, 0, 63,252, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 63,252, 12, 48, 12, 48, 12, 48, 63,252, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 3,192, 63,252, 31,248, 48, 12, 31,248, 0, 0, 0, 0 +}; + +const unsigned char _HanMyungJo[11520]={ /* ¿©±â¿¡ ÆùÆ®µ¥ÀÌŸ 11520byte°¡ ÀÖÁÒ*/ + 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X3F,0X80,0X01,0X80,0X01,0X80,0X03,0X00,0X06,0X00,0X0C,0X00,0X30,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X7F,0X80,0X0D,0X80,0X0D,0X80,0X1B,0X00,0X1B,0X00,0X36,0X00,0X48,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X70,0X00,0X30,0X00,0X30,0X00,0X30,0X00,0X30,0X00,0X30,0X00,0X1F,0XC0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X7F,0X00,0X30,0X00,0X30,0X00,0X30,0X00,0X30,0X00,0X30,0X00,0X1F,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X7F,0X80,0X36,0X00,0X36,0X00,0X36,0X00,0X36,0X00,0X36,0X00,0X1B,0XC0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X3F,0X80,0X01,0X80,0X01,0X80,0X3F,0X80,0X30,0X00,0X30,0X00,0X1F,0XC0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X7F,0X80,0X31,0X80,0X31,0X80,0X31,0X80,0X31,0X80,0X31,0X80,0X3F,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X03,0X80,0X71,0X80,0X31,0X80,0X3F,0X80,0X31,0X80,0X31,0X80,0X3F,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X03,0X80,0XED,0X80,0X6D,0X80,0X7F,0X80,0X6D,0X80,0X6D,0X80,0X7F,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X0E,0X00,0X06,0X00,0X06,0X00,0X06,0X00,0X0E,0X00,0X0B,0X00,0X19,0X80,0X60,0XC0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X33,0X00,0X33,0X00,0X33,0X00,0X33,0X00,0X2D,0X00,0X6D,0X80,0XCC,0XC0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X1E,0X00,0X33,0X00,0X61,0X80,0X61,0X80,0X61,0X80,0X33,0X00,0X1E,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X7F,0X00,0X03,0X00,0X03,0X00,0X06,0X00,0X0C,0X00,0X1B,0X00,0X61,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X7F,0X80,0X0D,0X80,0X0D,0X80,0X1B,0X00,0X3F,0X00,0X6D,0X80,0XD8,0XC0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X1E,0X00,0X00,0X00,0X7F,0X00,0X03,0X00,0X06,0X00,0X0E,0X00,0X1B,0X00,0X61,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X7F,0X80,0X01,0X80,0X7F,0X80,0X03,0X00,0X06,0X00,0X0C,0X00,0X70,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X7F,0X80,0X30,0X00,0X30,0X00,0X3F,0X80,0X30,0X00,0X30,0X00,0X1F,0XC0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0XFF,0XC0,0X33,0X00,0X33,0X00,0X33,0X00,0X33,0X00,0X33,0X00,0XFF,0XC0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X0E,0X00,0X7F,0XC0,0X00,0X00,0X1F,0X00,0X31,0X80,0X31,0X80,0X31,0X80,0X1F,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X1F,0XF0,0X00,0X30,0X00,0X30,0X00,0X30,0X00,0X30,0X00,0X20,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X1F,0XF8,0X03,0X18,0X03,0X18,0X03,0X18,0X03,0X18,0X02,0X10,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X38,0X00,0X18,0X00,0X18,0X00,0X18,0X00,0X0F,0XF8,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X3F,0XF0,0X18,0X00,0X18,0X00,0X18,0X00,0X0F,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X3F,0XF8,0X18,0XC0,0X18,0XC0,0X18,0XC0,0X0F,0X78,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X1F,0XF8,0X00,0X18,0X1F,0XF8,0X18,0X00,0X0F,0XF8,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X3F,0XF0,0X18,0X30,0X18,0X30,0X18,0X30,0X1F,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X38,0X70,0X18,0X30,0X1F,0XF0,0X18,0X30,0X1F,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X39,0X98,0X19,0X98,0X1F,0XF8,0X19,0X98,0X1F,0XF8,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X03,0X80,0X01,0X80,0X03,0XC0,0X06,0X30,0X0C,0X18,0X30,0X0C,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X0C,0X60,0X0C,0X60,0X0E,0X60,0X1A,0XF0,0X31,0X98,0X63,0X0C,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X0F,0XE0,0X18,0X30,0X18,0X30,0X18,0X30,0X0F,0XE0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X1F,0XF0,0X00,0X60,0X00,0XC0,0X03,0X60,0X0C,0X18,0X30,0X0C,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X3F,0XF8,0X06,0X60,0X0E,0X70,0X19,0X98,0X31,0X8C,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X03,0XC0,0X00,0X00,0X1F,0XF8,0X01,0XC0,0X03,0X60,0X0E,0X18,0X30,0X0C,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X1F,0XF8,0X00,0X18,0X00,0X18,0X1F,0XF8,0X00,0X18,0X00,0X18,0X00,0X10,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X3F,0XF8,0X18,0X00,0X1F,0XF8,0X18,0X00,0X0F,0XF8,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X1F,0XF8,0X06,0X60,0X06,0X60,0X06,0X60,0X1F,0XF8,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X03,0XC0,0X1F,0XF8,0X07,0XE0,0X0C,0X30,0X0C,0X30,0X07,0XE0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X1F,0XF0,0X00,0X30,0X00,0X30,0X00,0X30,0X00,0X30,0X00,0X20,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X1F,0XF8,0X03,0X18,0X03,0X18,0X03,0X18,0X02,0X10,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X38,0X00,0X18,0X00,0X18,0X00,0X18,0X00,0X0F,0XF8,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X3F,0XF0,0X18,0X00,0X18,0X00,0X18,0X00,0X0F,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X3F,0XF8,0X18,0XC0,0X18,0XC0,0X18,0XC0,0X0F,0X78,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X1F,0XF8,0X00,0X18,0X1F,0XF8,0X18,0X00,0X0F,0XF8,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X3F,0XF0,0X18,0X30,0X18,0X30,0X18,0X30,0X1F,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X38,0X70,0X18,0X30,0X1F,0XF0,0X18,0X30,0X1F,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X39,0X98,0X19,0X98,0X1F,0XF8,0X19,0X98,0X1F,0XF8,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X03,0X80,0X01,0X80,0X03,0XC0,0X06,0X30,0X0C,0X18,0X30,0X0C,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X0C,0X60,0X0C,0X60,0X0E,0XE0,0X1A,0XB0,0X31,0X18,0X61,0X0C,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X07,0XE0,0X0C,0X30,0X0C,0X30,0X0C,0X30,0X07,0XE0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X1F,0XF0,0X00,0X60,0X00,0XC0,0X03,0X60,0X0C,0X18,0X30,0X0C,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X3F,0XF8,0X06,0X60,0X0E,0X70,0X19,0X98,0X31,0X8C,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X03,0XC0,0X1F,0XF8,0X01,0XC0,0X03,0X60,0X0E,0X18,0X30,0X0C,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X1F,0XF8,0X00,0X18,0X1F,0XF8,0X00,0X18,0X00,0X18,0X00,0X10,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X3F,0XF8,0X18,0X00,0X1F,0XF8,0X18,0X00,0X0F,0XF8,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X1F,0XF8,0X06,0X60,0X06,0X60,0X06,0X60,0X1F,0XF8,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X03,0XC0,0X1F,0XF8,0X07,0XE0,0X0C,0X30,0X0C,0X30,0X07,0XE0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X3F,0X80,0X01,0X80,0X01,0X80,0X01,0X80,0X01,0X80,0X01,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X3F,0XC0,0X0C,0XC0,0X0C,0XC0,0X0C,0XC0,0X0C,0XC0,0X08,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X70,0X00,0X30,0X00,0X30,0X00,0X30,0X00,0X1F,0XC0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X7F,0X80,0X30,0X00,0X30,0X00,0X30,0X00,0X1F,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X7F,0XC0,0X33,0X00,0X33,0X00,0X33,0X00,0X1D,0XC0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X3F,0X80,0X01,0X80,0X3F,0X80,0X30,0X00,0X1F,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X7F,0X80,0X31,0X80,0X31,0X80,0X31,0X80,0X3F,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X73,0X80,0X31,0X80,0X3F,0X80,0X31,0X80,0X3F,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X76,0XC0,0X36,0XC0,0X3F,0XC0,0X36,0XC0,0X3F,0XC0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X0E,0X00,0X06,0X00,0X0E,0X00,0X19,0X80,0X30,0XC0,0X40,0X60,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X19,0X80,0X19,0X80,0X19,0X80,0X1F,0X80,0X36,0XC0,0X66,0X60,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X1F,0X00,0X31,0X80,0X31,0X80,0X31,0X80,0X1F,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X3F,0X80,0X03,0X00,0X06,0X00,0X0D,0X80,0X30,0XC0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X3F,0XC0,0X0D,0X80,0X1B,0X00,0X3F,0X80,0X64,0XC0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X0E,0X00,0X3F,0X80,0X03,0X00,0X06,0X00,0X0D,0X80,0X30,0XC0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X3F,0XC0,0X00,0XC0,0X3F,0XC0,0X00,0XC0,0X00,0XC0,0X00,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X7F,0X80,0X30,0X00,0X3F,0X80,0X30,0X00,0X1F,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X3F,0XC0,0X19,0X80,0X19,0X80,0X19,0X80,0X3F,0XC0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X0E,0X00,0X7F,0XC0,0X1F,0X00,0X31,0X80,0X31,0X80,0X1F,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X3F,0X80,0X01,0X80,0X01,0X80,0X01,0X80,0X01,0X80,0X01,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X3F,0XC0,0X0C,0XC0,0X0C,0XC0,0X0C,0XC0,0X0C,0XC0,0X08,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X70,0X00,0X30,0X00,0X30,0X00,0X30,0X00,0X1F,0XC0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X7F,0X80,0X30,0X00,0X30,0X00,0X30,0X00,0X1F,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X7F,0XC0,0X33,0X00,0X33,0X00,0X33,0X00,0X1D,0XC0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X3F,0X80,0X01,0X80,0X3F,0X80,0X30,0X00,0X1F,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X7F,0X80,0X31,0X80,0X31,0X80,0X31,0X80,0X3F,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X73,0X80,0X31,0X80,0X3F,0X80,0X31,0X80,0X3F,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X76,0XC0,0X36,0XC0,0X3F,0XC0,0X36,0XC0,0X3F,0XC0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X0E,0X00,0X06,0X00,0X0E,0X00,0X19,0X80,0X30,0XC0,0X40,0X60,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X19,0X80,0X19,0X80,0X19,0X80,0X1F,0X80,0X36,0XC0,0X66,0X60,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X1F,0X00,0X31,0X80,0X31,0X80,0X31,0X80,0X1F,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X3F,0X80,0X03,0X00,0X06,0X00,0X0D,0X80,0X30,0XC0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X3F,0XC0,0X0D,0X80,0X1B,0X00,0X3F,0X80,0X64,0XC0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X0E,0X00,0X3F,0X80,0X03,0X00,0X06,0X00,0X0D,0X80,0X30,0XC0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X3F,0XC0,0X00,0XC0,0X3F,0XC0,0X00,0XC0,0X00,0XC0,0X00,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X7F,0X80,0X30,0X00,0X3F,0X80,0X30,0X00,0X1F,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X3F,0XC0,0X19,0X80,0X19,0X80,0X19,0X80,0X3F,0XC0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X0E,0X00,0X7F,0XC0,0X1F,0X00,0X31,0X80,0X31,0X80,0X1F,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X3F,0X80,0X01,0X80,0X01,0X80,0X03,0X00,0X06,0X00,0X0C,0X00,0X30,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X7F,0X80,0X0D,0X80,0X0D,0X80,0X1B,0X00,0X1B,0X00,0X36,0X00,0X48,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X70,0X00,0X30,0X00,0X30,0X00,0X30,0X00,0X30,0X00,0X1F,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X7F,0X00,0X30,0X00,0X30,0X00,0X30,0X00,0X30,0X00,0X1F,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X7F,0X80,0X36,0X00,0X36,0X00,0X36,0X00,0X36,0X00,0X1B,0XC0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X3F,0X80,0X01,0X80,0X01,0X80,0X3F,0X80,0X30,0X00,0X30,0X00,0X1F,0XC0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X7F,0X80,0X31,0X80,0X31,0X80,0X31,0X80,0X31,0X80,0X3F,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X73,0X80,0X31,0X80,0X3F,0X80,0X31,0X80,0X31,0X80,0X3F,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0XED,0X80,0X6D,0X80,0X7F,0X80,0X6D,0X80,0X6D,0X80,0X7F,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X0E,0X00,0X06,0X00,0X06,0X00,0X0E,0X00,0X0B,0X00,0X19,0X80,0X60,0XC0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X1B,0X00,0X1B,0X00,0X1B,0X00,0X15,0X00,0X35,0X80,0X64,0XC0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X1F,0X00,0X31,0X80,0X31,0X80,0X31,0X80,0X31,0X80,0X1F,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X3F,0X80,0X01,0X80,0X03,0X00,0X06,0X00,0X0D,0X80,0X30,0XC0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X7F,0X80,0X0D,0X80,0X0D,0X80,0X1B,0X00,0X3F,0X00,0X6D,0X80,0X18,0XC0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X1C,0X00,0X7F,0X00,0X03,0X00,0X06,0X00,0X0E,0X00,0X1B,0X00,0X61,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X3F,0X80,0X01,0X80,0X3F,0X80,0X03,0X00,0X06,0X00,0X0C,0X00,0X30,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X7F,0X00,0X30,0X00,0X30,0X00,0X3F,0X00,0X30,0X00,0X30,0X00,0X1F,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X7F,0XC0,0X33,0X00,0X33,0X00,0X33,0X00,0X33,0X00,0X7F,0XC0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X0C,0X00,0X7F,0X80,0X1E,0X00,0X33,0X00,0X33,0X00,0X33,0X00,0X1E,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X1F,0XF8,0X00,0X18,0X00,0X18,0X00,0X18,0X00,0X10,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X3F,0XF8,0X06,0X18,0X06,0X18,0X06,0X18,0X04,0X10,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X38,0X00,0X18,0X00,0X18,0X00,0X0F,0XF8,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X3F,0XF8,0X18,0X00,0X18,0X00,0X0F,0XF8,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X3F,0XF8,0X18,0XC0,0X18,0XC0,0X0F,0X78,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X1F,0XF8,0X00,0X18,0X1F,0XF8,0X18,0X00,0X0F,0XF8,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X1F,0XF8,0X0C,0X18,0X0C,0X18,0X0F,0XF8,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X38,0X38,0X18,0X18,0X1F,0XF8,0X18,0X18,0X1F,0XF8,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X39,0X98,0X19,0X98,0X1F,0XF8,0X19,0X98,0X1F,0XF8,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X03,0X80,0X01,0X80,0X03,0XC0,0X06,0X30,0X0C,0X18,0X30,0X0C,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X0C,0X60,0X0C,0X60,0X0E,0X60,0X1B,0XF0,0X31,0X98,0X61,0X8C,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X07,0XE0,0X0C,0X30,0X0C,0X30,0X0C,0X30,0X07,0XE0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X1F,0XF0,0X00,0X60,0X00,0XC0,0X03,0X60,0X1C,0X18,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X3F,0XF8,0X06,0X60,0X0E,0X70,0X19,0X98,0X31,0X8C,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X01,0XC0,0X1F,0XF8,0X01,0XC0,0X03,0X60,0X06,0X30,0X18,0X0C,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X1F,0XF8,0X00,0X18,0X1F,0XF8,0X00,0X18,0X00,0X10,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X3F,0XF8,0X18,0X00,0X1F,0XF8,0X18,0X00,0X0F,0XF8,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X1F,0XF8,0X06,0X60,0X06,0X60,0X06,0X60,0X1F,0XF8,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X03,0XC0,0X1F,0XF8,0X07,0XE0,0X0C,0X30,0X0C,0X30,0X07,0XE0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X3F,0X80,0X01,0X80,0X01,0X80,0X01,0X80,0X01,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X7F,0X80,0X19,0X80,0X19,0X80,0X19,0X80,0X11,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X70,0X00,0X30,0X00,0X30,0X00,0X30,0X00,0X1F,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X7F,0X80,0X30,0X00,0X30,0X00,0X30,0X00,0X1F,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X7F,0XC0,0X33,0X00,0X33,0X00,0X33,0X00,0X1D,0XC0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X3F,0X80,0X01,0X80,0X3F,0X80,0X30,0X00,0X1F,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X7F,0X80,0X31,0X80,0X31,0X80,0X31,0X80,0X3F,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X73,0X80,0X31,0X80,0X3F,0X80,0X31,0X80,0X3F,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X76,0XC0,0X36,0XC0,0X3F,0XC0,0X36,0XC0,0X3F,0XC0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X0E,0X00,0X06,0X00,0X0E,0X00,0X19,0X80,0X30,0XC0,0X40,0X40,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X19,0X80,0X19,0X80,0X1F,0X80,0X36,0XC0,0X66,0X60,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X1F,0X00,0X31,0X80,0X31,0X80,0X31,0X80,0X1F,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X3F,0X80,0X03,0X00,0X06,0X00,0X19,0X80,0X60,0XC0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X7F,0XC0,0X0D,0X80,0X1B,0X00,0X3F,0X80,0X64,0XC0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X0E,0X00,0X7F,0X80,0X03,0X00,0X06,0X00,0X19,0X80,0X60,0XC0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X3F,0X80,0X01,0X80,0X3F,0X80,0X01,0X80,0X01,0X80,0X01,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X7F,0X80,0X30,0X00,0X3F,0X80,0X30,0X00,0X1F,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X7F,0X80,0X33,0X00,0X33,0X00,0X33,0X00,0X7F,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X0E,0X00,0X7F,0XC0,0X1F,0X00,0X31,0X80,0X31,0X80,0X1F,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X38,0X00,0X18,0X00,0X18,0X00,0X18,0X00,0X18,0X00,0X1F,0X00,0X18,0X00,0X18,0X00,0X18,0X00,0X18,0X00,0X18,0X00,0X18,0X00,0X18,0X00,0X10,0X00,0X00, + 0X00,0X00,0X00,0X0E,0X00,0X76,0X00,0X36,0X00,0X36,0X00,0X36,0X00,0X3E,0X00,0X36,0X00,0X36,0X00,0X36,0X00,0X36,0X00,0X36,0X00,0X36,0X00,0X26,0X00,0X04,0X00,0X00, + 0X00,0X00,0X00,0X38,0X00,0X18,0X00,0X18,0X00,0X18,0X00,0X1F,0X00,0X18,0X00,0X18,0X00,0X1F,0X00,0X18,0X00,0X18,0X00,0X18,0X00,0X18,0X00,0X18,0X00,0X10,0X00,0X00, + 0X00,0X00,0X00,0X0E,0X00,0X76,0X00,0X36,0X00,0X36,0X00,0X3E,0X00,0X36,0X00,0X36,0X00,0X3E,0X00,0X36,0X00,0X36,0X00,0X36,0X00,0X36,0X00,0X26,0X00,0X04,0X00,0X00, + 0X00,0X00,0X00,0X1C,0X00,0X0C,0X00,0X0C,0X00,0X0C,0X00,0X0C,0X00,0X7C,0X00,0X0C,0X00,0X0C,0X00,0X0C,0X00,0X0C,0X00,0X0C,0X00,0X0C,0X00,0X0C,0X00,0X08,0X00,0X00, + 0X00,0X00,0X00,0X0E,0X00,0X76,0X00,0X36,0X00,0X36,0X00,0X36,0X00,0XF6,0X00,0X36,0X00,0X36,0X00,0X36,0X00,0X36,0X00,0X36,0X00,0X36,0X00,0X26,0X00,0X04,0X00,0X00, + 0X00,0X00,0X00,0X1C,0X00,0X0C,0X00,0X0C,0X00,0X0C,0X00,0X7C,0X00,0X0C,0X00,0X7C,0X00,0X0C,0X00,0X0C,0X00,0X0C,0X00,0X0C,0X00,0X0C,0X00,0X0C,0X00,0X08,0X00,0X00, + 0X00,0X00,0X00,0X0E,0X00,0X76,0X00,0X36,0X00,0X36,0X01,0XF6,0X00,0X36,0X01,0XF6,0X00,0X36,0X00,0X36,0X00,0X36,0X00,0X36,0X00,0X36,0X00,0X26,0X00,0X04,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0X80,0X01,0X80,0X01,0X80,0X7F,0XFE,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X38,0X00,0X18,0X00,0X18,0X00,0X18,0X00,0X18,0X00,0X18,0X00,0X1F,0X0C,0X18,0X0C,0X18,0X7F,0XD8,0X00,0X18,0X00,0X18,0X00,0X18,0X00,0X10,0X00,0X00, + 0X00,0X00,0X00,0X0E,0X00,0X76,0X00,0X36,0X00,0X36,0X00,0X36,0X00,0X3E,0X00,0X36,0X18,0X36,0X18,0X36,0X7F,0XB6,0X00,0X36,0X00,0X36,0X00,0X26,0X00,0X04,0X00,0X00, + 0X00,0X00,0X00,0X1C,0X00,0X0C,0X00,0X0C,0X00,0X0C,0X00,0X0C,0X00,0X0C,0X00,0X0C,0X0C,0X0C,0X0C,0X0C,0X7F,0XEC,0X00,0X0C,0X00,0X0C,0X00,0X0C,0X00,0X08,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X0C,0XE0,0X0C,0X60,0X0C,0X60,0X7F,0XFE,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X7F,0XFE,0X01,0X80,0X01,0X80,0X01,0X80,0X01,0X80,0X01,0X80,0X01,0X00,0X00,0X00, + 0X00,0X00,0X00,0X1C,0X00,0X0C,0X00,0X0C,0X00,0X0C,0X00,0X0C,0X00,0X0C,0X00,0X0C,0X7F,0XEC,0X06,0X0C,0X06,0X7C,0X06,0X0C,0X06,0X0C,0X04,0X0C,0X00,0X08,0X00,0X00, + 0X00,0X00,0X00,0X0E,0X00,0X76,0X00,0X36,0X00,0X36,0X00,0X36,0X00,0X36,0X00,0X36,0X7F,0XB6,0X0C,0X36,0X0D,0XF6,0X0C,0X36,0X0C,0X36,0X08,0X26,0X00,0X04,0X00,0X00, + 0X00,0X00,0X00,0X1C,0X00,0X0C,0X00,0X0C,0X00,0X0C,0X00,0X0C,0X00,0X0C,0X00,0X0C,0X7F,0XEC,0X06,0X0C,0X06,0X0C,0X06,0X0C,0X06,0X0C,0X04,0X0C,0X00,0X08,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X7F,0XFE,0X06,0X60,0X06,0X60,0X06,0X60,0X06,0X60,0X06,0X60,0X04,0X40,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X7F,0XFE,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X1C,0X00,0X0C,0X00,0X0C,0X00,0X0C,0X00,0X0C,0X00,0X0C,0X00,0X0C,0X00,0X0C,0X00,0XEC,0X7F,0X0C,0X00,0X0C,0X00,0X0C,0X00,0X0C,0X00,0X08,0X00,0X00, + 0X00,0X00,0X00,0X1C,0X00,0X0C,0X00,0X0C,0X00,0X0C,0X00,0X0C,0X00,0X0C,0X00,0X0C,0X00,0X0C,0X00,0X0C,0X00,0X0C,0X00,0X0C,0X00,0X0C,0X00,0X0C,0X00,0X08,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X38,0X00,0X18,0X00,0X18,0X00,0X18,0X00,0X18,0X00,0X1F,0X00,0X18,0X00,0X18,0X00,0X18,0X00,0X18,0X00,0X18,0X00,0X18,0X00,0X18,0X00,0X10,0X00,0X00, + 0X00,0X00,0X00,0X0E,0X00,0X76,0X00,0X36,0X00,0X36,0X00,0X36,0X00,0X3E,0X00,0X36,0X00,0X36,0X00,0X36,0X00,0X36,0X00,0X36,0X00,0X36,0X00,0X26,0X00,0X04,0X00,0X00, + 0X00,0X00,0X00,0X38,0X00,0X18,0X00,0X18,0X00,0X18,0X00,0X1F,0X00,0X18,0X00,0X18,0X00,0X1F,0X00,0X18,0X00,0X18,0X00,0X18,0X00,0X18,0X00,0X18,0X00,0X10,0X00,0X00, + 0X00,0X00,0X00,0X0E,0X00,0X76,0X00,0X36,0X00,0X36,0X00,0X3E,0X00,0X36,0X00,0X36,0X00,0X3E,0X00,0X36,0X00,0X36,0X00,0X36,0X00,0X36,0X00,0X26,0X00,0X04,0X00,0X00, + 0X00,0X00,0X00,0X1C,0X00,0X0C,0X00,0X0C,0X00,0X0C,0X00,0X0C,0X00,0X7C,0X00,0X0C,0X00,0X0C,0X00,0X0C,0X00,0X0C,0X00,0X0C,0X00,0X0C,0X00,0X0C,0X00,0X08,0X00,0X00, + 0X00,0X00,0X00,0X0E,0X00,0X76,0X00,0X36,0X00,0X36,0X00,0X36,0X00,0X76,0X00,0X36,0X00,0X36,0X00,0X36,0X00,0X36,0X00,0X36,0X00,0X36,0X00,0X26,0X00,0X04,0X00,0X00, + 0X00,0X00,0X00,0X1C,0X00,0X0C,0X00,0X0C,0X00,0X0C,0X00,0X7C,0X00,0X0C,0X00,0X7C,0X00,0X0C,0X00,0X0C,0X00,0X0C,0X00,0X0C,0X00,0X0C,0X00,0X0C,0X00,0X08,0X00,0X00, + 0X00,0X00,0X00,0X0E,0X00,0X76,0X00,0X36,0X00,0X36,0X00,0X76,0X00,0X36,0X00,0X76,0X00,0X36,0X00,0X36,0X00,0X36,0X00,0X36,0X00,0X36,0X00,0X26,0X00,0X04,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0X80,0X01,0X80,0X01,0X80,0X7F,0XFE,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X38,0X00,0X18,0X00,0X18,0X00,0X18,0X00,0X18,0X00,0X18,0X00,0X1F,0X0C,0X18,0X0C,0X18,0X7F,0XD8,0X00,0X18,0X00,0X18,0X00,0X18,0X00,0X10,0X00,0X00, + 0X00,0X00,0X00,0X0E,0X00,0X76,0X00,0X36,0X00,0X36,0X00,0X36,0X00,0X3E,0X00,0X36,0X0C,0X36,0X0C,0X36,0X7F,0XB6,0X00,0X36,0X00,0X36,0X00,0X26,0X00,0X04,0X00,0X00, + 0X00,0X00,0X00,0X1C,0X00,0X0C,0X00,0X0C,0X00,0X0C,0X00,0X0C,0X00,0X0C,0X00,0X0C,0X0C,0X0C,0X0C,0X0C,0X7F,0XEC,0X00,0X0C,0X00,0X0C,0X00,0X0C,0X00,0X08,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X06,0X60,0X06,0X60,0X06,0X60,0X7F,0XFE,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X7F,0XFE,0X01,0X80,0X01,0X80,0X01,0X80,0X01,0X80,0X01,0X80,0X01,0X00,0X00,0X00, + 0X00,0X00,0X00,0X1C,0X00,0X0C,0X00,0X0C,0X00,0X0C,0X00,0X0C,0X00,0X0C,0X00,0X0C,0X7F,0XEC,0X06,0X0C,0X06,0X7C,0X06,0X0C,0X06,0X0C,0X04,0X0C,0X00,0X08,0X00,0X00, + 0X00,0X00,0X00,0X0E,0X00,0X76,0X00,0X36,0X00,0X36,0X00,0X36,0X00,0X36,0X00,0X36,0X7F,0XB6,0X0C,0X36,0X0D,0XF6,0X0C,0X36,0X18,0X36,0X00,0X26,0X00,0X04,0X00,0X00, + 0X00,0X00,0X00,0X1C,0X00,0X0C,0X00,0X0C,0X00,0X0C,0X00,0X0C,0X00,0X0C,0X00,0X0C,0X7F,0XEC,0X06,0X0C,0X06,0X0C,0X06,0X0C,0X06,0X0C,0X04,0X0C,0X00,0X08,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X7F,0XFE,0X06,0X60,0X06,0X60,0X06,0X60,0X06,0X60,0X06,0X60,0X04,0X40,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X7F,0XFE,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X1C,0X00,0X0C,0X00,0X0C,0X00,0X0C,0X00,0X0C,0X00,0X0C,0X00,0X0C,0X00,0X0C,0X00,0XEC,0X7F,0X0C,0X00,0X0C,0X00,0X0C,0X00,0X0C,0X00,0X08,0X00,0X00, + 0X00,0X00,0X00,0X1C,0X00,0X0C,0X00,0X0C,0X00,0X0C,0X00,0X0C,0X00,0X0C,0X00,0X0C,0X00,0X0C,0X00,0X0C,0X00,0X0C,0X00,0X0C,0X00,0X0C,0X00,0X0C,0X00,0X08,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X38,0X00,0X18,0X00,0X18,0X00,0X18,0X00,0X1F,0X00,0X18,0X00,0X18,0X00,0X18,0X00,0X10,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X0E,0X00,0X76,0X00,0X36,0X00,0X36,0X00,0X3E,0X00,0X36,0X00,0X36,0X00,0X36,0X00,0X24,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X38,0X00,0X18,0X00,0X18,0X00,0X1F,0X00,0X18,0X00,0X1F,0X00,0X18,0X00,0X18,0X00,0X10,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X0E,0X00,0X76,0X00,0X36,0X00,0X3E,0X00,0X36,0X00,0X3E,0X00,0X36,0X00,0X36,0X00,0X24,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X1C,0X00,0X0C,0X00,0X0C,0X00,0X0C,0X00,0XFC,0X00,0X0C,0X00,0X0C,0X00,0X0C,0X00,0X08,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X0E,0X00,0X76,0X00,0X36,0X00,0X36,0X00,0XF6,0X00,0X36,0X00,0X36,0X00,0X36,0X00,0X24,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X1C,0X00,0X0C,0X00,0X0C,0X00,0X7C,0X00,0X0C,0X00,0X7C,0X00,0X0C,0X00,0X0C,0X00,0X08,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X0E,0X00,0X76,0X00,0X36,0X00,0XF6,0X00,0X36,0X00,0XF6,0X00,0X36,0X00,0X36,0X00,0X24,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0X80,0X01,0X80,0X7F,0XFE,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X38,0X00,0X18,0X00,0X18,0X00,0X18,0X00,0X1F,0X0C,0X18,0X0C,0X18,0X7F,0XD8,0X00,0X10,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X0E,0X00,0X76,0X00,0X36,0X00,0X36,0X00,0X3E,0X18,0X36,0X18,0X36,0X7F,0XA6,0X00,0X04,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X1C,0X00,0X0C,0X00,0X0C,0X00,0X0C,0X00,0X0C,0X0C,0X0C,0X0C,0X0C,0X7F,0XEC,0X00,0X08,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X0C,0X60,0X0C,0X60,0X7F,0XFE,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X7F,0XFE,0X01,0X80,0X01,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X1C,0X00,0X0C,0X00,0X0C,0X00,0X0C,0X7F,0XEC,0X06,0X0C,0X06,0X7C,0X06,0X0C,0X04,0X08,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X0E,0X00,0X76,0X00,0X36,0X00,0X36,0X00,0X36,0X00,0XF6,0X00,0X36,0X7F,0XB6,0X0C,0X36,0X08,0X24,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X0E,0X00,0X06,0X00,0X06,0X00,0X06,0X00,0X06,0X00,0X06,0X3F,0XE6,0X06,0X06,0X06,0X04,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X7F,0XFE,0X06,0X60,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X7F,0XFE,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X1C,0X00,0X0C,0X00,0X0C,0X00,0X0C,0X00,0X0C,0X00,0X0C,0X00,0X0C,0X7F,0XEC,0X00,0X08,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X1C,0X00,0X0C,0X00,0X0C,0X00,0X0C,0X00,0X0C,0X00,0X0C,0X00,0X0C,0X00,0X0C,0X00,0X08,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X38,0X00,0X18,0X00,0X18,0X00,0X18,0X00,0X1F,0X00,0X18,0X00,0X18,0X00,0X18,0X00,0X10,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X0E,0X00,0X76,0X00,0X36,0X00,0X36,0X00,0X3E,0X00,0X36,0X00,0X36,0X00,0X36,0X00,0X24,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X38,0X00,0X18,0X00,0X18,0X00,0X1F,0X00,0X18,0X00,0X1F,0X00,0X18,0X00,0X18,0X00,0X10,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X0E,0X00,0X76,0X00,0X36,0X00,0X3E,0X00,0X36,0X00,0X3E,0X00,0X36,0X00,0X36,0X00,0X24,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X1C,0X00,0X0C,0X00,0X0C,0X00,0X0C,0X00,0X7C,0X00,0X0C,0X00,0X0C,0X00,0X0C,0X00,0X08,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X0E,0X00,0X76,0X00,0X36,0X00,0X36,0X00,0X76,0X00,0X36,0X00,0X36,0X00,0X36,0X00,0X24,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X1C,0X00,0X0C,0X00,0X0C,0X00,0X7C,0X00,0X0C,0X00,0X7C,0X00,0X0C,0X00,0X0C,0X00,0X08,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X0E,0X00,0X76,0X00,0X36,0X00,0X76,0X00,0X36,0X00,0X76,0X00,0X36,0X00,0X36,0X00,0X24,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0X80,0X01,0X80,0X7F,0XFE,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X38,0X00,0X18,0X00,0X18,0X00,0X18,0X00,0X1F,0X0C,0X18,0X0C,0X18,0X7F,0XD8,0X00,0X10,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X0E,0X00,0X76,0X00,0X36,0X00,0X36,0X00,0X3E,0X0C,0X36,0X0C,0X36,0X7F,0XA6,0X00,0X04,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X1C,0X00,0X0C,0X00,0X0C,0X00,0X0C,0X00,0X0C,0X0C,0X0C,0X0C,0X0C,0X7F,0XEC,0X00,0X08,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X06,0X60,0X06,0X60,0X7F,0XFE,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X7F,0XFE,0X01,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X0E,0X00,0X06,0X00,0X06,0X00,0X06,0X00,0X06,0X00,0X06,0X3F,0XE6,0X06,0X1E,0X06,0X06,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X0E,0X00,0X76,0X00,0X36,0X00,0X36,0X00,0XF6,0X00,0X36,0X7F,0XB6,0X0C,0X36,0X08,0X24,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X0E,0X00,0X06,0X00,0X06,0X00,0X06,0X00,0X06,0X00,0X06,0X3F,0XE6,0X06,0X06,0X06,0X04,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X7F,0XFE,0X06,0X60,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X7F,0XFE,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X1C,0X00,0X0C,0X00,0X0C,0X00,0X0C,0X00,0X0C,0X00,0X0C,0X00,0X0C,0X7F,0XEC,0X00,0X08,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X1C,0X00,0X0C,0X00,0X0C,0X00,0X0C,0X00,0X0C,0X00,0X0C,0X00,0X0C,0X00,0X0C,0X00,0X08,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X0F,0XF8,0X00,0X18,0X00,0X18,0X00,0X18,0X00,0X10,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X1F,0XF8,0X03,0X18,0X03,0X18,0X03,0X18,0X02,0X10,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X1F,0X30,0X03,0X30,0X03,0X38,0X03,0X6C,0X02,0XCC,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X07,0X00,0X03,0X00,0X03,0X00,0X03,0X00,0X01,0XFC,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X1C,0XFC,0X0C,0X30,0X0C,0X30,0X0C,0X78,0X07,0XCC,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X1C,0X30,0X0C,0XFC,0X0C,0X78,0X0C,0XCC,0X07,0X78,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X0F,0XF8,0X06,0X00,0X06,0X00,0X06,0X00,0X03,0XF8,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X0F,0XF8,0X00,0X18,0X0F,0XF8,0X0C,0X00,0X07,0XF8,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X1F,0X78,0X03,0X18,0X1F,0X18,0X18,0X18,0X0F,0X10,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X1F,0X7C,0X03,0X6C,0X1F,0X6C,0X18,0X6C,0X0F,0X7C,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X1F,0X6C,0X03,0X6C,0X1F,0X7C,0X18,0X6C,0X0F,0X7C,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X0F,0X98,0X01,0X98,0X0F,0X98,0X0C,0X3C,0X07,0XA6,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X1F,0X7C,0X03,0X60,0X1F,0X7C,0X18,0X60,0X0F,0X7C,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X1E,0XFE,0X03,0X6C,0X1F,0X6C,0X18,0X6C,0X0E,0XFE,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X1F,0X18,0X03,0X7E,0X1F,0X3C,0X18,0X66,0X0F,0X3C,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X0F,0XF8,0X06,0X18,0X06,0X18,0X06,0X18,0X07,0XF8,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X0E,0X38,0X06,0X18,0X07,0XF8,0X06,0X18,0X07,0XF8,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X0D,0X98,0X0D,0X98,0X0F,0X98,0X0D,0XBE,0X0F,0XE6,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XC0,0X00,0XC0,0X01,0XB0,0X03,0X18,0X0C,0X0C,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0X30,0X03,0X30,0X07,0XF8,0X0C,0XCC,0X19,0X86,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0XF0,0X06,0X18,0X06,0X18,0X06,0X18,0X03,0XF0,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X0F,0XFC,0X00,0XC0,0X01,0XE0,0X03,0X30,0X0C,0X0C,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XC0,0X0F,0XFC,0X01,0XE0,0X03,0X30,0X0C,0X0C,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X07,0XF8,0X00,0X18,0X07,0XF8,0X00,0X18,0X00,0X10,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X0F,0XF8,0X06,0X00,0X07,0XF8,0X06,0X00,0X03,0XF8,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X0F,0XFC,0X03,0X30,0X03,0X30,0X03,0X30,0X0F,0XFC,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XE0,0X0F,0XFC,0X03,0XF0,0X06,0X18,0X03,0XF0,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X07,0XFC,0X00,0X0C,0X00,0X0C,0X00,0X0C,0X00,0X08,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X0F,0XFC,0X01,0X8C,0X01,0X8C,0X01,0X8C,0X01,0X08,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X1F,0X30,0X03,0X30,0X03,0X38,0X03,0X6C,0X02,0XCC,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X07,0X00,0X03,0X00,0X03,0X00,0X03,0X00,0X01,0XFC,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X0E,0X7E,0X06,0X18,0X06,0X18,0X06,0X3C,0X03,0XE6,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X0E,0X18,0X06,0X7E,0X06,0X3C,0X06,0X66,0X03,0XBC,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X07,0XFC,0X03,0X00,0X03,0X00,0X03,0X00,0X01,0XFC,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X07,0XFC,0X00,0X0C,0X07,0XFC,0X06,0X00,0X03,0XFC,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X0F,0XBC,0X01,0X8C,0X0F,0X8C,0X0C,0X0C,0X07,0X88,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X1F,0X7C,0X03,0X6C,0X1F,0X6C,0X18,0X6C,0X0F,0X7C,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X1F,0X6C,0X03,0X6C,0X1F,0X7C,0X18,0X6C,0X0F,0X7C,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X0F,0X98,0X01,0X98,0X0F,0X98,0X0C,0X3C,0X07,0XA6,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X1F,0X7C,0X03,0X60,0X1F,0X7C,0X18,0X60,0X0F,0X7C,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X1E,0XFE,0X03,0X6C,0X1F,0X6C,0X18,0X6C,0X0E,0XFE,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X1F,0X18,0X03,0X7E,0X1F,0X3C,0X18,0X66,0X0F,0X3C,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X07,0XFC,0X03,0X0C,0X03,0X0C,0X03,0X0C,0X03,0XFC,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X07,0X1C,0X03,0X0C,0X03,0XFC,0X03,0X0C,0X03,0XFC,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X0D,0X98,0X0D,0X98,0X0F,0X98,0X0D,0XBE,0X0F,0XE6,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XC0,0X00,0XC0,0X01,0XB0,0X03,0X18,0X0C,0X0C,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0X98,0X01,0X98,0X03,0XFC,0X06,0X66,0X0C,0XC3,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XF8,0X03,0X0C,0X03,0X0C,0X03,0X0C,0X01,0XF8,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X0F,0XFC,0X00,0XC0,0X01,0XE0,0X03,0X30,0X0C,0X0C,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XC0,0X0F,0XFC,0X01,0XE0,0X03,0X30,0X0C,0X0C,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0XFC,0X00,0X0C,0X03,0XFC,0X00,0X0C,0X00,0X08,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X07,0XFC,0X03,0X00,0X03,0XFC,0X03,0X00,0X01,0XFC,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X0F,0XFC,0X03,0X30,0X03,0X30,0X03,0X30,0X0F,0XFC,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XF0,0X07,0XFE,0X01,0XF8,0X03,0X0C,0X01,0XF8,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X07,0XFE,0X00,0X06,0X00,0X06,0X00,0X06,0X00,0X04,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X0F,0XFE,0X00,0XC6,0X00,0XC6,0X00,0XC6,0X00,0X84,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X0F,0X98,0X01,0X98,0X01,0X9C,0X01,0XB6,0X01,0X66,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X07,0X00,0X03,0X00,0X03,0X00,0X03,0X00,0X01,0XFE,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X1C,0X7E,0X0C,0X18,0X0C,0X18,0X0C,0X3C,0X07,0X66,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X1C,0X18,0X0C,0X7E,0X0C,0X3C,0X0C,0X66,0X07,0XBC,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X07,0XFC,0X03,0X00,0X03,0X00,0X03,0X00,0X01,0XFC,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0XFE,0X00,0X06,0X03,0XFE,0X03,0X00,0X01,0XFE,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X07,0XDE,0X00,0XC6,0X07,0XC6,0X06,0X06,0X03,0XC4,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X0F,0XBE,0X01,0XB6,0X0F,0XB6,0X0C,0X36,0X07,0XBE,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X0F,0XB6,0X01,0XB6,0X0F,0XBE,0X0C,0X36,0X07,0XBE,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X07,0XCC,0X00,0XCC,0X07,0XCC,0X06,0X1E,0X03,0XD3,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X0F,0XBE,0X01,0XB0,0X0F,0XBE,0X0C,0X30,0X07,0XBE,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X1E,0XFE,0X03,0X6C,0X1F,0X6C,0X18,0X6C,0X0E,0XFE,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X1F,0X18,0X03,0X7E,0X1F,0X3C,0X18,0X66,0X0F,0X3C,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X07,0XFE,0X03,0X06,0X03,0X06,0X03,0X06,0X03,0XFE,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X07,0X0E,0X03,0X06,0X03,0XFE,0X03,0X06,0X03,0XFE,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X0D,0X98,0X0D,0X98,0X0F,0X98,0X0D,0XBE,0X0F,0XE6,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X60,0X00,0X60,0X00,0XD8,0X01,0X8C,0X06,0X06,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0X98,0X01,0X98,0X03,0XFC,0X06,0X66,0X0C,0XC3,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XFC,0X01,0X86,0X01,0X86,0X01,0X86,0X00,0XFC,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X07,0XFE,0X00,0X60,0X00,0XF0,0X01,0X98,0X06,0X06,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X60,0X07,0XFE,0X00,0XF0,0X01,0X98,0X06,0X06,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0XFE,0X00,0X06,0X03,0XFE,0X00,0X06,0X00,0X04,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0XFE,0X01,0X80,0X01,0XFE,0X01,0X80,0X00,0XFE,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X07,0XFE,0X01,0X98,0X01,0X98,0X01,0X98,0X07,0XFE,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XF0,0X07,0XFE,0X01,0XF8,0X03,0X0C,0X01,0XF8,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X1F,0XF8,0X00,0X18,0X00,0X18,0X00,0X18,0X00,0X10,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X3E,0XF8,0X06,0X18,0X06,0X18,0X06,0X18,0X04,0X10,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X0F,0XCC,0X00,0XCC,0X00,0XCE,0X00,0XDB,0X00,0XB3,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X38,0X00,0X18,0X00,0X18,0X00,0X18,0X00,0X0F,0XF8,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X38,0XFC,0X18,0X30,0X18,0X30,0X18,0X78,0X0E,0XCC,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X38,0X30,0X18,0XFC,0X18,0X78,0X18,0XCC,0X0F,0X78,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X3F,0XF8,0X18,0X00,0X18,0X00,0X0F,0XF8,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X1F,0XF8,0X00,0X18,0X1F,0XF8,0X18,0X00,0X0F,0XF8,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X1F,0X7C,0X03,0X0C,0X1F,0X0C,0X18,0X0C,0X0F,0X08,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X3E,0XFC,0X06,0XCC,0X3E,0XCC,0X30,0XCC,0X1E,0XFC,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X1F,0X6C,0X03,0X6C,0X1F,0X7C,0X18,0X6C,0X0F,0X7C,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X1F,0X18,0X03,0X18,0X1F,0X18,0X18,0X3C,0X0F,0X66,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X1F,0X7C,0X03,0X60,0X1F,0X7C,0X18,0X60,0X0F,0X7C,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X1E,0XFE,0X03,0X6C,0X1F,0X6C,0X18,0X6C,0X0E,0XFE,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X3E,0X30,0X06,0XFC,0X3E,0X78,0X30,0XCC,0X1E,0X78,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X1F,0XF8,0X0C,0X18,0X0C,0X18,0X0C,0X18,0X0F,0XF8,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X38,0X38,0X18,0X18,0X1F,0XF8,0X18,0X18,0X1F,0XF8,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X1B,0X30,0X1B,0X30,0X1F,0X30,0X1B,0X7C,0X1F,0XCC,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0X80,0X01,0X80,0X03,0X60,0X06,0X30,0X18,0X18,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X0C,0X30,0X0C,0X30,0X1E,0X78,0X33,0XCC,0X61,0X86,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X07,0XE0,0X0C,0X30,0X0C,0X30,0X0C,0X30,0X07,0XE0,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X1F,0XF8,0X01,0X80,0X03,0XC0,0X06,0X60,0X18,0X18,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0X80,0X1F,0XF8,0X03,0XC0,0X06,0X60,0X18,0X18,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X1F,0XF8,0X00,0X18,0X1F,0XF8,0X00,0X18,0X00,0X10,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X1F,0XF8,0X0C,0X00,0X0F,0XF8,0X0C,0X00,0X07,0XF8,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X1F,0XF8,0X06,0X60,0X06,0X60,0X06,0X60,0X1F,0XF8,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0XC0,0X1F,0XF8,0X07,0XE0,0X0C,0X30,0X07,0XE0,0X00,0X00}; diff -urN linux-2.4.21/drivers/char/Makefile linux-2.4.21-h7210/drivers/char/Makefile --- linux-2.4.21/drivers/char/Makefile 2004-06-14 07:54:08.000000000 +0900 +++ linux-2.4.21-h7210/drivers/char/Makefile 2004-06-14 05:51:31.000000000 +0900 @@ -133,8 +133,13 @@ KEYMAP := defkeymap.o endif ifeq ($(CONFIG_ARCH_GUIDEA07),y) + KEYMAP := defkeymap.o endif + ifeq ($(CONFIG_ARCH_H7210),y) + KEYMAP := defkeymap-hynix.o + endif + endif ifeq ($(ARCH),sh) @@ -204,7 +209,6 @@ else obj-$(CONFIG_PCI) += keyboard.o $(KEYMAP) endif - obj-$(CONFIG_HIL) += hp_keyb.o obj-$(CONFIG_MAGIC_SYSRQ) += sysrq.o obj-$(CONFIG_ATARI_DSP56K) += dsp56k.o @@ -258,14 +262,15 @@ obj-$(CONFIG_MS_BUSMOUSE) += msbusmouse.o obj-$(CONFIG_82C710_MOUSE) += qpmouse.o obj-$(CONFIG_AMIGAMOUSE) += amigamouse.o -obj-$(CONFIG_ATARIMOUSE) += atarimouse.o obj-$(CONFIG_ADBMOUSE) += adbmouse.o +obj-$(CONFIG_BUSMOUSE) += busmouse.o obj-$(CONFIG_PC110_PAD) += pc110pad.o obj-$(CONFIG_MK712_MOUSE) += mk712.o obj-$(CONFIG_RTC) += rtc.o obj-$(CONFIG_GEN_RTC) += genrtc.o obj-$(CONFIG_EFI_RTC) += efirtc.o obj-$(CONFIG_SA1100_RTC) += sa1100-rtc.o +obj-$(CONFIG_H7210_RTC) += h7210_rtc.o obj-$(CONFIG_OMAHA_RTC) += omaha-rtc.o ifeq ($(CONFIG_PPC),) obj-$(CONFIG_NVRAM) += nvram.o @@ -301,6 +306,20 @@ obj-$(CONFIG_SCx200_GPIO) += scx200_gpio.o scx200.o obj-$(CONFIG_SA1100_CONSUS) += consusbutton.o +# H7210 related drivers +ifeq ($(CONFIG_H7210_MATRIXKBD),y) + KEYBD += h7210_keyb.o +endif +obj-$(CONFIG_H7210_TOUCH) += h7210_ts.o + +obj-$(CONFIG_H7210_PRNTYPE1) += h7210_prndot.o +obj-$(CONFIG_H7210_PRNTYPE2) += h7210_prnthermal.o + +obj-$(CONFIG_H7210_MSRTYPE1) += h7210_msrgpio.o +obj-$(CONFIG_H7210_MSRTYPE2) += h7210_msrssi.o + +obj-$(CONFIG_H7210_BLCD) += h7210_buslcd.o engfont.o hanfont.o + # Only one watchdog can succeed. We probe the hardware watchdog # drivers first, then the softdog driver. This means if your hardware # watchdog dies or is 'borrowed' for some reason the software watchdog diff -urN linux-2.4.21/drivers/mtd/nand/Config.in linux-2.4.21-h7210/drivers/mtd/nand/Config.in --- linux-2.4.21/drivers/mtd/nand/Config.in 2003-06-13 23:51:34.000000000 +0900 +++ linux-2.4.21-h7210/drivers/mtd/nand/Config.in 2004-06-14 03:28:23.000000000 +0900 @@ -15,6 +15,10 @@ dep_tristate ' NAND Flash device on SPIA board' CONFIG_MTD_NAND_SPIA $CONFIG_MTD_NAND fi +if [ "$CONFIG_ARCH_H7210" = "y" ]; then + dep_tristate ' SmartMedia Card on Hynix board(SOCA7210)' CONFIG_MTD_NAND_H7210 $CONFIG_MTD_NAND +fi + if [ "$CONFIG_ARCH_AUTCPU12" = "y" ]; then dep_tristate ' SmartMedia Card on AUTCPU12 board' CONFIG_MTD_NAND_AUTCPU12 $CONFIG_MTD_NAND fi diff -urN linux-2.4.21/drivers/mtd/nand/Makefile linux-2.4.21-h7210/drivers/mtd/nand/Makefile --- linux-2.4.21/drivers/mtd/nand/Makefile 2003-06-13 23:51:34.000000000 +0900 +++ linux-2.4.21-h7210/drivers/mtd/nand/Makefile 2004-06-14 03:28:56.000000000 +0900 @@ -9,6 +9,7 @@ obj-$(CONFIG_MTD_NAND) += nand.o nand_ecc.o obj-$(CONFIG_MTD_NAND_SPIA) += spia.o +obj-$(CONFIG_MTD_NAND_H7210) += soca7210.o obj-$(CONFIG_MTD_NAND_AUTCPU12) += autcpu12.o obj-$(CONFIG_MTD_NAND_EDB7312) += edb7312.o obj-$(CONFIG_MTD_NAND_IDS) += nand_ids.o diff -urN linux-2.4.21/drivers/mtd/nand/nand.c linux-2.4.21-h7210/drivers/mtd/nand/nand.c --- linux-2.4.21/drivers/mtd/nand/nand.c 2003-06-13 23:51:34.000000000 +0900 +++ linux-2.4.21-h7210/drivers/mtd/nand/nand.c 2004-05-25 16:03:21.000000000 +0900 @@ -136,8 +136,8 @@ /* * Macros for low-level register control */ + #define nand_select() this->hwcontrol(NAND_CTL_SETNCE); - #define nand_deselect() this->hwcontrol(NAND_CTL_CLRNCE); /* @@ -185,6 +185,9 @@ /* * Write out the command to the device. */ +#ifdef CONFIG_ARCH_H7210 + NAND_IO_ADDR = this->IO_ADDR_W + 1; +#endif if (command != NAND_CMD_SEQIN) writeb (command, NAND_IO_ADDR); else { @@ -212,8 +215,10 @@ this->hwcontrol (NAND_CTL_CLRCLE); if (column != -1 || page_addr != -1) { +#ifdef CONFIG_ARCH_H7210 + NAND_IO_ADDR = this->IO_ADDR_W + 2; +#endif this->hwcontrol (NAND_CTL_SETALE); - /* Serially input address */ if (column != -1) writeb (column, NAND_IO_ADDR); @@ -245,6 +250,9 @@ if (this->dev_ready) break; this->hwcontrol (NAND_CTL_SETCLE); +#ifdef CONFIG_ARCH_H7210 + NAND_IO_ADDR = this->IO_ADDR_W + 1; +#endif writeb (NAND_CMD_STATUS, NAND_IO_ADDR); this->hwcontrol (NAND_CTL_CLRCLE); while ( !(readb (this->IO_ADDR_R) & 0x40)); @@ -327,7 +335,7 @@ spin_lock_bh (&this->chip_lock); this->cmdfunc (mtd, NAND_CMD_STATUS, -1, -1); - while (time_before(jiffies, timeo)) { + while (time_before(jiffies, timeo)) { /* Check, if we were interrupted */ if (this->state != state) { spin_unlock_bh (&this->chip_lock); @@ -345,6 +353,7 @@ spin_lock_bh (&this->chip_lock); } status = (int) readb (this->IO_ADDR_R); + spin_unlock_bh (&this->chip_lock); return status; @@ -360,7 +369,8 @@ u_char ecc_code[6], *oob_data; int eccmode = oobsel ? this->eccmode : NAND_ECC_NONE; int *oob_config = oobconfigs[oobsel]; - + unsigned long timeo = jiffies; + /* pad oob area, if we have no oob buffer from fs-driver */ if (!oob_buf) { oob_data = &this->data_buf[mtd->oobblock]; @@ -462,15 +472,19 @@ /* Write out OOB data */ for (i = 0; i < mtd->oobsize; i++) writeb ( oob_data[i] , this->IO_ADDR_W); - /* Send command to actually program the data */ + this->cmdfunc (mtd, NAND_CMD_PAGEPROG, -1, -1); /* call wait ready function */ + /* psj */ + timeo += (HZ * 5) / 1000; + while (!time_after(jiffies, timeo)); status = this->waitfunc (mtd, this, FL_WRITING); - + /* See if device thinks it succeeded */ if (status & 0x01) { + printk(KERN_ERR "%s: " "Failed write, page 0x%08x, ", __FUNCTION__, page); DEBUG (MTD_DEBUG_LEVEL0, "%s: " "Failed write, page 0x%08x, ", __FUNCTION__, page); return -EIO; } @@ -491,6 +505,7 @@ /* Send command to read back the page */ this->cmdfunc (mtd, NAND_CMD_READ0, col, page); + /* Loop through and verify the data */ for (i = col; i < last; i++) { if (this->data_poi[i] != readb (this->IO_ADDR_R)) { @@ -517,7 +532,6 @@ case NAND_ECC_HW3_512: ecc_bytes = 3; break; case NAND_ECC_HW6_512: ecc_bytes = 6; break; } - for (i = 0; i < mtd->oobsize; i++) oob_data[i] = readb (this->IO_ADDR_R); @@ -560,7 +574,7 @@ int eccmode = oobsel ? this->eccmode : NAND_ECC_NONE; int *oob_config = oobconfigs[oobsel]; - + DEBUG (MTD_DEBUG_LEVEL3, "nand_read_ecc: from = 0x%08x, len = %i\n", (unsigned int) from, (int) len); /* Do not allow reads past end of device */ @@ -598,7 +612,6 @@ else while (!this->dev_ready()); } - /* * If the read is not page aligned, we have to read into data buffer * due to ecc, else we read into return buffer direct @@ -624,6 +637,7 @@ case NAND_ECC_SOFT: /* Software ECC 3/256: Read in a page + oob data */ while (j < end) data_poi[j++] = readb (this->IO_ADDR_R); + this->calculate_ecc (&data_poi[0], &ecc_calc[0]); if (mtd->oobblock == 512) this->calculate_ecc (&data_poi[256], &ecc_calc[3]); @@ -659,7 +673,7 @@ /* read oobdata */ for (j = 0; j < mtd->oobsize; j++) oob_data[oob + j] = readb (this->IO_ADDR_R); - + /* Skip ECC, if not active */ if (eccmode == NAND_ECC_NONE) goto readdata; @@ -751,7 +765,6 @@ /* Grab the lock and see if the device is available */ nand_get_chip (this, mtd , FL_READING, &erase_state); - /* Select the NAND device */ nand_select (); @@ -880,7 +893,9 @@ { int i, column, page, status, ret = 0; struct nand_chip *this = mtd->priv; - + unsigned long timeo = jiffies; + + printk(KERN_ERR "nand_write_oob: to = 0x%08x, len = %i\n", (unsigned int) to, (int) len); DEBUG (MTD_DEBUG_LEVEL3, "nand_write_oob: to = 0x%08x, len = %i\n", (unsigned int) to, (int) len); /* Shift to get page */ @@ -926,9 +941,12 @@ /* Send command to program the OOB data */ this->cmdfunc (mtd, NAND_CMD_PAGEPROG, -1, -1); - + + /* psj */ + timeo += (HZ * 5) / 1000; + while (!time_after(jiffies, timeo)); status = this->waitfunc (mtd, this, FL_WRITING); - + /* See if device thinks it succeeded */ if (status & 0x01) { DEBUG (MTD_DEBUG_LEVEL0, "nand_write_oob: " "Failed write, page 0x%08x\n", page); @@ -939,7 +957,7 @@ *retlen = len; #ifdef CONFIG_MTD_NAND_VERIFY_WRITE - /* Send command to read back the data */ + /* Send command to read back the data */ this->cmdfunc (mtd, NAND_CMD_READOOB, column, page); /* Loop through and verify the data */ @@ -981,11 +999,14 @@ int i, page, col, cnt, len, total_len, ret = 0, written = 0; struct nand_chip *this = mtd->priv; + //printk(KERN_ERR "[%s:%d]\n", __FUNCTION__, __LINE__); + /* Calculate total length of data */ total_len = 0; for (i = 0; i < count; i++) total_len += (int) vecs[i].iov_len; + //printk(KERN_ERR "nand_writev: to = 0x%08x, len = %i, count = %ld\n", (unsigned int) to, (unsigned int) total_len, count); DEBUG (MTD_DEBUG_LEVEL3, "nand_writev: to = 0x%08x, len = %i, count = %ld\n", (unsigned int) to, (unsigned int) total_len, count); @@ -1092,11 +1113,13 @@ { int page, len, status, pages_per_block, ret; struct nand_chip *this = mtd->priv; + unsigned long timeo = jiffies; + DECLARE_WAITQUEUE (wait, current); DEBUG (MTD_DEBUG_LEVEL3, "nand_erase: start = 0x%08x, len = %i\n", (unsigned int) instr->addr, (unsigned int) instr->len); - + /* Start address must align on block boundary */ if (instr->addr & (mtd->erasesize - 1)) { DEBUG (MTD_DEBUG_LEVEL0, "nand_erase: Unaligned address\n"); @@ -1123,7 +1146,7 @@ /* Calculate pages in each block */ pages_per_block = mtd->erasesize / mtd->oobblock; - + /* Select the NAND device */ nand_select (); @@ -1149,17 +1172,22 @@ goto erase_exit; } - /* Send commands to erase a page */ + /* Send commands to erase a page */ this->cmdfunc (mtd, NAND_CMD_ERASE1, -1, page); this->cmdfunc (mtd, NAND_CMD_ERASE2, -1, -1); spin_unlock_bh (&this->chip_lock); + + /* psj we need delay */ + timeo += (HZ * 5) / 1000; + while (!time_after(jiffies, timeo)); status = this->waitfunc (mtd, this, FL_ERASING); - + /* Get spinlock, in case we exit */ spin_lock_bh (&this->chip_lock); /* See if block erase succeeded */ if (status & 0x01) { + printk(KERN_ERR "nand_erase: " "Failed erase, page 0x%08x\n", page); DEBUG (MTD_DEBUG_LEVEL0, "nand_erase: " "Failed erase, page 0x%08x\n", page); instr->state = MTD_ERASE_FAILED; goto erase_exit; @@ -1251,9 +1279,9 @@ this->state = FL_READY; wake_up (&this->wq); } - /* Unlock the device */ spin_unlock_bh (&this->chip_lock); + } /* @@ -1306,7 +1334,7 @@ for (i = 0; nand_manuf_ids[i].id != 0x0; i++) { if (nand_manuf_ids[i].id == nand_maf_id) break; - } + } printk (KERN_INFO "NAND device: Manufacture ID:" " 0x%02x, Chip ID: 0x%02x (%s %s)\n", nand_maf_id, nand_dev_id, nand_manuf_ids[i].name , mtd->name); diff -urN linux-2.4.21/drivers/mtd/nand/soca7210.c linux-2.4.21-h7210/drivers/mtd/nand/soca7210.c --- linux-2.4.21/drivers/mtd/nand/soca7210.c 1970-01-01 09:00:00.000000000 +0900 +++ linux-2.4.21-h7210/drivers/mtd/nand/soca7210.c 2004-05-03 19:43:24.000000000 +0900 @@ -0,0 +1,253 @@ +/* + * drivers/mtd/soca7210.c + * + * Derived from drivers/mtd/autcpu12.c + * Copyright (c) 2002 Thomas Gleixner + * + * Derived from drivers/mtd/spia.c + * Copyright (C) 2000 Steven J. Hill (sjhill@cotw.com) + * + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * Overview: + * This is a device driver for the NAND flash device found on the + * soca7210 board, which is a SmartMediaCard. It supports + * 16MB, 32MB and 64MB cards. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +//#include + +/* + * MTD structure for SOCA7210 board + */ +static struct mtd_info *soca7210_mtd = NULL; + +/* + * Module stuff + */ +#if LINUX_VERSION_CODE < 0x20212 && defined(MODULE) +#define soca7210_init init_module +#define soca7210_cleanup cleanup_module +#endif + +static int soca7210_fio_pbase = SOCA7210_PHYS_SMC; +static int soca7210_fio_base; +static int smcebiconf_val; + +#ifdef MODULE +MODULE_PARM(soca7210_fio_pbase, "i"); +__setup("soca7210_fio_pbase=",soca7210_fio_pbase); +#endif + +/* + * Define partitions for flash devices + */ + +static struct mtd_partition partition_info16k[] = { + { name: "SOCA7210 flash partition 1", + offset: 0, + size: 8 * SZ_1M }, + { name: "SOCA7210 flash partition 2", + offset: 8 * SZ_1M, + size: 8 * SZ_1M }, +}; + +static struct mtd_partition partition_info32k[] = { + { name: "SOCA7210 flash partition 1", + offset: 0, + size: 8 * SZ_1M }, + { name: "SOCA7210 flash partition 2", + offset: 8 * SZ_1M, + size: 24 * SZ_1M }, +}; + +static struct mtd_partition partition_info64k[] = { + { name: "SOCA7210 flash partition 1", + offset: 0, + size: 16 * SZ_1M }, + { name: "SOCA7210 flash partition 2", + offset: 16 * SZ_1M, + size: 48 * SZ_1M}, +}; + +static struct mtd_partition partition_info128k[] = { + { name: "SOCA7210 flash partition 1", + offset: 0, + size: 16 * SZ_1M }, + { name: "SOCA7210 flash partition 2", + offset: 16 * SZ_1M, + size: 112 * SZ_1M}, +}; + +#define NUM_PARTITIONS16K 2 +#define NUM_PARTITIONS32K 2 +#define NUM_PARTITIONS64K 2 +#define NUM_PARTITIONS128K 2 +/* + * hardware specific access to control-lines +*/ +void soca7210_hwcontrol(int cmd) +{ + switch(cmd){ + case NAND_CTL_SETNCE: (*(volatile unsigned int *) SMC_SMCEBICONF_VIRT) = (smcebiconf_val & ~SMC_SMCEBICONF_CE); break; + case NAND_CTL_CLRNCE: (*(volatile unsigned int *) SMC_SMCEBICONF_VIRT) = (smcebiconf_val | SMC_SMCEBICONF_CE); break; + } +} +/* +* read device ready pin +*/ +int soca7210_device_ready(void) +{ + return ( (*(volatile unsigned int *) (GPIO_CDATA_VIRT)) & NANDRB) ? 1 : 0; +} +/* + * Main initialization routine + */ +int __init soca7210_init (void) +{ + struct nand_chip *this; + int err = 0; + int val; + + /* Allocate memory for MTD device structure and private data */ + soca7210_mtd = kmalloc (sizeof(struct mtd_info) + sizeof (struct nand_chip), + GFP_KERNEL); + if (!soca7210_mtd) { + printk ("Unable to allocate SOCA7210 NAND MTD device structure.\n"); + err = -ENOMEM; + goto out; + } + + /* map physical adress */ + soca7210_fio_base=(unsigned long)ioremap(soca7210_fio_pbase,SZ_1K); + + if(!soca7210_fio_base){ + printk("Ioremap SOCA7210 SmartMedia Card failed\n"); + err = -EIO; + goto out_mtd; + } + + /* Get pointer to private data */ + this = (struct nand_chip *) (&soca7210_mtd[1]); + + /* Initialize structures */ + memset((char *) soca7210_mtd, 0, sizeof(struct mtd_info)); + memset((char *) this, 0, sizeof(struct nand_chip)); + + /* Link the private data with the MTD structure */ + soca7210_mtd->priv = this; + + /* Set address of NAND IO lines */ + this->IO_ADDR_R = soca7210_fio_base; + this->IO_ADDR_W = soca7210_fio_base; + this->hwcontrol = soca7210_hwcontrol; + this->dev_ready = soca7210_device_ready; + /* 20 us command delay time */ + this->chip_delay = 20; + this->eccmode = NAND_ECC_SOFT; + + val = (MEMCFG_MEM_WIDTH_8 | (MEMCFG_NORMAL_ACCESS_WAIT_STATE_16 & MEMCFG_NORMAL_ACCESS_WAIT_STATE_MASK)); + (*(volatile unsigned int *) BANK3_REG_VIRT) = MEMCFG_BT_DONE; + (*(volatile unsigned int *) BANK3_REG_VIRT) = (val | MEMCFG_BT_DONE); + (*(volatile unsigned int *) BANK3_REG_VIRT) = (val & ~MEMCFG_BT_DONE); + + (*(volatile unsigned int *) SMC_SMCCONF_VIRT) = (SMC_SMCCONF_POWER_ENABLE|SMC_SMCCONF_SMC_ENABLE); + smcebiconf_val = SMC_SMCEBICONF_EBI_SELECT|SMC_SMCEBICONF_WP|SMC_SMCEBICONF_CE; + (*(volatile unsigned int *) SMC_SMCEBICONF_VIRT) = smcebiconf_val; + + // for rb:GPIO_CEN_PORTC1,CD:GPIO_CEN_PORTC0 + (*(volatile unsigned int *) GPIO_CEN_VIRT) |= (GPIO_CEN_PORTC1 | GPIO_CEN_PORTC0); + (*(volatile unsigned int *) GPIO_CDIR_VIRT) |= (GPIO_CEN_PORTC1 | GPIO_CEN_PORTC0); + + /* Scan to find existance of the device */ + if (nand_scan (soca7210_mtd)) { + err = -ENXIO; + goto out_ior; + } + + /* Allocate memory for internal data buffer */ + this->data_buf = kmalloc (sizeof(u_char) * (soca7210_mtd->oobblock + soca7210_mtd->oobsize), GFP_KERNEL); + if (!this->data_buf) { + printk ("Unable to allocate NAND data buffer for SOCA7210.\n"); + err = -ENOMEM; + goto out_ior; + } + + /* Allocate memory for internal data buffer */ + this->data_cache = kmalloc (sizeof(u_char) * (soca7210_mtd->oobblock + soca7210_mtd->oobsize), GFP_KERNEL); + if (!this->data_cache) { + printk ("Unable to allocate NAND data cache for SOCA7210.\n"); + err = -ENOMEM; + goto out_buf; + } + this->cache_page = -1; + + /* Register the partitions */ + switch(soca7210_mtd->size){ + case SZ_16M: add_mtd_partitions(soca7210_mtd, partition_info16k, NUM_PARTITIONS16K); break; + case SZ_32M: add_mtd_partitions(soca7210_mtd, partition_info32k, NUM_PARTITIONS32K); break; + case SZ_64M: add_mtd_partitions(soca7210_mtd, partition_info64k, NUM_PARTITIONS64K); break; + case SZ_128M: add_mtd_partitions(soca7210_mtd, partition_info128k, NUM_PARTITIONS128K); break; + default: { + printk ("Unsupported SmartMedia device\n"); + err = -ENXIO; + goto out_cac; + } + } + goto out; + +out_cac: + kfree (this->data_cache); +out_buf: + kfree (this->data_buf); +out_ior: + iounmap((void *)soca7210_fio_base); +out_mtd: + kfree (soca7210_mtd); +out: + return err; +} + +module_init(soca7210_init); + +/* + * Clean up routine + */ +#ifdef MODULE +static void __exit soca7210_cleanup (void) +{ + struct nand_chip *this = (struct nand_chip *) &soca7210_mtd[1]; + + /* Unregister partitions */ + del_mtd_partitions(soca7210_mtd); + + /* Unregister the device */ + del_mtd_device (soca7210_mtd); + + /* Free internal data buffers */ + kfree (this->data_buf); + kfree (this->data_cache); + + /* unmap physical adress */ + iounmap((void *)soca7210_fio_base); + + /* Free the MTD device structure */ + kfree (soca7210_mtd); +} +module_exit(soca7210_cleanup); +#endif + +MODULE_LICENSE("GPL"); +MODULE_AUTHOR("Thomas Gleixner "); +MODULE_DESCRIPTION("Glue layer for SmartMediaCard on soca7210"); diff -urN linux-2.4.21/drivers/net/cirrus.c linux-2.4.21-h7210/drivers/net/cirrus.c --- linux-2.4.21/drivers/net/cirrus.c 2004-06-14 07:54:10.000000000 +0900 +++ linux-2.4.21-h7210/drivers/net/cirrus.c 2004-05-24 01:17:20.000000000 +0900 @@ -68,13 +68,16 @@ # define CIRRUS_DEFAULT_IO ETHER_BASE + 0x300 # define CIRRUS_DEFAULT_IRQ IRQ_EINT3 #else +#ifndef CIRRUS_DEFAULT_IO # define CIRRUS_DEFAULT_IO 0 # define CIRRUS_DEFAULT_IRQ 0 +#endif #endif /* #ifdef CONFIG_SA1100_CERF */ typedef struct { struct net_device_stats stats; u16 txlen; + u16 txafter; /* Default is After5 (0) */ } cirrus_t; typedef struct { @@ -230,13 +233,19 @@ cirrus_t *priv = (cirrus_t *) dev->priv; u16 status; + /* Tx start must be done with irq disabled + * else status can be wrong */ + disable_irq (dev->irq); + netif_stop_queue (dev); - cirrus_write (dev,PP_TxCMD,TxStart (After5)); + cirrus_write (dev,PP_TxCMD,TxStart (priv->txafter)); cirrus_write (dev,PP_TxLength,skb->len); status = cirrus_read (dev,PP_BusST); + enable_irq (dev->irq); + if ((status & TxBidErr)) { printk (KERN_WARNING "%s: Invalid frame size %d!\n",dev->name,skb->len); priv->stats.tx_errors++; @@ -249,7 +258,6 @@ printk (KERN_WARNING "%s: Transmit buffer not free!\n",dev->name); priv->stats.tx_errors++; priv->txlen = 0; - /* FIXME: store skb and send it in interrupt handler */ return (1); } @@ -310,11 +318,18 @@ } if ((RegContent (status) & TxUnderrun)) { priv->stats.tx_errors++; - priv->stats.tx_fifo_errors++; + /* Shift start tx, if underruns come too often */ + switch (priv->stats.tx_fifo_errors++) { + case 3: priv->txafter = After381; break; + case 6: priv->txafter = After1021; break; + case 9: priv->txafter = AfterAll; break; + } } - /* FIXME: if Rdy4Tx, transmit last sent packet (if any) */ - priv->txlen = 0; - netif_wake_queue (dev); + /* Wakeup only for tx events ! */ + if ((RegContent (status) & (TxUnderrun | Rdy4Tx))) { + priv->txlen = 0; + netif_wake_queue (dev); + } break; case TxCOL: @@ -484,7 +499,7 @@ return (-ENODEV); } - for (offset = 1; offset < (buf[0] & 0xff); offset++) { + for (offset = 1; offset < ((buf[0] & 0xff) >> 1); offset++) { if (cirrus_eeprom_read (dev,buf + offset,offset) < 0) goto read_timed_out; @@ -586,12 +601,12 @@ dev->tx_timeout = cirrus_transmit_timeout; dev->watchdog_timeo = HZ; - dev->dev_addr[0] = 0x00; + dev->dev_addr[0] = 0x08; dev->dev_addr[1] = 0x00; - dev->dev_addr[2] = 0x00; - dev->dev_addr[3] = 0x00; - dev->dev_addr[4] = 0x00; - dev->dev_addr[5] = 0x00; + dev->dev_addr[2] = 0x3e; + dev->dev_addr[3] = 0x26; + dev->dev_addr[4] = 0x0a; + dev->dev_addr[5] = 0x5a; dev->if_port = IF_PORT_10BASET; dev->priv = (void *) &priv; @@ -636,7 +651,7 @@ /* if an EEPROM is present, use it's MAC address */ if (!cirrus_eeprom (dev,&eeprom)) for (i = 0; i < 6; i++) - dev->dev_addr[i] = eeprom.mac[i]; +// dev->dev_addr[i] = eeprom.mac[i]; /* verify EISA registration number for Cirrus Logic */ if ((value = cirrus_read (dev,PP_ProductID)) != EISA_REG_CODE) { diff -urN linux-2.4.21/drivers/video/Config.in linux-2.4.21-h7210/drivers/video/Config.in --- linux-2.4.21/drivers/video/Config.in 2004-06-14 07:54:12.000000000 +0900 +++ linux-2.4.21-h7210/drivers/video/Config.in 2004-06-14 04:56:53.000000000 +0900 @@ -50,6 +50,14 @@ if [ "$CONFIG_FB_SA1100" = "y" -a "$CONFIG_SA1100_CERF_CPLD" = "y" ]; then bool 'Cerfboard Backlight (CerfPDA)' CONFIG_SA1100_CERF_LCD_BACKLIGHT fi + dep_bool ' Hynix 7210 LCD support' CONFIG_FB_H7210 $CONFIG_ARCH_H7210 + if [ "$CONFIG_FB_H7210" = "y" ]; then + choice 'H7210 Display Selection' \ + "640x480-STN-8bpp-color CONFIG_H7210_LCDTYPE_1 \ + 320x240-STN-4bpp-mono CONFIG_H7210_LCDTYPE_2 \ + 320x240-STN-2bpp-mono CONFIG_H7210_LCDTYPE_3 \ + 320x240-STN-1bpp-mono CONFIG_H7210_LCDTYPE_4" + fi fi dep_tristate ' CyberPro 2000/2010/5000 support' CONFIG_FB_CYBER2000 $CONFIG_PCI if [ "$CONFIG_APOLLO" = "y" ]; then diff -urN linux-2.4.21/drivers/video/fbcon.c linux-2.4.21-h7210/drivers/video/fbcon.c --- linux-2.4.21/drivers/video/fbcon.c 2002-11-29 08:53:15.000000000 +0900 +++ linux-2.4.21-h7210/drivers/video/fbcon.c 2004-01-15 11:37:14.000000000 +0900 @@ -2466,7 +2466,7 @@ pm_fbcon_request(struct pm_dev *dev, pm_request_t rqst, void *data) { unsigned long flags; - + int i; switch (rqst) { case PM_RESUME: @@ -2477,6 +2477,11 @@ add_timer(&cursor_timer); } release_console_sem(); + CPU_REG (LCD_BASE,LCD_CTRL ) |= LCD_CTRL_LCD_ENABLE; + CPU_REG (LCD_BASE,LCD_CTRL ) |= LCD_CTRL_LCD_BLE ; + for (i=1 ; i <1000; i++); + CPU_REG (LCD_BASE,LCD_CTRL ) |= LCD_CTRL_LCD_PWR; + break; case PM_SUSPEND: acquire_console_sem(); @@ -2487,6 +2492,13 @@ fbcon_sleeping = 1; restore_flags(flags); release_console_sem(); + + CPU_REG (LCD_BASE,LCD_CTRL ) &= ~LCD_CTRL_LCD_PWR; + CPU_REG (LCD_BASE,LCD_CTRL ) &= ~LCD_CTRL_LCD_BLE ; + + for (i=1 ; i <1000; i++); + CPU_REG (LCD_BASE,LCD_CTRL ) &= ~LCD_CTRL_LCD_ENABLE; + break; } return 0; diff -urN linux-2.4.21/drivers/video/fb-h7210.c linux-2.4.21-h7210/drivers/video/fb-h7210.c --- linux-2.4.21/drivers/video/fb-h7210.c 1970-01-01 09:00:00.000000000 +0900 +++ linux-2.4.21-h7210/drivers/video/fb-h7210.c 2004-06-10 07:40:04.000000000 +0900 @@ -0,0 +1,640 @@ +/* + * linux/drivers/video/fb-h7210.c + */ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#include